从被盗的笔记本电脑到公司网络内部

2021-07-29 21:58:55

你能用被盗的笔记本电脑做什么?你能访问我们的内部网络吗?这是客户最近想要回答的问题。剧透警报:是的,是的,你可以。这篇博文将带您了解我们如何获取“被盗”的公司笔记本电脑并将多个漏洞链接在一起以进入客户的公司网络。我们收到了一台预配置了该组织标准安全堆栈的联想笔记本电脑。我们没有得到关于这台笔记本电脑的任何信息,没有测试凭据,没有配置详细信息,什么都没有,这是一个 100% 的黑盒测试。笔记本电脑进来后,我们打开了装运箱并开始工作。在我们对笔记本电脑进行调查(BIOS 设置、正常启动操作、硬件详细信息等)之后,我们注意到遵循了许多最佳实践,从而消除了许多常见攻击。例如: · 使用 Microsoft 的 BitLocker 对 SSD 进行全盘加密 (FDE),通过可信平台模块 (TPM) 进行保护 在没有其他任何工作的情况下,最后一点,TPM 保护的 BitLocker,将成为我们的方法之一。其中一件事我们在进行侦察时看到笔记本电脑直接启动到 Windows 10 登录屏幕。再加上 BitLocker 加密意味着驱动器解密密钥仅从 TPM 中提取,不需要用户提供 PIN 或密码,这是 BitLocker 的默认设置。 Microsoft 建议在以下情况下提高安全性: 有足够时间的有针对性的攻击;该攻击者将打开外壳、焊接并使用复杂的硬件或软件。 • 使用PIN 保护器将预启动身份验证设置为TPM(使用复杂的字母数字PIN [增强型PIN] 以帮助TPM 反攻击缓解)。正如我们将向您展示的,情况并非如此。一个预先装备好的攻击者可以在不到 30 分钟的时间内完成整个攻击链,无需焊接、简单且相对便宜的硬件和公开可用的工具。一个将它完全置于邪恶女仆领域的过程。

对于那些不知道的人来说,TPM 是一种高度安全且复杂的硬件,具有大量的篡改检测和保护。直接攻击 TPM 不太可能在测试时间内取得成果。因此,我们必须查看围绕 TPM 的信任关系及其依赖的内容。它是与主板上其他组件不同的独立芯片,可能容易受到各种攻击。此处显示了我们所讨论的特定 TPM:研究特定 TPM 芯片后发现它使用串行外设接口 (SPI) 协议与 CPU 通信:当我们发现笔记本电脑原理图中提到的 TPM 时进一步支持该协议:SPI 是一种通信协议对于嵌入式系统,几乎在所有硬件中都非常普遍。由于其简单性,SPI 没有加密选项。任何加密都必须由设备本身处理。在撰写本文时,BitLocker 未使用 TPM 2.0 标准的任何加密通信功能,这意味着来自 TPM 的任何数据都以明文形式出现,包括 Windows 的解密密钥。如果我们可以获取该密钥,我们应该能够解密驱动器,访问 VPN 客户端配置,并可能访问内部网络。以这种方式绕过 TPM 类似于忽略诺克斯堡而专注于从它出来的不那么装甲的汽车。为了嗅探通过 SPI 总线移动的数据,我们必须将引线或探针连接到 TPM 上的引脚(上面标记为 MOSI、MISO、CS 和 CLK)。通常这很简单,但在这种情况下存在实际问题。此 TPM 采用 VQFN32 封装,非常小。 “销”实际上只有 0.25 毫米宽,间距为 0.5 毫米。这些“引脚”实际上并不是引脚,它们平贴在芯片壁上,因此在物理上不可能连接任何类型的夹子。您可以将“飞线”焊接到焊盘上,但这很麻烦,而且往往是一种物理上非常不稳定的连接。或者,一种常见的策略是放置串联电阻以进行焊接,但它们同样小,甚至更脆弱。这并不容易。但在我们开始之前,我们认为可能有另一种方式。很多时候,SPI 芯片与其他 SPI 芯片共享相同的“总线”。这是硬件设计人员用来简化连接、节省成本并使故障排除/编程更容易的技术。我们开始在整个电路板上寻找可能与 TPM 位于同一总线上的任何其他芯片。也许他们的别针会更大更容易使用。经过一些探索和查阅原理图后,结果证明 TPM 与另一个芯片共享一个 SPI 总线,CMOS 芯片肯定有更大的引脚。事实上,CMOS 芯片几乎是标准主板上最大的引脚尺寸,它是 SOP-8(又名 SOIC-8)。

这是理想的。我们继续根据 CMOS 的数据表将我们的 Saleae 逻辑分析仪连接到引脚:一个预先装备的攻击者,就像我们在开头提到的,将使用 SOIC-8 夹子而不是单独的探针。该剪辑将使连接到芯片变得非常简单,并将实际攻击时间缩短几分钟。现在探针已连接好,我们启动笔记本电脑并记录在迹线上移动的每个 SPI 字节。在数百万条数据中的某个地方发送了一个 BitLocker 解密密钥,现在的问题是找到它。我们使用 Henri Numi 的 bitlocker-spi-toolkit 尝试自动提取密钥,但它在我们的捕获中不起作用。下面是他的高级分析器 (HLA) 的屏幕截图,您可以看到一些事务被正确解析,而有些则没有。我们的捕获有些不同,HLA 无法解释。经过几天的故障排除、比较捕获和拉头发,我们终于发现它是 TPM 命令数据包的不同位掩码的组合以及用于查找密钥的不同正则表达式的组合。我们提出了修复请求,现在 bitlocker-spi-toolkit 也可以解析这些类型的请求。一旦我们有了那个,瞧,钥匙就弹出来了。完美,现在我们有了解密密钥,让我们解密 SSD,看看我们有什么。我们拉出 SSD,将其安装在适配器中并插入:我们制作了驱动器的磁盘映像,然后继续操作。有趣的是,在整个攻击链过程中,耗时最长的部分只是简单地复制了 256GB 的文件。在本地获得映像后,我们可以使用 Dislocker 工具集解密驱动器: $ echo daa0ccb7312<REDACTED> | xxd -r -p > ~/vmk$ mkdir ~/ssd ~/mounted$ sudo lostup -P /dev/loop6 /mnt/hgfs/ExternalSSD/ssd-dd.img $ sudo fdisk -l /dev/loop6 磁盘 /dev /loop6:238.47 GiB,256060514304 字节,500118192 个扇区单位:1 * 512 = 512 字节扇区 扇区大小(逻辑/物理):512 字节/512 字节 I/O 大小(最小/最佳):512 字节/磁盘标签类型:GPT磁盘标识:BD45F9A-F26D-41C9-8F1F-0F1EE74233设备开始结束扇区大小类型的/ dev / loop6p1 2048 1026047 1024000级500M的Windows恢复环境的/ dev / loop6p2 1026048 2050047 1024000 500M电喷系统的/ dev / loop6p3 2050048 2312191 262144 128M微软保留 /dev/loop6p4 2312192 500117503 497805312 237.4G 微软基本数据 <- bitlocker drive$ sudo dislocker-fuse -K ~/vmk /dev/loop6p4 -- ~/ssd$ sudo ntfs-3g ~/ss-file /mounted$ ls -al ~/mounted total 19156929 drwxrwxrwx 1 root root 8192 May 5 19:00 。 drwxrwxrwt 17 root root 4096 Jun 15 09:43 .. drwxrwxrwx 1 root root 0 May 6 14:29 '$Recycle.Bin' drwxrwxrwx 1 root root 0 May 4 10:55 '$WinREAgent ' -Decx17x r8 r8rwxrwx 2019 bootmgr -rwxrwxrwx 1 root root 1 Dec 7 2019 BOOTNXT lrwxrwxrwx 2 root root 15 May 4 11:18 'Documents and Settings' -> ~/mounted/Users

既然我们可以离线纯文本访问内容,我们就开始了掠夺数据的标准流程。提取密码哈希、纯文本或编码凭据、暴露的敏感文件等。不幸的是,没有发现任何有用的东西,我们也没有得到任何类型的离线凭据,这应该不足为奇,因为这不是实际员工的笔记本电脑凭借多年的文件,它是专为此次特定测试打造的笔记本电脑。但是,我们确实找到了正在使用的 VPN 客户端:Palo Alto 的 Global Protect (GP)。 GP 有一个有趣的“功能”,称为预登录隧道:预登录是一种在用户登录之前建立 VPN 隧道的连接方法。预登录的目的是验证端点(而不是用户)并启用域脚本或其他任务在端点启动后立即运行。对于 IT 部门管理其端点来说,这听起来是一个非常好的功能。这听起来也是一种在不知道任何人的凭据的情况下访问 VPN 的好方法。理论上,如果我们可以启动笔记本电脑的后门版本,例如使用粘滞键后门,我们应该能够访问 VPN 隧道而无需任何凭据。在实践中,有很多方法可以实现这一点,但为了速度,我们决定走虚拟化路线。由于我们拥有对整个文件系统的写访问权限,我们可以做任何事情,包括重写内核级恶意软件的驱动程序文件到代理特权 DLL 以添加帐户。为了时间和效率,粘滞键非常适合这种情况,其过程很简单:现在我们有后门访问,我们只需要启动驱动器。为了将解密后的 Windows 映像作为虚拟机启动,我们首先需要创建一个自定义 VMDK 文件。该文件需要设置参数,并将解密后的BitLocker分区和加密镜像的起始扇区映射到相应的VM分区。生成的 VMDK 是:# Disk DescriptorFileversion=1CID=19362586parentCID=ffffffffcreateType="partitionedDevice"# Extent descriptionRW 63 FLAT "ssd-dd.img" 0RW 1985 FLAT "ssd-dd.img" 2048RW0"ssd-dd.img" 2048RW0 10220400d-ZFLATW100s img" 1026048RW 262144 FLAT "ssd-dd.img" 2050048#这是加密的bitlocker驱动器所在的第4个分区RW 497805312 FLAT "dislocker2-file" 0RW 655 ZERO RW 33 FLATd3ddbvr.imgtws 4"ddb.adapterType="ide"ddb.geometry. cylinders="16383"ddb.geometry.heads="16"ddb.geometry.sectors="63"ddb.uuid.image="43e1e-5c24-46cc-bcec -daad3d500"ddb.uuid.parent="00000000-0000-0000-0000-000000000000"ddb.uuid.modification="8d285-ad86-4227-86d4-ec168b6b3"dd0000000000000000000000000000 0000-000000000000"ddb.geometry.biosCylinders="1024"ddb.geometry.biosHeads="255"ddb.geometry.biosSectors="63" 现在,使用 VMDK 和粘滞键后门 Windows 映像,我们创建了虚拟机,启动它,然后在登录屏幕上点击 WINdows + U恩。

这正是我们想要的。为此,通过附加到计算机帐户的证书对 VPN 进行身份验证。由于每个计算机帐户在 Active Directory 中都具有非常基本的权限,因此我们可以在域内运行基本的 SMB 命令。我们向域控制器查询用户、组、系统等各类域信息。我们还可以列出和查看内部 SMB 共享上的文件内容:我们也可以使用此计算机帐户的访问权限作为启动内部攻击和横向升级。为了证明我们拥有对不应该拥有的服务器的写访问权限,我们从上面选择了内部文件服务器。概念证明是将文件写入该服务器并将其读回以证明读/写访问权限。这个“扫描器”共享是攻击者的绝佳选择,作为各种技术的水坑,例如 LNK 攻击、木马 PDF 等。此时我们已经获得了对内部网络的访问权限、对 Active Directory 的基本权限以及访问内部文件共享,足以开始危害敏感的公司数据。回顾一下,我们拿了一台锁定的 FDE 笔记本电脑,嗅探了来自 TPM 的 BitLocker 解密密钥,后门虚拟化映像,并使用其 VPN 自动连接功能攻击内部公司网络。这是从被盗笔记本电脑到内部妥协的一种方式。特别感谢之前分享他们的知识并帮助使这次攻击更加现实、实用和更快的研究人员: