본문 바로가기
정보보안(모바일 해킹)

모바일 해킹 - 2

by 끊임없는정진 2023. 3. 13.

▶ 모바일 앱 해킹

> 앱 서버 측 취약점 (Proxy 세팅 후 Burp와 연결)

> 단말기 취약점

 

▶ 앱~앱 서버(HTTPS통신)

Proxy세팅 -> 리스너 설정

Chrome -> 컴퓨터 프록시 설정 열기 -> 수동 프록시 설정 -> 127.0.0.1, 포트번호

HTTPS는 인증서도 필요! -> 단말기에 Burp 인증서 설치할 것!

But) SSL Pinning 때문에 이것만으로는 힘듦 (= "나는 이 인증서만 쓸거야!")

>> SSL Pinning Bypass : 앱이 코드적으로 검사

-> iOS의 경우 : tweak 설치 후 켜기

-> Android의 경우 : Frida로 우회

(이후는 웹 해킹과 동일!)

 

▶ 단말기 취약점

-- 사용자의 개인정보 단말기에 평문으로 저장

>> 파일

>> 메모리

 

▶ Rooting /Jailbreak

= 단말기의 최고 관리자 권한

루팅된 폰에 설치하고 실행 -> 내 폰에서는 실행이 안됨 -> 모바일 보안 솔루션 때문(루팅/탈옥 탐지) -> 난독화 또는 앱을 숨겨놓았음

따라서, 가장 먼저 

1. 모바일 보안 솔루션 벗겨진 것을 요구

2. 아니면 직접 우회해야 함.(2~3일 소요)

Q. 모바일 보안 솔루션 우회할 수 있을까?

-> A. 시간이 문제지 무조건 우회할 수 있음! (단말기 밖의 정보를 확인 후 루팅폰이면 차단하는 것이므로, 루트권한으로 다 차단할 수 있음.)

 

▶ Frida

동적으로 코드를 패치,수정,흐름을 제어 (=A로 갈걸 B로 가게 통제 가능)

함수 후킹? 코드 중에서 특정 함수의 이전 또는 이후에 임의의 함수를 넣을 수 있음.

즉, 보안 솔루션을 우회할 때로 따지면, rootcheck 함수를 후킹해서 "true"가 아니라 "false"를 반환하게 설정할 수 있음.

Frida의 구조는 A 앱 프로세스에 frida agent를 삽입하는 것.

 

▶ Frida 세팅

[1] 먼저, 컴퓨터에 프리다를 설치. (pip install frida)

[2] 그 다음에 버전을 확인. (frida --version) . 이후, Frida 깃헙 사이트에 가서 환경에 맞는 Server 파일을 설치

[3] 다음, adb로 스마트폰에 설치 (adb shell -> /data/local/tmp에 서버 파일 넣기)

[4] 실행하기

[5] 컴퓨터로 돌아와서, Frida -ps -U (스마트폰에 실행중인 프로세스 목록)

[6] python으로 frida inport 후 패키지 네임 입력 : ex. package_name="@@.@@@.@@@@@@"

[7] 실행 중 프로세스 번호를 알아낸 후, adb pull/~~ 로 파일 가져오면, 앱의 메모리 상태 확인 가능. (메모리 상태 중에서 ~~Frida-agent-32.so~~ 로 된 부분을 찾아내면 Frida 메모리 영역을 확인가능)

(※ getscript 함수로 js파일을 불러오는 식으로 관리할 수도 ex. python JSInjector.py --script script.js)

 

▶ Frida 사용 예시

[1]  제일 먼저 AndroidManifest.xml 부터 분석한다.

[2]  특정 함수가 실행되는데 해당 함수가 참이어야 다음 페이지로 넘어가는 것을 확인할 수 있음.

[3] 해당 함수(예시로 든 app에서는 VerfyUsernamePassword)를 후킹함 :

 

Java.perform(function(){

var verify_Class = Java.use('com.insecureshop.util.util');         : Package호출,         : Class접근                             

var verify_func = verify_class.verifyUserNamePassword;

verify_func.implementation = function(arg1, arg2){

return true;

}

})

 

분석 : 일단, Util 클래스 안에 verifyUserNamePassword 함수가 있으므로, 해당 클래스에 접근 후, 함수를 재정의한다.

결과 : 아무거나 입력해도 로그인이 우회되어 버린다!

 

댓글