13. 프리다 실무 활용 - SSL Pinning 우회
[목차]
0. 개요
1. 실습 환경 구성
2. SSL Pinning 우회 실습
0. 개요
클라이언트가
SSL/TLS 암호화 통신에 사용하는 인증서를
최종 서버의 인증서로 고정(Pinning) 하는 방식을
HPKP(HTTP Public Key Pinning)라 하고
(HSTS(HTTP Strict Transport Security는
강제 HTTPS로만 접속)
서버에서 제공하는 인증서로만
통신할 수 있도록 고안된 SSL Pinning은
SSL 통신에서 취약하다고 알려져 있는
중간자 공격(MITM)을 방지할 수 있는데
클라이언트가
최종 서버의 인증서를 Pinning(고정) 하면
통신 과정에서 클라이언트 측에 저장된
신뢰할 수 있는 특정 인증서와
서버가 제공하는 인증서를 비교 후
일치하지 않으면 연결이 중단되며
클라이언트 측의 요청은
서버로 전송되지 않는다.
보통 프록시 도구(Burp Suite 등)로
서버와 통신하는 패킷을 중간에 가로챌 수 있지만
SSL Pinning이 적용된 클라이언트에서 보내는 패킷은
중간에서 가로챌 수 없으며
현재 대부분의 모바일 뱅킹 앱에는
SSL Pinning이 적용되어 있어
SSL 통신을 보호하고 있는데
해당 SSL Pinning을
어떻게 우회할 수 있는지
방법을 살펴본다.
# 사전 환경 구성
프록시 도구(Burp Suite)와
진단용 단말기 또는 에뮬레이터를
연결 후 실습 진행
(1) 단말기 내 버프 인증서(시스템 인증서) 설치
: 설치 방법은 https://takudaddy.tistory.com/627 참고
(2) 단말기 - 버프 연결은



# 테스트해보면

끝!

(2) 안드로이드 스튜디오에서 빌드
과정 생략
(3) 설치 & 앱 둘러보기
설치 후

앱을 실행해 보면

테스트 URL이 3개 존재하며

Pinning 적용 및 해제가 가능

환경 구성 완료!


이 HTTP URL은 당연히


정상 연결됨!
- Pinning 설정 후 요청



정상 연결되고
- Pinning 설정 후 요청

연결 거부당함!
(1) 우회 코드 확인
참고 : https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/

인증서를
/data/local/tmp 경로에
cert-der.crt 이름으로 생성해 줘야 한다.
(2) 인증서 생성

권한도 주고

(3) 프리다로 돌려주면



pinning 우회에 성공하여
패킷이 잡힌다!
끝