USB Flash闪存驱动器安全分析(第一部分)
翻译原文链接:Hacking Some More Secure USB Flash Drives (Part I) | SySS Tech Blog
文章翻译总结:文章对一些具有AES硬件加密的USB闪存驱动器的网络安全分析研究。研究由SySS的IT安全专家Matthias Deeg进行,他在2022年初发现了几个安全漏洞。这些USB闪存驱动器被宣传为具有256位AES硬件加密,有时还带有生物识别技术,但实际上在更仔细的观察核分析下并不安全。还详细介绍了针对所研究的USB闪存驱动器的安全问题,包括使用具有风险的加密原语、缺少硬件中的不可变可信根、以及预期行为违规等。文章最后提供了对所发现安全漏洞的总结,并讨论了这些结果表明,新的便携式存储设备仍然存在旧的安全问题。
文章相关标签:#USB Security、#固件分析、#加密、#可信根、#生物安全
USB Flash闪存驱动器安全分析(第一部分)
在2022年初进行的一项研究中,SySS的IT安全专家Matthias Deeg在测试的多款带有AES硬件加密的USB闪存驱动器中发现了多个安全漏洞。
一、文章引入
一直以来,为了安全起见,在静态状态下对敏感数据进行加密是一个明智的选择,尤其是当这些数据被存储在便携式设备上,例如外接硬盘或USB闪存驱动器。这是因为一旦这些存储设备遗失或被盗,您需要确保自己的机密数据不会被未经授权的人所访问。然而,令人遗憾的是,即便到了2022年,市场上仍有一些标榜“安全”的便携式存储设备,它们配备了256位AES硬件加密,有时甚至还包括生物识别技术,但实际上,这些设备的安全性并不像它们所声称的那样。
在这系列博客文章中(这是第一篇),我想阐述的是如何引发进一步的研究,最终揭露了几个在加密上存在缺陷的所谓“安全”便携式存储设备。这项研究延续了对带有硬件AES加密功能的不安全便携式存储设备的长久关注,这一关注可以追溯到多年以前。
第一部分将介绍我对如图所示的安全USB闪存驱动器Verbatim Keypad Secure的研究成果。
安全USB闪存驱动器Verbatim Keypad Secure的正面视图:
Verbatim Keypad Secure是一款配备了AES 256位硬件加密功能的USB驱动器,并内置有密码输入键盘。
制造商对Verbatim Keypad Secure的相关描述如下:
这款产品采用AES 256位硬件加密技术,能够实时无缝地加密存储在驱动器上的所有数据,并配备了内置的密码输入键盘。与软件加密相比,这款USB驱动器不会在电脑或系统的临时内存中留下密码痕迹,因此安全性更高。此外,一旦该设备不慎落入他人之手,它将在20次密码尝试失败后自动锁定,并需要重新格式化才能再次使用。[1]
Verbatim Keypad Secure USB 3.2 Gen 1 Drive 64GB | Verbatim Online Shop
二、测试方法
针对这个研究不同安全USB闪存驱动器的项目,我们采用了以下经过验证的IT产品测试方法论:
- 硬件分析:拆解硬件,识别芯片,查阅手册,定位测试点,并利用逻辑分析仪和/或JTAG调试器进行分析
- 固件分析:努力获取设备固件(包括内存转储、下载等方式),并对固件进行安全性分析,以寻找潜在的安全问题
- 软件分析:对设备的客户端软件进行静态代码审查和运行时监控分析
根据具体产品的不同,可能无法应用所有类型的分析。例如,如果某个产品没有软件组成部分,那么就无法进行软件分析,Verbatim Keypad Secure正是这样的情况。
Verbatim Keypad Secure USB 3.2 Gen 1 Drive 64GB | Verbatim Online Shop
三、攻击面和攻击场景
在这项研究项目中,针对所测试的“安全”便携式USB存储设备的攻击需要物理接触到硬件。通常,这些攻击可以在存储设备生命周期的不同阶段实施:
- 在合法用户使用设备之前进行攻击(供应链攻击)
- 在合法用户使用设备之后进行攻击
- 针对丢失或被盗的设备进行攻击
- 在合法用户不知情的情况下临时获取设备的物理访问权并进行攻击
四、安全USB闪存驱动器所需的安全特性
在进行安全测试时,应当拥有一份规格说明书或至少一组测试预期,这样才能判断所获得的测试结果是否真正代表了安全风险
针对安全USB闪存驱动器这类产品,以下是我所期望的安全特性列表:
- 所有用户数据都应得到安全加密(即使观察密文,也无法推断出有关明文的任何信息)
- 只有授权用户才能获取存储的数据
- 用户认证流程应无法被规避
- 在连续X次认证尝试失败后,设备应自动重置
- 设备完整性应通过安全的加密措施得到保障
- 进行穷举的离线暴力破解攻击应当成本极高
- 应具备非常庞大的密钥搜索空间(例如,存在2^256种可能的加密密钥)
- 攻击者不应能轻易获取必要的数据(没有高级、昂贵的设备和相应的专业知识,数据无法被提取)
五、硬件分析
在分析一款安全USB闪存驱动器这类硬件设备时,首先需要做的是仔细检查其硬件设计。通过拆卸Verbatim Keypad Secure的外壳,我们可以看到其内部的印刷电路板(PCB),如下图所展示。
在这里,我们能够识别出该设备的三个主要组件:
- NAND闪存芯片(型号TS1256G181)
- 内存控制器(型号MARVELL-88NV1120)
- USB至SATA桥接控制器(型号INIC-3637EN)
当我们拆下主PCB并检查其背面时,我们发现了另外两个关键组件:
- 一个SPI闪存芯片(型号XT25F01D)
- 一个键盘控制器(未知型号,标记为SW611 2121)
此外,我们还有若干按键组成了键盘。
Marvell内存控制器和NAND闪存芯片组成了一个M.2规格的固态硬盘(SSD),如下图所展示。
M.2规格的固态硬盘(正面和背面视图)
这个SSD可以通过另一个支持该规格的SSD外壳进行读取和写入,这在后续章节中描述的各种安全测试中显得极为有用。
六、锁定设备和重置操作
在深入探究这款安全USB闪存驱动器的各个主要组件之前,我们首先进行了一些针对其宣传中提到的安全特性的基础测试,例如用户手册中展示的设备锁定和重置功能,如下图所展示。
Verbatim Keypad Secure用户手册中关于设备锁定的警告提示
这项安全特性的设计初衷是为了在暴力破解攻击中限制密码尝试次数,最多不超过20次。一旦在20次解锁尝试失败后达到这个阈值,USB驱动器应该被重新初始化,且之前存储的所有数据应无法再被访问。但在研究项目中,通过手动方式进行密码暴力破解攻击时,我们无法在达到20次连续解锁失败后锁定测试设备。因此,Verbatim所宣称的这种锁定USB驱动器并要求重新格式化的安全特性实际上并不符合其规定。这意味着,如果一个攻击者能够物理接触到Verbatim Keypad Secure USB闪存驱动器,他们可以尝试超过20次的密码猜测,以解锁设备。在我们的手动暴力破解攻击测试中,完全无法实现锁定设备以迫使其重新格式化的功能。
我们发现的安全问题已通过我们的负责任披露计划,通过安全通告SYSS-2022-004进行了报告,并获得了CVE编号CVE-2022-28386。
Verbatim Keypad Secure USB 3.2 Gen 1 Drive 64GB | Verbatim Online Shop
https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2022-004.txt
NVD - CVE-2022-28386
七、加密
由于Verbatim Keypad Secure内置了一个M.2规格的SATA SSD,该SSD可以被安装在另一个兼容的SSD外壳中,因此分析这款安全USB闪存驱动器存储的数据变得相对简单。
Verbatim Keypad Secure USB 3.2 Gen 1 Drive 64GB | Verbatim Online Shop
通过对加密数据进行分析,我们可以观察到一些明显的模式,如下面的十六进制转储所示:
# hexdump -C /dev/sda 00000000 c4 1d 46 58 05 68 1d 9a 32 2d 29 04 f4 20 e8 4d |..FX.h..2-).. .M| * 000001b0 9f 73 b0 a1 81 34 ef bd a4 b3 15 2c 86 17 cb 69 |.s...4.....,...i| 000001c0 eb d0 9d 9a 4e d8 04 a6 92 ba 3f f4 0c 88 a5 1d |....N.....?.....| 000001d0 c4 1d 46 58 05 68 1d 9a 32 2d 29 04 f4 20 e8 4d |..FX.h..2-).. .M| * 000001f0 e0 01 66 72 af f2 be 65 5f 69 12 88 b8 a1 0b 9d |..fr...e_i......| 00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00100000 73 b2 f8 fb af cf ed 57 47 db b8 c7 ad 9c 91 07 |s......WG.......| 00100010 7a 93 c9 d9 60 7e 2c e4 97 6c 7b f8 ee 4f 87 2c |z...`~,..l{..O.,| 00100020 19 72 83 d1 6d 0b ca bb 68 f8 ec e3 fc c0 12 b7 |.r..m...h.......| [...]
在这个十六进制转储输出中,星号(*
)表明上一行(即16字节的数据)被重复了一次或多次。地址列显示的是相同数据的连续行数。例如,前16字节c4 1d 46 58 05 68 1d 9a 32 2d 29 04 f4 20 e8 4d
从地址0x00000000
开始重复了432(0x1b0)次,而从地址0x000001d0
开始的同样16字节模式则重复了32次。
在加密数据中发现这种重复的字节序列通常不是一个好的现象。
通过向一个已解锁的设备写入已知的字节模式,我们可以验证相同的16字节**明文**总是会被加密成相同的16字节密文。这表明加密过程可能使用了16字节长度的块加密,并且采用了电子密码本(ECB)模式,例如AES-256-ECB。
对于相同的数据,由于这种操作模式缺少密码学中所谓的扩散性,因此即使在加密数据中也可能泄露敏感信息。一个著名的例子是Linux企鹅Tux的位图图像及其ECB加密数据,如下图所示。
Tux(左图)和其ECB加密图像数据(右图)的图像,展示了在Wikipedia上的ECB工作模式的影响。
https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_(ECB)
我们发现的安全问题已通过我们的负责任披露计划,通过安全通告SYSS-2022-002进行了报告,并获得了CVE编号CVE-2022-28382。
>
https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2022-002.txt
NVD - CVE-2022-28382
八、固件分析
在硬件分析并进行了密码认证相关的简单测试之后,接下来的步骤是分析设备固件。
由于选用了带有Initio INIC-3637EN USB-to-SATA桥接控制器和独立的SPI闪存芯片(XT25F01D)的硬件设计,后者存储着控制器的固件,因此获取固件的过程变得相对简单。可以使用像XGecu T56这样的通用编程器来轻松转储SPI闪存芯片中的内容。
遗憾的是,对于所使用的INIC-3637EN,没有公开可获得的数据表。但是,有一些研究出版物提供了关于Initio的其他类似芯片的信息,例如INIC-3607,特别是Julien Lenoir和Raphaël Rigo的出版物《Lost your “secure” HDD PIN? We can Help!》提供了极大的帮助。而且,由于INIC-3637EN采用了ARCompact指令集,Nicolas Iooss的出版物《Analyzing ARCompact Firmware with Ghidra》以及他实现的Ghidra支持,对于分析Verbatim Keypad Secure的固件非常有用。
https://xgecu.myshopify.com/collections/xgecu-t56-programmer
https://airbus-seclab.github.io/hdd/2016-Lenoir_Rigo-HDD_PIN.pdf
http://me.bios.io/images/d/dd/ARCompactISA_ProgrammersReference.pdf
https://www.sstic.org/media/SSTIC2021/SSTIC-actes/analyzing_arcompact_firmware_with_ghidra/SSTIC2021-Article-analyzing_arcompact_firmware_with_ghidra-iooss.pdf
https://github.com/NationalSecurityAgency/ghidra/pull/3006
Verbatim Keypad Secure USB 3.2 Gen 1 Drive 64GB | Verbatim Online Shop
https://ghidra-sre.org/
下面的图例展示了在Ghidra中反汇编和反编译的Verbatim Keypad Secure固件的一个示例函数。
Ghidra用于分析Verbatim Keypad Secure固件的示例:
在分析固件的过程中,我们发现固件验证仅包括一个简单的CRC-16检查,采用的是XMODEM CRC-16算法。因此,攻击者能够将恶意固件代码存储在使用的SPI闪存芯片上,并且这个恶意代码的校验和是正确的。下面的图展示了固件转储末尾的CRC-16值。
https://en.wikipedia.org/wiki/XMODEM#XMODEM-CRC
010 Editor中显示的SPI闪存芯片内容,在末尾有一个CRC-16值
010 Editor - Pro Text/Hex Editor | Edit 280+ Formats | Fast & Powerful | Reverse Engineering
为了更新修改后的固件镜像,编写了一个简单的Python脚本,该脚本修复了所需的CRC-16值,下面的输出示例性地展示了这一过程。
$ python update-firmaware.py firmware_hacked.bin Verbatim Secure Keypad Firmware Updater v0.1 - Matthias Deeg, SySS GmbH (c) 2022 [*] Computed CRC-16 (0x03F5) does not match stored CRC-16 (0x8B17). [*] Successfully updated firmware file
能够修改设备的固件对于深入分析INIC-3637EN及其硬件AES引擎的配置和操作模式来说非常有价值。通过编写一些ARCompact汇编代码并利用固件的SPI功能,我们可以在Verbatim Keypad Secure运行期间读取或修改INIC-3637EN的一些关键数据内存。
我们发现的安全问题,关于固件验证不足,这使得攻击者能够在USB驱动器上存储用于USB-to-SATA桥接控制器的恶意固件代码,已经通过我们的负责任披露计划,通过安全通告SYSS-2022-003进行了报告,并获得了CVE编号CVE-2022-28383。
下面的ARCompact汇编代码展示了如何通过SPI通信提取识别出的AES密钥缓冲区(比如内存地址0x40046904)中的内容。
.global __start.text__start:mov_s r13, 0x4000010c ; read AES modeldb_s r0, [r13]bl send_spi_bytemov_s r12, 0 ; index; mov_s r13, 0x400001d0 ; AES key buffer addressmov_s r13, 0x40056904 ; AES key buffer addressmov r14, 32 ; loop countsend_data:ldb.ab r0, [r13, 1] ; load next byteadd r12, r12, 1bl send_spi_bytesub r14, r14, 1cmp_s r14, 0bne send_datab continue.align 4 send_spi_byte:mov_s r3, 0x1mov_s r2, 0x400503e0stb.di r3, [r2, 0xf1]mov_s r1, 0xeestb.di r1, [r2, 0xe3]stb.di r3, [r2, 0xe2]stb.di r0, [r2, 0xe1] send_spi_wait:ldb.di r0,[r2, 0xf1]bbit0 r0, 0x0, send_spi_waitstb.di r3,[r2, 0xf1]j_s [blink]continue:
如何通过INIC-3637EN的SPI功能发送字节,简单地从分析的固件的另一部分复制并稍加修改地重用了这部分代码。
为了调试目的开发的ARCompact汇编代码可以使用相应的GCC工具链进行汇编。生成的机器代码可以从结果的ELF可执行文件中复制并粘贴到固件映像的合适位置。
下面的输出展示了该研究项目中使用的一个Makefile示例。
PROJECT = debug ASM = ./arc-snps-elf-as ASMFLAGS = -mcpu=arc600 LD = ./arc-snps-elf-ld LDFLAGS = --oformat=binary$(PROJECT): $(PROJECT).o$(LD) $(LDFLAGS) $(PROJECT).elf -o $(PROJECT).o$(PROJECT).o: $(PROJECT).asm$(ASM) $(ASMFLAGS) debug.asm -o $(PROJECT).elfclean:rm $(PROJECT).elf $(PROJECT).o
在固件分析过程中,我们还发现了固件代码中包含的其他设备固件也有的有趣元素,例如
- 派(π)字节序列(其他类似存储设备的奇特AES密钥,例如在出版物《Lost your “secure” HDD PIN? We can Help!》中提到的ZALMAN ZM-VE500)
- “魔法签名” INI(0x494e4920)
下面的一张图显示了在分析的固件中不同实例的派(π)字节序列的存在。在其他设备中,这个字节序列被用来初始化AES密钥缓冲区。然而,在Verbatim Keypad Secure的情况下,它们并未被使用。
在其他设备的固件中,派(π)字节序列被用作AES密钥。
下面的图展示了已识别的解锁函数的反编译版本,其中提到了“魔法签名”INI(0x494e4920)。
解锁函数内的“魔法签名”0x494e4920
由于仅依赖逆向工程对固件进行分析可能需要大量时间来彻底理解设备的内部工作机制,因此,将这种“死”方法与某种“活”方法结合起来进行研究通常是个好主意。在这项研究项目中,我们幸运地能够将分析设备固件的能力与下一节将要描述的协议分析相结合。
九、协议分析
Verbatim Keypad Secure的硬件设计允许捕捉到SPI通信,这种通信发生在键盘控制器与USB-to-SATA桥接控制器(INIC-3637EN)之间。在这里,我们可以观察到更多的有趣模式,如下面的图所示,它展示了解锁命令的捕获SPI通信。
逻辑分析器中展示的解锁PIN模式的捕获SPI通信:
通过分析SPI通信和设备固件,我们发现使用的专有SPI通信协议支持以下六个不同的命令:
0xE1
: 设备初始化0xE2
: 设备解锁0xE3
: 设备锁定0xE4
: 未知0xE5
: 密码修改0xE6
: 未知
下面是那些命令的识别消息格式:
SPI消息使用的校验和是采用XMODEM配置的CRC-16。当在命令中使用密码时,例如在解锁命令的情况下,无论实际密码长度如何,所有输入的密码总是生成一个32字节长的有效负载。此外,这样的有效负载的最后16字节总是由0xFF
字节组成,而在前16字节中可以识别出明显的模式。
例如,当使用一个由十二个“1”组成的密码(即111111111111
)时,发送的有效负载如下面的图所示。
数字序列1111
总是导致字节序列0A C9 1F 2F
,通过测试其他数字序列,可以观察到其他结果的字节序列。因此,对于用户输入的数字密码,使用了一些类型的哈希或映射。可惜的是,在这个研究项目中,包含这个算法的键盘控制器芯片是一个黑盒。
因此,对于黑盒分析,我们有两个策略:
- 通过收集更多4位输入的哈希样本并分析它们,来确定使用的哈希算法。
- 实施硬件暴力破解攻击,生成所有4位输入的可能哈希值,以便创建一个哈希查找表。
下面的表格展示了几个4位输入的示例及其生成的32位哈希值。
4-digit 输入 | 32-bit hash |
---|---|
0 | 4636B9C9 |
1111 | 0AC91F2F |
2222 | 5EC8BD1E |
3333 | 624E6000 |
4444 | B991063F |
5555 | 0A05D514 |
6666 | 7E657A68 |
7777 | B1C9C3BA |
8888 | 7323CC76 |
9999 | 523DA5F5 |
1234 | E097BCF8 |
5678 | F540AEF4 |
no input | 956669AD |
第一种方法,即手动收集更多哈希样本并尝试不同的哈希算法,在投入了一些时间后并未取得成功。因此,我们采用了第二种方法,即通过硬件暴力破解攻击来收集所有可能的哈希值。然而,还有一些问题需要解决。这些问题涉及到键盘的工作原理,以及最初设想的自动生成按键并不像预期的那样简单。
下面的图展示了逻辑分析器中观察到的所有可能键盘按键的编码方式。
根据我的分析,键盘控制器的相应引脚排列如下面的图所示。
为了自动收集所有4位输入的可能哈希值,我们将键盘控制器从PCB上拆卸下来,并将其安装在一个专门的扩展板上。然后,我们将这个扩展板放在面包板上,并与Teensy USB开发板一起使用。接着,我们为Teensy开发了一个键盘暴力破解工具,用于模拟按键操作。这个工具对于所有按键都是有效的,但无法模拟解锁键。因此,无法通过模拟解锁键的按压来触发键盘控制器与USB-to-SATA桥接控制器之间的所需SPI通信。
键盘控制器的第7脚在按下解锁键时似乎也会被激活,随后USB-to-SATA桥接控制器会迅速与键盘控制器进行SPI通信。在多次尝试复制这种行为失败后,我出于挫败感,再次尝试了黑盒分析的第一个方法。
Teensy USB Development Board
https://airbus-seclab.github.io/hdd/2016-Lenoir_Rigo-HDD_PIN.pdf
十、Hash函数分析
因此,我再次尝试在互联网上寻找有关这个未知哈希或映射算法的更多信息。幸运的是,这次我找到了一些信息,使用了哈希值4636B9C9,对应于4位输入0000,如下图所示。
Reddit上的一个帖子,标题为*[中级/困难]整数**哈希函数**解释器***,提供了我所需的解决方案,如下图所示。
https://www.reddit.com/r/dailyprogrammer_ideas/comments/92mwny/intermediatehard_integer_hash_function_interpreter/
包含整数哈希算法hash32shift2002的Reddit帖子
在本文中,未知的哈希算法是一个名为hash32shift2002的整数哈希函数,这个整数哈希函数显然是由Thomas Wang创建的,其C语言实现如下所示:
https://web.archive.org/web/20071223173210/http:/www.concentric.net/~Ttwang/tech/inthash.htm
https://web.archive.org/web/20071223173210/http:/www.concentric.net/~Ttwang/tech/inthash.htm
uint32_t hash32shift2002(uint32_t hash) {hash += ~(hash << 15);hash ^= (hash >> 10);hash += (hash << 3);hash ^= (hash >> 6);hash += ~(hash << 11);hash ^= (hash >> 16);return hash; }
现在,最后一个未解决的问题是用户认证数据是如何以及在何处被存储和使用的。
十一、用户认证
Verbatim Keypad Secure USB闪存驱动器使用基于密码的用户认证来解锁包含用户数据的存储设备。因此,一些尚未解答的问题包括密码比较是如何进行的,以及它是否容易受到某种攻击。
根据对类似设备的研究,一个合理的推测是,用于认证过程的信息存储在SSD上。这可以通过设置不同的密码并观察SSD内容的变化来验证。研究发现,一个特殊块(在64GB测试设备中为125042696号块)用于存储认证信息,其内容会随着设置的密码而变化。此外,固件分析表明,在解锁设备时,会使用这个特殊块的前112个字节(0x70)。当USB-to-SATA桥接控制器INIC-3637EN的AES引擎在操作模式和加密密钥方面配置正确时,解密后的特殊块的前四个字节必须与前面部分提到的“魔法签名”INI”(0x494e4920)相匹配。
下面的输出示例性地展示了SSD上这个特殊块的加密内容。
Verbatim Keypad Secure USB 3.2 Gen 1 Drive 64GB | Verbatim Online Shop
# dd if=/dev/sda bs=512 skip=125042696 count=1 of=ciphertext_block.bin 1+0 records in 1+0 records out 512 bytes copied, 0.408977 s, 1.3 kB/s# hexdump -C ciphertext_block.bin 00000000 c3 f7 d5 4d df 70 28 c1 e3 7e 92 08 a8 57 3e d8 |...M.p(..~...W>.| 00000010 f1 5c 3d 3c 71 22 44 c3 97 19 14 fd e6 3d 76 0b |.\=<q"D......=v.| 00000020 63 f6 2a e3 72 8c dd 30 ae 67 fd cf 32 0b bf 3f |c.*.r..0.g..2..?| 00000030 da 95 bc bb cc 9f f9 49 5e f7 4c 77 df 21 5c f4 |.......I^.Lw.!\.| 00000040 c3 35 ee c0 ed 9e bc 88 56 bd a5 53 4c 34 6e 2e |.5......V..SL4n.| 00000050 61 06 49 08 9a 16 20 b7 cb c6 f8 f5 dd 6d 97 e6 |a.I... ......m..| 00000060 3c e7 1d 8e f8 e9 c6 07 5d fa 1a 8e 67 59 61 d1 |<.......]...gYa.| 00000070 6b a1 05 23 d3 0e 7b 61 d4 90 aa 33 26 6a 6c f9 |k..#..{a...3&jl.| * 00000100 fe 82 1c 5e 9a 4b 16 81 f7 86 48 be d9 a5 a1 7b |...^.K....H....{| * 00000200
通过深入调试设备固件,我们确定了用于解密特殊块的AES密钥是键盘控制器发送到USB-to-SATA桥接控制器INIC-3637EN的32字节有效负载,这在之前的协议分析中有所描述。但是,INIC-3637EN的AES引擎使用了一种特殊的字节顺序,其中前16个字节和后16个字节是颠倒的。
下面的Python代码演示了如何从键盘控制器通过SPI命令发送到INIC-3637EN的32字节有效负载中提取出实际的AES密钥:
AES_key = reversed(passcode_key[0:16]) + reversed(passcode_key[16:32])
由于用户认证信息存储在SSD上的一个特殊块中,并且已知通过整数哈希函数hash32shift2002从用户输入(密码)派生AES密钥的方法,因此可以对Verbatim Keypad Secure的基于密码的用户认证进行离线暴力破解攻击。由于只支持5到12位数字长的密码,有效密码的可能搜索空间相对较小。
因此,开发了名为Verbatim Keypad Secure Cracker
的软件工具,它可以找到正确的密码,从而非法访问Verbatim Keypad Secure USB闪存驱动器的加密用户数据。
下面的输出示例性地展示了一次成功的暴力破解攻击。
https://web.archive.org/web/20071223173210/http:/www.concentric.net/~Ttwang/tech/inthash.htm
Verbatim Keypad Secure USB 3.2 Gen 1 Drive 64GB | Verbatim Online Shop
Verbatim Keypad Secure USB 3.2 Gen 1 Drive 64GB | Verbatim Online Shop
# ./vks-cracker /dev/sda█████ █████ █████ ████ █████████ █████████ █████ ░░███ ░░███ ░░███ ███░ ███░░░░░███ ███░░░░░███ ░░███░███ ░███ ░███ ███ ░███ ░░░ ███ ░░░ ████████ ██████ ██████ ░███ █████ ██████ ████████░███ ░███ ░███████ ░░█████████ ░███ ░░███░░███ ░░░░░███ ███░░███ ░███░░███ ███░░███░░███░░███░░███ ███ ░███░░███ ░░░░░░░░███ ░███ ░███ ░░░ ███████ ░███ ░░░ ░██████░ ░███████ ░███ ░░░░░░█████░ ░███ ░░███ ███ ░███ ░░███ ███ ░███ ███░░███ ░███ ███ ░███░░███ ░███░░░ ░███░░███ █████ ░░████░░█████████ ░░█████████ █████ ░░████████░░██████ ████ █████░░██████ █████░░░ ░░░░░ ░░░░ ░░░░░░░░░ ░░░░░░░░░ ░░░░░ ░░░░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░░ ░░░░░... finds out your passcode.Verbatim Keypad Secure Cracker v0.5 by Matthias Deeg <matthias.deeg@syss.de> (c) 2022 --- [*] Found 4 CPU cores [*] Reading magic sector from device /dev/sda [*] Found a plausible magic sector for Verbatim Keypad Secure (#49428) [*] Initialize passcode hash table [*] Start cracking ... [+] Success!The passcode is: 99999999
我们发现的安全漏洞已通过我们的负责任披露计划,通过安全通告SYSS-2022-001进行了报告,并获得了CVE编号CVE-2022-28384。
你也可以在我们的SySS PoC视频中找到这次攻击的演示,视频标题为《黑入一个安全的USB闪存驱动器》。
https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2022-001.txt
NVD - CVE-2022-28384
https://www.youtube.com/watch?v=aZ1rCaXIKTs
十二、总结
本文介绍了导致Verbatim Keypad Secure USB闪存驱动器以下表中列出的四个不同安全漏洞的研究成果。
编号 | 安全漏洞 | 报告的安全公告 | CVE编号 |
---|---|---|---|
1 | 固件验证不足 | SYSS-2022-003 | CVE-2022-28383 |
2 | 可预测的密钥 | SYSS-2022-002 | CVE-2022-28382 |
3 | 易受攻击的哈希函数 | SYSS-2022-001 | CVE-2022-28384 |
4 | 基于密码的用户认证易受离线暴力破解攻击 | SYSS-2022-004 | CVE-2022-28386 |
这些结果表明,仍然有带有一些旧安全问题的新的便携式存储设备被生产和销售。
相关文章:
USB Flash闪存驱动器安全分析(第一部分)
翻译原文链接:Hacking Some More Secure USB Flash Drives (Part I) | SySS Tech Blog 文章翻译总结:文章对一些具有AES硬件加密的USB闪存驱动器的网络安全分析研究。研究由SySS的IT安全专家Matthias Deeg进行,他在2022年初发现了几个安全漏…...
报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant
与 TEN 相聚在「LET’S VISION 2025」大会,欢迎来展位上跟我们交流。这次我们还准备了一场聚焦「computer use」的工作坊,功能新鲜上线,线下首波体验! 📅 TEN 展位:2025年3月1日-2日 TEN workshop&#x…...
常用架构图:业务架构、产品架构、系统架构、数据架构、技术架构、应用架构、功能架构及信息架构
文章目录 引言常见的架构图I 业务架构图-案例模块功能说明1. 用户界面层 (UI)2. 应用服务层3. 数据管理层4. 基础设施层业务流程图示例技术实现II 功能架构图 -案例功能模块说明1. 船舶监控模块2. 报警管理模块3. 应急响应模块4. 通信管理模块5. 数据分析模块数据管理层基础设施…...
微信小程序的制作
制作微信小程序的过程大致可以分为几个步骤:从环境搭建、项目创建,到开发、调试和发布。下面我会为你简要介绍每个步骤。 1. 准备工作 在开始开发微信小程序之前,你需要确保你已经完成了以下几个步骤: 注册微信小程序账号&…...
C# 特性 学习记录
在C#中,特性(Attribute)是一种用于向代码元素(如类、方法、属性等)添加元数据的机制。特性本身不会直接影响代码的执行,但它们可以提供额外的信息,这些信息可以在运行时通过反射(Ref…...
DBeaver clickhouse 时区不对 时间少了8小时
选择DataBase选择Driver Manager选择clickhouse数据库点中之后,选择编辑添加两个全局属性 use_server_time_zone use_time_zone 鼠标移动到User Properties上,右键即可添加一列空白 然后断开重连...
如何测试和验证CVE-2024-1430:Netgear R7000 路由器信息泄露漏洞分析
CVE-2024-1430 是一个影响 Netgear R7000 路由器的安全漏洞,漏洞来源于该路由器 Web 管理界面的信息泄露问题。攻击者通过访问 /currentsetting.htm 文件,可能泄露敏感信息,如 Wi-Fi 密码等。 在测试和验证 CVE-2024-1430 时,您需…...
Express 中间件是什么
在 Express 里,中间件是具备访问请求对象(req)、响应对象(res)以及应用程序请求-响应循环中的下一个中间件函数(一般用next表示)的函数。 一、中间件的定义与调用顺序 在 Express 应用中&…...
【做一个微信小程序】校园地图页面实现
前言 上一个教程我们实现了小程序的一些的功能,有背景渐变色,发布功能有的呢,已支持图片上传功能,表情和投票功能开发中(请期待)。下面是一个更高级的微信小程序实现,包含以下功能:…...
(萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
目录 前言与导论 碎碎念 所以,我到底需要知道哪些东西呢 从一些基础的概念入手 常见的工具和说法 ST公司 MDK5 (Keil5) CubeMX 如何使用MDK5的一些常用功能 MDK5的一些常见的设置 前言与导论 非常感谢2301_77816627-CSDN博客的提问,他非常好奇…...
java nio 原理 非阻塞IO Netty
一、为什么必须去了解NIO 首先你需要之后Netty的主要实现手段就是Nio,很多人一直学不明白Netty,根本原因是 除了日常开发中很难能够实践,很大一部分原因是不熟悉NIO,事实上真正熟悉了NIO和它背后的原理之后,去查看Netty的源码就有…...
【ClickHouse】Ubuntu下离线安装ClickHouse数据库并使用DBeaver连接
目录 0. 安装前准备1 安装ClickHouse1.1 下载安装包1.2 离线安装1.3 配置密码1.4 启动ClickHouse服务 2 DBeaver连接配置2.1 下载ClickHouse驱动2.2 DBeaver配置2.2.1 配置主要参数2.2.2 配置驱动 2.3 常见问题处理2.3.1 修改远程登录配置2.3.2 更新驱动配置 0. 安装前准备 有…...
vue2打包带路径的项目,刷新404问题解决
问题描述 Vue 2 项目打包时设置了 publicPath: /web/,并通过 Nginx 配置访问 http://ip/web 时可以正常加载首页,但刷新页面时出现 404 错误 原nginx的配置 location /web {alias /www/dist; # 静态文件地址try_files $uri $uri/ /index.html;index i…...
【计算机视觉】文本识别
计算机视觉,广义的文本识别是指对输入的图像进行分析处理,识别出图像中的文字信息,这里的图像可以使传统的文档图像,也可以是现实世界中的场景图像。 简介 无论是传统方法还是基于深度深度学习的方法,完整的文本识别…...
Vue和React的区别
组件开发方式: Vue 使用单文件组件(SFC), HTML, JS 和 CSS 在一个文件内实现 <template><div class"my-component"><!-- HTML模板 --></div> </template><script> export default {// JavaScr…...
STM32 是什么?同类产品有哪些
STM32 是什么? STM32 是由意法半导体(STMicroelectronics)推出的基于 ARM Cortex-M 内核 的 32 位微控制器(MCU)系列。它专为高性能、低功耗的嵌入式应用设计,广泛应用于以下领域: 工业控制&am…...
Git学习使用笔记
目录 一、基本介绍 1.1 版本控制 1.2 版本控制软件的基础功能 1.3 多人协作开发/集中式版本控制 1.4 分布式版本控制 二、Git安装 2.1下载git 2.2 使用Github Desktop软件 2.2.1 创建本地仓库 2.2.2 删除本地仓库 2.2.3 仓库文件操作 2.2.4 多人协作 2.2.4.1 分…...
Bash 中的运算方式
目录 概述: 1. (()) 运算符 2. let 命令 3. expr 命令 4. $[] 直接运算 5. bc(计算器,支持浮点数) 6. awk(强大的文本处理工具,也可计算) 概述: Bash 本身只支持整数运算&am…...
NLP Word Embeddings
Word representation One-hot形式 在上一周介绍RNN类模型时,使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的,算法很难学习到单词之间的关系。 比如下面的例子,即使语言模型已经知道orange juice是常用组合词…...
Unity UI个人总结
个人总结,太简单的直接跳过。 一、缩放模式 1.固定像素大小 就是设置一个100x100的方框,在1920x1080像素下在屏幕中长度占比1/19,在3840x2160,方框在屏幕中长度占比1/38。也就是像素长款不变,在屏幕中占比发生变化 2.…...
开发基础(8):鸿蒙图表开发
mpchart mpchart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI,mpchart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图等自定义图表库。 柱状图 导入import {BarChart, …...
Vue的简单入门 一
声明:本版块根据B站学习,创建的是vue3项目,用的是vue2语法风格,仅供初学者学习。 目录 一、Vue项目的创建 1.已安装15.0或更高版本的Node.js 2.创建项目 二、 简单认识目录结构 三、模块语法中的指令 1.v-html 1.文本插值…...
vs2022支持.netframework4.0
下载nuget包 .netframework4.0 解压nuget 复制到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 参考 https://www.cnblogs.com/bdqczhl/p/18670152 https://blog.csdn.net/xiaomeng1998_/article/details/135979884...
[前端] axios网络请求二次封装
一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用,提高可维护性。 —这个有两个方案:一个是二次封装一个是实例化。(设置一些公共的参数,然后进行请求) 为什么可以解决代码的复用: 这是…...
前端包管理器的发展以及Npm、Yarn和Pnpm对比
在现代前端开发中,包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展,开发者经历了从 npm 一统天下到 Yarn 挑战格局,再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器(npm/Yarn/pnpm)进行全方位…...
城电科技| 光伏太阳花:让绿色能源随处绽放
在追求绿色可持续发展的今天,清洁能源设备不断涌现,城电科技的光伏太阳花便是其中的佼佼者。它不仅造型独特美观,更凭借出色的性能,在多个场景中都能发挥重要作用。那么,这款神奇的光伏太阳花究竟适合安装在哪里呢&…...
LVS集群(DR/NAT)
特性NAT 模式DR 模式工作原理Director 修改请求/响应的 IP 地址和端口,流量双向经过 DirectorDirector 仅修改请求的 MAC 地址,响应由 Real Server 直接返回客户端性能较低(需处理双向流量,易成瓶颈)高(仅处…...
保姆级GitHub大文件(100mb-2gb)上传教程
GLF(Git Large File Storage)安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…...
【Jenkins流水线搭建】
Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…...
linux 安装ftp
1、安装vsftpd sudo yum install -y vsftpd 2、运行以下命令,启动FTP服务,并设置开机自启动。 sudo systemctl start vsftpdsudo systemctl enable vsftpd 3、运行以下命令,查看FTP服务监听的端口。 sudo netstat -antup | grep ftp 出现…...
DDoS技术解析
这里是Themberfue 今天我们不聊别的,我们聊聊著名的网络攻击手段之一的 DDoS,看看其背后的技术细节。 DoS 了解 DDoS 前,先来讲讲 DoS 是什么,此 DoS 而不是 DOS 操作系统啊。1996年9月6日,世界第三古老的网络服务提供…...
移远通信边缘计算模组成功运行DeepSeek模型,以领先的工程能力加速端侧AI落地
近日,国产大模型DeepSeek凭借其“开源开放、高效推理、端侧友好”的核心优势,迅速风靡全球。移远通信基于边缘计算模组SG885G,已成功实现DeepSeek模型的稳定运行,并完成了针对性微调。 目前,该模型正在多款智能终端上进…...
Linux | 进程相关概念(进程、进程状态、进程优先级、环境变量、进程地址空间)
文章目录 进程概念1、冯诺依曼体系结构2、进程2.1基本概念2.2描述进程-PCB2.3组织进程2.4查看进程2.5通过系统调用获取进程标识符2.6通过系统调用创建进程-fork初识fork の 头文件与返回值fork函数的调用逻辑和底层逻辑 3、进程状态3.1状态3.2进程状态查看命令3.2.1 ps命令3.2.…...
站群服务器和普通服务器有哪些不同之处?
站群服务器是一个集中管理工具,可以允许网站管理员同时管理多个网站,但是不要管理员登录每一个网站的后台,在站群模式下,网站管理员通过一个或者多个服务器来托管大量的子站点,可以支持大规模网站的集中管理和优化。 普…...
百度千帆平台对接DeepSeek官方文档
目录 第一步:注册账号,开通千帆服务 第二步:创建应用,获取调用秘钥 第三步:调用模型,开启AI对话 方式一:通过API直接调用 方式二:使用SDK快速调用 方式三:在千帆大模…...
DeepSeek帮助解决Oracle死锁问题
最近在生产上遇到一个死锁问题,Oracle 抛出了 ORA-000060 异常。 业务场景:程序按行读取一个上游系统送的文件数据(大概有几万行),读取到数据后,每 500 行分配给一个线程去批量更新数据库(使用…...
MySQL无法连接到本地localhost的解决办法2024.11.8
问题描述:我的MySQL可以远程连接服务器,但无法连接自己的localhost。 错误提示: 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因: 1. 检查环境变量是否正确:发现没…...
Nginx之rewrite重写功能
目录 一、rewrite概述 1、rewrite功能 2、跳转场景 二、标准配置指令 1、rewrite日志记录指令 2、未初始化变量告警日志记录指令 3、rewrite 指令 3.1 正则表达式 三、rewrite模块使用实例 1.基于域名的跳转 2.基于客户端 IP 访问跳转 3.?基于旧域名跳转到新域名后…...
Selenium WebDriver自动化测试(扩展篇)--Jenkins持续集成
文章目录 一、引言二、Jenkins简介三、安装部署Jenkins安装部署四、集成Git与Maven安装必要的插件配置Git配置Maven五、创建Job创建自由风格的项目配置源码管理配置构建触发器配置构建环境配置构建步骤配置Post-build Actions六、触发构建示例:GitHub Webhook触发构建七、封装…...
MyBatis拦截器终极指南:从原理到企业级实战
在本篇文章中,我们将深入了解如何编写一个 MyBatis 拦截器,并通过一个示例来展示如何在执行数据库操作(如插入或更新)时,自动填充某些字段(例如 createdBy 和 updatedBy)信息。本文将详细讲解拦…...
DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏
DeepSeek4j Spring Boot Starter 快速入门 简介 DeepSeek4j 是一个专为 Spring Boot 设计的 AI 能力集成启动器,可快速接入 DeepSeek 大模型服务。通过简洁的配置和易用的 API,开发者可轻松实现对话交互功能。 环境要求 JDK 8Spring Boot 2.7Maven/Gr…...
linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上
linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上 这里的问题是 /usr/share/udhcpc/default.script脚本有问题 用下面正确脚本,即可写进去 #!/bin/sh# udhcpc script for busybox # Copyr…...
【工业安全】-CVE-2022-35555- Tenda W6路由器 命令注入漏洞
文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1:代码分析 4.2:流量分析 5.poc代码: 1.漏洞描述 漏洞编号:CVE-2022-35555 漏洞名称:Tenda W6 命令注入 威胁等级:高危 漏洞详情࿱…...
twisted实现MMORPG 游戏数据库操作封装设计与实现
在设计 MMORPG(大规模多人在线角色扮演游戏)时,数据库系统是游戏架构中至关重要的一部分。数据库不仅承担了游戏中各种数据(如玩家数据、物品数据、游戏世界状态等)的存储和管理任务,还必须高效地支持并发访…...
【MySQL】基础篇
1. MySQL中的NULL值是怎么存放的? MySQL的compact行格式中会用【NULL值列表】来标记值为NULL的列,NULL值不会存储在行格式中的真实数据部分。 NULL值列表会占用1字节空间,当表中所有字段都被定义成NOT NULL,行格式中就不会有NULL值…...
【自学笔记】机器学习基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 机器学习重点知识点总览一、机器学习基础概念二、机器学习理论基础三、机器学习算法1. 监督学习2. 无监督学习3. 强化学习 四、机器学习处理流程五、机器学习常见问…...
记录阿里云CDN配置
网站接入CDN全流程,共4步!-阿里云开发者社区 1、开通阿里云CDN服务 2、添加加速域名 3、验证域名归属权 4、域名添加CDN生成的CNAME解析 按照官网描述增加。细节点: 1. 域名和泛域名区别 2.开启https,要用nginx的证书,和项…...
同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展
1 2025开年,人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸,不仅在国内掀起了技术热潮,并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球,这不仅重塑了产业格…...
聚铭网络入围2025年度江苏省政府采购信息安全设备协议供货名单
近日,2025年度江苏省党政机关、事业单位及团体组织信息安全设备框架协议采购项目入围结果公布。聚铭网络凭借自身专业实力和技术优势脱颖而出,成功入围22个分包。 此次采购项目是江苏省政府采购领域级别最高、覆盖面最广的项目之一。从资格评选到后期材料…...
【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Linux网络编程 本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g。 🏠 yum 🎸 什么是yum 当用户想下载软…...