naroSEC
article thumbnail

들어가기 앞서

 

안드로이드 피닝(Pinning) 개요 및 Root CA 검증 우회 방법

들어가기 앞서 라이브러리 모듈 검사를 통한 Frida 탐지 방안과 우회 기법 들어가기 앞서 통신 포트 검사를 통한 Frida 탐지 방안과 우회 기법 들어가기 앞서 Frida 실행 시 생성되는 파일 검사를 통

naro-security.tistory.com

 

 

고정 인증서 방식의 피닝(Pinning) 우회 방법

들어가기 앞서 안드로이드 피닝(Pinning) 개요 및 Root CA 검증 우회 방법 들어가기 앞서 라이브러리 모듈 검사를 통한 Frida 탐지 방안과 우회 기법 들어가기 앞서 통신 포트 검사를 통한 Frida 탐지 방

naro-security.tistory.com

이전 "안드로이드 피닝(Pinning) 개요 및 Root CA 검증 우회 방법""고정 인증서 방식의 피닝(Pinning) 우회 방법" 포스팅에서 피닝(Pinning 이하 피닝)이 등장한 배경과 Root CA 기반의 검증 방법 및 고정 인증서 방식의 검증 방법에 대해서 살펴봤다. 이번 포스팅에서는 모바일 앱에서 서버 인증서 검증 시 Root CA 검증 기반의 피닝이 적용되어 있을 때, Frida와 같은 후킹 도구를 이용하지 않고 모바일 디바이스에 인증서를 직접 설치함으로써, 우회하는 방법에 대해서 다뤄보도록 하겠다.

 

 ※ 실습 진행에 사용되는 ANDITER 앱은 아래의 GitHub에서 다운로드 가능하다.

 

GitHub - naroSEC/Anditer

Contribute to naroSEC/Anditer development by creating an account on GitHub.

github.com


참고 자료

해당 포스팅에서는 Proxy 도구 중 하나인 Burp Suite의 인증서를 디바이스에 직접 등록하여 Proxy 서버에서 반환하는 인증서가 등록된 Root CA에 의해 검증 될 수 있도록 구성한다. 여기서 다루는 방법 외 디바이스에 인증서를 설치하는 다른 방법에 대해서 알고 싶다면 아래 포스팅을 참고하면 된다.

 

Burp Proxy 인증서를 디바이스에 설치하는 2가지 방법

개요 모바일 디바이스에서 Burp Suite를 사용하기 위해서는 Proxy 서버 인증서를 디바이스에 설치해야 하며, 인증서를 설치하지 않고 네트워크 통신 시 높은 확률로 SSL/TLS 관련 오류가 발생하게 된

naro-security.tistory.com


우회 실습

[그림 1]  Burp Suite 인증서 추출 과정 (1/2)

여기서 다루는 방법은 고정 인증서 검증 방식의 피닝 기법이 아닌 Root CA의 의해 신뢰할 수 있는 인증서인지 검증하는 방식에서만 사용해 우회가 가능하다.

먼저 Brup Suite를 실행한 다음 [그림 1]과 같이 Burp Suite 설정의 ① Tools – Proxy 카테고리에 접근 후 ② import / export CA certificate 버튼을 클릭한다. ③ 인증서 유형은 Certificate in DER format을 선택하고 ④ Next 버튼을 클릭한다.

[그림 2]  Burp Suite 인증서 추출 과정 (2/2)

[그림 2]와 같이 ① 저장할 인증서의 이름을 지정하고 ② Save 버튼을 클릭한다.

[그림 3]  인증서 인코딩 및 변환

openssl을 이용해 추출한 인증서 파일(cacert.der).pem 확장자로 인코딩 및 변환한다.

* openssl 다운로드(https://slproweb.com/products/Win32OpenSSL.html)

[그림 4]  인증서 해시 값 추출 및 파일명 변경

[그림 4]와 같이 openssl을 이용해 변환한 cacert.pem 파일의 해시(Hash) 값을 추출하고 cacert.pem 파일의 이름을 추출한 해시 값으로 변경하면 인증서 추출 과정이 모두 완료된 것으로 해당 인증서를 디바이스의 Root CA에 추가해주면 된다.

[그림 5]  디바이스 인증서 추가 과정

[그림 5]와 같이 adb(Android Debug Bridge) 도구의 push 명령을 사용해 추출이 완료된 인증서를 디바이스 /data/local/tmp 디렉터리로 업로드한다. ② 디바이스에서 인증서를 인식하기 위해서는 인증서 관리 디렉터리(cacerts)로 이동시켜줘야 하는데 해당 디렉터의 경우 읽기 전용 파티션으로 설정되어 있어 mount 명령어를 통해 쓰기 권한을 추가해줘야 한다. 업로드한 인증서를 인증서 관리 디렉터리(/system/etc/security/cacerts/)로 복사 후 변경했던 파티션 권한을 다시 원상복구 해준다.

[그림 6] 디바이스 인증서 추가 과정

[그림 6]과 같이 갤럭시 Z플립 기종의 디바이스 기준으로 [ 설정 생체 인식 및 보안 기타 보안 설정 인증서 확인 항목 ]에서 추가한 인증서를 확인할 수 있으며, Burp Suite 인증서인 PortSwigger CA가 정상 등록된 것을 확인할 수 있다.

[그림 7]  디바이스 인증서 추가 과정

인증서 등록이 완료되었다면 [그림 7]과 같이 인증서 오류 없이 인터넷에 정상 접근되는 것을 확인할 수 있으며, Bypass Pinning(Root CA) 탐지 항목 또한, 별도의 Frida와 같은 후킹 도구 이용 없이 정상 우회되는 것을 볼 수 있다.


마무리

이번 포스팅에서는 후킹과 같은 별도의 도구 이용 없이 모바일 디바이스에 인증서를 설치함으로써, Root CA 검증 기반의 피닝 기법을 우회하는 방법을 살펴봤다. 이렇게 디바이스에 설치된 인증서는 별도의 갱신 또는 등록 없이 사용 기간이 만료되어 인증서 폐기 전 까지 사용할 수 있다. 따라서, 앱 단에 높은 보안 성숙도를 요구하는 플랫폼에서 사용되는 고정 인증서 방식의 피닝이 아닌 이상 별도의 우회 과정을 거치지 않는 이와 같은 방법을 사용하는 것이 사용자 편의 측면에서 효율적이다. 다음 포스팅에서는 동적 로딩과 네이티브 코드(C/C++)에 대해서 다뤄보도록 하겠다.

profile

naroSEC

@naroSEC

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...