Cla*_*bel 32 windows security code-injection
所以前几天,我看到了这个:
http://www.edgeofnowhere.cc/viewtopic.php?p=2483118
它涉及三种不同的DLL注入方法.我如何防止这些过程?或者至少,我该如何预防第一个?
我想也许Ring 0的驾驶员可能是阻止这三个人的唯一方法,但我想看看社区的想法.
小智 33
最好的技术解决方案是执行某些操作,导致加载程序代码在进程初始化后无法正常运行.这样做的一种方法是使用NT加载程序锁定,这将有效地防止任何加载器操作发生.其他选项包括直接在内存中修补加载程序代码以使攻击者对LoadLibrary的调用失败(例如,插入int3断点并自行调试以处理预期的情况).
但作为一名黑客(实际上是管理您链接的网站的人),您不会阻止人们以某种方式将代码放入您的流程中.LoadLibrary恰好是一个方便的快捷方式,但有许多不同的手动加载代码的方法,你永远不能希望完全停止,缺少一些极其复杂的ring0代码.即使你去了ring0,黑客也会在你旁边.
此外,DLL注入有很多合法用途.主题程序,可访问性工具和扩展OS功能的各种程序都可以使用DLL注入为任何程序提供附加功能.
Ste*_*ett 12
如何防御这三种技术:
您可以通过挂钩LoadLibrary来阻止第一种技术(CreateRemoteThread调用LoadLibrary).在您的钩子中,您检查您知道是进程的一部分并且可以加载的DLL名称列表,或者您可以检查您不想加载的已知DLL列表.
当您找到DLL时,您不想加载SetLastError(ERROR_ACCESS_DENIED),然后返回NULL.我设置了最后一个错误,以便编写代码查找错误代码的人得到一个.这似乎工作,也许不同的代码可能更合适.
这将阻止DLL加载.
我认为CreateRemoteThread阻塞的相同技术适用于SetWindowsHookEx,但前提是你可以在SetWindowsHookEx技术开始加载代码之前安装钩子(这通常是在应用程序中创建第一个Window时 - 在其生命周期的早期).
很好的技术.之前没见过.你可以防止这种情况,但你必须挂钩LoadLibrary入口点(而不是IAT表),因为Code Cave直接调用LoadLibrary.
正如文章的作者评论的那样 - 有许多方法可以被攻击,你可能很难将它们全部击败.但通常你只想防御某些DLL加载(例如与你的软件不兼容的特定第三方DLL,因为没有正确编写第三方DLL以容纳另一个钩子也可能存在的事实,所以你阻止它来自装载).
最好的方法是确保没有不受信任的进程获得管理员访问权限,或者作为与应用程序相同的用户帐户运行.如果没有此访问权限,则无法向您的应用程序注入代码; 一旦这样的进程获得了访问权限,它就会导致各种恶作剧而无需将自己注入另一个进程 - 注入只会使其更容易隐藏.
由于这张海报暗示他正在投资游戏反黑客,让我阐明一下我的想法。作为一个前骗子。
只是关于游戏反黑客的提示。
最好的办法是让服务器运行核心游戏逻辑。例如,在第一人称射击游戏中,监视客户端发送到服务器的动作。不要让他们随意走动。让服务器根据自己的逻辑告诉客户端每个玩家的位置。永远不要只是转发命令。它们可能是假的。
谁在乎黑客是否入侵了自己的客户?只要拒绝其他的,一切都很好。对于星际争霸maphacks,解决方案很简单。不要为应该未知的区域提供游戏状态。它还可以节省带宽。
我在《三角洲特种部队》(这是一款老游戏)中是个大骗子。我使用的主要技巧是通过直接修改进程内存来扭曲游戏中的任何位置。无需 DLL!