返回介绍

17.2 常见攻击方式

发布于 2024-10-11 22:28:34 字数 10756 浏览 0 评论 0 收藏 0

攻击者通过邮件钓鱼等方式控制内网一台机器,之后会进行各种试探,最终目标基本都会到活动目录,因为这里有全部用户信息。内网攻击手法多种多样,我们先从最简单直接或者最不容易被发现的方式开始逐步介绍。

17.2.1 SYSVOL 与 GPP 漏洞

SYSVOL 为域内共享文件夹,里面保存着与组策略相关的信息,例如登录或注销脚本、组策略配置文件等,域内主机都能访问。域管理员在使用组策略批量管理域内主机时,如果在脚本或配置中引入用户密码,则会产生安全问题。

一种是写在登录脚本中的明文密码,例如图 17-2 所示的这个 VBS 代码来源于微软官方网站。

图 17-2 微软官网修改本地管理员密码示例代码

通过对 SYSVOL 目录搜索 vbs、ps1 后缀的文件,很快就能找到相应的脚本文件,打开即可发现其中密码。

还有一种是在组策略首选项里输入了用户名密码,例如,同样是修改本地内置管理员密码,在首选项里也可以进行配置,如图 17-3 所示。

最后在相应的组策略文件夹下,有一个 xml 配置文件包含了以上信息,如图 17-4 所示。

虽然密码通过 AES 256 进行了加密,但这个密钥是公开在微软官网上的,所以也很容易解密。网上有针对性的利用脚本,可以快速获取 SYSVOL 目录各类配置文件中的密码,我们提取其解密函数直接利用即可。

注意:

除了修改本地管理员密码这个场景外,需要输入密码的地方还包括数据源、计划任务、服务等。

图 17-3 组策略首选项输密码

图 17-4 SYSVOL 利用首选项密码

针对 GPP 漏洞,微软发布了 KB2962486 补丁,在配置组策略的机器上打上相应的补丁后,组策略中设置用户名密码的地方是灰色的无法使用。但登录脚本中的明文密码,有人要输微软也拦不住,所以还是需要关注这个问题。

17.2.2 MS14-068 漏洞

活动目录使用 Kerberos 协议作为身份认证,其工作原理如图 17-5 所示。

图 17-5 Kerberos 工作原理

整个验证过程由三种类型的消息交换组成:验证服务交换,票据授予服务交换,客户端/服务端交换。验证服务交换包括 AS-REQ 和 AS-REP 消息,该验证服务交换在用户登录或者票据授予票据(TGT)过期时发生。票据授予服务交换包括 TGS-REQ 和 TGS-REP 消息。客户端/服务端交换包括 AP-REQ 和 AP-REP 消息,其中 AP-REP 为可选消息。三类交换的详细验证过程如下:

1)AS-REQ。用户向密钥分发中心(KDC,也就是图 17-5 上的域控)的验证服务申请 TGT(Ticket Granting Ticket)。消息包括用户主体名称、域名和预认证信息。该预认证信息是利用用户密码生成的 NTLM HASH。

2)AS-REP。验证服务会生成 TGT,并生成一个会话密钥(Session Key)。KDC 在收到 AS-REQ 消息之后,将从数据库中获得该用户的密钥,然后利用该密钥解密预认证信息,验证用户。验证通过后,会生成 TGT 和会话密钥。该会话密钥又称登录会话密钥,是用户与 KDC 共享的。TGT 中包括登录会话密钥和 PAC(特权属性证书)。TGT 用 KDC 的密钥加密,登录会话密钥用用户密钥加密,最后返回给用户。

3)TGS-REQ。如果用户想通过身份认证来访问某个服务(例如 IIS),那么会发起 TGS-REQ 请求,请求中包含 TGT 以及所请求服务的服务主体名称(Service Principal Name,SPN)。用户收到 AS-REP 消息之后,利用用户密钥解密登录会话密钥,在证书缓存中保存登录会话密钥。用户准备一个用登录会话密钥加密的认证器(authenticator),连同 TGT 和服务主体名发送给 KDC。

4)TGS-REP。TGS 生成服务票据。KDC 收到 TGS-REQ 消息之后,首先用自己的密钥将 TGT 解密,获得登录会话密钥,然后用它解密认证器,验证用户的有效性。当用户通过验证之后,KDC 会生成一个用户与服务共享的会话密钥和一个服务票据。服务票据中包含用户与服务共享的会话密钥的副本和用户 PAC,该票据用目标服务账户的 NTLM 密码哈希进行加密。而会话密钥用登录会话密钥加密。KDC 最后将两者返回用户。

5)AP-REQ。用户将服务票据和新的认证器发给服务端,申请访问。用户在收到 TGS-REP 消息之后,用登录会话密钥解密用户与服务共享的会话密钥,并将该会话密钥保存在证书缓存中。然后,用户准备一个用会话密钥加密的认证器,连同服务票据和一些标志位发送给服务端。

6)AP-REP。可选,当用户希望验证提供服务的服务端时,服务端返回该消息。服务端收到 AP-REQ 消息之后,会用服务的密钥解密服务票,获得会话密钥,然后利用会话密钥解密认证器获得时间戳,最后验证用户。用户验证通过之后,服务端会生成访问令牌。同时,服务端会检查相互验证标志位是否置位,假如置位,则会利用从认证器中获得的时间戳生成一个新的认证器,然后用会话密钥给认证器加密,最后返回给用户。

7)用户收到 AP-REP 消息之后,会用会话密钥解密认证器,验证服务的正确性。除非需要 PAC 验证(比较少见),目标服务会接受 TGS 票据中的所有数据,否则,不需要与 KDC 进行通信。

TGT 默认保存在内存里,而且有效期为 10 小时。如果攻击者拿到了用户的 TGT,并将其导入自己的内存,就可以冒充用户获得访问权限,这种攻击方法又叫票据传递(Pass The Ticket,PTT)。微软在 2014 年爆出一个高危漏洞 CVE-2014-6324(对应微软为 MS14-068),即 KDC 服务器无法正确地验证签名,导致一些 kerberos 服务票据被伪造。如果想通过伪造票据可以直接将普通的域用户变成域管理员权限,结合网上利用工具,非常简单,如图 17-6 所示。

图 17-6 MS14-068 利用过程

这个过程中最显著的特点就是向 KDC 请求的数据中没有 PAC,导致 KDC 在生成 PAC 的时候使用了域用户密码进行 MD5 而不是 HMAC-MD5,然后 KDC 在内部处理出现问题,生成了一个新的 TGT,之后,将伪造的 PAC 插入自己的授权数据中,之后,将这个 TGT 发送给用户。这样用户就获得了域管理员权限。上面的脚本完成了整个过程并生成了一张伪造的缓存文件,利用 Mimikatz 将它导入系统内存,就可以以域管理员身份访问域服务器,如图 17-7 所示。

图 17-7 MS14-068 成功获取域控权限

网上有更方便的利用程序,一步到位直接得到域控管理员权限的 cmdshell,可以说只要存在这个 MS14-068 漏洞,黑客可以在几分钟内拿下域服务器。

针对 MS14-068 这个高危漏洞,微软发布了 KB3011780 补丁,打上补丁后就无法被攻击者利用了。

17.2.3 Kerberoast 攻击

任何通过 Active Directory 验证的域用户都可以查询具有服务主体名称(SPN)的用户账户。这使得攻击者能够访问网络上的计算机,并能够确定支持 Kerberos 身份验证的所有服务账户及其用途。

在图 17-5 所示的 Kerberos 工作流程里,黑客可以使用有效的域用户的身份验证票据(TGT)去请求运行在服务器上的一个或多个目标服务的服务票据。DC 在活动目录中查找 SPN,并使用与 SPN 关联的服务账户加密票据,以便服务能够验证用户是否可以访问。请求的 Kerberos 服务票据的加密类型是 RC4_HMAC_MD5,这意味着服务账户的 NTLM 密码哈希用于加密服务票据。黑客将收到的 TGS 票据离线进行破解,即可得到目标服务账号的 HASH,我们把这个称为 Kerberoast 攻击。黑客进行此类攻击,一般会先进行 SPN 扫描,特别关注 MSSQL、Exchange 等服务,如图 17-8 所示。

图 17-8 SPN 扫描示例

然后尝试请求并将 TGS 返回数据进行字典暴力破解,配合 Mimikatz 进行 PTT 攻击。

·此类攻击效果非常好,主要有以下几个原因:

·大多数服务账号不会设置密码的有效期,即很长时间内都不会修改。

·大多数据服务账户的权限控制都不够严格,通常情况下这些账户还是域管理员组的成员。

·域内用户都可以从 TGS 处请求服务票据,SPN 扫描不需要连接到网络上的每个 IP 来检查服务端口,它通过 LDAP 查询向域控执行服务发现,而正常域内用户都会有 TGS 请求服务票据,不会产生大量流量和告警事件,比较难以发现。

·一旦取得相应的 TGS 票据,就可以进行离线暴力破解。

17.2.4 内网横移抓取管理员凭证

当黑客控制了内网一台机器后,往往会想办法获得域管理员凭证。通过所控制的机器,进一步定位域管理员信息,例如,当前域管理员账号有哪些,谁是真正的域管理员,在哪登录过等。

比较常用的办法是抓本地密码,一旦域管理员在本地登录(包括使用 runas 或远程桌面连接),都能轻松地抓取到,如图 17-9 所示。

图 17-9 抓取本地用户密码

除了抓取外,还可以使用键盘记录类程序来记录输入的账号密码。如果在所控制的机器上没有抓到管理员密码,黑客往往会在内网进行更多的尝试,也就是我们经常说的“横向移动”,一般的步骤如下:

1)获得一台域主机的权限。

2)Dump 内存获得用户 hash。

3)通过 pass the hash 尝试登录其他主机。

4)继续搜集 hash 并尝试远程登录。

5)获得域管理员账户 hash,登录域控,最终成功控制整个域。

黑客在内网多台机器上跳来跳去,看上去非常复杂,但网上有很方便的工具(例如 CEW),通过扫描 C 段来发现有哪些机器,定位哪些机器当前账号有权限访问,哪些机器共享了文件,哪些机器域管理员登录过并将 hash 给 dump 下来,有了 hash 就可以进行传递哈希攻击了(pass the hash,PTH)。

在大多数企业内,为了方便管理,很多机器的本地管理员密码是一样的,甚至安装系统都是用的同一个模板。对终端用户进行了权限控制的企业,往往需要为终端用户提供一些支持服务,例如,为用户安装软件,通常都是用域管理员权限来进行安装,所以上面介绍的方法的成功率会比较高。一些聪明的攻击者甚至会故意破坏一些文件;导致诸如 Office 软件不正常,诱使域管理员在该机器上登录。

针对域内计算机本地管理员密码一致带来的安全问题,有的企业在组策略里用脚本修改本地管理员密码,通过一定的算法来生成本地密码,例如按计算机名、年份+月份、计算机序列号等算法,这也是一个折中的方案,如果能用上一些加密保护措施(如微软 PowerShell 中的 ConvertTo-SecureString)对密码进行保护就更好了。另外,微软公司在这块也做了不少努力,从 Windows XP 的不允许禁用默认管理员,到 Windows 7 可以允许用户禁止,再到 Windows 10 的默认禁止,还提供了 LAPS 方案 [1]

[1] 关于 LAPS 更多介绍见微软官网:https://technet.microsoft.com/en-us/mt227395.aspx。

17.2.5 内网钓鱼与欺骗

对处于同一个网段内的目标,攻击者可能还会采用 ARP 欺骗、DHCP 欺骗等中间人攻击技术。

我们都知道当请求一个地址时,先会看本地配置文件,如 hosts 中是否有记录,没有再会去检查本地 DNS 缓存,还没有就去向 DNS 请求。如果 DNS 名称解析失败了呢?微软从 Vista 开始新增了链路本地多播名称解析(LLMNR)技术,即当 DNS 名称服务器请求失败时,系统就会通过 LLMNR 或 Net-BIOS 名称服务(NBT-NS)技术进行请求查询,这个过程即是向网络中发送广播包。如图 17-10 所示,尝试随便 Ping 一个地址 xyz123,会触发 DNS 请求,DNS 查询不到会有 NBNS 数据包。

图 17-10 NBNS 与 LLMNR 查询

如果这个时候攻击者侦听网络流量并主动响应,就会有相应的流量送往攻击者所控制的机器。

Web 代理自动发现(Web Proxy Auto-Discovery,WPAD)协议,本意是为了方便用户上网而无须配置代理服务器,它会使用 DHCP 和 DNS 发现方法来定位配置文件的 URL。如果配置不当,在 DHCP 和 DNS 都没有成功的情况下,会用到 LLMNR 和 NBNS 查询,如图 17-11 所示。

图 17-11 WPAD 查询机制数据包

Responder 是一个非常著名的中间人利用工具,使用非常方便,针对那些没有禁用 LLMNR 和 NetBIOS 的计算机,可以欺骗目标访问到 Responder 提供的 SMB 或者 HTTP 服务。SMB 有个特点,即当用户在资源管理器里访问类似\\IP\File 的时候,会默认将当前用户密码凭证送到 SMB 服务进行认证,失败了才会弹出需要输用户密码的对话框,但此时 SMB 服务器已经收到了相应数据,通过抓包即能获取到用户凭证。有了这个凭证,再进一步利用 Hashcat 等工具进行破解就有可能得到能利用的用户密码。

在实际渗透过程中,往往会配合钓鱼进行,例如,在共享上放置特殊的目录,当用户点到这个目录的时候会自动请求攻击的 SMB;在 doc 里插入文件,然后将相应的链接改为 UNC 路径,通过内网邮件发送给对方;利用 PDF 的 GoTobe 和 GoToR 功能,让对方打开 PDF 时自动请求 SMB 服务器上的文件等。一般企业内部员工看到内部的邮件或公用共享文件夹都会放松警惕,当点开之后,当前用户密码登录凭证已经被人拿到 [1]

针对内网欺骗或中间人攻击,比较有效的方案是:MAC 绑定,禁用 LLMNR 和 Net-BIOS,启用 SMB 签名,配置好 WPAD 相应的 DNS 记录等。

[1] 关于这方面的攻击手法非常多,感兴趣的读者可以访问:https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes。

17.2.6 用户密码猜解

如果黑客所控制的机器实在没什么利用价值,它还会尝试其他方式,例如,密码猜解以及钓鱼欺骗等。

域里的账号,一般会设置账号安全策略,例如密码长度、锁定次数等,暴力破解容易触发锁定机制从而被发现,于是有了密码喷洒(Password Spraying)技术。喷洒这个词语很形象,当攻击开始时,往往会从列表中的第一个密码开始。第一个密码用于尝试对活动目录中的每个用户进行身份验证。针对活动目录中的每个用户,攻击者都会尝试用这个密码进行登录,当所有用户都使用该密码进行了测试后,就会自动转到下一个密码,执行重复的测试。假设活动目录中的每个用户的测试上限次数为 5 次,那么攻击者会为每个用户进行 4 个不同密码的尝试,直到锁定计算器时间超了再继续。

密码喷洒通常连接到 SMB 共享或网络服务,笔者用 Nmap 自带的 smb-brute 插件对域控的 SMB 进行请求测试,效果图如图 17-12 所示。

图 17-12 smb-brute 插件暴力破解示例

当对 AD 进行了配置—仅发送 NTLMv2 响应,拒绝 LM 和 NTLM,以上脚本可能就失效了,但此时 ldap-brute 插件还是生效的,如图 17-13 所示。

图 17-13 ldap-brute 插件暴力破解示例

当发生以上暴力猜解密码时,域控服务器就会默认产生大量的登录失败事件(事件 ID 为 4625),如果开启了相关的审核策略,还会有大量的凭据验证失败事件(事件 ID 为 4776)。需要对此类事件进行监控,并进行关联告警,这样就能很快定位到内网的攻击源。

17.2.7 获取 AD 数据库文件

当拿到域管理员权限后,攻击者往往会导出所有用户 HASH 便于进一步利用,比较常用的方法包括用 Mimikatz 抓取 HASH(lsadump::lsa/patch),或者利用 DCSync 远程转储(lsadump::dcsync)。还有一些办法是直接导出 ntds.dit,因为这个文件即是 AD 数据库文件,该文件由三个主表组成—数据表、链接表和 SD 表,具体见微软官方网站的介绍 [1]

如何导出 ntds.dit,一般有 ntdsutil 导出、利用 Volume Shadow Copy 导出等方法,笔者通过系统自带的 ntdsutil 导出效果如图 17-14 所示。

图 17-14 导出 ntds 库文件

导出域数据库后,用 DSInternal 脚本导出用户哈希,如图 17-15 所示。

图 17-15 利用 ntds 库文件导出所有用户 HASH

导出的 HASH 可以直接利用 Mimikatz 进行 PTH 攻击,如图 17-16 所示。

图 17-16 PTH 攻击实例

除了直接在域控上导出 ntds.dit 外,还有一些方法可以获得 ntds.dit,例如备份共享、准备配置成域控的服务器、虚拟化平台等。

[1] 链接:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772829(v=ws.10)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文