APP 진단/iOS

7. Jailbreak Detection 1 - 환경설정 (기드라/프리다)

takudaddy 2022. 11. 15. 01:18

 

 

 

[목차]

 

 

1. 개요

- File-based Checks (파일 기반 탐지)

- Checking File Permissions (파일 권한 탐지)

- Checking Protocol Handlers (cydia 프로토콜 핸들러 체크)

- Calling System APIs (시스템 API 호출 체크)

 

2. 우회 실습 환경 설정

- 도구 설명 (Ghidra & Frida)

- 도구 설치 (기드라 & 프리다)

 

 

 


 

 

1. 개요

 

 

# 대표적 4가지 탐지 기법

  • 파일 기반 탐지
  • 파일 권한 탐지
  • cydia 프로토콜 핸들러 체크
  • 시스템 API 호출 체크

 

* 이 외 기법은 추후에 별도로 업데이트 예정

 

 

 

 

 

 

1-1) File-based Checks (파일 기반 탐지)

 

 

  • 특정 경로 내 특정 앱이 존재하는가?
  • 쉘 (/bin/bash, /bin/sh) 실행 및 파일이 존재하는가?
  • 특정 경로 접근이 가능한가?

 


 

 

1-2) Checking File Permissions (권한 기반 탐지)

 

 

  • 샌드박스 외부에 파일 생성이 가능한가?

: 샘플 코드 (/private 디렉터리에 파일 생성이 가능한가?)

NSError *error;
NSString *stringToBeWritten = @"This is a test.";
[stringToBeWritten writeToFile:@"/private/jailbreak.txt" atomically:YES
encoding:NSUTF8StringEncoding error:&error];
if(error==nil){
//Device is jailbroken
return YES;
} else {
//Device is not jailbroken
[[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil];
}
 

 


 

 

1-3) Checking Protocol Handlers (프로토콜 핸들러 기반 탐지)

 

  • cydia url을 열어 cydia 프로토콜 핸들러를 통해 트윅 설치가 가능한가?

: 샘플 코드

if([[UIApplication sharedApplication] canOpenURL
:[NSURL URLWithString:@"cydia://package/com.example.package"]]){
 

 


 

 

1-4) Calling System APIs (시스템 API 호출 기반 탐지)

 

 

 


 

 

2. 우회 실습 환경 설정

본 실습에서 탈옥 탐지 우회는 두 단계로 나눠서 진행함

 

 

2-1) 도구 설명

ㄱ. 기드라 (GHIDRA)

– 기드라(Ghidra)는 미국 국가 안보국(NSA)에서 개발한 디스어셈블러 프레임워크

– 2019년 3월 6일 RSA 컨퍼런스에서 기드라를 발표, 오픈소스이고 자바로 개발됨

– 리버스 엔지니어링 시장에서 유명한 IDA Pro를 대신하여 사용할 수 있는 무료 오픈소스 프로젝트

 

- disassemble이 가능한 도구로 탈옥 탐지 로직을 파악하는데 사용 (IDA 대용품)

- 기드라 만으로도 탈옥 탐지 우회가 가능하나 바이너리를 수정해야 하는 다소 복잡한 부분 때문에

본 실습에서는 다루지 않고 추후 '바이너리 패치' 취약점 등에서 설명

 

 

 

 

 

ㄴ. 프리다 (FRIDA)

– 프리다는 오픈 소스로, DBI(Dynamic Binary Instrumentation) 프레임 워크

- Instrumentation이란?

: 앱이 실행 중인 상태에서 코드 명령어를 삽입해 프로세스를 추적, 분석, 디버깅하는 도구

: wikipedia 설명

> In the context of computer programming, instrumentation refers to an ability to monitor or

measure the level of a product's performance, to diagnose errors, and to

write trace information. Programmers implement instrumentation in the form of

code instructions that monitor specific components in a system (for example, instructions

may output logging information to appear on the screen).

> 컴퓨터 프로그래밍의 맥락에서 instrumentation은 제품의 성능 수준을 모니터링 또는 측정하고 오류

를 진단하고, 추적 정보를 작성하는 능력을 말한다. 프로그래머는 시스템의 특정 구성요소를 모니터하

는 코드 명령어 형태로 instrumentation을 구현한다. (예를 들어 명령어가 화면에 나타나는 로깅 정

보를 출력할 수 있다.)

 

– 다양한 플랫폼에서 프로세스에 대한 인젝션이 가능해 큰 확장성을 가짐

– 윈도우, 맥OS, GNU/Linux, iOS, Android 및 QNX에서 자바스크립트를 네이티브 앱에 삽입 가능

 

 

 

# 프리다 특징

– Scriptable (스크립트 가능)

• 사용자 정의 스크립트를 Black box 프로세스에 주입하여 사용자 정의 디버깅 로직을 실행 가능

• 소스 코드가 없어도 암호화 API를 감시하거나 애플리케이션 코드를 추적할 수 있음

: 난독화된 대상의 경우 시간이 매우 오래 걸리거나 불가능

 

– Multi-platform (멀티 플랫폼)

• 윈도우, 맥OS, GNU/Linux, iOS, Android 및 QNX에서 작동

 

– Battle-tested

• 종합적인 test-suite를 가지고 있고 광범위한 사용 사례에서 수년간의 엄격한 테스트를 거침

: test-suite은 테스트 케이스 모음집 (유효성 검증)

 

– Free and open-source (무료 및 오픈소스)

• 프리다는 항상 무료 소프트웨어

 

 

 

# 프리다 주요 기능

– AppMon과 Needle 등의 도구에서 프리다를 기반으로 사용

• AppMon : 맥OS, Ios 및 Android에서 기본 앱의 시스템 API 호출을 모니터링하고 변경하는 자동화된 프레임워크

• Needle : iOS 앱의 보안 평가 프로세스를 간소화하는 오픈 소스 모듈식 프레임워크로 안드로이드 드로저와 비슷

 

– 함수 후킹 (특정 함수에 연결하여 반환 값 변경, 함수 재작성 등)

– 애플리케이션 디버깅 가능 (로직 파악)

– 힙 메모리 내 객체 인스턴스 검색 및 사용 (메모리 주소 부분 활용)

– 실시간 트래픽 스니핑 또는 암호 해독

– 탈옥 또는 루팅되지 않은 단말기에서도 사용 가능

 

- 간단히 기드라에서 파악된 탈옥 탐지 로직을 우회하는데 사용

 

 

 

# 프리다 동작 로직(방식)

프로세스에 Java Script 코드 삽입이 어떻게 가능한지 확인해보면

 

1) 프리다 프로세스는 bootstrapper라는 코드를 대상 프로세스 메모리에 올린다.

 

 

2) bootstrapper를 실행하기 위해 대상의 기존 스레드를 가로챈다.

(타깃의 스레드가 부트스트랩퍼를 가로챈 후 부트스트랩퍼 코드를 실행함)

 

 

3) bootstrapper는 frida-agent.so를 대상의 메모리 공간에 로드한다.

(부트스트랩퍼 코드가 실행되면 frida-agent.so 라는 파일리 타깃에 올라감)

 

 

 

4) frida-agent.so는 프리다(Debugger)와 대상(Debugee) 사이에 양방향 채널을 생성한다.

 

 

 

5) frida-agent.so는 자체 스레드를 설정하고 프리다(Debugger)의

instrumentation 스크립트를 승인함

 


 

 

 

2-2) 도구 설치

 

ㄱ. 기드라 (GHIDRA)

– 기드라(Ghidra)는 미국 국가 안보국(NSA)에서 개발한 디스어셈블러 프레임워크

– 2019년 3월 6일 RSA 컨퍼런스에서 기드라를 발표, 오픈소스이고 자바로 개발됨

– 리버스 엔지니어링 시장에서 유명한 IDA Pro를 대신하여 사용할 수 있는 무료 오픈소스 프로젝트

 

1) 기드라 다운

https://github.com/NationalSecurityAgency/ghidra/releases

 

 

2) 압축 해제 후 batch 파일 실행

 

 

3) Java 설치

특정 Java 버전이 설치되어 있지 않은 경우 다음과 같은 화면이 출력되는데

해당 자바 설치 후 JDK 홈 디렉터리 경로 넣어주면 된다.

 

자바(JDK 17 버전 이상 필요) 런타임 다운 경로 :

https://www.oracle.com/java/technologies/downloads/#jdk19-windows

 

 

4) 설치된 자바 경로 붙여넣기

예) C:\Program Files\Java\jdk-19

 

5) 정상 설치 됨

 

프로젝트 생성 해주면 기본 설정 끝

 

 

 

 

 

 

ㄴ. 프리다 (FRIDA)

 

1) 아나콘다(파이썬) 설치 - 선택 사항 (필수아님)

• 프리다는 파이썬 기반 프로그램으로 파이썬 라이브러리를 사용

• 아나콘다의 콘다를 이용해 독립된 파이썬 실행환경 구축 가능

https://www.anaconda.com/products/distribution#download-section

 

- 아나콘다 설치 전 이미 파이썬이 설치되어 있는 경우 반드시 제거 할 것!

(아나콘다 패키지에 파이썬이 포함되어 있어 같이 설치되는 경우 환경변수 꼬임)

- 설치 시 환경변수 설정 반드시 해줄것!

 

 

- 정상 설치된 후 확인

[참고] 편리한 터미널 환경 추천 conemu

https://conemu.github.io/

 

 

 

- 콘다 가상환경 생성

$ conda create -n takudaddy_ios python=3.9 -y
 

 

 

- 생성한 가상환경 활성화/비활성화/삭제

# 활성화
$ conda activate takudaddy_ios

# 비활성화
$ conda deactivate

# 구축한 가상환경 삭제
conda env remove --n takudaddy_ios
 

 

 

 

2) 프리다 설치 (콘다 가상환경 위)

$ pip install frida-tools
 

 

 

3) 프리다 서버 설치 (아이폰 - 방법은 두 가지)

- Cydia 에서 설치 (http://build.frida.re/)

- 깃헙에서 받아 직접 https://github.com/frida/frida/releases

 

# Cydia 설치 방법

a. 프리다 소스 추가

 

b. 프리다 서버 검색 후 설치

 

 

 

 

4) 프리다 연결 확인

$ frida-ps -U (ps = process / U = USB)
 

 

  • 추가 기본 명령어
$ frdia-ps -Ua (Ua = 현재 실행중인 앱만 출력 - 번들 아이디 쉽게 확인 가능)
 

 

정상 설치 및 연결 완료!

 

 
 
 
 
 
 
 

# 내용 및 일부 이미지 출처

: 보안프로젝트 김태영 팀장 iOS 모바일 앱 모의해킹(기초) 강의 PDF

 

 

728x90