如何防止LD_PRELOAD或ld.so.preload配置?

dai*_*isy 2 libc preloading

由于许可证问题,很少有库无法静态链接.

那么是否可以通过LD_PRELOAD环境变量或通过/etc/ld.so.preload配置来阻止/检测预加载的库?

可以通过getenv()检测前一个.但我不知道另一种方法.

我想可能有一般的方法来做,是吗?

Emp*_*ian 10

是否可以通过LD_PRELOAD环境变量或通过/etc/ld.so.preload配置来阻止/检测预加载的库?

您似乎正在尝试实施某种反黑客保护措施.如果是这样,那么研究现有的防裂技术是值得的.这本书描述了一些.

请注意,除了和之外,还有许多其他技术可以将"外部"代码注入到您的应用程序中.立即想到的一对是:在调试器下运行,并重命名/替换.LD_PRELOAD/etc/ld.so.preloadLD_AUDITlibc.so

你几乎没有希望阻止一个中等复杂的攻击者.在Linux上,我可以构建自己的libc.so.6,我可以重命名LD_PRELOAD为其他东西.我还可以构建自己的内核,并将其自动注入myhack.so到您的进程中,而不会产生任何用户空间可见效果.或者我可以简单地让系统调用在您的应用程序执行时执行其他操作.

...... LD_PRELOAD ...可以通过检测到 getenv()

这将阻止最不复杂的攻击者,原因有两个:

  • 预加载的库本身可以插入getenv(),并且可以隐藏LD_PRELOAD在您的应用程序中,并且
  • LD_PRELOAD在进程启动只有事宜.在该过程开始之后,预加载的库可以LD_PRELOAD在您的应用程序有机会检查之前轻松地从环境中删除.