如何利用 DLL hijack 轻松绕过AMSI? - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

如何利用 DLL hijack 轻松绕过AMSI?

丝绸之路 技术 2017-02-10 16:00:35
243284
收藏

导语:​最近在做一些关于Windows 10中新的反恶意软件扫描接口技术内部机制的研究,我发现PowerShell 5中存着在DLL劫持漏洞。

最近在做一些关于Windows 10中新的反恶意软件扫描接口技术内部机制的研究,我发现PowerShell 5中存着在DLL劫持漏洞。我之所以做这些研究是因为我们Red Team所使用的一些PowerShell攻击脚本——p0wnedShell被安装在Windows 10的 Windows Defender查杀了——“禁止从内存中运行”,所以我想知道是否可以绕过这中查杀技术。

Microsoft的技术博客中,我们可以看到下面的图表,详细的说明了这种技术是如何对PowerShell / VBScript此类脚本进行hook的。

1.png

在Process Monitor 中添加一个amsi.dll的路径过滤器后,运行p0wnedShell,我发现它会首先尝试在其当前路径中查找并加载amsi.dll。如果在当前路径中没有找到dll文件,就会从System32路径中加载dll。这种情况就给了我们一些机会;)。

11.jpg

打开IDA载入amsi.dll,查看WinAPI函数和DLL导出表,发现有DllMain的入口点,所以我认为我可以尝试利用C语言编写一个简单的DLL并使用 MessageBox函数来做演示。

111.png

伪造的amsi.dll 源码如下图:

2.png

正如你在下面的截图中所看到的;在启用Windows Defender的Windows 10上运行p0wnedShell时,Amsi /Defender会把那些从内存中加载的带有攻击性的PowerShell脚本阻止运行。

22.png

现在把已经编译好的用作劫持的dll文件放在C:\p0wnedShell 文件夹中,当再次运行 p0wnedShell时,奇迹就发生了,Awwwww!

222.png

在弹出的MessageBox点击OK之后,我们可以看到所有进攻脚本都运行了,现在没有任何问题。

当在Process Explorer中搜索Amsi.dll(查找DLL或Handle)时,我注意到dll已经被卸载了,然而在p0wnedShell进程中正常加载了。

1.png

接下来,我想尝试PowerShell.exe本身是否也存在DLL劫持的问题,把 PowerShell.exe复制到C:\ p0wnedShell文件夹中,运行Process Monitor并添加一个C:\ p0wnedShell的路径过滤器。

正如你在下图中所看到的,PowerShell尝试从当前路径加载一些dll文件。

11.png

不出我所料,PowerShell.exe的确也从当前路径中加载了伪造的dll文件。

所以,PowerShell也存在着DLL劫持漏洞。

111.png

接下来我尝试了很多dll,urlmon.dll也可以成功进行劫持。

1111.png

因此,通过这些研究发现,我们就可以得出结论,PowerShell 5存在着dll劫持漏洞,我们可以控制代码执行并将PowerShell.exe复制到可写的位置执行。

有了以上这些了解,我们现在就可以使用PowerShell在Windows 10系统中运行自定义的代码,如后门,键盘记录器,恶意软件等等。 例如,我创建了一个如下图所示的Amsi.dll,并将它和PowerShell.exe一起复制到包含在%path%环境变量的文件夹中。

现在,当系统管理员从cmd运行PowerShell.exe,并在UAC提示上单击“是”时,会添加一个新的管理员用户到系统本地管理员组中。

2.png

把制作好的劫持dll文件和PowerShell.exe 一起复制到包含在%Path%环境变量的文件夹中:

22.png

从cmd启动PowerShell:

222.png

UAC 提示:

2222.png

点“Yes”之后,新的管理员用户就添加到系统了:

3.png

POC:

在最新版本的p0wnedShell中,我已经添加了绕过Amsi的劫持dll文件,是通过从内存将伪造的Amsi.dl写入到当前工作目录的(使用BinaryWriter方法)。这个DLL由p0wnedShell进程加载并立即退出,因此基本上不会影响Amsi的正常运行。

https://github.com/Cn33liz/p0wnedShell

p0shKiller基本上是一个在最坏的情况下来演示本文所讲的PowerShell/Amsi dll劫持漏洞的工具。需要管理员权限运行(虽然可以绕过UAC),所以该工具效果有限。

https://github.com/Cn33liz/p0shKiller

当前状态:

*于2016年3月28日报告给Microsoft MSRC

*从Microsoft的角度来看,AMSI/AntiVirus并不是传统的安全边界,并且由于此类DLL劫持漏洞不会导致远程代码执行或特权提升,因此他们无法发布正式公告。然而,他们肯定有兴趣进一步探索如何去改进他们的反恶意软件产品,所以我期望会在未来的版本中得到修复。

1
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务