가. 하드코딩된 중요정보 노출 취약점이란?
1. 하드코딩된 중요정보
- 하드코딩이란 소스코드 내에 데이터를 직접 입력해서 저장하는 경우를 말한다.
- 중요정보(관리자 계정, 암호화키 등)가 소스코드 내에 하드코딩될 경우 2차 피해가 발생할 수 있다.
- 안드로이드 앱은 디컴파일을 통한 소스코드 확인이 가능하므로 하드코딩된 중요정보를 꼭 삭제하여야 한다.
2. 진단 방법 및 순서
- 예전에는 APK파일을 디컴파일/리패키징한 후 *classes.dex 파일을 컨버팅(변환) 해야 했다.
*classes.dex : Android 런타임에서 실행되는 코드가 포함되어 있는 파일. 즉, 바이너리 파일이며 기계어로 이루어짐.
- 최근에는 자동 디컴파일 도구가 존재하므로 이런 번거로운 과정을 거치지 않아도 된다.
과거 : 앱의 apk 파일 추출 → apk 파일 디컴파일 → 리패키징 → classes.dex 파일 컨버팅 → 디컴파일러를 통해 소스코드 확인.
근대 : 앱의 apk 파일 추출 → 자바 디컴파일러를 통해 소스코드 확인.
3. 대응 방법
- 중요정보가 소스코드 내에 문구, 주석, 변수 값 등의 형식으로 하드코딩되어 있지 않도록 제거한다.
- 개발기에서 사용한 계정, 암호화 키값 등이 배포할 때에는 제거되도록 주의를 기울여 개발 및 배포한다.
- 중요정보가 소스코드 내에서 사용되어야 한다면, 아래와 같은 안전한 암호화 기법을 사용해 보호한다.
분류 | 미국(NIST) | 일본(CRYPTREC) | 유럽(ECRYPT) | 국내 |
대칭키 암호 알고리즘 | AES-128/192/256 3TDEA |
AES-128/192/256 Camellia-128/192/256 |
AES-128/192/256 Camellia-128/192/256 Serpent-128/192/256 |
SEED HIGHT ARIA-128/192/256 LEA-128/192/256 |
공개키 암호 알고리즘 (메시지 암·복호화) |
RSA (사용 권고하는 키길이 확인 필요) |
RSAS-OAEP | RSAS-OAEP | RSAES |
일방향 암호 알고리즘 | SHA-224/256/384/512 | SHA-256/384/512 | SHA-224/256/384/512 Whirlpool |
SHA-224/256/384/512 |
출처 : 개인정보의 안정성 확보조치 기준 해설서, KISA, 2020.12.
나. 실습을 위한 사전 준비
1. 분석 대상 앱 설치
- 실습을 위해 InsecureBankv2 앱을 설치한다.
※ InsecureBankv2 앱이 설치되어있지 않은 사람은 아래의 글을 참고하여 앱을 설치하길 바란다.
인시큐어뱅크 앱 설치 및 실행 방법 정리(InsecureBankv2)
2. 디컴파일 도구 다운로드
- Android Dex 및 Apk 파일에서 Java 소스코드를 확인하기 위해서는 디컴파일 도구가 필요하다.
- 디컴파일 도구는 여러가지가 있지만 본글에서는 JD-GUI와 JADX를 다루겠다.
2.1. JD-GUI 다운로드
- 아래의 사이트에 접속하여 jd-gui-x.x.x.jar 파일을 다운로드한다.
http://java-decompiler.github.io/
2.2. JADX 다운로드
- 아래의 링크에 접속하여 jadx-gui-x.x.x-with-jre-win.zip 파일을 다운로드한 뒤, 압축을 해제한다.
https://github.com/skylot/jadx/releases/tag/v1.4.7
다. InsecureBankv2 앱을 통한 실습 진행
1. 진단 대상 앱 apk 파일 추출
- 아래의 링크를 참고하여 InsecureBankv2 앱으로부터 apk 파일을 추출한다.
안드로이드 앱(app)으로부터 apk 파일 추출 방법 정리
2. apk 파일 디컴파일/리패키징
- 아래의 링크를 참고하여 추출한 apk파일을 디컴파일/리패키징한다.
3. Dex2jar 설치 및 실행(선택)
※ JADX 디컴파일 도구를 이용할 경우 이 과정을 생략해도 된다.
- Dex2jar 컨버터는 Classes.dex 파일을 jar 파일로 변환시키는 도구이다.
- JD-GUI 컴파일러로 소스코드를 확인하기 위해서는 해당과정을 꼭 거쳐야 한다.
- 아래의 링크에 접속하여 dex-tools-vx.x.zip 파일을 다운로드한 뒤 압축을 해제한다.
https://github.com/pxb1988/dex2jar/releases/tag/v2.4
- 압축을 해제한 파일 중 d2j-dex2jar.bat 파일을 이용하여 *classes.dex 파일을 컨버팅 한다.
*classes 파일 경로 : [디컴파일 폴더]\build\apk\classes.dex
- 별도로 경로를 지정해주지 않으면 dex2jar.bat를 실행시킨 경로에 컨버팅 된 파일이 classes-dex2jar.jar 이름으로 생성된다.
d2j-dex2jar.bat [classes.dex파일경로]
예시) dex2jar.bat C:\InsecureBankv2\build\apk\classes.dex -> .\classes-dex2jar.jarCopy
4. 하드코딩된 정보 확인
- APK 파일 또는 Dex2jar를 통해 생성된 classes-dex2jar.jar 파일을 디컴파일러를 통해 연다.
- "com/android.insecurebankv2"를 클릭하면 InsecureBankv2 앱의 소스코드를 확인할 수 있다.
- "CryptoClass" 클래스의 소스코드를 분석한 결과, AES 암/복호화 로직 및 암호화 *키(KEY) 값을 알 수 있다.
*암호화 키 값 : "This is the super secret key 123"
- 해커가 암호화 키 값을 알 수 있다면, 암호화된 모든 데이터가 평문으로 노출되는 것과 마찬가지이다.
5. 텍스트 검색을 통한 하드코딩된 정보 확인 방법
- 내비게이션 → 텍스트 검색 또는 "Ctrl + Shift + F" 단축키 클릭
- 찾고자 하는 검색어 입력 → 검색 옵션 선택 → '모두 로드' 버튼 클릭 → 보고 싶은 아이템 더블클릭
※ 해당 결과는 50개만 보여주므로 더 많은 결과를 보고싶으면 좌측 하단에 있는 '모두 로드' 버튼을 눌러야 한다.
- 아래와 같은 키워드를 검색하여 하드코딩된 중요정보가 있는지 확인한다.
id | pw | username | password |
passwd | key | secret | admin |
root | decrypt | encrypt | aes |
'Mobile App 취약점 진단 · 모의해킹 > AOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
[AOS 취약점 진단] 06강 - 로컬저장소 내 평문 저장된 중요정보 확인(SQLlite Database 실습) (0) | 2023.12.02 |
---|---|
[AOS 취약점 진단] 06강 - 로컬저장소 내 평문 저장된 중요정보 확인(SharedPreferences 실습) (0) | 2023.12.01 |
[AOS 취약점 진단] 05강 - 하드코딩된 중요정보 확인(실습 2) (0) | 2023.11.18 |
[AOS 취약점 진단] 05강 - 하드코딩된 중요정보 확인(실습 1) (0) | 2023.11.18 |
[AOS 취약점 진단] 04강 - 진단 대상 앱 설치 (0) | 2023.11.12 |