SonarQube를 이용한 소스코드 취약점 진단¶
SAST 도구 중 하나로 룰셋 기반의 소스코드 취약점 진단 수행 가능
1. 개요¶
소나큐브는 무엇이고.. 무엇입니다..
어떤 상황에서 사용하고.. 룰셋은 어떻게 설정하고...
2. 환경 구축 및 설정¶
2.1. SonarQube 도커 설정¶
- 취약점 룰셋을 추가할 수 있는 플러그인은 별도로 마켓에서 다운로드 및 적용 필요
- findbugs 플러그인 링크:
https://github.com/spotbugs/sonar-findbugs/
#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을 이용해서 찾고자하는 항목을 적용할 수 있습니다.
- 커스텀 룰셋은 웹 UI에서 제공하는 19개 항목 이외에는 사용할 수 없으며, 단순 정규식 매칭 등 기본적인 사항만 가능
- 대부분은 이미 분석된 내장 룰 조합을 기반으로 수행
더 정교한 룰을 설정할 수 있는 방법은 다음과 같습니다.
- SonarQube API를 활용한 직접 플러그인 개발
- 외부 진단 도구 연동 (Dsonar.externalIssuesReportPaths=report.json 옵션으로 가능)
- 서드파티 플러그인 설치 (FindSecBugs 등)
4. SonarQube 기본 기능¶
Projects, Issues, Rules, Quality profiles
4.?. 공식 API¶
https://next.sonarqube.com/sonarqube/web_api/