注册
登录
新闻动态
其他科技
返回
从被盗笔记本电脑到公司网络内部
作者:
糖果
发布时间:
2024-03-25 08:39:58 (26天前)
来源:
inside-the-company-network
你能用被盗的笔记本电脑做什么?你能访问我们的内部网络吗?这是客户最近想要回答的问题。剧透警报:是的,是的,你可以。这篇博文将带您了解我们如何获取“被盗”的公司笔记本电脑并将多个漏洞链接在一起以进入客户的公司网络。 我们收到了一台预配置了该组织标准安全堆栈的联想笔记本电脑。我们没有得到关于这台笔记本电脑的任何信息,没有测试凭据,没有配置详细信息,什么都没有,这是一个 100% 的黑盒测试。笔记本电脑进来后,我们打开了装运箱并开始工作。在我们对笔记本电脑(BIOS 设置、正常启动操作、硬件详细信息等)进行调查后,我们注意到遵循了许多最佳实践,从而消除了许多常见攻击。例如: · pcileech /DMA 攻击被阻止,因为 Intel 的 VT-d BIOS 设置已启用 · 所有 BIOS 设置都被密码锁定 · BIOS 启动顺序被锁定,以防止从 USB 或 CD 启动 · Secureboot 已完全启用并阻止任何未签名的操作系统 · 由于全盘加密,Kon-boot身份验证绕过不起作用 · LAN 乌龟和其他通过 USB 以太网适配器进行的响应者攻击没有返回任何可用的信息 · SSD 使用 Microsoft 的 BitLocker 进行全盘加密 (FDE),通过可信平台模块 (TPM) 进行保护 在没有其他任何工作的情况下,最后一点,TPM 保护 BitLocker,将成为我们的方式。我们在进行侦察时看到的一件事是笔记本电脑直接启动到 Windows 10 登录屏幕。再加上 BitLocker 加密意味着驱动器解密密钥仅从 TPM 中提取,不需要用户提供 PIN 或密码,这是 BitLocker 的默认设置。如果出现以下情况,Microsoft 建议提高安全性: 具有技能和长时间物理访问的攻击者 有足够的时间进行有针对性的攻击;该攻击者将打开外壳、焊接并使用复杂的硬件或软件。 减轻: • 使用PIN 保护器将预启动身份验证设置为TPM(使用复杂的字母数字PIN [增强型PIN] 以帮助TPM 反攻击缓解)。 正如我们将向您展示的,情况并非如此。一个预先装备好的攻击者可以在不到 30 分钟的时间内完成整个攻击链,无需焊接、简单且相对便宜的硬件和公开可用的工具。一个将它完全置于邪恶女仆领域的过程。 对于那些不知道的人来说,TPM 是一种高度安全且复杂的硬件,具有大量的篡改检测和保护。直接攻击 TPM 不太可能在测试时间内取得成果。因此,我们必须查看围绕 TPM 及其依赖的信任关系。它是与主板上其他组件不同的独立芯片,可能容易受到各种攻击。我们有问题的特定 TPM 如下所示: 研究该特定 TPM 芯片后发现它使用串行外设接口 (SPI) 协议与 CPU 通信: 屏幕截图 2021-07-09 at 8.06.28 AM.png 当我们发现笔记本电脑原理图中提到的 TPM 时,进一步支持了这一点: 屏幕截图 2021-07-09 at 8.08.57 AM.png 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-chip-annotated.png 这是理想的。我们继续根据CMOS 的数据表将我们的Saleae 逻辑分析仪连接到引脚: 板.png CMOS-hookup-close.png 一个预先装备好的攻击者,就像我们在开头提到的那样,会改为使用SOIC-8 夹子而不是单独的探针。该剪辑将使连接到芯片变得非常简单,并将实际攻击时间缩短几分钟。 现在探针已连接好,我们启动笔记本电脑并记录在迹线上移动的每个 SPI 字节。在数百万条数据中的某个地方发送了一个 BitLocker 解密密钥,现在的问题是找到它。我们使用 Henri Numi 的bitlocker-spi-toolkit尝试自动提取密钥,但它在我们的捕获中不起作用。下面是他的高级分析器 (HLA) 的屏幕截图,您可以看到一些事务被正确解析,而有些则没有。我们的捕获有些不同,HLA 无法解释。 逻辑-ss1.png 经过几天的故障排除、比较捕获和拉头发,我们终于发现它是 TPM 命令数据包的不同位掩码的组合,以及用于查找密钥的不同正则表达式。我们提出了修复请求,现在 bitlocker-spi-toolkit 也可以解析这些类型的请求。一旦我们有了那个,瞧,钥匙就弹出来了。 屏幕截图 2021-06-16 at 9.38.03 PM.png 完美,现在我们有了解密密钥,让我们解密 SSD,看看我们有什么。我们拉出 SSD,将其安装在适配器中并插入: IMG_2198.png 我们制作了驱动器的磁盘映像,我们继续操作。有趣的是,在整个攻击链过程中,耗时最长的部分只是简单地复制了 256GB 的文件。在本地获得映像后,我们可以使用Dislocker工具集解密驱动器: $ echo daa0ccb7312<已编辑> | xxd -r -p > ~/vmk $ mkdir ~/ssd ~/mounted $ sudo lossup -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 字节 / 512 字节 磁盘标签类型:gpt 磁盘标识符:BD45F9A-F26D-41C9-8F1F-0F1EE74233 设备开始结束扇区大小类型 /dev/loop6p1 2048 1026047 1024000 500M Windows 恢复环境 /dev/loop6p2 1026048 2050047 1024000 500M EFI 系统 /dev/loop6p3 2050048 2312191 262144 128M 微软保留 /dev/loop6p4 2312192 500117503 497805312 237.4G 微软基本数据<-bitlocker驱动 $ sudo dislocker-fuse -K ~/vmk /dev/loop6p4 -- ~/ssd $ sudo ntfs-3g ~/ssd/dislocker-file ~/mounted $ ls -al ~/mounted 总计 19156929 drwxrwxrwx 1 根 8192 5 月 5 日 19:00。 drwxrwxrwt 17 根根 4096 六月 15 09:43 .. drwxrwxrwx 1 root root 0 May 6 14:29 '$Recycle.Bin' drwxrwxrwx 1 root root 0 May 4 10:55 '$WinREAgent' -rwxrwxrwx 1 root root 413738 2019 年 12 月 7 日 bootmgr -rwxrwxrwx 1 根 2019 年 12 月 7 日 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 以添加帐户。为了时间和效率的利益,粘滞键非常适合这种场景,其过程很简单: 将 C:\Windows\System32\Utilman.exe 复制到 Utilman.exe.bak 将 C:\Windows\System32\cmd.exe 复制到 Utilman.exe 在登录屏幕上按 Windows + U 现在我们有了后门访问,我们只需要启动驱动器。为了将解密后的 Windows 映像作为虚拟机启动,我们首先需要创建一个自定义 VMDK 文件。该文件需要设置参数,并将解密后的BitLocker分区和加密镜像的起始扇区映射到相应的VM分区。由此产生的 VMDK 是: # 磁盘描述符文件 版本=1 客户 ID=19362586 父CID = ffffffff createType="partitionedDevice" # 范围描述 RW 63 扁平“ssd-dd.img” 0 RW 1985 平面“ssd-dd.img”2048 RW 1024000 零 RW 1024000 扁平“ssd-dd.img”1026048 RW 262144 扁平“ssd-dd.img”2050048 # 这是加密的 bitlocker 驱动器所在的第 4 个分区 RW 497805312 扁平“dislocker2 文件”0 RW 655 零 RW 33 扁平“ssd-dd.img” 63 ddb.virtualHWVersion = "4" ddb.adapterType="ide" ddb.geometry.圆筒=“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" ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000" ddb.geometry.biosCylinders="1024" ddb.geometry.biosHeads="255" ddb.geometry.biosSectors="63" 现在,使用 VMDK 和粘滞键后门 Windows 映像,我们创建了虚拟机,启动它,然后在登录屏幕上点击 WIndows + U。 VirtualBox_win10-3_28_06_2021_15_33_47.png GlobalProtect 状态:已连接 这正是我们想要的。为此,通过附加到计算机帐户的证书对 VPN 进行身份验证。由于每个计算机帐户在 Active Directory 中都具有非常基本的权限,因此我们可以在域内运行基本的 SMB 命令。我们向域控制器查询各种类型的域信息,例如用户、组、系统等。我们还可以列出和查看内部 SMB 共享上的文件内容: VirtualBox_win10-3_29_06_2021_08_01_32 copy.png 我们也可以利用这个电脑账户的访问权限作为平台发起内部攻击和横向升级。为了证明我们拥有对不应该拥有的服务器的写访问权限,我们从上面选择了内部文件服务器。概念证明是将文件写入该服务器并将其读回以证明读/写访问权限。 写入文件服务器 copy.png 这个“扫描器”共享是攻击者的绝佳选择,作为各种技术的水坑,例如 LNK 攻击、木马 PDF 等。此时我们已经获得了对内部网络的访问权限、对 Active Directory 的基本权限以及访问内部文件共享,足以开始危害敏感的公司数据。 回顾一下,我们拿了一台锁定的 FDE 笔记本电脑,嗅探了来自 TPM 的 BitLocker 解密密钥,后门虚拟化映像,并使用其 VPN 自动连接功能攻击内部公司网络。这是从被盗笔记本电脑到内部妥协的一种方式。
收藏
举报
1 条回复
动动手指,沙发就是你的了!
登录
后才能参与评论