Pentest Playbook

SonarQube를 이용한 소스코드 취약점 진단

SAST 도구 중 하나로 룰셋 기반의 소스코드 취약점 진단 수행 가능

1. 개요

소나큐브는 무엇이고.. 무엇입니다..

어떤 상황에서 사용하고.. 룰셋은 어떻게 설정하고...

2. 환경 구축 및 설정

2.1. SonarQube 도커 설정

#dockcer-compose.yml
services:
  sonarqube:
    image: sonarqube:community
    container_name: sonarqube
    depends_on:
      sonarqube-db:
        condition: service_healthy
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://sonarqube-db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar_pass
      SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"   # 개발/로컬 환경용, 운영 시 제거
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      # 호스트 ./plugins 의 JAR를 컨테이너 플러그인 디렉터리에 마운트 (FindBugs 등)
      - ./plugins:/opt/sonarqube/extensions/plugins
      - sonarqube_logs:/opt/sonarqube/logs
    ports:
      - "9000:9000"
    ulimits:
      nofile:
        soft: 65536
        hard: 65536
    restart: unless-stopped
    networks:
      - sonarqube-net

  sonarqube-db:
    image: postgres:15
    container_name: sonarqube-db
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar_pass
      POSTGRES_DB: sonar
    volumes:
      - sonarqube_db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U sonar -d sonar"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped
    networks:
      - sonarqube-net

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  sonarqube_db:

networks:
  sonarqube-net:
    driver: bridge

2.2. 테스트용 웹 서비스 구축

JAVA 환경에서 테스트하기 위한 Spring Boot 이미지 및 컨테이너 생성

version: '3.8'

services:
  spring-boot-app:
    image: maven:3.9-eclipse-temurin-17
    container_name: spring-boot-dev
    working_dir: /app
    volumes:
      - ./:/app
      - maven-repo:/root/.m2
    ports:
      - "8080:8080"
      - "35729:35729"
    command: mvn spring-boot:run # Maven을 사용하여 Spring Boot 실행

volumes:
  maven-repo:
    name: spring-boot-maven-repo

.java 기반의 파일 생성 및 테스트 코드 작성

#Spring 코드가 위치한 곳에서 컴파일 명령어 실행
mvn compile

Maven 기반 Spring(JAVA) 취약점 스캔 명령어

mvn clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \
  -Dsonar.projectKey=sonar_test \
  -Dsonar.projectName='sonar_test' \
  -Dsonar.host.url=http://192.168.0.1:9000 \
  -Dsonar.token={token}

3. Rules 설정

서비스 서버 프레임워크에 맞춰서 스캔할 항목을 지정할 수 있으며, Custom RuleSet을 이용해서 찾고자하는 항목을 적용할 수 있습니다.

더 정교한 룰을 설정할 수 있는 방법은 다음과 같습니다.

4. SonarQube 기본 기능

Projects, Issues, Rules, Quality profiles

4.?. 공식 API

https://next.sonarqube.com/sonarqube/web_api/

ESC

💡 검색 팁

  • #T1572 - 태그로 검색
  • persistence - 키워드로 검색