[iOS App 진단] 12강 - 탈옥 탐지 우회(실습 2)

2023. 10. 15. 14:05·Mobile App 취약점 진단 · 모의해킹/iOS App 취약점 진단 · 모의해킹
728x90
반응형

가. 탈옥(Jailbreak) 이란?

- iOS의 샌드박스 제한을 풀어 서명되지 않은 코드를 모바일 디바이스에서 실행되게 하도록 하는 것을 말함.

- 탈옥된 기기에서의 사용자는 최고 권한을 얻기 때문에 앱(App)을 분해하여 정밀분석할 수 있고, 분석한 내용을 토대로 보안기능을 우회할 수 있음.
- 보안기능이 우회될 경우 모바일 디바이스에 저장된 사용자 개인정보뿐만 아니라 시스템 접근 권한까지 획득할 수도 있음.

 

나. 대응방법

- 아래의 글을 참고하여 탈옥된 디바이스에서 앱이 실행되지 않게 하고, 탈옥 탐지기능을 우회할 수 없도록 디버깅을 방지하는 기능을 적용한다.

[Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 12강 - 탈옥 탐지 우회(이론 및 대응방법)

 

[iOS App 진단] 12강 - 탈옥 탐지 우회(이론 및 대응방법)

가. 탈옥(Jailbreak) 이란? iOS의 샌드박스 제한을 풀어 서명되지 않은 코드를 실행할 수 있게 하는 것을 말함. 나. 탈옥된 기기에서 앱 실행을 차단해야하는 이유 탈옥된 기기에서의 사용자는 최고

hagsig.tistory.com

 

다. DVIA-v2 앱을 통한 실습

1. 분석 대상 앱 실행

- 탈옥탐지 우회 실습을 위해 DVIA-v2 앱을 실행한다.

 

※ DVIA-v2 어플이 설치되어있지 않은 사람은 아래의 글을 참고하여 앱을 설치하길 바란다.

2022.07.01 - [Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 04강 - 진단 대상 설치

 

[iOS App 진단] 04강 - 진단 대상 설치

iOS 앱 진단을 위해 설치 파일을 요청하면, 대개 아래 3가지 방법 중에 하나의 방법으로 전달해준다. 1. 앱 스토어를 통해 설치 이미 앱 개발이 완료되어 앱스토어에 등록되어 있을 경우, 앱스토어

hagsig.tistory.com

 

- 메인메뉴 좌측 상단 메뉴 클릭 → Jailbreak Detection 클릭 → Jailbreak Test 2 클릭

- 현재 탈옥된 기기를 사용하고 있다는 "Device is Jailbroken" 메시지가 출력된다.

- 본글에서는 탈옥된 기기를 사용하더라도 위 메시지가 출력되지 않도록 탈옥탐지 기능을 우회해 볼 것이다.

 

2. 탈옥 탐지 메소드 탐색

- 분석하고자 하는 앱이 사용하는 클래스를 확인하기 위해 아래와 같은 자바스크립트 코드를 PC에서 작성한다.

- 파일 명 : hagsig_jailbreak1.js

* 메모장에 아래의 코드를 입력한 뒤 확장자명을 .js로 저장하면 자바스크립트 파일이 만들어진다.

if(ObjC.available){ //대상이 연결이 되어져 코드실행이 가능한 환경인지 확인
	for(var classname in ObjC.classes) //메모리에 올라가있는 클래스를 가져온다
		console.log(classname) //가져온 클래스의 이름을 출력한다
}

※ 위 코드를 좀 더 자세히 공부하고 싶다면 아래의 게시글을 참고하여 프리다 문법을 공부하도록 하자.

2023.10.03 - [Mobile App 취약점 진단/iOS App 진단] - 프리다(Frida) 문법 정리

 

프리다(Frida) 문법 정리

가. 기초 문법 1. ObjC.available - 현재 프로세스에 Objective-C 런타임이 로드되었는지 여부를 지정하는 Boolean(True, False) - 해당 앱에서 FIRDA가 실행가능한 환경인지 체크 2. ObjC.classes - 현재 등록된 클래

hagsig.tistory.com

 

- PC의 프리다 클라이언트를 이용하여 탈옥탐지 기능을 우회하고자 하는 앱의 이름을 알아낸다.

- 명령어 : frida-ps -Ua

* 앱의 이름 : DVIA-v2

frida-ps -Ua
// U : USB로 연결된 기기를 대상으로 지정한다.
// a : 기기에 설치된 애플리케이션을 확인해준다.

 

- PC의 프리다 클라이언트를 이용하여 작성한 코드를 실행한다.

- 명령어 : frida -U -l [코드경로] [앱이름]

frida -U -l hagsig_jailbreak1.js DVIA-v2

- 명령어 실행 시 앱에 포함된 모든 클래스가 출력된다.

 

- 출력된 결과가 너무 많아 확인하기가 어렵다.

- 아래의 명령어를 사용하여 클래스중에 jailbreak와 관련된 클래스가 있는지 확인한다.

* 실무에서는 클래스 이름을 jailbreak로 하지 않았을 확률이 크므로, 결과가 나오지 않을 수도 있다. 바이너리 파일을 분석하여 추측해 내거나, 탈옥탐지 시 출력되는 문자열등을 가지고 클래스 명을 추측해 내야한다.

* DVIA-v2.JailbreakDetectionViewController는 화면 출력과 관련된 View Controller 부분이므로 무시한다.

- 명령어 : frida -U -l [코드경로] [앱이름] | find "[검색하고자 하는 클래스 이름]"

frida -U -l hagsig_jailbreak1.js DVIA-v2 | find /i "jail"

※ 코드를 중지시키기 위해서는 분석대상인 앱(DVIA-v2)을 디바이스에서 종료시키면 된다. 

 

- 위에서 찾아낸 JailbreakDetection 클래스가 어떤 메소드를 사용하는 알기위해 아래의 코드를 작성한 뒤 실행한다.

* Objective-C로 이루어진 코드는 프리다로 통해서 메소드가 검색이 되지만, 스위프트로 이루어진 코드는 메소드 검색이 안된다.

if(ObjC.available){
	var classname = "JailbreakDetection" //분석하고자 하는 클래스 이름을 지정한다
	var methods = ObjC.classes[classname].$ownMethods //클래스가 가지고 있는 기본 메소드를 배열 형식으로 가져온다
	console.log(methods) //가져온 메소드정보를 출력한다
}

 

- 명령어 : frida -U -l [코드경로] [앱이름]

frida -U -l hagsig_jailbreak1.js DVIA-v2

- 명령어 실행 시 JailbreakDetection 클래스에서 사용하는 메소드가 출력된다.

- 메소드가 하나밖에 출력이 안되었고 메소드 이름도 탈옥탐지를 하는 기능을 가졌을 것으로 의심이 된다.

* + 는 클래스에 대한 메소드를, - 는 인스턴스에 대한 메소드를 뜻함.

 

3. 탈옥 탐지 메소드 반환값 변조

- 실제로 isJailbroken이라는 메소드가 탈옥탐지를 하는 기능을 하는지 알아보고 위해 아래의 코드를 작성한다.

if(ObjC.available){
	var classname = "JailbreakDetection"
	var methodname = "isJailbroken" //메소드 이름을 변수에 저장한다
	var hook = ObjC.classes[classname][methodname] //클래스명과, 메소드명을 배열형식으로 넣어준다.
    
	Interceptor.attach(hook.implementation,{ //탈취하기위해 준비, implementation : 해당 메소드를 실행한다.
    	onLeave:function(retval){ //반환값을 확인하기 위해 사용.
			console.log("[*] Class Name : " + classname) //클래스명 출력
			console.log("[*] Method Name : " + methodname) //메소드명 출력
			console.log("[*] Type of return value : " + hook.returnType) //반환대는 값의 형식을 출력한다.
			console.log("[*] Return Value : " + retval) //반환값을 출력한다.
		}
	})
}

 

- 앱에서  Jailbreak Test 2 버튼 클릭 시 반환값이 출력된다.

- 반환값은 참과 거짓을 판별할 때 사용하는 변수 bool 이며, 0x1(True)가 반환되는 것을 알 수 있다.

 

- 반환값 0x1을 0x0으로 변조할 경우 탈옥탐지를 우회할 수 있을 것 같으므로 아래의 코드를 작성한다.

* 변조하고자 하는 값을 포인터 형식(ptr)으로 생성해야 한다. 그래야지만 메모리에 올라가서 값을 불러와줄 수 있기 때문이다.

if(ObjC.available){
	var classname = "JailbreakDetection"
	var methodname = "isJailbroken"
	var hook = ObjC.classes[classname][methodname]
    
	Interceptor.attach(hook.implementation,{
    	onLeave:function(retval){
			console.log("[*] Class Name : " + classname)
			console.log("[*] Method Name : " + methodname)
			console.log("[*] Type of return value : " + hook.returnType)
			console.log("[*] Return Value : " + retval)

			var new_retval = ptr("0x0") //변조하고자 하는 값을 변수에 저장
			retval.replace(new_retval) //변수에 저장한 값으로 반환값을 변조
			console.log("[*] New Return Value : " + retval) //변조된 반환값을 출력
		}
	})
}

 

- 자바스크립트 파일을 실행한 뒤 Jailbreak Test 2 버튼을 클릭한다.

- "Device is Not Jailbroken"이라는 메시지가 출력되며 탈옥탐지 기능을 우회한 것을 확인할 수 있다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Mobile App 취약점 진단 · 모의해킹 > iOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글

[iOS App 진단] 12강 - 탈옥 탐지 우회(실습4)  (0) 2023.10.18
[iOS App 진단] 12강 - 탈옥 탐지 우회(실습3)  (0) 2023.10.17
[iOS App 진단] 12강 - 탈옥 탐지 우회(실습1)  (0) 2023.10.15
iOS 애플리케이션 무결성 점검 및 대응 방법(앱 위변조 대응)  (0) 2023.10.07
[iOS App 진단] 12강 - 탈옥 탐지 우회(이론 및 대응방법)  (0) 2023.10.03
'Mobile App 취약점 진단 · 모의해킹/iOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
  • [iOS App 진단] 12강 - 탈옥 탐지 우회(실습4)
  • [iOS App 진단] 12강 - 탈옥 탐지 우회(실습3)
  • [iOS App 진단] 12강 - 탈옥 탐지 우회(실습1)
  • iOS 애플리케이션 무결성 점검 및 대응 방법(앱 위변조 대응)
학식(hagsig)
학식(hagsig)
정보보안을 배우고자 하는 모든 이들의 식당입니다. 모의해킹, 취약점 진단, 서버, 네트워크, 프로그래밍 등등 다양한 분야를 배우실 수 있습니다.
  • 학식(hagsig)
    학식 - 정보보안 전문 블로그
    학식(hagsig)
  • 전체
    오늘
    어제
  • 공지사항

    • 게시된 정보를 악용하여 발생하는 모든 책임은 사용자에게 있⋯
    • 무단 전재 및 재배포를 금지합니다.
    • 분류 전체보기 (299)
      • 교육정보 (15)
        • IT국비지원 (12)
        • 기업면접코칭 (3)
      • 인프라 취약점 진단 · 모의해킹 (24)
        • 윈도우 서버 진단 · 모의해킹 (22)
        • 리눅스 서버 진단 · 모의해킹 (2)
      • Mobile App 취약점 진단 · 모의해킹 (98)
        • AOS App 취약점 진단 · 모의해킹 (40)
        • iOS App 취약점 진단 · 모의해킹 (58)
      • 웹 취약점 진단 · 모의해킹 (2)
      • 클라우드 취약점 진단 · 모의해킹 (4)
        • AWS 취약점 진단 · 모의해킹 (0)
        • 컨테이너 보안 (4)
      • CS App 취약점 진단 · 모의해킹 (8)
      • AI 취약점진단 · 모의해킹 (8)
      • 산업 제어 시스템 진단 · 모의해킹 (0)
      • 침해 사고 대응 (15)
      • 디지털 포렌식 (2)
      • 자체개발 프로그램 (1)
        • TLS Security Checker (1)
      • IT 자격증 (26)
        • AWS 자격증 (11)
      • 프로그램 사용방법 (14)
      • 리눅스 (1)
      • 파이썬 (12)
      • 오류 해결 (2)
      • 잡학 지식 (41)
      • 코로나19 (12)
      • 학식 일상 (11)
        • 사진 (1)
        • 음악 (6)
        • 가게 정보 (3)
      • 제품 리뷰 (2)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
학식(hagsig)
[iOS App 진단] 12강 - 탈옥 탐지 우회(실습 2)
상단으로

티스토리툴바