본문으로 바로가기

안드로이드·갤럭시·AOS 취약점진단/모의해킹 무료 강의 학식(hagsig)

 

가. 하드코딩된 중요정보 노출 취약점이란?

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. 분석 대상 앱 설치

- 실습을 위해 DIVA 앱을 설치한다.

※ DIVA 앱이 설치되어있지 않은 사람은 아래의 글을 참고하여 앱을 설치하길 바란다.

안드로이드 DIVA 설치 및 실행방법 정리

 

안드로이드 DIVA 설치 및 실행방법 정리

1. 안드로이드 DIVA 란? - 안드로이드(Android, AOS)에서 사용하는 애플리케이션(Application, App)에 대해 취약점 진단을 실습할 수 있는 환경을 제공한다. - 2016년 이후 업데이트가 중단되었다. 2. 실습할

hagsig.tistory.com

 

2. 디컴파일 도구 다운로드

- Android Dex 및 Apk 파일에서 Java 소스코드를 확인하기 위해서는 디컴파일 도구가 필요하다.

- 디컴파일 도구는 여러가지가 있지만 본글에서는 JD-GUI와 JADX를 다루겠다.

 

2.1. JD-GUI 다운로드

- 아래의 사이트에 접속하여 jd-gui-x.x.x.jar 파일을 다운로드한다.

http://java-decompiler.github.io/

 

Java Decompiler

The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions. JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reco

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

 

Release 1.4.7 · skylot/jadx

Features [core] Inline lambdas by instance field (#1800) [plugins] Allow to load classes using input stream or byte array in jadx-input plugin (#1457) Bug Fixes [core] Restore missing type param...

github.com

 

다. DIVA 앱을 통한 실습 진행

- DIVA앱에는 하드코딩된 중요정보 노출을 실습할 수 있는 메뉴가 *2개 있다.

*DVIA 하드코딩 중요정보 노출 실습 메뉴 : '2.HARDCODING ISSUES - PART 1', '12.HARDCODING ISSUES - PART 2'

- 본 글에서는 '12.HARDCODING ISSUES - PART 2' 메뉴를 통해 실습을 진행할 것이다.

 

1. DIVA 앱 실행

- DIVA 앱 실행 → '12.HARDCODING ISSUES - PART 2' 메뉴 클릭 → 문자 입력 → 'ACCESS' 버튼 탭

- "Access denied! See you in hell :D"이라는 문구가 적힌 *토스트 알림이 출력되며 오류가 발생한다.

*토스트(Toast) : 안드로이드에서 사용하는 팝업 메시지 알림 창.

- 본 실습에서는 소스코드 내에 하드코딩된 인증값을 확인하여 인증을 성공하도록 할 것이다.

 

2. 진단 대상 앱 apk 파일 추출

- 아래의 링크를 참고하여 DIVA 앱으로부터 apk 파일을 추출한다.

안드로이드 앱(app)으로부터 apk 파일 추출 방법 정리

 

안드로이드 앱(app)으로부터 apk 파일 추출 방법 정리

1. apk 파일이란? - 안드로이드(Android) OS에 애플리케이션(Application, App)을 설치할 수 있는 파일이다. - 윈도우 OS의 설치파일(exe, msi)같은거라 생각하면 쉽다. 2. apk 파일을 추출해야하는 이유 - 취약

hagsig.tistory.com

 

3. apk 파일 디컴파일/리패키징

- 아래의 링크를 참고하여 추출한 apk파일을 디컴파일/리패키징한다.

안드로이드 APK 파일 디컴파일/리패키징 방법

 

안드로이드 APK 파일 디컴파일/리패키징 방법

1. 디컴파일/리패키징 이란? 1.1. 컴파일(compile) - 소스코드(source code)에서 기계가 인식할 수 있는 바이너리(binary) 파일로 변환하는 과정을 말한다. - 안드로이드는 컴파일 이후 패키징(packaging)과 코

hagsig.tistory.com

 

4. Dex2jar 설치 및 실행(선택)

※ JADX 디컴파일 도구를 이용할 경우 이 과정을 생략해도 된다. 

- Dex2jar 컨버터는 Classes.dex 파일을 jar 파일로 변환시키는 도구이다.

- JD-GUI 컴파일러로 소스코드를 확인하기 위해서는 해당과정을 꼭 거쳐야한다.

- 아래의 링크에 접속하여 dex-tools-vx.x.zip 파일을 다운로드한 뒤 압축을 해제한다.

https://github.com/pxb1988/dex2jar/releases/tag/v2.4

 

Release v2.4 · pxb1988/dex2jar

bugfix

github.com

 

- 압축을 해제한 파일 중 d2j-dex2jar.bat 파일을 이용하여 *classes.dex 파일을 컨버팅 한다.

*classes 파일 경로 : [디컴파일 폴더]\build\apk\classes.dex

- 별도로 경로를 지정해주지 않으면 dex2jar.bat를 실행시킨 경로에 컨버팅 된 파일이 classes-dex2jar.jar 이름으로 생성된다.

d2j-dex2jar.bat [classes.dex파일경로]
예시) dex2jar.bat C:\DIVA\build\apk\classes.dex -> .\classes-dex2jar.jar

 

5. 하드코딩된 정보 확인

- APK 파일 또는 Dex2jar를 통해 생성된 classes-dex2jar.jar 파일을 디컴파일러를 통해 연다.

- "jakhar.aseem.diva"를 클릭하면 DIVA의 소스코드를 확인할 수 있다.

 

- 내비게이션 → 텍스트 검색 또는 "Ctrl + Shift + F" 단축키 클릭

 

- 검색 옵션 선택 → 위에서 출력된 토스트 문구 " Access denied! See you in hell :D" 입력 → 보고 싶은 아이템 더블클릭

 

- 소스코드를 분석해 보니 입력한 문자가 "DivaJni" 클래스의 "access" 메소드에서 반환하는 값과 일치할 경우, 오류가 발생하지 않는 것을 알 수 있다.

 

- "DivaJni"클래스의 "access" 메소드의 소스코드를 분석해 보니 "divajni"라는 라이브러리에서 값을 반환한다는 것을 알 수 있다.

 

- 리소스 트리의 lib(라이브러리) 하위에 libdivajni.so 파일이 존재하나 JADX로는 내용을 알 수 없다.

*SO(Shared Object) 파일 : 공유 라이브러리 파일이다. 윈도우에는 .dll, 리눅스에는 .so 파일이 있다.

- APK파일을 디컴파일하여 생성된 * libdivajni.so 파일을 기드라(Ghidra)를 통해 분석해 볼 것이다.

*libdivajni.so 파일 경로 : [디컴파일 폴더]/lib/armeabi/libdivajni.so

 

6. 라이브러리 파일 분석

- 기드라가 설치되어 있지 않은 사람은 아래의 글을 참고하여 설치하길 바란다.

2022.06.28 - [Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 03강 - 진단 도구 설치

 

[iOS App 진단] 03강 - 진단 도구 설치

1. Cydia(시디아) - 탈옥을 성공하면 자동으로 설치되며, 앱 스토어에서 지원하지 않는 앱을 다운로드할 수 있다. - iOS가 지원하지 못하는 기능을 Cydia를 이용하여 설치할 수 있는데 이를 Tweak(트윅)

hagsig.tistory.com

 

- File 클릭 → New Project 클릭 → Non-Shared Project 선택 → Next 클릭

 

- Project Directory 경로지정 → Project Name 입력 → Finish 클릭 → File 클릭 → Import File 클릭

* Project Directory : 프로젝트 저장 경로.

* Project Name : 프로젝트 이름.

 

- 위에서 추출한 바이너리 파일 선택 → Select File To Import 버튼 클릭

 

- 설정내용을 아무것도 건드리지 않고 OK 버튼 클릭

 

- 추가된 라이브러리 파일(libdivajni.so)을 더블클릭 → Yes 버튼 클릭

 

- 설정내용을 아무것도 건드리지 않고 Analyze 버튼 클릭 → 분석이 종료될 때까지 대기(우측 하단에 진행률이 표시됨).

※ 분석이 종료되면 알림 창이 발생한다. 분석이 완료되지 않으면 결과가 달라질 수 있으므로 완료될 때까지 기다린다.

 

- 화면 좌측 Symbol Tree의 Filter에 위에서 확인한 메소드 "access"를 입력 → 검색된 내용 중 "Java_jakhar_aseem_diva_DivaJni_access"을 클릭

- 화면 우측 Decompile 창의 소스코드를 확인.

 

- 소스코드를 분석한 결과, 사용자가 입력한 값이 "olsdfgad;lh"와 같으면 1을 반환하는 것을 알 수 있다.

 

- DIVA 앱에서 "olsdfgad;lh" 문구를 입력 → 'ACCESS' 버튼 탭

- "Access granted! See you on the other side :)"이라는 토스트 알림이 출력되며 인증에 성공한 것을 확인할 수 있다.