如何检测一个名为fopen的函数?

时间:2015-07-30 05:01:07

标签: elf

我试图编写一个pam后门扫描程序,可以在pam_sm_authenticate中调用fopen函数(普通文件不会在此函数中调用fopen)来存储用户名和密码,但是我不能使用外部命令例如" nm,readelf"或类似的东西,所以唯一的方法似乎是扫描pam_sm_authenticate函数并找到所有的调用指令并计算地址以检查它是否正在调用fopen,但它太麻烦了,而且我对ELF文件不是很熟悉(I甚至不知道如何找到pam_sm_authenticate的偏移量,我使用dlopen和dlsym来获取地址..),所以我想知道是否有更好或更简单的方法来检测它?三江源。

1 个答案:

答案 0 :(得分:0)

TL; DR:构建一个强大的pam后门扫描程序"理论上是不可能的,所以你现在应该放弃并考虑解决问题的其他方法。

您的问题非常令人困惑,但我认为您的要求是:"我可以通过编程方式确定pam_sm_authenticate是否会调用fopen"。

这是错误的问题,原因如下:

  • 如果pam_sm_authenticate拨打foofoo拨打fopen,那么您仍有问题,所以您真的应该扫描pam_sm_authenticate 它调用的每个函数(递归),
  • fopen 是写文件的唯一方式:您还可以使用opensystem(如system("echo $secret > /tmp/backdoor")中所示,或直接sys_open系统调用,或许多其他黑客攻击。
  • 最后,pam_sm_authenticate可以使用just-in-time compilation技术在运行时构建任意代码(包括代码调用fopen),并通过检查代码来回答是否这样做等同于解决halting problem(即不可能)。