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) 단말기 - 버프 연결은
![](https://blog.kakaocdn.net/dn/cb7rOS/btrTJvGKtiK/W5gRp2icsrWmBJ6KozFq30/img.png)
![](https://blog.kakaocdn.net/dn/bezL8e/btrTKlcOCT2/fhPs6Kh5lNcNruIO0XAME1/img.png)
![](https://blog.kakaocdn.net/dn/PEyCM/btrTMdkjuFh/ICKO93kgtlJqe8I7jKJijK/img.png)
# 테스트해보면
![](https://blog.kakaocdn.net/dn/QPiis/btrTNZlzONk/nqFx976EwbNXsiQkyVE18K/img.png)
끝!
![](https://blog.kakaocdn.net/dn/WN9dt/btrTNZFSs0C/Vq6XGVxtKT8nlgXjhWIAbk/img.png)
(2) 안드로이드 스튜디오에서 빌드
과정 생략
(3) 설치 & 앱 둘러보기
설치 후
![](https://blog.kakaocdn.net/dn/bKeNid/btrTLbm0Ou1/jCKBTPNrxPTTZZ7m2oi74k/img.png)
앱을 실행해 보면
![](https://blog.kakaocdn.net/dn/SMsQ3/btrTJwlla7r/88KW1rhRJdO3hGLzGenDQ0/img.png)
테스트 URL이 3개 존재하며
![](https://blog.kakaocdn.net/dn/XaZDB/btrTMdq3TD2/F7dPMNF8KcKkdQCsUxr8d1/img.png)
Pinning 적용 및 해제가 가능
![](https://blog.kakaocdn.net/dn/bpp507/btrTJNObbRu/4KGpZXIFswIBoeydc8z9Vk/img.png)
환경 구성 완료!
![](https://blog.kakaocdn.net/dn/qBwQS/btrTK6TtWTI/Pr8sqeNhrkR3KRwDwYXDX1/img.png)
![](https://blog.kakaocdn.net/dn/m3JaC/btrTJw6HTKn/7t6Kr5D9QdedYoPOK6avrK/img.png)
이 HTTP URL은 당연히
![](https://blog.kakaocdn.net/dn/IqjVo/btrTHPlayts/pt3NPHKfOy9hu0SHXbzlp0/img.png)
![](https://blog.kakaocdn.net/dn/bhl4X0/btrTKk56dXy/Zbpqz2wrtQIGLVHKNGFuSK/img.png)
정상 연결됨!
- Pinning 설정 후 요청
![](https://blog.kakaocdn.net/dn/Q5pXF/btrTNYtq9n3/b60B4qtvzNizMoaEfnzTjk/img.png)
![](https://blog.kakaocdn.net/dn/JG1pE/btrTM0yebe4/9yNprxS0wIR8iIvkga84ek/img.png)
![](https://blog.kakaocdn.net/dn/bc24jl/btrTKsW3FNz/Qbvw1OSqLfcyOLnQCwRURk/img.png)
정상 연결되고
- Pinning 설정 후 요청
![](https://blog.kakaocdn.net/dn/ByTAF/btrTNYAcEW3/ssPJ68cEkIk1qRc97Ux8C1/img.png)
연결 거부당함!
(1) 우회 코드 확인
참고 : https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/
![](https://blog.kakaocdn.net/dn/dqoo8k/btrTKqrnf8o/o7z0jCvYYXou0bR6x1g580/img.png)
인증서를
/data/local/tmp 경로에
cert-der.crt 이름으로 생성해 줘야 한다.
(2) 인증서 생성
![](https://blog.kakaocdn.net/dn/wTzY3/btrTKqybZqR/ii16fIRACKWTZ4KTRKAolK/img.png)
권한도 주고
![](https://blog.kakaocdn.net/dn/dVUlSj/btrTKqLG93x/V9K4NzBNT8FtAm2Abx1pXk/img.png)
(3) 프리다로 돌려주면
![](https://blog.kakaocdn.net/dn/cmyjBw/btrTIrYV6mc/A3IAhjIUxe0N3YohVP9y8k/img.png)
![](https://blog.kakaocdn.net/dn/HAiKX/btrTK60f46F/e2Vum8CAcEWcVXJETvlgU1/img.png)
![](https://blog.kakaocdn.net/dn/csxnTS/btrTHO7Cp4H/OV4EIyRKSmjabUf2NJimcK/img.png)
pinning 우회에 성공하여
패킷이 잡힌다!
끝