[목차]

 

 

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) 단말기 - 버프 연결은

 

 

# 테스트해보면

 

 

끝!

 

 


 

 

 

1. 실습 환경 구성

 

 

(1) 앱 소스를 받은 뒤

https://github.com/smuldr/android-ssl-pinning

 

(2) 안드로이드 스튜디오에서 빌드

과정 생략

 

 

 

(3) 설치 & 앱 둘러보기

설치 후

 

앱을 실행해 보면

 

 

테스트 URL이 3개 존재하며

 

 

Pinning 적용 및 해제가 가능

환경 구성 완료!

 

 

 

 

 

2. SSL Pinning 우회 실습

 

먼저 앱에 존재하는 3개 URL을

SSL Pinning 고정/해제하여

연결 테스트

 

이 HTTP URL은 당연히

Pinning을 체크하든 안 하든 정상 연결됨

 

 

- Pinning 해제 후 요청

정상 연결됨!

 

- Pinning 설정 후 요청

연결 거부당함!

 

 

 

- Pinning 해제 후 요청

정상 연결되고

 

- Pinning 설정 후 요청

연결 거부당함!

 

 

 

(1) 우회 코드 확인

참고 : https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/

 

인증서를

/data/local/tmp 경로에

cert-der.crt 이름으로 생성해 줘야 한다.

 

 

 

 

(2) 인증서 생성

 

권한도 주고

 

 

 

(3) 프리다로 돌려주면

 

 

pinning 우회에 성공하여

패킷이 잡힌다!

 

 

 

 

 

 

728x90
반응형

+ Recent posts