애플리케이션 패칭 취약점
- 클라이언트 어플리케이션 보안이 요구되는 현 시점에서 가장 문제가 많은 취약점 중 한가지 (exe -> 바이너리 변조와 유사하나 더 쉬움- 눈에 잘 보여서)
- 안드로이드의 클라이언트 코드를 변경하여 비정상적인 작동을 유도하도록 APK 파일을 변조 및 수정(리패키징)
- 서버 인증이 아닌 클라이언트 단의 인증을 우회함으로써 여러가지 인증 절차를 무력화 시킬 수 있음
진단 방법
-
APK 파일에서 자바 코드 추출
dex2jar, jd-gui 사용 -
난독화 적용 여부 체크
에러기반 난독화(리패키징 방지 솔루션) : apkprotect (APK 파일에서 자바 코드 추출 방지)
코드 난독화 : proguard (클래스명 변경 등)
멀티덱스 난독화 : 외부 상용 솔루션 (두개의 APK 파일로 분리 -> 구동되는 APK, 암호화된 APK)
문자열 난독화 : 외부 상용 솔루션 -
APK 파일에서 Smali 코드(기계어 명령어와 일대일 대응) 추출 (자바 코드와 비교 분석)
-
Smali 코드 변조
-
APK 파일 리패키징 후 설치 및 테스트
인시큐어 뱅크 APK 파일 디컴파일
LogUtil 클래스의 Smali 파일을 열어 확인
변수 v0 에 int 값 0이 들어가 DebugMode가 False 가 되게 하는 것을 유추가능
v0 값을 0x1 로 바꾸고 재컴파일
결과적으로 개발자가 소스코드 상에서 비활성화 시켰던 로그 기능을 Smali 코드 수정을 통해 사용자가 악용 가능
대응방안
- 배포용 APK 소스코드에 프로가드(Proguard)를 적용한다
gradle 설정에서 minifyEnabled True 후 빌드
생성된 파일 용량 1kb
jd-gui로 확인 시 에러
- 난독화 솔루션을 사용한다.
- 앱의 Signing 키를 검증 사용한다.
keytoll -list -printcert -jarfile apkfilename.apk
'인시큐어뱅크 활용 안드로이드 모의해킹 공부' 카테고리의 다른 글
루트 노출 및 우회 취약점 (0) | 2020.12.22 |
---|---|
개발자 백도어 취약점 (0) | 2020.12.22 |
안드로이드 페이스트보드 취약점 (0) | 2020.12.22 |
취약한 로깅 메커니즘 (0) | 2020.12.22 |
취약한 암호화 구현 (0) | 2020.12.22 |