목표 : github CI에 SAST 도구인 SonarCloud을 통합하여 취약점을 관리하도록 함
SonarCloud 설정
1. https://sonarcloud.io/
2. GitHub / Birbucket / GitLab 등을 선택할 수 있다. GitHub 선택
3. Import an organization 선택
4. 적용을 원하는 repo 선택 후 Install & Authorize
5. 키와 Organization 키 설정 후, 요금 플랜 선택 후 Create Organization 선택
6. 분석을 원하는 repo 선택 후 Set Up 선택
7. 새 코드 범위 설정 후 Create project 선택
Previous Version : 커밋 후 변경된 모든 코드를 새코드로 간주
Number of days : 지난 x일 동안 변경된 모든 코드는 새코드로 간주
8. Information에서 Project Key와 Organization Key 확인
이 키는 GitHub가 SonarCloud에 접근할 때 사용 됨
9. Administration -> Analysis Method -> Automatic Analysis 해제
9. My Account -> Security -> 토큰 이름 지정 후 Generate Token 선택
이 토큰은 GitHub가 SonarCloud에 접근할 때 사용 됨
GitHub 설정 (예제가 궁금하다면 https://github.com/codetronik/KeyStoreExample 참조)
1. Settings -> Secrets and variables -> Actions -> New repository secret 선택
Name엔 SONAR_TOKEN, Secret엔 9번에서 생성한 토큰 입력
2. build.gradle.kts 수정
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
id("org.sonarqube") version "4.4.1.3373"
}
3. yml 수정
name: Android Build with SonarCloud
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
name: Build Debug APK & Analyze with SonarCloud
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
cache: gradle
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Grant execute permission for Gradle
run: chmod +x ./gradlew
- name: Run SonarCloud analysis
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
./gradlew sonar \
-Dsonar.projectKey=8번에서 확인한 키 \
-Dsonar.organization=8번에서 확인한 키 \
-Dsonar.host.url=https:
-Dsonar.login=${SONAR_TOKEN}
- name: Build Debug APK
run: ./gradlew assembleDebug
- name: Upload Debug APK
uses: actions/upload-artifact@v4
with:
name: debug-apk
path: app/build/outputs/apk/debug/app-debug.apk
4. 빌드 완료 후, 분석 결과를 SonarCloud 에서 확인 가능
시큐리티 failed 발생
내용을 확인하면, 자격 증명(pin / 패턴 등) 없이 키스토어에 접근이 가능하다고 함.