,----------------, ,---------,
,-----------------------, ," ,"|
," Napper v1.3 for TPM ," | ," ," |
+-----------------------+ | ," ," |
| .-----------------Z | | +---------+ |
| | Z | | | | -==----'| |
| | ︶ ︶ z | | | | | |
| | - | | |/----| ==== oo | |
| | | | | ,/| (((( | ,"
| `-----------------' |," .;'/ | (((( | ,"
+-----------------------+ ;; | | |,"
/_)______________(_/ //' | +---------+
___________________________/___ `,
/ oooooooooooooooo .o. oooo / \,"---------
/ ==ooooooooooooooo==.o. ooo= / ,`\--{-D) ,"
`-----------------------------' '----------"
Napper v1.3 for checking a TPM vulnerability, CVE-2018-6622 and unknown CVE
Project link: https://github.com/kkamagui/napper-for-tpm
Please contribute your summary report to the Napper project!
“Napper”是一款用于检查离散TPM和固件TPM(Intel PTT)的新型漏洞检测工具。CVE-2018-6622及一个未知CVE与高级配置与电源接口(ACPI)的S3休眠状态或挂起相关。攻击者可利用S3休眠破坏TPM,并使得基于平台配置寄存器(PCR)的远程认证及密封/解封功能失效。如需了解CVE-2018-6622及未知CVE的详细信息,请阅读我们的USENIX论文《A Bad Dream: Subverting Trusted Platform Module While You Are Sleeping》以及Black Hat Europe 2019演讲《BitLeaker: Subverting BitLocker with One Vulnerability》。
Napper及CVE-2018-6622曾在以下安全会议上介绍:
与Intel平台信任技术(PTT)相关的一个未知CVE曾在以下安全会议上介绍:
您可以观看下方演示视频:
我们欢迎您的贡献。您提供的Napper汇总报告将使世界更加安全。
Napper采用GPL v2许可协议。
可信平台模块(TPM)是一种防篡改设备,旨在提供基于硬件或固件的安全功能。TPM芯片包含随机数生成器、非易失性存储、加密/解密模块以及平台配置寄存器(PCR),可用于BitLocker、DM-Crypt、可信启动(tboot)和开放云完整性技术(Open CIT)等多种安全应用。
TPM已广泛部署在商用设备中,为构建可信平台提供了坚实基础,尤其是在企业及政府系统中。由于TPM是可信平台的关键节点,许多研究人员曾试图发现TPM中的漏洞,并得出结论:没有物理访问权限很难攻破它。然而,这一结论已不再成立。
我们发现的漏洞可通过高级配置与电源接口(ACPI)破坏TPM。PC、笔记本电脑和服务器中的ACPI提供了六种休眠状态(S0-S5)以降低功耗。当系统进入休眠状态时,CPU、设备和RAM将断电。由于系统会关闭包括安全设备在内的组件,因此在唤醒时需要重新初始化它们,这便成为了攻击面。我们无需物理访问即发现了该攻击面上的漏洞。
为缓解这些漏洞,我们还提出了应对措施并使用新工具“Napper”来检查TPM的漏洞。Napper是一个基于Linux的可启动USB设备,包含内核模块和漏洞检查软件。当您使用Napper启动系统时,它会让系统“小睡”以检查漏洞,并向您报告结果。
Napper包含一个特殊的内核模块和定制的tpm2工具。Napper基于Ubuntu 18.04,我们对其进行了定制和裁剪以制作Live CD镜像。如果您只想检查TPM漏洞并希望采用简单的方式,请跳至第3.1节,使用Napper Live CD镜像与您的USB存储设备。Napper Live CD不仅包含二进制工具,还包含Napper的完整源代码。如果您当前使用Ubuntu 18.04并希望从头构建Napper,请跳至第3.2节进行构建。
Napper Live CD镜像存放于Napper项目的发布页面。
如果您使用Microsoft Windows操作系统,请使用Win32 Disk Imager并将Napper Live CD镜像写入您的USB存储设备。
如果您使用Linux或Mac OS X,请使用以下dd命令。```
$> sudo dd if=Napper-LiveCD.iso of=/dev/sdX bs=4096 $> sync
### 3.1.3. 使用USB存储重启系统并运行Napper
插入USB存储并更改引导顺序以使用它启动后,您将看到Napper的引导菜单,选择第一个选项即可启动Napper Live CD。
<center> <img src="https://assets.kitploit.com/production/public/readmes/28076/525cb00d8f948ccc1653bd4fd08c8baf293615ad80ec52082b6c04efe7484f57.png" alt="napper_boot_menu"/> </center>
启动完成后,您会在桌面上看到README.txt文件,左侧任务栏上有Napper工具图标。要检查您的系统,请点击任务栏顶部的图标,并输入密码`napper`。Napper工具的`ID`和`密码`均设置为`napper`。在Napper测试系统时,它会使系统进入休眠并唤醒。因此,您需要敲击键盘将系统从ACPI S3休眠状态唤醒。
<center> <img src="https://assets.kitploit.com/production/public/readmes/28076/50fdb76d396e32fe811b7f9e23849fd4b66fccee5c4325b5f8c4f167938c51b2.png" alt="napper_run"/> </center>
如果您的系统存在TPM漏洞,Napper将在此处报告摘要,表明您的系统易受攻击。如果是这样,请跳转到第4节,并将摘要通过[Napper项目的Issue报告](https://github.com/kkamagui/napper-for-tpm/issues)或[网站](https://kkamagui.github.io/)分享给我们的项目Napper。
<center> <img src="https://assets.kitploit.com/production/public/readmes/28076/37d28f91902c745a21bd3be9c8f373394694127db5037cc4fb522e1e660c0e65.png" alt="napper_summary"/> </center>
## 3.2. 从零开始使用Ubuntu 18.04构建Napper(详细版本)
### 3.2.1. 下载Ubuntu 18.04并克隆Napper源代码
Napper基于Ubuntu 18.04。因此,您需要从[Ubuntu官方网站](https://www.ubuntu.com/download/desktop)下载并安装到目标系统上。然后,从[Napper项目站点,https://www.github.com/kkamagui/napper-for-tpm](https://www.github.com/kkamagui/napper-for-tpm)克隆Napper源代码,并使用以下命令构建。```
# Clone Napper source code from project site.
$> git clone https://github.com/kkamagui/napper-for-tpm.git
# Build Napper.
$> cd napper-for-tpm
$> ./bootstrap
构建源代码后,您可以使用终端运行Napper工具。请在终端中输入以下命令。Napper前端由Python脚本构成。```
$> sudo ./napper.py
,----------------, ,---------,
,-----------------------, ," ,"|
," Napper v 1.3 for TPM ,"| ," ," |
+-----------------------+ | ," ," |
| .-----------------Z | | +---------+ |
| | Z | | | | -==----'| |
| | ︶ ︶ z | | | | | |
| | - | | |/----| ==== oo | |
| | | | | ,/| (((( | ,"
| -----------------' |," .;'/ | (((( | ," +-----------------------+ ;; | | |," /_)______________(_/ //' | +---------+ ___________________________/___ ,
/ oooooooooooooooo .o. oooo / ,"---------
/ ==ooooooooooooooo==.o. ooo= / ,\--{-D) ," -----------------------------' '----------"
Napper v1.3 for checking a TPM vulnerability, CVE-2018-6622 and unknown CVE Made by Seunghun Han, https://kkamagui.github.io Project link: https://github.com/kkamagui/napper-for-tpm
Checking TPM version for testing. [] Checking TPM version... TPM v2.0. [] Your system has TPM v2.0, and vulnerability checking is needed.
Preparing for sleep. [] Checking the TPM vulnerability testing module... Starting. [] Ready to sleep! Please press "Enter" key. [*] After sleep, please press "Enter" key again to wake up.