由于许可证问题,很少有图书馆无法静态链接。
是否可以通过LD_PRELOAD环境变量或通过/etc/ld.so.preload配置来阻止/检测预加载的库?
可以通过getenv()检测上一个。但我不知道另一种方法。
我认为可能有一般的方法,是吗?
答案 0 :(得分:9)
是否可以通过LD_PRELOAD环境变量或通过/etc/ld.so.preload配置来阻止/检测预加载的库?
您似乎正在尝试实施某种反黑客保护措施。如果是这样,那么研究现有的防裂技术是值得的。 This book描述了一些。
请注意,除了LD_PRELOAD
和/etc/ld.so.preload
之外,还有许多其他技术可以将“外来”代码注入您的应用程序。立即想到的一对是:LD_AUDIT
,在调试器下运行,并重命名/替换libc.so
。
你几乎没有希望阻止一个中等复杂的攻击者。在Linux上,我可以构建自己的libc.so.6
,我可以将LD_PRELOAD
重命名为其他内容。我还可以构建自己的内核,让它自动将myhack.so
注入到您的进程中,而不会产生任何用户空间可见效果。或者我可以简单地让系统调用在您的应用程序执行时执行其他操作。
...... LD_PRELOAD ...可以通过
检测到getenv()
这将阻止最不复杂的攻击者,原因有两个:
getenv()
,并可以隐藏LD_PRELOAD
您的应用程序,LD_PRELOAD
仅在流程启动时很重要。在该过程开始之后,预加载的库可以在您的应用程序有机会检查它之前轻松地从环境中删除LD_PRELOAD
。