[SonarQube] 취약점 분석 도구를 통해 취약점을 분석하고 수정하기

1 분 소요

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

Untitled

자동으로 실행이 되고 localhost:9000 으로 접속하여 확인

Untitled 1

참고 : https://jonghoonpark.com/2023/08/02/install-sonarqube-with-docker-in-local-macos

2. 프로젝트 연결

(1). 프로젝트 생성

Untitled 2

(2). 토큰 생성

Untitled 3

  • Administration > Security > Users > Update tokens

Untitled 4

(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 시 성공!

프로젝트를 실행하면 아래와 같이 확인 가능하다.

Untitled 5

4. 취약점 식별 및 수정

EX) 직렬화되지 않은 객체를 javax.servlet.http.HttpSession에 저장하지 말라고 경고

  • HttpSession에 저장된 객체는 애플리케이션 서버가 재시작되거나 세션을 다른 서버로 전송할 때 직렬화될 수 있기 때문입니다.
  • 따라서, KakaoUserInfoResponseDto 클래스를 직렬화 가능하게 수정하거나, 세션에 저장하지 않도록 수정해야 합니다.

Untitled 6

public class KakaoUserInfoResponseDto implements Serializable {

    private static final long serialVersionUID = 1L; 
    ..
}
  • KakaoUserInfoResponseDto 클래스와 내부 클래스를 직렬화 가능하게 만들기 위해 Serializable 인터페이스를 구현해야 합니다.
  • 또한, serialVersionUID를 각 클래스에 추가하는 것이 권장됩니다. 이는 클래스가 변경될 때 발생할 수 있는 직렬화 관련 문제를 방지하는 데 도움이 됩니다.

5. 재분석 및 검증

문제가 해결되었다!!

Untitled 7

카테고리:

업데이트: