Android SSL Pinning을 우회하고 Proxy Unaware 애플리케이션을 가로채는 것이 전부입니다.
안녕 H3ckers,
우리 모두는 "안드로이드 앱의 HTTPS 트래픽을 가로채는 방법"에 대한 많은 기사가 있다는 것을 알고 있으므로 여기서는 다루지 않을 것입니다. 찾지 못한 경우 다음을 참조하십시오.
Burp와 함께 작동하도록 Android 장치 구성 — PortSwigger
전제 조건:
BurpSuite 프록시, 기본 Android Pentesting 및 adb, frida, Objection, Magisk 애플리케이션, APK 디컴파일/재컴파일, APK 서명과 같은 도구에 익숙합니다.
목차
- 내 대상 앱에 SSL 고정이 있습니까?
- 잠깐, 어떻게 Pinning을 확인할 수 있나요?
- 우회할 시간
- 앱이 HTTP 로 작업 중인 경우에도 앱 트래픽을 가로챌 수 없는 이유
알겠습니다. 농담처럼 들립니다. 여러분은 알고 있기 때문입니다. 고정이 제자리에 있으면 대상 Android 애플리케이션의 HTTPS 트래픽을 캡처할 수 없습니다.
2. 잠깐, Pinning은 어떻게 확인하나요?
장치와 프록시 서버(Burp) 모두에서 프록시를 설정한 후 대상 응용 프로그램을 실행한 다음 대상 응용 프로그램과 해당 서버 간에 통신을 만드는 몇 가지 작업을 수행합니다.
Burp의 대시보드, 특히 로그 섹션을 모니터링할 시간입니다. Pinning이 있는 경우 다음과 같이 인증서 오류를 볼 수 있습니다.

2. 우회할 시간
2.1 이동 인증서 - Magisk 모듈:
기기가 Magisk 애플리케이션으로 루팅된 경우 인증서 모듈 이동이 좋은 옵션 중 하나입니다.

이 모듈은 사용자가 신뢰할 수 있는 인증서를 시스템 저장소로 이동하여 시스템(루트)이 사용자가 설치한 인증서(프록시 CA 인증서)를 신뢰하도록 합니다.
2.2 반대 도구
Repo: sensepost/objection: 반대 — 런타임 모바일 탐색(github.com)
1단계 : Android 기기에서 frida 서버가 실행 중인지 확인합니다.

2단계: 다음 명령을 사용하여 이의가 있는 대상 애플리케이션을 첨부합니다.
이의 제기 -g <패키지 이름/ PID> 탐색
그런 다음 " android sslpinning disable " 명령 을 실행합니다.

그게 다입니다. 스크립트는 SSL 고정 클래스를 찾아서 고정을 우회하기 위해 런타임 중에 연결합니다.
2.3 프리다 프레임워크
레포: 프리다(github.com)
여기에 가장 인기 있고 널리 사용되는 방법이 있습니다.
1단계 : Android 기기에서 frida 서버가 실행 중인지 확인합니다.
2단계: frida로 대상 애플리케이션을 연결하고 선호하는 SSL 우회 스크립트를 실행합니다.

다음은 내가 가장 좋아하는 스크립트입니다.
https://codeshare.frida.re/@akabe1/frida-multiple-unpinning/
https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/
2.4 Xposed 프레임워크 사용
기기가 Xposed 프레임워크 로 루팅된 경우 다음 모듈을 사용하여 고정을 우회할 수 있습니다.
- ac-pm/SSLUnpinning_Xposed: SSL 인증서 유효성 검사(인증서 고정)를 우회하는 Android Xposed 모듈입니다. (github.com)
- ViRb3/TrustMeAlready: 시스템 전체(github.com)의 Android에서 SSL 확인 및 고정 비활성화

apk-mitm은 apk 파일을 수정하고 다시 압축하여 HTTPS 검사를 위해 Android APK 파일을 자동으로 준비하는 CLI 애플리케이션입니다.
레포:
shroudedcode/apk-mitm: HTTPS 검사를 위해 Android APK 파일을 자동으로 준비하는 CLI 애플리케이션(github.com)
npm 을 사용하여 apk-mitm을 꺼낼 수 있습니다 .

1단계: 아래와 같이 apk-mitm을 실행합니다.

그게 다야, apk-mitm이 제 역할을 다했습니다. 이제 패치된 apk를 설치하고 애플리케이션 트래픽을 가로챌 수 있습니다.
2.6 network_security_config.xml 파일 수정
네트워크 보안 구성을 사용하면 앱 이 선언적 구성 파일 을 통해 네트워크 보안 설정을 사용자 지정할 수 있습니다 . 전체 구성은 이 XML 파일에 포함되어 있으며 코드를 변경할 필요가 없습니다.
출처 : 네트워크 보안 구성 | 안드로이드 개발자
네트워크 보안 구성은 Android 7.0 이상에서 작동합니다.
1단계 : apktool 또는 대안을 사용하여 Android 애플리케이션을 디컴파일합니다. 그리고 /res/xml 에서 network_security_config.xml 파일을 찾습니다 .
2단계 : 앱이 자체 CA 인증서를 고정한 경우 파일은 다음과 같을 수 있습니다.

3단계 : <pin-set>… </pin-set> 태그 섹션을 제거하고 다음을 추가합니다.

4단계: 이제 파일을 저장하고 apktool 및 uber-apk-signer(수정된 apk 서명용)를 사용하여 애플리케이션을 다시 압축합니다.
그게 다야, 우리의 새로운 APK를 설치하고 당신은 갈 수 있습니다.
3. 응용 프로그램이 차단되지 않고 오류가 표시되지 않는 경우 !!
여기서 가장 먼저 떠오른 것은 " Flutter "입니다. Flutter 기반 애플리케이션은 기본적으로 " Proxy unaware "입니다.
여기 우리의 영웅 " Reflutter "가 있습니다.
" 이 프레임워크는 이미 컴파일되어 앱 리패킹 준비가 된 Flutter 라이브러리의 패치 버전을 사용하여 Flutter 앱 리버스 엔지니어링을 지원합니다. “
레포:https://github.com/Impact-I/reFlutter
1단계: pip를 사용하여 환류기 설치
2단계: 아래 스크린샷에 설명된 명령을 따릅니다.

3단계: uber-apk-signer 또는 다른 대안을 사용하여 애플리케이션에 서명하고 설치합니다.
4단계: 이제 Burp 프록시에서 포트 8083 수신을 시작하고 " 보이지 않는 프록싱 지원 "도 활성화 합니다.

그게 다야, 당신은 모두 갈 수 있습니다 ...!
4. 내 응용 프로그램은 HTTP만 사용하지만 여전히 가로채기가 불가능합니다!!
흠..그건 좀 이상하지만, 가끔 그런 일이 있습니다.
이러한 동작을 하는 애플리케이션을 기본적으로 " 프록시 미인식 " 애플리케이션이라고 합니다. 이러한 애플리케이션은 시스템 차원의 프록시 설정과 협력하지 않고 트래픽을 인터넷으로 직접 라우팅합니다.
우회 시간:
이 방법에 대해 Faris 형제님 ❤에게 감사드립니다.
(60) 패리스 모하메드 | 링크드인
1단계: 앱이 Wireshark를 사용하여 통신하는 도메인 주소를 찾습니다. 아래에 나와 있습니다.

2단계: apktool을 사용하여 애플리케이션 디컴파일
3단계: 디컴파일된 폴더에 들어가 ack/grep 도구를 사용하여 도메인 이름이 언급된 파일을 찾습니다.

4단계: 도메인 이름을 BurpSuite의 IP 주소 및 포트로 바꿉니다.

5단계: 애플리케이션을 다시 압축하고 서명한 후 Android 기기에 설치합니다.
7단계: BurpSuite 프록시의 요청 처리 탭에서 리디렉션 호스트와 포트를 처음에 앱에서 사용한 원래 도메인 주소로 지정합니다.

8단계: 호스트 헤더 값을 버프 수신기 IP 주소에서 응용 프로그램의 원래 도메인 주소로 바꾸려면 프록시 옵션에서 일치 및 바꾸기를 설정합니다.

그게 다야. 이제 응용 프로그램의 HTTP 트래픽이 Burp 프록시에서 캡처됩니다.
참고: — 여기에서 하드코딩된 애플리케이션 도메인을 교체하므로 애플리케이션이 하드코딩된 도메인과 직접 통신하므로 장치 프록시를 설정할 필요가 없습니다(프록시 IP로 교체했습니다).
그래서 지금은 한 것 같아요. 실제로 Android SSL 고정을 우회하는 데 사용할 수 있는 몇 가지 다른 방법이 더 있습니다. 귀하의 답변을 바탕으로 2부를 만들려고 합니다.
고마워 친구들, 행복한 해킹 :)