주소공감 검증 (Validating address space)
(내용 상기) - stat() 함수로 탈옥 파일 존재여부 확인
탈옥 관련 파일 존재 여부 확인먼저 NSFileManager 클래스의 isFileAtPath: 등의 메소드와, stat(), fopen()과 같은 C언어 함수를 이용하여 탈옥 관련 파일이 있는 지를 검사했다.
이를 우회하는 가장 쉬운 방법은 검사하는 함수를 후킹하여, 탈옥관련 파일이더라도 정상파일의 반환값을 반환하도록 만들면 됐다.
그러면 관리자는 이를 한번 더 검증할 필요가 있다.
동적라이브러리 리스트 검사 (화이트박스, 블랙박스)DYLD_INSERT_LIBRARIES 환경변수 검사위와 같은 후킹 탐지 방법이 있었다.
하지만 stat() 함수의 후킹 여부를 판단하기 위한 아주 좋은 방법이 하나 더 있다.
여기선 그 방법을 다루고자 한다.
(본론) - stat() 함수가 후킹됐는지 추가 검사
아래의 함수와 구조체를 이용하여 유효한 주소인지 검증한다.
- dladdr() 함수
- Dl_info 구조체
- (void)isOK2 { // stat() 함수 또한 후킹됐을 가능성이 있다. // stat() 함수의 출처가 시스템 라이브러리가 아니라면, 공격자로부터 변경됐다는 뜻이다. int ret; Dl_info dylib_info; int (*func_stat)(const char *,struct stat *) = stat; if ((ret = dladdr(&func_stat, &dylib_info))) { NSLog(@"lib:%s",dylib_info.dli_fname); //라이브러리 이름 출력 // 시스템 라이브러리가 아니라면 100% 후킹임을 확신할 수 있다. // "/usr/lib/system/libsystem_kernel.dylib"와 동일한 경우만 통과. if (strcmp(dylib_info.dli_fname, "/usr/lib/system/libsystem_kernel.dylib")) { exit(0); } } }