Study/App

[App]AndroGoat NETWORK INTERCEPTING(SSL 피닝)

seomj 2022. 9. 14. 23:19

burp suite를 사용하여 진행

환경설정은 아래 링크를 참고

 

[App]모바일 burp 프록시 환경 구성하기

1. 네트워크 프록시 설정 설정 > WIFI > WiredSSID 'WiredSSID'를 길게 누르면 아래와 같은 화면이 나온다. 여기서 '네트워크 수정'을 선택 해당 페이지에서 설정이 필요 고급옵션 프록시: 수동 프록시 호

seomj74.tistory.com


SSL 피닝

클라이언트 측에서 사용하는 기법

SSL 핸드셰이킹 이후에도 서버의 증명서를 다시 확인하여 중간자 공격을 피할 수 있다.

클라이언트 측에 신뢰할 수 있는 증명서들을 저장하고, 이는 이후 실제 통신 과정에서 서버가 제공하는 증명서와 비교하는 데 사용

만약 이 과정에서 일치하지 않는다면, 연결은 중단될 것이고 유저의 정보가 서버로 전송되지 않을 것이다.

 

출처

https://ohseunghyeon.github.io/study/ssl-pinning/


실습

HTTP 클릭 시

HTTPS 클릭 시

 

그러나 마지막 CERTIFICATE PINNING은 잡히지 않는다.

해당 APK 자체에서 허용하는 SSL 인증서가 있어야 패킷이 잡힌다.

이 과정을 frida로 후킹하여 SSL 피닝을 우회하도록 진행

 

1. AndroidManifest.xml파일 확인

33번째 줄을 보면 network에 관한 코드 확인

 

2. owasp.sat.agoat.TrafficActivity 확인

PinningButton이 존재하는 것을 확인할 수 있다.

.doPinning()으로 넘어가는 것을 50번째 줄을 통해 알 수 있다.

 

109번째 줄을 보면 pinner1에 CertificatePinner을 사용하여 인증서를 지정해준다.

그리고 해당 인증서를 가지고 "https://owasp.org"에 요청한다.

 

3. 스크립트 작성

이를 우회하기 위해서 CertificatePinner의 검증 로직을 후킹하면 우회가 가능하다.

console.log("Script loaded successfully");
Java.perform(function x() {
    console.log("java perform function");
    var CertificatePinner = Java.use('okhttp3.CertificatePinner');
    CertificatePinner.check.overload('java.lang.String','java.util.List').implementation = function (p0, p1) {
        console.log('! Intercepted okhttp3: ' + p0);
        return;
    };
});

 

4. 스크립트 실행

 

 

결과