验证内存中的进程完整性?

时间:2011-08-21 16:39:42

标签: windows linux security dll-injection intrusion-detection

looks喜欢不可能阻止坚决的攻击者修改一个人的过程代码/数据。我希望它至少可以检测到这种篡改。

在Windows下,是否可以在当前流程中收听DLL injectionsWriteProcessMemory and CreateRemoteThread

在Linux下,是否可以收听LD_PRELOAD和DR rootkit

2 个答案:

答案 0 :(得分:1)

通过一些真正涉及的代码,您可以检测到这些... 这一切都取决于攻击者的确定程度......如果他们真的确定了那么他们会使用一些rootkit方法 - 在这种情况下你的应用程序无法做任何事情(没有检测,只要攻击者知道他们是什么就不会停止做)...

另一种方法可能是尝试在运行时对内存段进行一些哈希处理,但这会占用一些蛇油,因为哈希代码本身会提供一个切入点来绕过这种方法。

在自建VM中执行代码,然后通过虚拟机管理程序与系统的其余部分进行通信......当然,系统管理程序必须成为系统的引导加载程序,以便操作系统只是“孩子“你的管理程序......应该做的伎俩...虽然你必须自己编写所有这些并确保它没有可利用的弱点(非常确定没有人可以为这么复杂的软件做到这一点)......

不确定你遇到了什么,但只要你的代码运行的硬件+软件不是直接完全控制的,总有一种方法可以做你提到的事情,并且有一些计划避免检测...

OR是否仅仅是关于防止软件盗版/撤销的“唯一”? 如果这样那么有一些措施,即使是100%安全的措施,尽管这一切都是关于安全性与可用性的平衡......

答案 1 :(得分:0)

嗯,你怎么知道LD_PRELOAD是否是恶意的? ptrace怎么样?的/ dev / [K] MEM?当一个进程在另一个进程的config目录的文件夹中植入恶意插件或类似内容时怎么办?共享内存/ IPC篡改怎么样?

首先,这是浪费时间,完全无意义地实际销售为合法产品。不确定你要做什么。如果它是防病毒,游戏的反热或DRM,那么这是徒劳的。您唯一能做的就是以另一个用户身份运行该进程,阻止其他进程首先修改它。如果这不够好,太糟糕了,Linux不是一个安全的操作系统,永远不会。

理论上,不可能检测到进程的内存被篡改。在实践中,它取决于您如何定义检测,以及您关心的假阳性和假阴性。

如果您知道程序的正常行为不是要自行修改,那么您确切地知道哪些内存段是静态的,并且您知道您的PC上没有任何合法的第三方程序可以篡改程序,然后你可以很容易地检测到内存篡改。

最常见的解决方案是像你所说的那样挂钩操作系统进程间内存修改机制。只要敌人进程没有足够的权限来移除你的钩子或使某些操作系统调用绕过你的钩子,这就行了。

您也可以反复扫描整个过程,使用安全散列算法对内存进行校验和。然后,如果敌人进程有权修改您的扫描仪,那么您将失败。

所以是的,如果进程没有破坏扫描程序的权限,为什么它有权修改你关心的进程?对我来说听起来像防病毒/反热/ DRM。