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
반응형
'보안 > iOS보안' 카테고리의 다른 글
TheOS를 이용한 MobileSubstrate Tweak 빌드하기 (1) | 2023.02.25 |
---|---|
USB터널링을 통한 탈옥 아이폰 SSH 접속하기(with iproxy) (0) | 2023.02.25 |
iOS 탈옥 탐지 기법 몇 가지 (0) | 2022.12.14 |
iOS Local Data Storage 저장소 취약점 (0) | 2022.12.11 |
iOS 애플리케이션 디렉터리 구조 (1) | 2022.12.10 |
댓글