모바일 취약점 점검/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

     

    반응형