PTRACE_SYSCALL and orig_eax

PTRACE_SYSCALL and orig_eax

本文关键字:eax orig SYSCALL PTRACE and      更新时间:2023-10-16

如果子进程执行读写以外的其他系统调用(甚至还过滤这些调用,但情况不同),我想杀死它,但默认情况下会执行一些系统调用。

我编译了一个空的测试子程序(立即退出),我还有一个父进程,它分叉、启用ptracing并执行子程序。父进程使用PTRACE_SYSCALL并每次检查orig_ax。我的测试程序报告孩子被停止了49次(我认为这意味着48/2+1系统调用)。

我想知道系统调用序列是否总是相同的(初始化)和/或是否可以知道何时可以启动和何时停止父系统中的系统调用kill?

我曾经遇到过类似的问题(请参阅我的问题)。当程序启动时,在调用main()之前初始化应用程序(例如加载共享库)时,它会执行大量系统调用。我所做的只是允许更多的系统调用,并使用另一种安全手段(如chroot)来防止应用程序访问不需要的文件。

一个更好的选择是以某种方式找到程序的main()函数的入口点(有关编写调试代码的信息,请参阅本教程),并在该点之后禁用系统调用。我不知道在一般情况下是否可以这样做,但这是我开始搜索的方式。

在找到入口点之后,还有另一种方法可以限制程序进行某些系统调用。不使用PTRACE_SYSCALL来检查程序执行的每个系统调用,而是向程序注入prctl(PR_SET_SECCOMP, ...)调用(使用ptrace()),然后让程序继续运行。