본문 바로가기
해킹&보안/모바일

모바일 정적분석 #1

하드코딩된 암호화 키 분석

1. 서론

모바일 애플리케이션 보안 진단의 정적 분석입니다. 정적 분석은 애플리케이션을 실행하지 않은 상태에서 소스코드, 컴파일된 바이너리, 리소스 파일 등을 분석하여 잠재적인 보안 취약점을 식별하는 방법입니다. 코드 실행 없이 전체 구조를 파악할 수 있어 높은 코드 커버리지를 확보할 수 있다는 장점이 있습니다.

본 분석에서는 모바일 보안 학습을 위해 의도적으로 취약하게 제작된 애플리케이션인 InsecureBankv2를 대상으로 사용합니다

JADX 도구를 활용하여 InsecureBankv2 애플리케이션의 소스 코드 내에 하드코딩된 암호화 키와 부적절한 초기화 벡터(IV) 사용을 식별하고 해당 취약점의 위험성을 분석하는 것을 목표로 합니다.

기초부터 시작할 예정입니다


2. 분석 환경

분석 대상: InsecureBankv2.apk

분석 도구: JADX-GUI 


3. 분석 절차

디컴파일된 코드의 양은 방대하므로, 모든 로직을 이해하려 하기보다 명확한 취약점 단서를 기반으로 효율적인 분석을 진행합니다. 하드코딩된 민감 정보는 정적 분석 초기에 발견하기 가장 용이한 취약점 유형 중 하나입니다.

 

3.1. 키워드 기반 검색

소스 코드 내 중요 정보(비밀번호, API 키, 암호화 키 등)는 key, password, secret, token 등의 예측 가능한 변수명에 저장되는 경우가 많습니다. 이러한 키워드를 검색하여 분석 범위를 좁히는 것은 매우 효과적인 전략입니다.

 

3.2. JADX 텍스트 검색 기능 활용

  1. JADX 상단 메뉴의 Navigation -> Text search를 통해 전체 텍스트 검색 기능을 실행합니다.
  2. 의심스러운 키워드인 key 또는 secret을 검색합니다

검색 결과 com.android.insecurebankv2.CryptoClass 클래스에서 관련 코드를 여러개 확인할 수 있습니다. 클래스명 자체에서 암호화 관련 기능을 할 것이라는 추측이 가능하기 때문에, 해당 파일을 집중적으로 분석합니다.

 

3.3. 취약점 확인

CryptoClass 파일을 열면, 클래스 멤버 변수로 암호화 키와 초기화 벡터(IV)가 평문으로 하드코딩되어 있는 것을 즉시 확인할 수 있습니다.

분석 결과 두 가지의 명백한 보안 취약점이 식별되었습니다.

  1. 암호화 키 하드코딩: key 변수에 "This is the super secret key 123" 이라는 AES 암호화 키가 평문으로 저장되어 있습니다.
  2. 초기화 벡터(IV) 하드코딩: ivBytes 변수가 모두 0으로 채워진 고정된 값으로 사용됩니다. aes256encrypt 메소드에서 이 고정된 IV 값을 그대로 사용하여 암호화를 수행합니다.

4. 취약점 분석 및 영향

4.1. 하드코딩된 암호화 키

취약점 분류: CWE-321

위험도: 높음 (High)

상세 설명: 소스 코드에 암호화 키를 평문으로 저장하는 '하드코딩'은 심각한 보안 취약점입니다. JADX와 같은 공개된 디컴파일 도구를 통해 누구나 APK 파일을 분석하여 해당 정보를 쉽게 추출할 수 있습니다.

영향: 기밀성 침해, 무결성 훼손, 인증 우회 등 암호화 로직 전반을 무력화시킬 수 있습니다.

 

4.2. 고정된 초기화 벡터(IV) 사용

취약점 분류: CWE-329

위험도: 중간 Medium

상세 설명: AES와 같은 블록 암호의 CBC모드에서 IV는 매 암호화마다 예측 불가능한 임의의 값으로 생성되어야 합니다. 동일한 키와 IV로 두 개의 동일한 평문을 암호화하면 항상 동일한 암호문이 생성됩니다.

영향: 공격자는 암호문의 패턴을 분석하여 평문의 일부를 유추할 수 있습니다. 예를 들어, 로그인 성공과 실패 메시지가 항상 특정 암호문으로 나타난다면, 공격자는 암호문을 해독하지 않고도 통신 내용을 추측할 수 있게 됩니다.


5. 결론 및 대응 방안

단순한 키워드 검색만으로 애플리케이션의 핵심 암호화 로직에 존재하는 두 가지 심각한 취약점을 발견했습니다. 이는 정적 분석이 초기 단계에서 치명적인 취약점을 식별하는 데 얼마나 효과적인지를 보여줍니다.

 

안전한 키 및 IV 관리 방안

  • 키 관리: Android Keystore System을 활용하여 하드웨어 기반의 보안 저장소에 암호화 키를 저장하고 관리하는 것이 가장 권장됩니다.
  • IV 관리: 암호화 시마다 SecureRandom과 같은 암호학적으로 안전한 난수 생성기를 사용하여 IV를 새롭게 생성해야 합니다. 생성된 IV는 일반적으로 암호문 앞에 붙여서 함께 전송합니다.

 

'해킹&보안 > 모바일' 카테고리의 다른 글

모바일 정적분석 #6  (0) 2025.10.18
모바일 정적분석 #5  (0) 2025.10.18
모바일 정적분석 #4  (0) 2025.10.17
모바일 정적분석 #3  (0) 2025.10.17
모바일 정적분석 #2  (0) 2025.10.16