[목차]
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라는 코드를 대상 프로세스 메모리에 올린다.
https://www.slideshare.net/nowsecure/what-attackers-know-about-yourmobile-apps-that-you-dont-banking-fintech
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
'APP 진단 > iOS' 카테고리의 다른 글
9. Jailbreak Detection 3 - 탈옥 탐지 우회 실습 1 (2) | 2022.11.16 |
---|---|
8. Jailbreak Detection 2 - 프리다 기초 문법 (0) | 2022.11.15 |
6. DVIA 앱 진단 (1) - Local Data Storage (0) | 2022.11.06 |
5. 취약한 애플리케이션 환경 구성 (DVIA-v2) (0) | 2022.11.05 |
4. iOS 애플리케이션 구조 (1) | 2022.11.01 |