APK 인증 우회 - APK injeung uhoe

1. 취약점 소개

애플리케이션패칭취약점이란안드로이드의클라이언트코드를변경해비정상적인 작동을유도하도록APK파일을변조해실행되는취약점을말한. 대표적인예로배포된악성코드들이정상적인서비스앱을조작( 변조)사용자들을유인해사용자의개인정보, 공인인증서, 휴대폰정보등을탈취한다. 서버인증이아닌클라이언트단의 인증을우회해서여러가지인증절차를무력화시킬있다.

2. 취약점 진단

[그림 2-1] 릴리즈된apk파일확인디컴파일

릴리즈된 ap파일을확인한apktool -d [릴리즈파일] 명령어를 입력해디컴파일을한다.

[그림 1-2] smali코드생성

디컴파일 하면app/app-release/smali/com/android/insecurebankv2/smali코드가생성된다.

[그림 2-3] 루팅체크smali코드

PostLogin.smali파일에서"Rooted Deviced"다른 문자로수정한다. 여기선Hacker!!!!수정했다.

[그림 2-4] 릴리즈된 apk컴파일

smali 코드를수정한apktool도구를활용해 다시컴파일한다. apktool -d [릴리즈파일]입력 실행한다.컴파일apk파일은InsecureBankv2/app/app-release/dist/존재한다.

[그림 2-5] 서명키인증

새로릴리즈된 apk 파일은단말기에 설치에러가발생한다. 따라서서명키인증을해야 하는데https://github.com/appium/sign에서서명키인증과관련된 파일을다운받고 java -jar signapk.jar [서명키.pem] [서명키.pk8] [리패키징.apk] [서명된 리패키징이름.apk]  명령어를입력하면새로릴리즈된apk파일에 대한서명키인증이진행된다.

[그림 2-6] 변조된 실행

서명키인증변조된앱이정상적으로설치되고 로그인하면변조했던Hacker!!!문구가출력됨을있다. 실무에선 smali코드변조를통해루팅우회를하거나인증프로세스를 우회하는곳에코드패칭을적용한다.

3. 취약점대응방안

안드로이드앱의위변조에대응하기위해NDK사용하는데소스코드난독화가되어 있지않다면프로세스를분석해메모리에서중요한제어를조작한다. 안드로이드 스튜디오에선기본적으로난독화도구인프로가드를제공한다. 프로가드는자바코드에서 사용하않는클래스, 필드, 메서드들을찾은삭제해서코드 전체의크기를줄여주고클래스, 필드, 메서드등의이름을난독화 해주는 프로그램이다.

[그림 3-1] 프로가드설정

인시큐어뱅크폴더목록에서Gradle Scripts>build.gradle파일에buildType존재한다. minifyEnabled기본적으로false설정되어 있고이를true수정하면적용이가능하다.

[그림 3-2] 서명 인증

변조된파일의설치를위해서명키로인증한 릴리즈파일로저장한다.

[그림 3-3] 릴리즈파일디컴파일

dex2jar도구를사용해릴리즈apk파일을디컴파일해서 jar파일로생성한다.

[그림 3-4] jar파일확인

jadx-gui실행시킨디컴파일jar파일의소스 코드를확인하면a,b,c,d같은이름으로변경되었고어떤함수인지 판별하기어렵게되었다.

[그림 3-5] 루팅소스코드난독화

PostLogin파일의소스코드를보면루팅방지부분코드고문자열난독화는 적용되지않았지만루팅을체크하는몇몇의함수가난독화되서공격자가 분석하기어렵게된다.