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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

从cmd启动PowerShell:

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

UAC 提示:

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

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

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

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劫持漏洞不会导致远程代码执行或特权提升,因此他们无法发布正式公告。然而,他们肯定有兴趣进一步探索如何去改进他们的反恶意软件产品,所以我期望会在未来的版本中得到修复。




原文发布时间为:2017年2月10日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
3月前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
96 2
|
3月前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
79 2
|
22天前
|
监控 网络协议 网络安全
恶意代码分析入门--开始动态地分析恶意程序(chapter3L_Lab03-01)
实验3-1:通过动态分析技术分析Lab03-01.exe中的恶意代码,探究其导入函数、字符串列表、感染特征及网络特征。实验环境为Windows XP SP3,使用Process Explorer、Strings、Process Monitor、PEiD、Wireshark等工具。分析过程中发现恶意代码创建了互斥体、修改了注册表以实现自启动,并尝试访问外部恶意链接。
60 3
恶意代码分析入门--开始动态地分析恶意程序(chapter3L_Lab03-01)
|
3月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
149 0
|
6月前
|
SQL API Python
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
|
监控 测试技术
如何利用sdclt.exe绕过UAC?
本文讲的是如何利用sdclt.exe绕过UAC?,Matt Nelson‏ @enigma0x3在最近的文章中公开了一个绕过Win10 UAC的技巧,通过修改HKCU下的注册表键值实现对UAC的绕过
2078 0

热门文章

最新文章

下一篇
开通oss服务