利用SeTakeOwnershipPrivilege权限攻击System Shield杀毒软件任意写入漏洞

本文详细分析了System Shield杀毒软件驱动amp.sys中的任意内存写入漏洞CVE-2018-5701,通过利用SeTakeOwnershipPrivilege权限获取系统控制权,包括修改Windows服务注册表键值并执行恶意代码的具体技术细节和完整攻击流程。

利用SeTakeOwnershipPrivilege权限攻击System Shield杀毒软件任意写入漏洞

Iolo Technologies公司的"System Shield AntiVirus and AntiSpyware"产品存在内核漏洞。这是一个由于输入缓冲区未经验证而导致的任意内存覆盖漏洞,已被分配CVE ID CVE-2018-5701。测试的产品版本为5.0.0.136,易受攻击的驱动程序"amp.sys"版本为5.4.11.1。

由于供应商在过去几周内没有回应,我决定公开此漏洞。他们的另一款产品"System Mechanic Pro"版本15.5.0.61也受此漏洞影响,因为它捆绑了与"System Shield AntiVirus and AntiSpyware"相同版本的驱动程序。不过,网站上提供了"System Mechanic Pro"的更新下载链接,可升级到17.5.0.116版本,该版本已移除易受攻击的驱动程序。

要实现任意写入,需要满足多个子程序中的一系列条件,主要反汇编截图如下所示。

为了利用此漏洞,我使用固定值0xFFFFFFFE覆盖了_SEP_TOKEN_PRIVILEGES结构。您可以通过调整偏移量来获取不同数量的权限,但使用我选择的偏移量后,结果如下所示:

1
2
3
4
kd> dt nt!_SEP_TOKEN_PRIVILEGES fffff8a002cc4a30+40
   +0x000 Present          : 0xff`fffffe00
   +0x008 Enabled          : 0xff`fffffe00
   +0x010 EnabledByDefault : 0x800000

查看获得的权限数量,我们可以选择其中一些进行利用:

1
2
3
4
5
6
7
8
9
kd> !token fffff8a002cc4a30
_TOKEN fffff8a002cc4a30
TS Session ID: 0x1
User: S-1-5-21-2231847605-3015871416-1385684711-1001
[...权限列表...]
Privs: 
 09 0x000000009 SeTakeOwnershipPrivilege          Attributes - Enabled 
 10 0x00000000a SeLoadDriverPrivilege             Attributes - Enabled 
[...更多权限...]

我决定使用"SeTakeOwnershipPrivilege"权限进行利用。我的想法是获取Windows服务注册表键的所有权并具备启动它的能力。我找到的服务是"Windows Installer"服务。

具体步骤如下:

  1. 获取HKLM\SYSTEM\CurrentControlSet\services\msiserver注册表键的所有权
  2. 将"ImagePath"值更改为我们想要运行的命令或可执行文件
  3. 通过运行"msiexec.exe /i poc.msi /quiet"启动服务
  4. 恢复所有设置

这里的poc.msi实际上并不存在,但通过启动msi安装将启动服务并运行我们的命令。尝试获取交互式shell是另一个问题,因为我们必须处理"Session 0 Isolation",我还没有深入研究这个问题,因此决定使用net命令将帐户添加到本地管理员组。

漏洞利用代码可以从此处下载[zip]

@ParvezGHH

评论

Vonnie说: 2018年1月31日 晚上10:02 很好的文章 - 我在哪里可以找到易受攻击的应用程序?我检查了IOLO的网站和exploitdb,但找不到5.0.0.136版本

Parvez回复: 2018年2月1日 上午9:48 对于"System Shield AntiVirus and AntiSpyware",您需要运行下载器来下载主安装包,但然后您还需要申请许可证。最好只下载"System Mechanic Pro"并安装试用版,这会下载整个包且安装不需要许可证 http://download.iolo.net/sm/15/pro/en/iolo/trial/SystemMechanicPro_15.5.0.61.exe

Alex说: 2018年2月10日 下午5:18 你好。 感谢这个演示! 我有个问题。使用这个漏洞利用,我们可以访问winlogon.exe并打开读写内存的句柄吗? 诚挚问候,

Parvez回复: 2018年2月11日 下午2:31 是的,您可以,因为"SeDebugPrivilege"也已启用

Alex说: 2018年2月11日 晚上11:57 为什么它不能与csrss.exe一起工作? pHandle = OpenProcess(PROCESS_VM_READ, 0, 428); //我的csrss PID printf("> pHandle: %d || %s\n", pHandle, pHandle); 我得到:0 || (null)

Parvez回复: 2018年2月12日 下午12:13 它应该可以工作,很可能没有获得必要的权限

Alex说: 2018年2月12日 下午12:45 哦是的,谢谢。但是你能帮我处理"SeDebugPrivilege"吗?什么偏移量? 诚挚问候,

Parvez回复: 2018年2月12日 下午5:02 SeDebugPrivilege在此漏洞利用中已经启用,您可以做的是使用我之前的一个漏洞利用,该漏洞利用将shellcode注入到winlogon进程中。

mppo说: 2018年7月17日 上午9:07 感谢这么好的文章。我想研究这个案例,所以我下载了链接 http://download.iolo.net/sm/15/pro/en/iolo/trial/SystemMechanicPro_15.5.0.61.exe 并用IDA pro打开了amp.sys文件,但我找不到与ctl代码0x00226003相关的代码。我该如何找到它?

Parvez回复: 2018年7月17日 下午4:50 最好只对226003进行文本搜索,只会列出一个条目

mppo说: 2018年7月18日 凌晨2:33 谢谢!我在IDA搜索中找到了它的十六进制字节'03 60 22’并找到了易受攻击的函数。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计