0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

物联网安全教程:加密固件分析

蛇矛实验室 来源:蛇矛实验室 2023-08-19 11:28 次阅读

本期作者/0xc4se

背景

在前面的小节中,我们学习了许多IOT漏洞挖掘方面的知识。在漏洞挖掘过程中,想要对二进制程序改进分析,我们就需要获取目标设备的文件系统,这样才能更好的逆向分析设备程序的运行逻辑,从而发现其中的漏洞点。然而并非所有设备固件中的文件系统都可以让我们轻易获取,对于已经被加密的固件,我们在解密过程中也需要具备一些分析思路。很多大佬已经写过许多固件解密思路,这里我们站在巨人的肩膀上看世界,总结一下在解密固件的几种常用的思路和方法。

加密固件识别

binwalk工具识别

使用binwalk查看一下固件的信息,如果是未加密的固件,通常可以扫描出来使用了何种压缩算法。第二种方式就是查看固件的熵值。熵值是用来衡量不确定性,熵值越大则说明固件越有可能被加密或者压缩了。这个地方说的是被加密或者压缩了,被压缩的情况也是会让熵值变高或者接近1的,下图为使用"binwalk -E"命令查看一个加密固件。

7159dccc-3dae-11ee-ac96-dac502259ad0.png

固件解密

设备固件中的解密程序

解密固件的最简单方法是在固件中查找解密程序。如DLink设备的DIR882系列固件,我们进入官网浏览固件信息。

718a57b2-3dae-11ee-ac96-dac502259ad0.png

下载1.30版本固件和1.0.1版本固件,使用"binwalk 固件名"命令分析两个固件,发现新版本的固件被加密,而旧版本固件为未加密状态。

71bb9318-3dae-11ee-ac96-dac502259ad0.png

在官网浏览其他版本时发现,发现在1.10版本,官方提供了俩个固件,有一个版本固件名称为中间版本(未加密)。所以猜测这里很有可能是设备固件在出厂发布时未加密,也不包含任何解密例程。这里较新版本(v1.10)的固件与含有解密程序的未加密固件一起提供,以供将来加密固件更新,后续固件版本是加密的。在这种情况下,我们可以从中间版本获取解密程序,并使用它来解密其他加密版本。

71fab246-3dae-11ee-ac96-dac502259ad0.png

下载DIR882A1_FW104B02_Middle_FW_Unencrypt.bin和DIR882A1_FW110B02.bin文件,使用"binwalk -Me 固件名"命令对未加密固件的文件系统进行提取。

7219460c-3dae-11ee-ac96-dac502259ad0.png

在未加密固件的文件系统中,寻找可能的解密程序。使用grep搜索时,搜索字符串"decrypt"、"dec"、"extract"等,可以帮我们快速定位解密程序或脚本。

725497ac-3dae-11ee-ac96-dac502259ad0.png

使用qemu-static对寻找的程序进行运行测试,这里发现imgdecrypt程序就是固件解密程序。使用imgdecrypt对v1.10版本和v1.30版本固件解密,发现程序都可以正常解密。

729bf7be-3dae-11ee-ac96-dac502259ad0.png

另一个zyxel设备固件解密实例中(https://www.iotsec-zone.com/article?id=237),binwalk虽然解不出固件的文件系统,但是binwalk解出了一些文件,这些文件中就是对固件进行解密的程序。通过对程序进行逆向分析,使用相应参数进行运行即可解密出文件系统。

72ec863e-3dae-11ee-ac96-dac502259ad0.png

使用解密出的密码对固件的文件系统进行提取。

733dea6a-3dae-11ee-ac96-dac502259ad0.png

明文攻击

明文攻击是一种密码分析技术,其中攻击者拥有一些已知的明文和对应的密文。这些已知的明文-密文对能够帮助攻击者破解加密算法或密钥,一般在CTF竞赛中经常遇到。明文攻击同样可以用于固件解密,当设备厂商提供的固件压缩包中具有说明文档、配置文件,且需要提取加密压缩固件中也同样具有相同的文件时,就可以进行明文攻击(压缩算法需相同)。确定相同文件就是比对crc32的值,下面使用"crc32 ./*"命令查看每个文件的crc32值。

7379119e-3dae-11ee-ac96-dac502259ad0.png

这里发现需要提取加密压缩固件中也同样具有相同的文件,并且查看这里的算法也是具备明文攻击的条件。接下来,我们就可以使用工具对加密固件进行提取。

73c6ba0c-3dae-11ee-ac96-dac502259ad0.png

windows的明文攻击破解工具可以用ARCHPR,linux下可以使用pkcrack。

73f6553c-3dae-11ee-ac96-dac502259ad0.png

解密后进行解压缩就可以获取设备固件的文件系统。

7476dd92-3dae-11ee-ac96-dac502259ad0.png

根据固件特征猜测加密

在defcon27议题中(https://media.defcon.org/DEF%20CON%2027/DEF%20CON%2027%20presentations/DEFCON-27-grichter-Reverse-Engineering-4G-Hotspots-For-Fun-Bugs-Net-Financial-Loss.pdf),g richter大佬分享了挖掘Nighthawk m1设备漏洞的一些方法,其中里面的固件解密思路也非常值得我们学习。由于作者这里没有Nighthawk m1设备,所以完整流程并未复现成功。下面贴了几种原作者的图。解密大致思路为,发现固件被加密时,查看固件发现,固件中存在大量重复的数据。如下图中的"8040 4c21 ... 8f 6e",一般在一个文件中,大量的重复数据可能都是00或ff,如果这里是异或加密,那么对这些数据重新进行异或可能解密出固件。

74968692-3dae-11ee-ac96-dac502259ad0.png

使用下面的命令,对文件中重复出现相同数据的行进行次数统计并排序,排序后发现,有64行数据重复出现了3800次左右,其他数据则是500次以下,64行的16字节数字恰好是1024字节,也就是说密钥长度为1024字节。

hexdump -v -C Mr1100.spk | cut -d" "-f3-20| sort| uniq -c| sort-nr | head -n 100

74f5d4f8-3dae-11ee-ac96-dac502259ad0.png

紧接着作者根据上面固件中出现重复块的现象进行搜索后发现,Nighthawk m1设备固件和Sierra Wireless路由器固件极其相似。对比后就可得知大致加密流程为:固件的前 0x100 个字节不完全为“空”(这里是间歇性的“空”/“非空”),而是一大块“非空”数据从 0x100 开始,到 0x140 结束。然后有一个从0x170到0x190的非空段。然后另一个“非空”段从0x290开始,然后在0x2F0处开始一个空行,然后是来自0x300的更多非空数据。

75699834-3dae-11ee-ac96-dac502259ad0.png

得到大致加密思路后,通过利用该加密特点对Nighthawk m1设备的程序进行逆向分析,得到了解密部分的代码如下。下图中的AES_set_decrypt_key函数为加密标头的解密函数。

75f03fce-3dae-11ee-ac96-dac502259ad0.png

程序在每个加密标头上调用 AES_decrypt 函数。

7623d5aa-3dae-11ee-ac96-dac502259ad0.png

由于这里没有设备,无法根据上面逆向分析的代码编写解密脚本,效果如下。

765f1e62-3dae-11ee-ac96-dac502259ad0.png

不同镜像的解密程序

不同镜像的解密程序,这里的以fortigate为例,具体思路为fortigate的硬件设备固件都被加密,而fortigate提供多个镜像版本(比如vmx和kvm版本的固件),这些固件我们可以无条件获取,厂商在发布同一个系列固件中,很有可能使用同一份代码。那么我们可以通过对fortigate不同镜像版本的固件进行分析,就可以找到fortigate的通用解密代码,然后编写解密程序就可以获得其他版本固件的文件系统。这里的测试版本为VMX-v7.2.4.F-build1396,设备固件为90E-v7.2.4.F-build1396。首先我们挂载fortigate的虚拟卷,将里面的rootfs.gz复制出来并解压。

76a3ca1c-3dae-11ee-ac96-dac502259ad0.png

使用系统自带的解包程序对压缩文件进行解包处理。

76c8b296-3dae-11ee-ac96-dac502259ad0.png

通过搜索字符串寻找解密程序,猜测init程序中存在解密部分。

77069322-3dae-11ee-ac96-dac502259ad0.png

通过搜索固件升级,固件下载等字符串查找定位,固件升级时触发的解密代码,下图中便是fortigate的固件解密代码。

7758ceda-3dae-11ee-ac96-dac502259ad0.png

我们获得了解密代码后,需要查找解密的密钥,通过对固件的加密模块进行分析后发现,我们可以对密钥进行爆破。这里直接使用大佬已经写好的脚本(https://github.com/BishopFox/forticrack)进行测试,最终的解密效果如下图。

7785aca2-3dae-11ee-ac96-dac502259ad0.png

寻找内核解密程序

寻找内核中的解密程序,我们从芯片中进行提取的固件后,可以从内核中获取固件解密的程序。以某快设备为例,我们对其固件进行解密分析(https://www.iotsec-zone.com/article?id=218),下面官方提供的设备固件压缩包中,文件系统rootfs被加密,而vmlinz没有被加密,我们可以使用"extract-vmlinux.sh"脚本((无符号表))或者vmlinx-to-elf工具(有符号表)对内核镜像中提取内核。

77c4ab00-3dae-11ee-ac96-dac502259ad0.png

对照linux内核源码,我们使用ida对内核文件进行逆向分析,因为文件系统被加密,所以我们直接查找和定位initramfs代码部分(内核2.4版本前为initrd)。最后找到对文件系统的解密代码,代码如下。

77efefea-3dae-11ee-ac96-dac502259ad0.png

通过提取核心解密代码编写解密脚本,我们就可以对文件系统进行解密。

7816842a-3dae-11ee-ac96-dac502259ad0.png

同理,思路向后延伸,当内核也被加密时,我们可以对提取出来的uboot.bin部分进行分析后并发现具有可利用信息,例如前面小节中的某华设备。

7887d062-3dae-11ee-ac96-dac502259ad0.png

总结

固件解密在安全评估、漏洞分析和逆向工程中起着重要作用,通过解密固件,可以更加轻松地查找和分析程序中的脆弱点和设计缺陷。在这一小节中,我们学习并总结了几个固件解密的分析思路和方法,整体的大致思路为寻找设备系统运行所有环节中可能存在解密功能的部分。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2903

    文章

    44240

    浏览量

    371026
  • 固件
    +关注

    关注

    10

    文章

    550

    浏览量

    22961
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80830
  • 文件系统
    +关注

    关注

    0

    文章

    284

    浏览量

    19882

原文标题:物联网安全-加密固件分析

文章出处:【微信号:蛇矛实验室,微信公众号:蛇矛实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    联网数据传输---数据安全加密

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市鼎
    发表于 07-03 09:51

    联网数据安全保护

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市
    发表于 07-03 10:26

    如何保障联网设备安全

    的重要性毋庸置疑!那么该如何保障联网设备安全呢?加密芯片就是保障联网设备
    发表于 09-07 10:36

    车规级加密芯片供应,数据加密安全通讯,安全启动方案

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市鼎恒
    发表于 11-01 10:38

    固件保护,防抄板,算法加密授权,加密芯片,加密IC

    安全市场十余年有相当丰富的产品应用经验,对于相关的应用场景有多套应对方案 我们的方案广泛应用于以下行业1.联网(IoT)行业智能家居(固件保护、通信
    发表于 11-30 10:39

    联网安全方案,车联网安全方案,数据加密,通讯加密

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市鼎恒
    发表于 11-30 10:41

    联网安全芯片,车联网安全芯片,数据加密芯片

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市鼎恒
    发表于 12-06 16:36

    联网联网安全方案,数据通信加密,硬件加密方案,车规加密芯片

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市鼎恒
    发表于 03-26 15:53

    联网安全芯片,车规级加密芯片,车联网安全方案

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市鼎恒
    发表于 03-27 10:48

    智能锁硬件安全加密方案

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市鼎恒
    发表于 04-09 14:50

    联网硬件安全解决方案,硬件加密芯片

    目前联网以及车联网的发展以及产品的普及,让大家开始注意到了,对于数据加密的需求,开始关于对于数据通信的安全和对于合法用户的认证 深圳市鼎恒
    发表于 04-09 14:51

    联网通信安全需求如何实现

    设备包含路由器、摄 像头、防火墙、打印机、VPN等各种设备类型,足以可见联网设备的安全需求日益凸显。DDA无线通信技术出现可以有效解决网络安全问题,其采用5种对称
    发表于 06-05 20:24

    Adiantum(铁线蕨)的新加密方式究竟能改变联网安全的现状吗?

    Adiantum(铁线蕨)的新加密方式,究竟能改变多少联网安全的现状?已经称王的AES,为什么不适用于
    发表于 06-29 09:11

    简化安全、基于 UEFI 的联网 固件更新

    简化安全、基于 UEFI 的联网 固件更新
    发表于 09-04 17:22 8次下载
    简化<b class='flag-5'>安全</b>、基于 UEFI 的<b class='flag-5'>物</b><b class='flag-5'>联网</b> <b class='flag-5'>固件</b>更新

    联网设备固件安全分析

    一. 引言随着联网设备的普及,联网设备的安全问题也逐渐被“有心人”挖掘出来,如2017年9月,一位黑客通过
    发表于 12-07 14:36 7次下载
    <b class='flag-5'>物</b><b class='flag-5'>联网</b>设备<b class='flag-5'>固件</b>的<b class='flag-5'>安全</b>性<b class='flag-5'>分析</b>