점검 방법
iOS 단말기 또한 Android와 비슷하게 앱 접근 시 탈옥 탐지 로직이 구현되어 앱 접근이 정상적으로 되지 않으면 양호한 것으로 본다.
iOS 단말기의 경우 보통 탈옥 탐지 로직이 존재하면 우회하기가 Android에 비해 어렵다.
탈옥 탐지 로직이 존재할 경우 아래의 2가지 방식을 통해 우회를 할 수 있다.
1. 디컴파일러를 통한 우회
Ghidra, IDA 등의 툴을 활용하여 탈옥 탐지 로직을 확인하고 해당 함수의 분기 위치를 확인해서 함수 인자값을 반대로 변경하여 우회할 수 있다.
이처럼 Jailbroken과 같은 문자열을 검색하면 탈옥 탐지 코드를 확인할 수 있다.
해당 함수를 확인하고 나면 탈옥 탐지 부분으로 분기되는 함수 위치를 확인하고 인자 값을 변조하면 우회가 가능할 수 있다. 보통 이 방법은 쉽지 않으므로 2번째 방법인 Frida를 주로 이용한다.
2. Frida를 사용한 우회
Frida는 기본적으로 안드로이드와 우회 방법이 유사하지만 Frida Script 코드의 수정이 필요할 수 있다. Frida CodeShare에 가면 기본적으로 탈옥 탐지 우회가 가능한 코드가 공개되어 있다.
Frida CodeShare Jalibreak Bypass - https://codeshare.frida.re/@liangxiaoyi1024/ios-jailbreak-detection-bypass/
코드를 보면 iOS도 마찬가지로 /bin/su, /bin/bash 등을 포함하여 iOS 탈옥 시 발견되는 파일인 /Applications/Cydia 등의 파일을 우회하는 것을 확인할 수 있다.
대응 방안
1. File-based Checking
탈옥 관련 파일에는 /Applications/Cydia.app, /bin/bash, /usr/sbin/frida-server 등이 존재하는데
이러한 파일의 존재 여부를 확인하는 방식으로 진행한다.
2. /private 디렉터리 권한 확인
※ Swift
do {
let pathToFileInRestrictedDirectory = "/private/jailbreak.txt"
try "This is a test.".write(toFile: pathToFileInRestrictedDirectory, atomically: true, encoding: String.Encoding.utf8)
try FileManager.default.removeItem(atPath: pathToFileInRestrictedDirectory)
// 탈옥된 디바이스입니다. 출력
} catch {
// 정상 디바이스입니다. 출력
}
※ Objective-C
NSError *error;
NSString *stringToBeWritten = @"This is a test.";
[stringToBeWritten writeToFile:@"/private/jailbreak.txt" atomically:YES
encoding:NSUTF8StringEncoding error:&error];
if(error==nil){
// 탈옥된 디바이스입니다. 출력
return YES;
} else {
// 정상 디바이스입니다. 출력
[[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil];
}
위 코드와 같이 /private 디렉터리의 권한을 Check하여 탈옥 여부를 검증할 수 있다.
3. 프로토콜 핸들러 확인 로직 추가
※ Swift
if let url = URL(string: "cydia://package/com.example.package"), UIApplication.shared.canOpenURL(url) {
// 탈옥된 디바이스입니다. 출력
}
※ Objective-C
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]){
// 탈옥된 디바이스입니다. 출력
}
프로토콜 핸들러를 확인하는 로직을 추가하여 대응하는 방안도 존재한다.
'4. 모바일 앱 취약점 진단 > iOS' 카테고리의 다른 글
앱 소스코드 내 중요 정보가 노출되는 경우 (0) | 2024.07.17 |
---|---|
Zadig 같은 툴을 잘못 사용하여 iOS 아이폰 단말기 USB 인식이 안될때 해결법! (0) | 2024.07.15 |
iOS 15~17 이상 버전 탈옥하기 - Winra1n, Palera1n (3) | 2024.07.09 |
[iOS] 1.1. 소스코드 난독화 및 암호화 취약점 (0) | 2024.06.19 |
[iOS] IPA 추출하기 (0) | 2024.06.19 |