[SonarQube] 취약점 분석 도구를 통해 취약점을 분석하고 수정하기
SonarQube 란
코드 품질 및 보안을 분석하여 취약점을 보고 한다.
- 정적 분석 도구 : 코드가 실행되기 전에 소스 코드나 바이트 코드를 분석하여 보안 취약점이나 코드 품질 문제를 식별하는 도구
- 동적 분석 도구 : 애플리케이션이 실행 중일 때 동작을 분석하여 보안 취약점, 성능 문제, 및 다른 결함을 식별하는 도구 (OWASP ZAP, Burp Suite, Netsparker)
- 기능
- 코드 스캔: 소스 코드 내 잠재적인 보안 취약점을 탐지
- 버그 검출: 코드의 문법 오류 및 논리적 결함을 발견
- 규정 준수 검사: 보안 코딩 표준 및 규정을 준수하는지 확인
1. SonarQube 설치하기
로컬에다가 설치하려는데 localhost:9000 이 계속해서 안뜨는 이슈가 발생..
쩔 수 없이 Docker에다가 설치하였다.
- Docker 이미지 Pull (Community version - 무료버전)
docker pull sonarqube:10.1.0-community
- run (9000 포트를 기본적으로 사용)
docker run -d --name sonarqube -p 9000:9000 sonarqube
자동으로 실행이 되고 localhost:9000 으로 접속하여 확인
참고 : https://jonghoonpark.com/2023/08/02/install-sonarqube-with-docker-in-local-macos
2. 프로젝트 연결
(1). 프로젝트 생성
(2). 토큰 생성
- Administration > Security > Users > Update tokens
(3). 프로젝트 설정
build.gradle
파일을 업데이트하여 SonarQube 플러그인을 추가
plugins {
...
id "org.sonarqube" version "4.4.1.3373"
}
...
sonar {
properties {
property "sonar.projectKey", "kakaologin"
property "sonar.projectName", "kakaologin"
property "sonar.host.url", "http://localhost:9000"
property "sonar.login", "{token}"
}
}
3. 코드 분석
Intellij terminal에서 다음 명령어를 실행시켜 분석 실행
./gradlew sonarqube
BUILD SUCCESSFUL 시 성공!
프로젝트를 실행하면 아래와 같이 확인 가능하다.
4. 취약점 식별 및 수정
EX) 직렬화되지 않은 객체를 javax.servlet.http.HttpSession
에 저장하지 말라고 경고
HttpSession
에 저장된 객체는 애플리케이션 서버가 재시작되거나 세션을 다른 서버로 전송할 때 직렬화될 수 있기 때문입니다.- 따라서,
KakaoUserInfoResponseDto
클래스를 직렬화 가능하게 수정하거나, 세션에 저장하지 않도록 수정해야 합니다.
public class KakaoUserInfoResponseDto implements Serializable {
private static final long serialVersionUID = 1L;
..
}
KakaoUserInfoResponseDto
클래스와 내부 클래스를 직렬화 가능하게 만들기 위해Serializable
인터페이스를 구현해야 합니다.- 또한,
serialVersionUID
를 각 클래스에 추가하는 것이 권장됩니다. 이는 클래스가 변경될 때 발생할 수 있는 직렬화 관련 문제를 방지하는 데 도움이 됩니다.
5. 재분석 및 검증
문제가 해결되었다!!