인시큐어뱅크 활용 안드로이드 모의해킹 공부

애플리케이션 패칭 취약점

원준킹 2020. 12. 22. 19:42

애플리케이션 패칭 취약점

  • 클라이언트 어플리케이션 보안이 요구되는 현 시점에서 가장 문제가 많은 취약점 중 한가지 (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