我试图编写一个pam后门扫描程序,可以在pam_sm_authenticate中调用fopen函数(普通文件不会在此函数中调用fopen)来存储用户名和密码,但是我不能使用外部命令例如" nm,readelf"或类似的东西,所以唯一的方法似乎是扫描pam_sm_authenticate函数并找到所有的调用指令并计算地址以检查它是否正在调用fopen,但它太麻烦了,而且我对ELF文件不是很熟悉(I甚至不知道如何找到pam_sm_authenticate的偏移量,我使用dlopen和dlsym来获取地址..),所以我想知道是否有更好或更简单的方法来检测它?三江源。
答案 0 :(得分:0)
TL; DR:构建一个强大的pam后门扫描程序"理论上是不可能的,所以你现在应该放弃并考虑解决问题的其他方法。
您的问题非常令人困惑,但我认为您的要求是:"我可以通过编程方式确定pam_sm_authenticate
是否会调用fopen
"。
这是错误的问题,原因如下:
pam_sm_authenticate
拨打foo
,foo
拨打fopen
,那么您仍有问题,所以您真的应该扫描pam_sm_authenticate
和它调用的每个函数(递归),fopen
远是写文件的唯一方式:您还可以使用open
或system
(如system("echo $secret > /tmp/backdoor")
中所示,或直接sys_open
系统调用,或许多其他黑客攻击。pam_sm_authenticate
可以使用just-in-time compilation技术在运行时构建任意代码(包括代码调用fopen
),并通过检查代码来回答是否这样做等同于解决halting problem(即不可能)。