목표 : 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://sonarcloud.io \
          -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 / 패턴 등) 없이 키스토어에 접근이 가능하다고 함.

'devSecOps' 카테고리의 다른 글

[GitHub] CodeRabbit 통합  (0) 2025.04.07
[GitHub] 기본 CI 구축  (0) 2025.04.07

목표 : 기존 github repo에 CI 구축

1. repo에서 Actions 선택

2. CI설정이 안되어 있다면, Suggested for this repository가 보일 것이다. Simple workflow -> Configure 선택

3. 기존 내용은 지우고, 아래와 같이 입력

name: Android Build (Debug APK)

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    name: Build Debug APK
    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: 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. 빌드가 진행되는 것을 확인할 수 있다.

'devSecOps' 카테고리의 다른 글

[GitHub] CodeRabbit 통합  (0) 2025.04.07
[GitHub] SonarCloud 통합  (0) 2025.04.07
모드 설명 특징
ECB (Electronic Codebook) 동일한 평문 블록이 항상 같은 암호문 블록으로 변환됨 간단하고 빠름
CBC (Cipher Block Chaining) 이전 암호문 블록을 XOR하여 암호화 패턴 숨김 가능, 보안 강화
CFB (Cipher Feedback) 암호문 일부를 피드백하여 스트림처럼 동작 메시지 크기 제한 없음
OFB (Output Feedback) 내부 상태를 이용한 스트림 모드 에러 전파 없음, 동기화 가능
CTR (Counter Mode) 증가하는 카운터 값을 암호화하여 XOR 병렬 처리 가능, 성능 우수
GCM (Galois/Counter Mode) CTR 기반으로 인증 기능 추가 무결성 검증(AEAD 지원), 빠름
XTS (XEX-based Tweaked CodeBook mode with CipherText Stealing) 디스크 암호화에 특화됨 특정 크기 데이터 보호에 적합

사용하면 안 되는 AES 모드

  1. ECB (Electronic Codebook)
    • 동일한 입력이 동일한 출력으로 변환되므로 패턴이 보존됨보안 취약
    • 예제: 이미지 암호화 시 패턴이 남음 (펭귄 이미지 문제)
  2. OFB (Output Feedback) 및 CFB (Cipher Feedback)
    • IV를 재사용하면 키 스트림이 반복되어 보안이 깨질 위험이 있음
    • 동기화 문제가 발생할 경우 전체 데이터가 손상될 가능성 존재

추천하는 AES 모드

  1. GCM (Galois/Counter Mode)
    • AEAD (Authenticated Encryption with Associated Data) 지원
    • 무결성 검증 기능 포함 → 데이터 변조 감지 가능
    • 빠른 속도와 병렬 처리 가능
    • TLS 1.2/1.3에서 가장 많이 사용됨
  2. CTR (Counter Mode)
    • 빠르고 병렬화 가능
    • IV(Nonce) 관리만 잘하면 안전
  3. XTS (XEX-based Tweaked CodeBook mode with CipherText Stealing)
    • 디스크 암호화용으로 가장 적합
    • BitLocker, APFS 등에서 사용

+ Recent posts