애플리케이션 패칭 취약점이란 안드로이드의 클라이언트 코드를 변경해 비정상적인 작동을 유도하도록 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 파일의 소스코드를 보면 루팅 방지 부분 코드고 문자열 난독화는 적용되지 않았지만 루팅을 체크하는 몇몇의 함수가 난독화 되서 공격자가 분석하기 어렵게 된다.
'안드로이드 앱 취약점 진단 > 인시큐어뱅크' 카테고리의 다른 글
개발자 백도어 취약점 (0) | 2021.09.19 |
---|---|
파라미터 조작 (0) | 2020.02.29 |
취약한 액티비티 컴포넌트 (0) | 2020.02.15 |
XSS 공격 (0) | 2020.02.10 |
로컬 암호화 이슈 (0) | 2020.02.09 |