본문으로 바로가기

안드로이드·갤럭시·AOS 애플리케이션 취약점진단/모의해킹 무료 강의 학식(hagsig)

 

가. 취약점 정의

1. 웹 취약점 점검이란?

- *HTTP 통신을 사용하는 경우 MITM(Man in the Middle) 공격에 의해 중요정보를 도청당해 2차 피해로 이어질 수 있다.

*HTTP 통신 : Axios와 같은 웹 기반 통신 프로토콜을 사용하거나 웹뷰를 사용하는 하이브리드 앱은 웹 기반 통신을 사용한다.

 

- 이를 방지하기 위해 암호화 통신 SSL(Secure Socket Layer)을 사용하지만 *웹 프록시 툴로 변조가 가능하다.

*웹 프록시 툴 : 버프스위트(BurpSuite), 피들러(Fiddler) 등

 

- 웹 프록시 툴에 의한 MITM(Man in the Middle) 공격을 방어하기 위해서는 SSL Pinning 기술이 필요하다.

 

2. SSL Pinning이란? 

- 서버측 암호화 통신에서 사용하는 인증서에 대한 재검증하기 때문에 MITM 공격을 막을 수 있다.

- 하지만 공격자가 자신의 인증서를 정상적인 것처럼 속이게 된다면 우회가 가능해지는데 이를 'SSL Pinning 우회'라고 한다. 

 

나. 취약점 대응방안

- 웹에서 발생할 수 있는 취약점을 조치한다.

 

- SSL 피닝을 사용하여 웹 프록시 툴로 패킷을 도청하고 변조할 수 없도록 조치한다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=gingkosnews&logNo=222271132603&categoryNo=1&proxyReferer= 

 

Prevent bypassing of SSL certificate pinning in iOS applications_iOS 애플리케이션에서 SSL 인증서 고정 우회 방지

By: Dennis Frett - Software engineer 공격자가 모바일 애플리케이션을 리버스 엔지니어링 할 때 가장...

blog.naver.com

 

- 디버깅 도구(프리다 등)를 통해 SSL 피닝 우회를 할 수 없도록 디버깅 방지 기능을 적용한다. 

- 아래의 링크에 적인 안티 디버깅 코드가 쓰레드를 통해 주기적으로 디버깅 중인지 탐지하도록 해야 한다.

https://seo-security.tistory.com/19

 

[Android] 안티 디버깅(Anti-Debugging) 코드

안티 디버깅(Anti-Debugging) 앱 안티 디버깅은 특정 모바일 앱의 디버깅을 감지하고 방지하기 위한 기술 및 메커니즘의 사용을 의미합니다. 앱을 디버깅하면 실행 중 동작을 분석하고 이해할 수 있

seo-security.tistory.com

 

- 탈옥된 환경과 애뮬레이터에서 앱이 동작하면 웹 프록시 툴 인증서를 디바이스에 등록하고 중간자 공격을 시도할 수 있으므로 탈옥된 환경과 애뮬레이터에서는 앱이 강제종료되는 기능을 적용한다. 

 

다. 취약점 실습

1. 웹 취약점 진단

- 아래의 글을 참고하여 디바이스와 웹 프록시 툴을 연결하여 웹 취약점을 진단한다.

[AOS App 취약점 진단 · 모의해킹] - 녹스(Nox) 버프슈트 프록시 연결 및 인증서 설치 방법

 

녹스(Nox) 버프슈트 프록시 연결 및 인증서 설치 방법

녹스와 PC의 프록시 연결 시 SSL인증서 오류가 발생한다. 이를 해결하기 위해서는 버프스위트 SSL인증서를 openssl로 변환하여 설치하는 과정이 필요하다. 매우 복잡하지만 아래의 과정을 따라하여

hagsig.tistory.com

 

2. SSL 피닝 우회

2.1. 점검 대상 설치 및 환경 구축

- SSL Pinning 우회 실습을 위해 X(구 트위터) 앱을 설치한다.

※ Android 9 버전 이상에서만 마켓에서 앱이 검색되고 설치할 수 있다.

 

- 상단에 게시된 버프스위트 연결 방법을 참고하여 Nox에서의 웹 패킷을 PC에서 탐지할 수 있도록 환경을 구축한다.

 

- X앱을 실행한다. 현재 SSL 피닝이 적용되어 있어 실행 또는 버튼 클릭 시 오류가 발생하는 것을 확인할 수 있다.

 

- Burp Suite의 이벤트 로그를 보면 SSL Pinning에 의해 에러가 발생하며 웹 통신을 탐지하지 못하는 것으로 나온다.

※ BurpSuite 2023.12.1.3 버전부터 변경된 인터페이스에서는 좌측 하단에 "Event log" 버튼이 존재한다.

 

2.2. SSL 피닝 우회 코드 생성 및 환경 구축

- SSL 피닝을 우회할 수 있는 코드를 짜기 위해 아래의 링크에 접속한다.

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

 

Frida CodeShare

 

codeshare.frida.re

 

- 코드를 복사한 후 메모장에 붙여 넣고 확장자를 .js로 지정하고 저장한다.

 

- 코드의 30번 줄을 보면 SSL 피닝에 사용할 인증서의 *경로와 파일명이 지정되어 있는 것을 확인할 수 있다.

*지정된 경로 및 파일명 : /data/local/tmp/cert-der.crt

 

- 디바이스의 웹브라우저에서 "http://burp"에 접속하여 "CA Certificate" 버튼을 눌러 인증서를 다운로드한다.

 

- 다운로드한 인증서를 위 코드에서 지정한 경로로 옮겨주면서 파일이름과 확장자명을 *변경한다.

*변경 내용 : /storage/emulated/0/Download/cacert.der → /data/local/tmp/cert-der.crt

- 그다음 cert-der.crt 파일의 권한을 777로 변경한다.

adb shell

mv /storage/emulated/0/Download/cacert.der /data/local/tmp/cert-der.crt
chmod 777 /data/local/tmp/cert-der.crt

 

2.3. 프리다 설치 및 서버 실행

- frida server 설치 및 frida client 설치는 아래의 글을 참고하길 바란다.

[AOS App 취약점 진단 · 모의해킹] - 안드로이드 프리다 서버/클라이언트 설치방법

 

안드로이드 프리다 서버/클라이언트 설치방법

Frida Server/Client 설치 방법 - Android(AOS) 가. 설치 프로그램 설명 1. 아나콘다(Anaconda) - 오픈소스 라이브러리를 모아둔 개발 플랫폼이다. - 아나콘다를 사용하면 파이썬을 버전별로 설치해서 사용할

hagsig.tistory.com

 

- 상단의 게시글을 참고하여 디바이스에서 프리다 서버를 백그라운드로 실행한다.

 

2.4. SSL 피닝 우회 실행

- SSL 피닝을 우회할 대상의 *패키지명을 확인한다. 보통 애플리케이션 명과 비슷하므로 쉽게 찾을 수 있다.

*X앱의 패키지명 : com.twitter.android

※ 패키지 명은 ps 명령어 또는 ls /data/data 에서 확인할 수 있다.

 

- 본문 상단에서 만든 SSL 피닝 우회 코드를 PC의 프리다 클라이언트에서 실행한다.

# 명령어 형식
frida -Uf [패키지명] -l [스크립트 경로] --no-pause

# 명령어 예제
frida -Uf com.twitter.android -l hagsig.js --no-pause

 

- X앱을 실행한 상태에서 위 명령어를 입력했다면, 앱이 재실행된다.

- 성공적으로 SSL 피닝 우회 코드가 실행되었다면 "SSLContext initialized with our custom TrustManager!" 문구가 출력된다.

 

- 버프스위트를 보면 이벤트 로그에 더 이상 에러 메시지가 나타나지 않고 웹 패킷을 정상적으로 캡처하는 것을 확인할 수 있다.

 

- 앱 실행 또는 메뉴 버튼 클릭 시에도 오류가 발생하지 않고 정상 동작하는 것을 확인할 수 있다.