Windows RID劫持

2018-11-07 7,605

背景

驻留的艺术在于是否能够成功地利用漏洞。有时候很难维持对特定环境的访问,尤其是在无法在特权用户组中创建或添加用户、复制凭证或哈希、实现<bind/reverse> shell时。本文介绍如何在获取目标的高访问权限后用离散和静默的方法来保持后门可用。

研究人员发现和创建了一个名为RID劫持的后利用技术。

RID劫持攻击

通过利用系统资源,可以在受害者设备上劫持任意原有的账户(包括500个内置的管理员账户)的RID,并分配到另一个用户账户。攻击可以:

  • 将被劫持的账户的权限分配非劫持者的账户,即使被劫持的账户并没有启用。

  • 允许用劫持者的账户凭证来认证,并获取被劫持用户的访问权限。

  • 以劫持者的身份登陆并以被劫持者的身份在留存事件日志。

研究人员发现之前没有这种技术的记载,因此参考enable_support_account post开发了Metasploit模块。该模块利用前面提到的漏洞,修改了内置账户support_388945a0的安全描述,但仅能工作在XP/2003 Windows系统上。
但rid_hijack模块可以用受害者设备上的任意原有账户自动化攻击,具体见post/windows/manage/rid_hijack。

1541493783271324.png

该模块在Windows受害者设备上建立了meterpreter session,然后创始检查权限并修改与特定账户相关的注册表。下面是对每个参数的简单描述:

  • GETSYSTEM: 如果是true,就获取受害者的SYSTEM权限;

  • GUEST_ACCOUNT: 如果是true,就用受害者的Guest账户作为劫持者账户;

  • RID: RID会被分配给劫持者账户。该值应该是现有账户所有的,但会被劫持,默认值是500

  • USERNAME: 设置后,会查询定义的用户账户,并将其看作是劫持者账户。如果是GUEST_ACCOUNT,该参数会被忽略。

  • PASSWORD: 设置后,会建立该值和hijacker账户密码的联系。

模块测试

该攻击在Windows XP, Windows Server 2003, Windows 8.1和Windows 10上进行了测试。以Windows 8.1 Pro虚拟机作为受害者,其中有一个用户账户user,两个内置账户Administrator账户(Administrador)和Guest账户 (Invitado)。

1541493794944632.png

建立meterpreter session后,运行该模块来劫持RID值为500的内置Administrator账号,并将RID值分配给Guest账号。很明显,Guest账号并没有密码,所以需要设置一个密码。

1541493831345048.png

然后就可以以Guest账号和指定的密码登陆设备。

1541493845648016.png

然后就会发现成功地以Guest登陆机器了,还可以执行以下命令:

  1. cmd.exe打开console,可以看到是以Administrator 账号运行的。

  2. 研究人员是以Guest账号登陆的,可以运行whoami和检查默认路径查看。

  3. Guest账号仍然是Guests localgroup(本地组)的成员,可以使攻击静默进行。

  4. 可以执行一些特权操作,比如向Windows受保护的文件夹system32中写文件。

1541493870457707.png

工作原理

因为XP是使用Security Account Manager (SAM)来保存本地用户和被指账号的安全描述。每个账号都有一个分配的RID值来识别它。与域名控制器不同,Windows工作站和服务器会将部分数据保存在 HKLM\SAM\SAM\Domains\Account\Users key中,访问需要SYSTEM权限。

1541493887991178.png

Names子项中含有包括内置账号在内的所有本地用户账号名。这些子项都保存为二进制值,定义了其类型属性,账号的RID是十六进制的0x1f4 = 500, 0x1f5 = 501。每个账号的RID和上面的子项都是一一对应的。

1541493907328147.png

从这些子项中,可以找出一些有趣的REG_BINARY值,F和V。这些值含有与每个账号安全描述相关的重要数据,包括账号RID的副本和是否启用标志。F值是低字节序的,RID值保存在offset 30h处,enabled/disabled flagoffset 38h处。

1541493924952519.png

但是怎么找到这个值呢?在研究了Windows Authentication & Auhtorization结构后,就可以发现F二进制中保存的RID副本是LSASS和SRM在将username翻译为security identifier (SID)时,与MSV1_0.dll通信后,用来生成primary access token的。

因为LSASS信任从中获取的信息,因此会根据从SAM提取的安全数据创建access token。SAM中提取的安全数据包括RID copy,这也是用来定义登陆用户的安全环境的。

RID劫持包含在特定offset的F值设置RID来覆写一些字节。因为完整性问题,修改会导致Windows在大多数关键操作系统进程中将劫持者账号的误认为是被劫持者的账号,因此就拥有了相应的访问权限。

攻击对系统内置账号和用户创建的用户都有效。


本文作者angel010,转载自:https://xz.aliyun.com/t/2998

本文作者:ang010ela

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/78942.html

Tags:
评论  (0)
快来写下你的想法吧!

ang010ela

文章数:56 积分: 701

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号