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