Why should I know this?

Anti-Debugging 우회 TracerPid 조작 본문

Knowledge/Linux

Anti-Debugging 우회 TracerPid 조작

die4taoam 2018. 3. 11. 16:08


TracerPid는 /proc를 통해 조회 가능한 정보로,

gdb 등을 통해 해당 프로세스에 attach하고 있는 process의 pid를 기록하고 있다.


kernel을 빌드할 때 아래처럼 일부 코드를 수정하면,

tracerpid를 읽어 anti-debugging하려는 시도를 차단할 수 있다.



========================================

출처 -

https://gist.github.com/doughgle/e3a8c350dbf2370e69212f8b91fa4c88#file-gistfile1-txt-L17

========================================

commit acc0182c3d3869802bc20c8bf4e04c3464936bcc
Author: Douglas Hellinger <doug.hellinger@hotmail.com>
Date: Sun Nov 19 22:48:46 2017 +0800

Fix tracerPid=0 in /proc

diff --git a/fs/proc/array.c b/fs/proc/array.c
index 6f6fc16..bcf470d 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -171,7 +171,8 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,

tracer = ptrace_parent(p);
if (tracer)
- tpid = task_pid_nr_ns(tracer, ns);
+ // hide TracerPid
+ tpid = 0;

tgid = task_tgid_nr_ns(p, ns);
ngid = task_numa_group_id(p);

========================================



여기까지 쓰고보니 갑자기 궁금하다.

이 방법은 특정 솔루션을 분석하다가 /proc의 정보를 참조하는 것을 리버싱해서 알아낸 방법인데...


만약 tracerpid 필드 자체를 유저프로세스에게 제공하지 않는다면,

그에 대한 예외 처리는 적절하게 되어 있을까?





Comments