如何阻止 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 有不少建议。