본문 바로가기

ios 탈옥탐지6 - cydia scheme detection ios 탈옥탐지6 - cydia scheme detection 탈옥 시키면 Cydia는 기본적으로 설치한다. 물론 Cydia 경로를 탐지하는 경우 Cydia 경로를 바꿔버리면 그만이다. 하지만 Cydia의 URL scheme (cydia://) 까지 변경하는 일은 잘 없다. 따라서 cydia:// 스키마를 호출하는 것에 성공했다면 탈옥장치로 간주해볼 수 있다. 다만, 체크 함수에 후킹을 걸거나, 탐지 프로세스 중에 cydia를 잠깐 지우는 것도 우회 방법이 된다.
ios 탈옥탐지5 - 동적라이브러리 탐지 ios 탈옥탐지5 - 동적라이브러리 탐지 (추천) dyld 관련 함수들로 이상 동적라이브러리를 탐지한다. _dyld_image_count() _dyld_get_image_name() 위 같은 함수들로 현재 로드된 dylibs 개수와 이름 등을 조사하여 후킹 여부를 판단한다. 앱 자체 바이너리를 패치하지 않고는 일반적으로 후킹을 통해 탈옥탐지 로직을 우회하므로 효과적인 방법이 된다. 패치 자체가 dylib 삽입으로 진행되므로 공격자 입장에선 상당히 귀찮아진다.
ios 탈옥탐지4 - 루프백 테스트 (서비스 탐지) ios 탈옥탐지4 - 루프백 테스트 장치를 탈옥시키고 가장먼저 하는 행위가 Cydia 설치 및 OpenSSH 설치. 따라서 127.0.0.1:22 로 루프백 테스트 했을 때 정상 연결된다면 탈옥으로 간주할 수 있다. 다만 공격자 입장에서는 그냥 ssh 포트를 바꾸면 그만이다... 이외에도 탈옥장치에서는 정상장치에서 돌릴 수 없는 각종 서비스들도 돌릴 수 있다. 앞서 말한 ssh가 대표적인 예시이고, 이같은 방법으로 다른 서비스들도 탐지 목록에 추가하면 된다.
ios 탈옥탐지3 - system(0) (ios 11이후 사용불가) 탈옥탐지3 - system(0) system(0); 함수 호출 시 반환값을 보고 탈옥여부를 판단한다. /bin/sh가 있는지 여부에 따라서 return 값이 달라지므로 이걸 보고 판단하는 것. return 0 : 비탈옥장치 (정상장치) return 1 : 탈옥장치 예시코드(앱에 적용) +(BOOL)doShell{ if(system(0))//system(0) 호출결과를 보고 탈옥판단 return YES; return NO; } 우회코드(MobileSubstrate로 후킹) static int (*old_system)(char *) = NULL; int st_system(char* cmd){ if(!cmd) return nil; return old_system(cmd); } __attribute__((con..
ios 탈옥탐지2 - 파일시스템 검사 ios 탈옥탐지2 - 파일시스템 검사 1. 탈옥 관련 파일 존재 여부 확인 샌드박스된 앱도 샌드박스 외부에 존재하는 파일의 상태정도는 조회할 수 있다. ==> 대표적인 서드파티 앱과 탈옥 시 설치되는 다양한 파일들의 존재 여부를 확인하여 탈옥 상태를 판단한다. * 로우레벨의 C함수 사용 fopen(), stat(), access() * NSFileManager 클래스 fileExistsAtPath:, changeCurrentDirectoryPath: 메소드 등 ex) stat() 함수를 이용한 파일존재여부 판단 예시 //Cydia 설치여부를 확인하여 탈옥 감지 struct stat s; int is_jailbroken = stat("/Applications/Cydia.app", &s) == 0; ex) ..
ios 탈옥탐지1 - 샌드박스 무결성 검사 (잘못 알려진 내용) ios 탈옥탐지1 - 샌드박스 무결성 검사 (sandbox check) ios 앱 경로는 크게 두가지다. 1. 앱 샌드박스 내에 설치 기본적으로 서드파티 앱들은 신뢰할 수 없다고 가정하고 다양한 기능을 제한함. 2. 루트 파티션의 애플리케이션 폴더에 설치 ( /Applications ) 기본 탑재 앱은 샌드박스 없이 루트 경로 아래인 /Applications 에 설치된다. (샌드박스의 제한을 받지 않는다.) 물론 Cydia 등에서 받은 앱들도 웬만하면 굳이 샌드박스에 설치되지 않고 /Applications에 설치한다. 샌드박스 무결성 검사 ( "X" - 잘못 알려진 내용 ) 알려진 내용 : 샌드박스에선 fork()가 금지되므로, 제대로 동작했다면 샌드박스 제한을 받지 않는 상태다! --> 샌드박스 밖에 ..