智慧城市让生活更美好!

IoT安全人才培养计划第三课预告&第二课优秀作业

第三课预告

  主题:软件漏洞挖掘基础

  时间:11月15日20:00

  课程内容:本次课程首先介绍 IoT 固件中软件逆向基础;其后结合实际漏洞讲解面向 IoT 设备的漏洞挖掘、调试、漏洞防护措施及绕过,最终完成对漏洞的完整利用。

讲师:Chu

 

  360信息安全部安全工程师, 0KEE Team高级安全研究员,擅长漏洞挖掘、安全开发,具备丰富的漏洞挖掘、分析经验,曾多次在国内外网络攻防大赛中取得优异成绩,擅长CTF、代码审计、Web安全、IoT等。

上期优秀作业展示
 
        第二次作业

  • 对任意固件进行解包

  • 使用 QEMU 模拟执行该固件中可执行文件或尝试使用 Firmadyne 完整模拟该系统

  • 对固件中可执行文件有针对性进行逆向工程、漏洞挖掘

       优秀作业一

 

  

 

  中国矿业大学 Ronpa

  上榜理由:作业完成度最高,思考较为全面。可以看出是懂漏洞的,并且很好地利用这一点进行学习。

       作业展示

  初探DLink路由器固件

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

       评语

  1. 认真实践固件解包,建议有时间可以了解下硬件相关知识,对以后的研究会很有帮助。

  2. 参考网络上的文章能够完成漏洞的基本分析,可以看出你有逆向工程、漏洞挖掘功底。可以尝试对 IoT 设备软件进行漏洞挖掘,相信你会有所收获。

       优秀作业二

  

       成都信息工程大学 D0glrq@SYClover

  上榜理由:实践硬件层面的固件提取,对VxWorks固件进行修复,尝试对文件进行match逆向分析。作业完成度高。

       作业展示

  0x01固件提取

  本次涉及了一个网络打印机的flash,一个读卡器flash,一个arduino写的esp8266配置WiFi的flash读取

  固件提取思路:

  有钱:用烧录器(建议买RT809f ),通过上位机一键读取。不想把芯片焊下来可以用银引脚探针。要搭配烧录座。可以把芯片焊下来。可以把芯片焊下来。把芯片焊下来的话,需要搭配烧录座。建议最好焊下来,用探针的话,其他电路会造成干扰(300元左右)

  

 

  没钱:买一块最小系统板或者买stlink,jlink这样的烧录器,搭配烧录座查看需要提取的flash芯片的手册中,存储的起始地址,然后写一个例程,让主控芯片把flash下这串数据全部读取下来。(几十元左右)

  

 

  填坑:有些嵌入式单片机程序和一般的分析路由器固件不一样。路由器的固件可以用。路由器的固件可以用binwalk将打包的系统拆分成多个文件夹,但是像我们这个打印机的固件就不可以。这种固件只能是整体读下来放到IDA里面进行分析,并且可能需要导入一些支持该框架的脚本。如果是默认或者错选框架的话,会导致无法读取。出现全是db这样的情况。不过我也学到了一些修复的知识,后面讲。

  固件提取经验之谈:

  我本人是硬件开发出身的,接触路由器不太多,但是工控和硬件开发比较擅长一点。所以逆向也更着重单片机和plc等。为了防止单片机被逆向,单片机都有读写保护机制, 比如STM32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到bin或hex文件格式的代码拷贝,别有用心的厂商即可利用该代码文件山寨产品。为此,STM32芯片提供了多种方式保护内部FLASH的程序不被非法读取,但在默认情况下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节中的配置,效果最好的是一检测到有读或者写请求,直接擦除flash,逆向者只能得到一堆fffff。

  0x02 固件修复

  修复涉及:施耐德NOE 771工控固件,arduino leonardo写的badusb固件,esp8266配置WiFi的固件

  读卡器的flash不需要修复,里面仅存了一些卡号,用winhex可以直接读

  打印机的固件的框架没找到,在ida里面还是全是db

  修复的思路来源一篇文章:https://paper.seebug.org/613/

  总结一下就是:

  

 

  接下来说一下我的实践:对NOE77101.bin 解包后产生一个数字命名的二进制文件,我下了77101的三个版本的固件,以其中一个为例:

  

 

  对这个217进行binwalk,可以看到符号表地址还有固件操作版本

  

 

  对217 binwalk -A 可以知道cpu架构。再放进ida里的时候,我犯了个错误:并不是从官网上下的那个固件,而是应该把217放进ida,就是从下载固件中解出的那个bin!

  

 

  放进ida时cpu选ppc,这个是我们在虚拟机中可知的,可以看到解出的少量函数。

  接下来就是寻找固件加载地址,由于我逆向基础太差,看了很多函数,也没有找到类似文章提到的可疑函数,后面的都不太好进行了。所以只能纯看代码。在看的过程中发现了一个疑似硬编码的,有一串数字,下面还有NAME

  

 

  

 

  然后是对arduino做主控的固件进行逆向:虽然主控是arduino,但是由于型号不同,或者控制的不同模块,写在flash里的东西凭借初始的ida没有办法完整的进行反汇编。

  对于写的esp8266配置WiFi的flash那个,我在github上找到了其对应的架构:xtensa,放到ida里面分析出了部分函数。

  对于那个badusb的,是这次打ctf遇到的,找了一个类似的wp:http://blog.leanote.com/post/sherlly/pwnhub-%E3%80%8A%E8%A1%80%E6%9C%88%E5%BD%92%E6%9D%A5%E3%80%8B-key-writeup

  我进行了些许尝试,在交这个作业的时候我还没有做完,只能放部分过程了,怕来不及交这个报告了。

  这个题目给的是一个hex

  

 

  Hex直接用winhex打开是这样:

  

 

  文章说要单独下载ATmega32u4的架构,下载之后选项里就会有新增

  

 

  由于我逆向基础很差,我没有看iad view,看了一下hex view,发现这里密集的printf出的明文,心里大概有个数了。但是不能确定算式的存储顺序,后面的就是找实际偏移量了。

       评语

  1. 对课程的实践也很认真、深入,可以看出你硬件基础很好,这对以后的研究有很大的帮助。

  2. 遇到问题能够通过网络上的资源自主解决,并且能够举一反三,值得赞赏。

  3. 好奇心强,这是个很棒的优点,希望你能保持。

       优秀作业三

  

 

  成都信息工程大学 Edvison

  认真实践了固件提取,配置 firmadyne 对固件进行模拟并尝试对文件进行逆向析。

       作业展示

  下载固件

  测试的固件是DIR822:http://support.dlink.com.cn/ProductInfo.aspx?m=DIR-822

  固件提取

  

 

  用binwalk解包:

  

 

  解包后进入squashfs-root目录:

  

 

  尝试用qemu模拟执行文件:

  

 

  用Firmadyne模拟固件系统

  按照这篇文章安装配置Firmadyne:https://paper.seebug.org/639/

  成功运行:

  

 

  

 

  逆向分析

  分析cgibin文件:

  

 

  基本的保护措施都没开,32位的mips文件。

  放到ida里看:

  

 

  目前还不是很懂mips汇编…具体也分析不出什么来。

       点评

  1. 固件提取完成度相对较高,这一块没有什么太大问题。

  2. 已经可以初步运用Firmadyne对固件进行模拟,后续可以思考下无法运用Firmadyne的场景该如何去做

  3. mips汇编这一块我下节课会讲,可以提前整理一下不懂的问题课后提问。

  以上两位同学将获得DEFCON&BlackHat会议周边针织帽&袜一件,其他同学也要努力向这三位优秀的小伙计看齐哟~

上一篇:阿里ICA联盟发布IoT系列标准 首推智能门锁安全

下一篇:IoT-VBox是什么,有什么用处?

延伸阅读