由于许可证问题,少数库无法静态链接。
那么,是否可以通过LD_PRELOAD环境变量或/etc/LD.So.PRELOAD配置来阻止/检测预加载的库?
上一个可以通过getenv()检测到。但我对另一种方法一无所知。
我认为可能有一个通用的方法,是吗?
是否可以通过LD_PRELOAD环境变量或/etc/LD.so.PRELOAD配置来阻止/检测预加载的库?
你似乎在试图实现某种反黑客保护。如果是这样的话,研究一下现有的防裂技术是值得的。这本书描述了一些。
请注意,除了LD_PRELOAD
和/etc/ld.so.preload
之外,还有许多其他技术可以将"外来"代码注入到应用程序中。马上想到的两个是:LD_AUDIT
,在调试器下运行,以及重命名/替换libc.so
。
你几乎没有希望阻止一个适度老练的攻击者。在Linux上,我可以构建自己的libc.so.6
,也可以将LD_PRELOAD
重命名为其他内容。我还可以构建自己的内核,并让它自动将myhack.so
注入到您的进程中,而不会产生任何用户空间可见的效果。或者,当应用程序执行系统调用时,我可以简单地让系统调用做其他事情。
LD_PRELOAD。。。可以通过
getenv()
检测
这只会阻止最不老练的攻击者,原因有两个:
- 预加载的库本身可以插入
getenv()
,并可以对应用程序隐藏LD_PRELOAD
,以及 - CCD_ 11仅在进程启动时才重要。在该过程开始后,预加载的库可以在应用程序检查
LD_PRELOAD
之前轻松地将其从环境中删除