모바일 취약점 점검/iOS

[iOS] OS변조(탈옥) 탐지 코드

서쪽곰 2023. 5. 15. 16:43

 

아이폰 탈옥

탈옥은 Apple이 iOS 운영 체제에 부과한 소프트웨어 제한을 제거하는 과정으로, 사용자가 장치에 대한 루트 액세스 권한을 얻고 공식 App Store를 통해 사용할 수 없는 앱 및 조정을 설치할 수 있습니다.

탈옥은 일반적으로 iOS 운영 체제의 보안 취약점을 악용하여 보안 조치를 우회하여 사용자가 일반적으로 제한되는 시스템 파일 및 설정에 액세스할 수 있도록 합니다. 장치가 탈옥되면 사용자는 타사 소스에서 앱을 설치하고, 장치의 모양과 기능을 사용자 지정하고, 사전 설치된 앱 및 Apple에서 부과한 기타 제한 사항을 제거할 수 있습니다.

탈옥은 더 넓은 범위의 앱에 대한 액세스 및 조정, 개인 취향에 맞게 장치를 사용자 정의하는 기능, 탈옥되지 않은 장치에서는 불가능한 고급 작업을 수행하는 기능과 같은 여러 가지 이점을 제공할 수 있습니다.

그러나 탈옥은 잠재적으로 악성 앱이 장치에 설치되도록 허용하고 운영 체제의 보안 및 안정성을 손상시킬 수 있으므로 보안 위험을 초래할 수도 있습니다. 탈옥은 또한 기기의 보증을 무효화하여 Apple 또는 공인 서비스 제공업체로부터 지원을 받기 어렵게 만들 수 있습니다.

탈옥은 관련된 위험을 이해하고 iOS 운영 체제를 잘 이해하는 숙련된 사용자만 시도해야 한다는 점에 유의하는 것이 중요합니다. 또한 탈옥은 모든 관할권에서 합법적이지 않을 수 있으므로 사용자는 기기 탈옥을 시도하기 전에 법을 위반하지 않는지 확인해야 합니다.

 

탈옥 탐지 코드

    func isJailbroken() -> Bool {
        // 시뮬레이터인 인지 확인
        #if targetEnvironment(simulator)
        return false
        #else
        
        // 탈옥된 장치에서 일반적으로 발견되는 파일이나 디렉토리 확인
        let fileManager = FileManager.default
        let jailbreakFilePaths = ["/Applications/Cydia.app",
                                  "/Library/MobileSubstrate/MobileSubstrate.dylib",
                                  "/bin/bash",
                                  "/usr/sbin/sshd",
                                  "/etc/apt",
                                  "/usr/bin/ssh",
                                  "/private/var/lib/apt"]
        for path in jailbreakFilePaths {
            if fileManager.fileExists(atPath: path) {
                return true
            }
        }
        
        // 탈옥된 환경에서만 접근 가능한 cydia 접근 시도
        let cydiaUrlScheme = URL(string: "cydia://package/com.example.package")
        if UIApplication.shared.canOpenURL(cydiaUrlScheme!) {
            return true
        }
        
        // 테스트 파일을 개인 디렉토리에 쓴 다음 즉시 삭제하려고 시도
        let path = "/private/" + UUID().uuidString
        do {
            try "test".write(toFile: path, atomically: true, encoding: .utf8)
            try fileManager.removeItem(atPath: path)
            return true
        } catch {
            return false
        }
        
        // 쓰기 전용 디렉토리에서 읽기 모드에서 파일을 열 수 있는지 확인
        var file = fopen("/bin/bash", "r")
        if file != nil {
            fclose(file)
            return true
        }
        
        return false
        #endif
    }

소스코드 순서대로 아래의 4가지 경우를 확인하여 탈옥되었는지 확인

1) 탈옥된 장치에서 일반적으로 발견되는 파일이나 디렉토리 확인

2) 탈옥된 환경에서만 접근 가능한 cydia URL 접근 시도

3) 테스트 파일을 개인 디렉토리에 쓴 다음 즉시 삭제하려고 시도

4) 쓰기 전용 디렉토리에서 읽기 모드에서 파일을 열 수 있는지 확인

 

2023.05.15 - [보안/모바일 취약점 점검] - [Android, iOS] OS변조(루팅/탈옥), 무결성 검증, 디버깅 탐지 프로젝트 파일

 

[Android, iOS] OS변조(루팅/탈옥), 무결성 검증, 디버깅 탐지 프로젝트 파일

1. 프로젝트 실행결과 Android_Integrity.zip - Android 프로젝트 파일 iOS_Integrity.zip - iOS 프로젝트 파일 Integrity.apk - Android 프로젝트 빌드 파일 Integrity.ipa - iOS 프로젝트 빌드 파일 1) Android Android 프로젝트

seo-security.tistory.com

 

반응형