본문 바로가기
4. 모바일 앱 취약점 진단

[Android, iOS] Burp Suite 프록시 도구로 패킷 잡는법 + SSL Pinning

by Robert8478 2024. 6. 19.

개요

모바일 앱에서 취약점 진단을 할 때 무결성 검증 우회나 디바이스 임의 개조 탐지 등 모바일 앱 자체적인 취약점을 도출하기도 하지만 당연히 웹처럼 이루어지는 모바일 앱 내부의 기능도 진단을 한다.

이를 위해서는 Burp Suite와 같은 프록시 도구로 모바일 앱에서 이루어지는 클라이언트-서버간 통신 패킷을 캡처해야하는데 이는 별도로 세팅을 해줘야 한다.

[ Android ]

먼저 안드로이드에서 Burp Suite 패킷을 잡는 방법이다.

1. 노트북 와이파이 핫스팟 키고 모바일 기기 와이파이를 핫스팟과 연결

2. 버프슈트 Proxy Setting에 All interface, 7777 포트 설정

3. 모바일 단말기 와이파이의 프록시 설정 수동 - 노트북 무선 Wi-Fi iP 주소와 7777포트로 설정

4. 모바일 단말기 인터넷에서 http://burp에 접근한 뒤 우측 상단 클릭하여 CA 인증서 설치

5. 다운로드 받은 인증서 확장자를 der에서 cer로 변경

6. 모바일 단말기에서 설정 - 보안 및 개인정보 보호 - 기타 보안 설정 - 기기에 저장된 인증서 설치 - CA 인증서 메뉴를 통해 다운로드 받은 인증서 설치

7. adb shell에서 아래 명령어 입력

# su
# cd /data/misc/user/0/cacerts-added // ls -l로 추가된 인증서 확인 후 system 경로에 등록하기 위해 remount 진행
# mount -o rw,remount /system // 만약 안되면 mount -o rw,remount / 하여 명령어 진행 후 나중에 권한 복구를 위해
다시 mount -o ro,remount / 진행
# cp 인증서 /system/etc/security/cacerts

그 후 모바일에서 프록시 잡히는 것을 확인하고 앱에 문제가 발생할 경우 Pinning 작업을 진행한다. (SSL Pinning은 하단에서 확인)

 

[ iOS ]

iOS도 기본적으로 Android와 동일하지만 프로파일을 설치하는 경로가 다르다.

CA 인증서를 다운로드 하고 난 후 설정 > iPhone 설정 제안 > 프로파일 다운로드 됨 메뉴에서 다운로드한 프로파일을 설치하면 된다.

만약 에러가 발생할 경우 일반 - 정보 - 인증서 신뢰 설정에서 프로파일 활성화를 설정한다.

 

[ SSL Pinning ]

SSL Pinning 이란 일종의 보안 기법으로, SSL 통신에서 취약하다고 알려져 있는 중간자 공격 방지를 위해 사용하고 있는데 Pinning이란 서버에 인증서를 Pinning(고정) 한다는 의미이다. 즉, 클라이언트 측에 신뢰할 수 있는 인증서들을 저장하고 서버가 인정하는 고정된 인증서와 진행하는 통신만 가능하며 그 외 다른 인증서(가짜 CA 등)로는 통신이 되지 않도록 하는 기법이다.

앱에 이러한 SSL Pinning 기법이 적용되어 있을 경우 위에서 진행했던 Burp Suite CA를 설치하여 프록시 도구를 통해 통신하는것이 기본적으로 불가능해진다.

하지만 Frida를 사용하면 이러한 SSL Pinning 기법은 어느정도 우회가 가능해진다.

Burp Suita CA로 연결을 하더라도 결국 메모리 단에서 TrustManager를 사용해서 신뢰된 CA가 요청한 것처럼 변조하면 정상적으로 통신이 되는 원리다.

Java.perform(function() {

    var array_list = Java.use("java.util.ArrayList");
    var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');

    ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
        console.log('[i] Bypassing SSL Pinning');
        var k = array_list.$new();
        return k;
    }
});

앱을 실행하고 위 코드를 Frida Script로 호출하거나 혹은 Frida Codeshare에 등록된 Script를 사용하면 SSL Pinning을 우회하고 앱 패킷을 프록시 도구로 캡처할 수 있을 것이다.

스크립트 사용은 아래의 명령어를 이용한다.

# frida -U -F com.playground.anditer -l Frida_Pinning.js