티스토리 뷰
아마 SSL/TLS(인증서) Pinning 방식은 Android 7 부터 안드로이드 개발자들이 MITM(Man-in-the-middle) 공격을 막기 위해서 만들었을 겁니다.
그리고 보통 SSL/TLS Pinning 우회를 하는 이유는 모바일 앱에서 Network Traffic Capture 도구나 Proxy 도구에서 SSL/TLS 를 Strip 하고 HTTPS 트래픽을 보기 위해서 할 겁니다. (아니면 말구요... 일단 저는 그렇습니다.)
그리고 일반적으로 생각나는 방법으로는 Frida 라는 도구를 이용해서 SSL/TLS pinning 하는 클래스인 com.android.org.conscrypt.TrustManagerImpl 의 checkTrustedRecursive 를 주로 후킹해서 우회하곤 할 겁니다.
다만 이를 위해서는 우선 모바일 앱 후킹 도구인 Frida를 설치해야합니다. 그리고 Frida 를 온전히 사용하기 위해서는 모바일이 루팅이 되어 있어야 합니다. 따로 분석용 폰이 없다면 불편하겠죠.
그래서 다른 방법이 없을까 찾다가 알게된 방법인데요. 바로 APK 자체에서 SSL/TLS Pinning 하는 클래스를 조작해버리는 겁니다.
이론적으로 이를 수행하기 위해서는 아래 과정을 거치면 됩니다.
1. apktool 로 우선 apk 파일을 디코딩합니다.
https://ibotpeaches.github.io/Apktool/
2. 앱의 네트워크 보안 설정에서 사용자 인증서를 사용할 수 있도록 허용해줍니다. https://developer.android.com/training/articles/security-config
3. SSL/TLS(인증서) pinning 하는 코드를 비활성화하도록 수정해줍니다.
https://owasp.org/www-community/controls/Certificate_and_Public_Key_Pinning#android
4. 그러고나서 다시 apktool 도구로 디코딩하고 코드를 수정해줬던 앱의 디렉토리를 APK 파일로 컴파일 해줍니다.
5. 마지막으로 apksigner 를 이용해서 apk 를 서명해줍니다. (서명할 수 있는 도구는 다양합니다만, 아래는 uber-apk-signer 라는 도구입니다.)
https://github.com/patrickfav/uber-apk-signer
이런 과정으로 SSL/TLS Pinning 하는 코드를 제거하여 HTTPS 트래픽을 볼 수 있도록 만들어줄 수 있습니다. 그리고 다행히 이런 복잡한 과정을 손으로 할 필요 없이 한번에 자동화해서 해주는 모듈이 생겼습니다.
바로 apk-mitm 이란 모듈입니다. https://www.npmjs.com/package/apk-mitm
Node.js 14+ 버전이 설치되어 있으시다면 아래 명령어로 설치하실 수 있습니다.
$ npm install -g apk-mitm
그리고 사용법은 아래와 같이 정말 간단합니다.
$ apk-mitm <path-to-apk>
실사용 예시는 아래와 같습니다.
$ apk-mitm .\app-outsource-release.apk
그러면 자동으로 원래 파일 이름에 -patched 가 붙게 되는 것을 볼 수 있습니다. 그리고 바로 그 apk 파일이 인증서 pinning 이 우회된 apk 파일이 되겠습니다.
설치하구서 이제 자유롭게 Wireshark 나 Burpsuite, Fiddler 와 같은 도구로 트래픽을 캡쳐하면서 점검을 해보면 될 것 같습니다!
아 물론 위 방법은 APK 파일이 리패키징이 가능하다는 전제하에 수행할 수 있는 방법이겠지요. 앱 무결성 검증을 하는 APK면 불가능한 방법이 되겠습니다.
추가로 APK 리패키징에 대해서 알아보고 싶으시다면 아래 링크들을 참고하시면 되겠습니다.
그리고 아래는 APK 파일을 디컴파일, 컴파일, 리패키징, 리사이닝 등을 쉽게할 수 있는 도구에 대한 설명이 적힌 링크입니다.
마지막으로 아래는 실제로 소스코드를 수정해서 리패키징하는 과정을 설명하는 워게임 문제풀이에 대해 작성된 링크입니다.
https://domdom.tistory.com/entry/Hackthebox-APKey-Writeup%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4
- 끝 -
'도구 > Tools' 카테고리의 다른 글
[webp converter] png나 jpeg 이미지 포맷을 webp 포맷으로 변경하는 방법 (0) | 2022.04.26 |
---|---|
[AWS] PuTTY를 사용하여 Windows에서 Linux 인스턴스에 SSH연결하는 방법 (0) | 2022.04.06 |
[APK Easy Tool] APK 디컴파일, 싸이닝, 리패키징 할 때 유용한 도구 (0) | 2022.03.18 |
[CSP Evaluator] CSP 취약점 분석 및 해석 도구 (0) | 2021.11.04 |
[유용한도구] 인코딩/디코딩 암호화/복호화 해주는 만능도구 - CyberChef (0) | 2021.10.12 |