ptrace Anti_Debugging

2018. 3. 10. 12:040x03 Reversing Theory

728x90

linux나 unix 등에서는 ptrace 시스템 콜을 사용해 프로그램을 분석, 디버깅, 리버스 엔지니어링, 수정 작업을 할 수 있음.


ptrace는 프로세스에 접근해 코드, 데이터, 스택, 힙, 레지스터 등에 접근 가능. 사용자 레벨에서 프로세스 주소 공간에 접근한다.


즉, 누군가가 process에 attach하여 소유하고, 수정, 분석, 디버깅 등을 할 수 있다.

process image 분석 및 code injection (PTRACE_POKETEXT 사용)도 가능하다.

gdb, strace, ltrace 등은 모두 내부적으로 ptrace 사용 


ptrace는 안티 디버깅에 사용될 수 있다. 


PTRACE_TRACEME 사용. 즉 자기자신 프로세스를 추적하도록 하는 것. 


동시에 특정 프로세스를 trace하는 tracer는 오직 한 개이기 때문. 


코드를 통해 공부를 해보자.


디버거가 존재하지 않는다면 PTRACE_TRACEME가 성공하고, 자기 자신을 trace하려는 다른 디버거들은 모두 실패하게 된다.


if (ptrace(PTRACE_TRACEME, 0) <0)

{

printf("this process is being traced!!\n");

exit(1);

}


LD_PRELOAD를 이용해 ptrace 자체를 hooking 하면 안티디버깅을 해제할 수 있게 된다 .

이를 방지하기 위해서는 libc의 ptrace를 사용하지 않고, 직접 target machine에 맞는 ptrace를 작성하여 사용하면 LD_PRELOAD를 이용한 ptrace hoocking에 대비할 수 있다고 한다.




'0x03 Reversing Theory' 카테고리의 다른 글

Windows_API_Hookcing CodeInjection  (0) 2018.03.11
Windows API Hooking _ ReadProcessMemory  (0) 2018.03.11
WinDBG 사용법에 대해 공부  (0) 2018.02.24
IA-32 천천히 알아보자.  (0) 2018.02.22
2018 해킹캠프 문제 3  (0) 2018.01.21