如何阻止 gdb 附加到多线程程序
How to block gdb attach to a multi threaded program
我试图阻止黑客将 gdb 附加到一个进程,并且已经成功地分叉了一个 child 进程,ptrace 附加到 parent(然后阻止了后续的 gdb ptrace 附加) .问题已解决...
但是对于多线程程序,我很难过。我可以让 child 监视 parent 的新线程,然后在看到时附加到那些线程;但似乎是一种高开销的方法。
有什么想法吗?
Problem solved...
如果您认为仅仅附加父级就可以阻止坚定的黑客调试您的程序,那么您就是在欺骗自己。
您的保护措施仅适用于最不成熟的攻击者。更复杂的可以:
- 杀死你的子进程并附加你的父进程,或者
- 构建一个实现
ptrace
的自定义 libc.so
实际上 附加目标,或者
- 使用
LD_PRELOAD
注入一个ptrace
做他想做的,或者
- 运行 使用允许调试器附加到已附加进程的自定义内核,或
- 其他几十种方式
对于可以修改 OS 内核的攻击者来说,您几乎无能为力来保护您的程序。
至于"how to attach any newly-created thread",您可以用PTRACE_SYSCALL
捕获sys_clone
,并立即将克隆的进程附加到return。另请参阅 ptrace man page 中的 PTRACE_O_TRACECLONE
。
Are there best practices for securing code?
This question 有不少建议。
我试图阻止黑客将 gdb 附加到一个进程,并且已经成功地分叉了一个 child 进程,ptrace 附加到 parent(然后阻止了后续的 gdb ptrace 附加) .问题已解决...
但是对于多线程程序,我很难过。我可以让 child 监视 parent 的新线程,然后在看到时附加到那些线程;但似乎是一种高开销的方法。
有什么想法吗?
Problem solved...
如果您认为仅仅附加父级就可以阻止坚定的黑客调试您的程序,那么您就是在欺骗自己。
您的保护措施仅适用于最不成熟的攻击者。更复杂的可以:
- 杀死你的子进程并附加你的父进程,或者
- 构建一个实现
ptrace
的自定义libc.so
实际上 附加目标,或者 - 使用
LD_PRELOAD
注入一个ptrace
做他想做的,或者 - 运行 使用允许调试器附加到已附加进程的自定义内核,或
- 其他几十种方式
对于可以修改 OS 内核的攻击者来说,您几乎无能为力来保护您的程序。
至于"how to attach any newly-created thread",您可以用PTRACE_SYSCALL
捕获sys_clone
,并立即将克隆的进程附加到return。另请参阅 ptrace man page 中的 PTRACE_O_TRACECLONE
。
Are there best practices for securing code?
This question 有不少建议。