信息安全公益宣传,信息安全知识启蒙。
教程列表见微信公众号底部菜单
Inception
Inception是由Carsten Maartmann-Moe开发的可以攻击多个DMA硬件的一款工具,可以攻击包括Firewire、Thunderbolt、ExpressCard、PC-Card和PCI /PCI- e接口等硬件。
该工具可以通过内存补丁来解锁并在各个Windows、Linux、Mac OS X平台上实现提权。不过,解锁命令取决于目标系统的版本,并且不同系统签名也会有所不同。
PCILeech
Ulf Frisk开发的PCILeech工具能够通过注入内核模块实现内存转储,它使用PCI-Express总线,可达到超过 150 MB / s的速度,并且可以对超过32位地址范围的部分进行转储。一旦成功注入内核模块,我们可以访问到系统shell、挂载远程文件系统。
PCILeech具有“签名”文件,可以通过修补DLL文件来解锁特定版本的Windows,Windows Vista / 8上修改msv1_0.dll 文件,在win10上修改NtlmShared.dll文件。类似于Inception,内核模块和签名依赖于具体Windows版本,并且缺少32位 Windows 7版本的签名。
由于前面2个工具依赖于特定版本操作系统相关的签名,我们一直在寻找一种可以在所有Windows版本上工作的通用签名。
测试环境
软件:
可在Linux上运行的PCILeech
Radare2
硬件 :
USB3380
FPGA + USB模块
测试目标:
Windows 10(成功)
Windows Server 2016(成功)
Windows 7(成功)
Windows Server 2008 R2(成功)
攻击winlogon.exe
在Windows登录界面活动SYSTEM权限 shell 的简单方法是替换winlogon.exe程序调用的二进制文件。以下是这些二进制文件的部分列表:
于是我们对winlogon.exe二进制文件进行了快速的静态分析,想要发现这些程序是如何启动的。我们查找了对Windows API函数CreateProcess的引用:
然后对sub.KERNEL32.dll_CreateProcessW_308函数进行了反汇编,找到了对sethc.exe二进制文件的调用方法,这个“粘滞键”小程序可以通过按5次SHIFT键调用:
内存转储分析
在分析运行中的winlogon进程的核心转储时,我们搜索了这个格式字符串。在分析Windows Server 2016时,我们在进程转储的第一个128MB范围内中找到了这个字符串:
创建PCILeech签名文件
创建PCILeech签名是相当简单的任务,文档可以在PCILeech项目的signature_info.txt文件中找到。
修补程序签名的目的是找到sethc.exe%ld unicode字符串,并将其替换为Windows命令shell cmd.exe。这个技巧类似于通过cmd.exe替换sethc.exe可执行文件的提权方法。
但是,这种方法会改变系统的完整性,不适用于加密环境。因此,我们的补丁签名看起来像这样:
* 意味着搜索每个内存页面
730065007400680063[SNIP]002E006500780065是跟在sethc.exe后面的sethc.exe%ld待搜索unicode字符串
“0和-”意味着我们不必去寻找另一个块代码
r0 是补丁应用的相对偏移量
3006D0064002E00650[SNIP]0078006500000000是通过cmd.exe替换sethc.exe的补丁程序
内存修改
使用签名文件,我们只需要运行pcileech的patch子命令:
但是,使用我们的硬件(USB3380开发板),只能访问有限的内存(大约3500 MB)。换句话说,只有当搜索到的字符串位于这个存储区并且具有读/写权限时,该补丁才能工作。
如果没有以上条件,我们还可以:
将目标上的物理内存量减少到4G甚至2GB:不是在任何情况下可行,但可以增加可靠性;
重启系统之后再次尝试,期望进程能够映射到预期的内存区域(这不是一个理想的解决方案,但是在我们的实验中可以成功)。
购买更好的硬件:Ulf Frisk建议使用Xilinx SP605 FPGA开发板,使用FTDI FT601 USB3 UMFT601X-B附加板,该附加板允许执行完全内存转储(没有任何限制)。
补丁成功,我们通过从登录屏幕点击五次SHIFT键就可以获得一个SYSTEM shell 。
PoC视频
来源:行长叠报
领取专属 10元无门槛券
私享最新 技术干货