看起来不可能阻止坚定的攻击者修改一个人的进程代码/数据。我希望它至少有可能检测到这种篡改。
在 Windows 下,是否可以在当前进程中监听DLL 注入、WriteProcessMemory 和 CreateRemoteThread ?
在 Linux 下,是否可以监听 LD_PRELOAD 和DR rootkit?
看起来不可能阻止坚定的攻击者修改一个人的进程代码/数据。我希望它至少有可能检测到这种篡改。
在 Windows 下,是否可以在当前进程中监听DLL 注入、WriteProcessMemory 和 CreateRemoteThread ?
在 Linux 下,是否可以监听 LD_PRELOAD 和DR rootkit?
使用一些真正涉及的代码,您可以检测到这些代码...这完全取决于攻击者的决心...如果他们真的确定了,那么他们将使用一些rootkit方法-在这种情况下,您的应用程序对此无能为力(没有检测,只要攻击者知道他们在做什么就不会停止)......
另一种方法可能是在运行时尝试对内存中的段进行一些散列,但这会导致一些蛇油,因为散列代码本身会提供一个入口点来规避这种方法。
在自建的虚拟机中执行代码,该虚拟机又通过虚拟机管理程序与系统的其余部分通信......当然,虚拟机管理程序必须成为系统的引导加载程序,这样操作系统就只是一个“孩子”您的管理程序...应该可以解决问题...尽管您必须自己编写所有内容并确保它没有可利用的弱点(很确定没有人可以为如此复杂的软件做到这一点)...
不知道你要面对什么,但只要你的代码运行的硬件+软件不直接在你的完全控制之下,总有办法做你提到的事情,并且通过一些计划避免检测......
或者这是关于防止软件盗版/逆向的“唯一”?如果是这样,那么有一些措施,甚至一些 100% 安全的措施,尽管这一切都是关于安全性与可用性的平衡......
呵呵,你怎么判断 LD_PRELOAD 是否是恶意的?ptrace 呢?/dev/[k]内存?当一个进程在另一个进程的配置目录的文件夹中植入恶意插件或类似的东西时怎么办?共享内存/IPC 篡改呢?
首先,将其作为合法产品实际销售是浪费时间和完全无稽之谈。不确定您要做什么。如果是防病毒、游戏防作弊或 DRM,那么这是徒劳的。您唯一能做的就是以另一个用户身份运行该进程,从而防止其他进程首先对其进行修改。如果这还不够好,太糟糕了,Linux 就不是一个安全的操作系统,而且永远不会是。
理论上,不可能检测到进程的内存被篡改。在实践中,这取决于你如何定义检测,以及你关心什么样的误报和漏报。
如果您知道程序的正常行为不是修改自身,您确切地知道哪些内存段是静态的,并且您知道您的 PC 上没有任何合法的第三方程序可以篡改程序,那么您也许可以很容易地检测到内存篡改。
最通用的解决方案是像你说的那样挂钩操作系统的进程间内存修改机制。只要敌方进程没有足够的权限来删除您的钩子或进行某些绕过您的钩子的操作系统调用,这就会起作用。
您也可以一遍又一遍地扫描整个过程,使用安全散列算法对内存进行校验和。再一次,如果敌方进程有权修改您的扫描仪,您就输了。
所以是的,如果该进程没有颠覆您的扫描仪的权限,为什么它有权限修改您关心的进程?对我来说听起来像是防病毒/防作弊/DRM。