일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- on stack replacement
- pthread
- initial-exec
- anti debugging
- linux debugging
- LLVM
- android inject
- Obfuscator
- on-stack replacement
- custom packer
- v8 tracing
- uftrace
- Linux custom packer
- LLVM Obfuscator
- thread local storage
- TLS
- apm
- Linux packer
- pinpoint
- 난독화
- so inject
- v8 optimizing
- linux thread
- Injection
- tracerpid
- OSR
- LLVM 난독화
- tracing
- Android
- 안티디버깅
Archives
- Today
- Total
Why should I know this?
Anti-Debugging 우회 TracerPid 조작 본문
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); |
========================================
여기까지 쓰고보니 갑자기 궁금하다.
이 방법은 특정 솔루션을 분석하다가 /proc의 정보를 참조하는 것을 리버싱해서 알아낸 방법인데...
만약 tracerpid 필드 자체를 유저프로세스에게 제공하지 않는다면,
그에 대한 예외 처리는 적절하게 되어 있을까?
'Knowledge > Linux' 카테고리의 다른 글
Linux의 thread local storage 파헤치기 (0) | 2019.01.17 |
---|---|
debian packages의 prebuilt된 binary symbol 정보 (0) | 2018.12.13 |
execv로 실행된 프로세스의 실행이 정상적이지 않은 경우 (0) | 2018.12.04 |
Linux custom packer analysis (3) | 2018.02.20 |
Comments