본문 바로가기
보안/iOS보안

iOS 탈옥 탐지 대응 방안

by lucidmaj7 2022. 12. 18.
728x90
반응형

 

ptrace

  • ptrace함수를 사용해 프로세스에 디버거를 attach하는 것을 방지 할 수 있음.
  • iOS는 XNU 커널 기반으로 ptrace 시스템 콜 구현
  • ptrace는 공개 API가 아니기 때문에 App Store에서 등록을 거부 할 수 있음
  • dlsym을 통해 동적로드 호출 
#import <dlfcn.h>
#import <sys/types.h>
#import <stdio.h>

typedef int (*ptrace_ptr_t)(int _req, pid_t _pid, caddr_t _addr, int_ data);

void anti_debug() { 
	ptrace_ptr_t ptrace_ptr = (ptrace_ptr_t)dlsym(RTLD_SELF, "ptrace");
    ptrace_ptr(31,0,0,0); // PTRACE_DENY_ATTACH = 31
}

 

sysctl

  • sysctl 함수는 시스템 정보를 검색하고 적절한 구너한을 가진 프로세스가 시스템 정보를 설정하도록 함.
  • 연결된 디버거를 탐지함
  • P_TRACED 플래그가 활성화 되면 디버깅이라고 판단
#include <assert.h>
#include <stdbool.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/sysctl.h>

bool IsDebugged() {
	int mib[4];
    struct kinfo_proc info;
    size_t size;
    
    info.kp_proc.p_flag =0;
    mib[0] = CTL_KERN;
    mib[1] = KERN_PROC;
    mib[2] = KERN_PROC_PID;
    mib[3] = getpid();
    
    size = sizeof(info);
    junk = sysctl(mib, sizeof(mib)/sizeof(*mib), &info, &size, NULL, 0);
    assert(junk == 0);
    
    return ((info.kb_proc.p_flag & P_PTRACE)!=0);
    
}

 

프리다 Artefacts 탐지

  • 프리다 서버 프로세스는 기본적으로 TCP 27047 포트에 바인딩 됨.
  • 프리타 관련 로드된 라이브러리 목록 탐지(frida-gadget*.so / frida-aget*.so 등)
  • 디버깅에 사용되는 파일 검사(frida-server 등)
  • D-Bus 프로토콜을 사용하여 통신하므로 열린 포트에 D-Bus AUTH메시지를 전송하여 응답 확인
728x90
반응형

댓글