![如何检查二进制文件是否有可能在不运行的情况下访问互联网?](https://linux22.com/image/108071/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E6%9C%89%E5%8F%AF%E8%83%BD%E5%9C%A8%E4%B8%8D%E8%BF%90%E8%A1%8C%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%AE%BF%E9%97%AE%E4%BA%92%E8%81%94%E7%BD%91%EF%BC%9F.png)
有没有可靠的方法来检查二进制可执行文件在运行之前是否可能尝试访问互联网(例如给家里打电话)?
我猜想许多二进制文件使用 glibc 的 ioctl / socket / connect 来访问互联网。这意味着,objdump
对这些函数进行检查可能会揭示这方面的一些信息。但这就足够了吗?有没有办法不使用这些 glibc 函数来访问互联网?我怎样才能检测到这些?
答案1
程序可以通过多种方式访问互联网,例如使用诸如库卷曲。您可以检测这些 usingldd
并再次检查二进制文件中使用了哪些符号objdump
,并阅读文档以弄清楚各种函数的作用。
但是,如果您尝试检查恶意二进制文件,这还不够:二进制文件可以使用系统调用直接调用内核以打开套接字等,或者它可以加载库dlopen(3)
以使其更难以检测其使用。
如果你想在没有网络访问的情况下运行二进制文件,你可以unshare
从网络命名空间中运行:
unshare -n binary
不过,您需要以 root 身份执行此操作,因此您可能想su
返回到其他用户(如果是恶意二进制文件,也许也不是您自己的用户):
unshare -n su sacrificialuser -c binary
正如所指出的吉尔斯,这并不能保护您免受二进制文件执行可能产生的其他副作用,包括设置一个 cronjob,该 cronjob 代表可执行文件出于任何目的访问网络。
或者,您可以设置iptables
规则nftables
来删除(并记录)二进制文件中的所有网络流量;或者更好的是,设置一个虚拟机并运行其中的二进制文件(然后停止虚拟机)。