随着5G的到来,万物互联渐渐走入了千家万户,但是接着而来的就是安全问题了,目前市面上的路由器,摄像头,智能门锁等都普遍存在flash问题,也就是说拆掉flash放到xtw100上可以直接dump出未加密的原始数据。
当然一些板子做了一些简单的防护,要不少焊接一个零部件,要不没有焊接引脚,但是总归是从soc上把uart的线引出了。找到引脚后,开始用那个万用表有模有样的猜测tx,rx,gd引脚
找到uart引脚后,开始遍历波特率,最终的结果是不出现乱码,比如这样
一些厂商也可能稍微做了一些安全防护,设置了一个复杂的密码,如果你不知道密码,可能控制台就不好使了,所以就需要用到binwalk这个软件,解压缩文件系统,替换一下密码,再打包一下
问题来了?
问题1:我怎么给打包好的文件系统替换进去了?
如果大家按照上面的步骤做下来,肯定会知道,默认linux 内核会打印系统分区表,
0x00000000-0x00040000 "bootloader"
0x00040000-0x00060000 "params"
0x00060000-0x00580000 "kernel"
0x00580000-0x10000000 "root"
问题2:知道位置了,我们怎么替换进去?
这里就有一个硬件(土豪金xtw100)
但是需要你的手艺好,能取下flash,再给flash放到xtw100上,进行读写。
到了这一步,就开始传送gdbserver到iot设备上进行调试,挖掘漏洞,这里我就不扩展了。
通过上面的步骤我们可以总结几点,
第一点:必须要获得分区表(这个是通过uart的打印信息获得到)
第二点:通过binwalk软件来提取文件系统
那么对于我们的对抗,就必须在这二点上做文章
设计板子的时候其实有母板,当然肯定有,但是成品后我不建议从soc上引出uart的线,如果你的意见是有问题我需要调试怎么办?那么就折中一下,修改一下bootloader,等用用户插入U盘或者sd卡,我们读取一下里面的内容,对他进行校验一下,如果验证通过,我们才开始打印。
我们首先来看看binwalk是怎么匹配文件系统的,我们打开binwalk-master/src/binwalk/magic/filesystems。
看到没有jffs2文件的匹配格式,这里我们就来最简单的,给magic修改掉,我们重新生成一下mkfs.jffs2软件。
这里我修改一下mkfs.jffs2里面jffs2文件的magic,具体位置:mtd-utils-2.1.1/include/linux/
我们给这里magic修改一下,再编译一下,再用mkfs.jffs2生成一下文件系统,再用binwalk这类软件扫描一下修改后的文件系统。
现在已经找不到了。
虽然我们修改了文件系统,但是如果你们dump过整个flash,就应该知道。
看看
0x00000000-0x00040000 "bootloader"
0x00040000-0x00060000 "params"
0x00060000-0x00580000 "kernel"
0x00580000-0x10000000 "root"
虽然分区表很紧凑,但是你填写的内容没有这么大,所以中间默认以FF填充,那么我们聪明的破解者利用这些FF就大致可以猜测出分区表,所以为了更加安全,我们把一些没有用到的扇区填充杂乱无章的数据,这样让人分不清楚分区表,这样哪怕你dump出flash,也无法修改里面的内容。
攻击者要攻击设备,第一步肯定是获得攻击源,那么我们就需要
flash填充未使用页的垃圾数据和自定义文件系统
升级包加密(防止通过抓包获得原始升级包)
这里我们最好不引出uart的引脚,哪怕非要引出也需要通过外部授权才能打印调试信息
这里需要隐藏uboot和kernel中的分区表,最好加密存储
虽然每个程序的水平参差不齐,但是我们可以守护iot的第一道大门,不是虽然一个人就可以自由进出的,希望抛出这块砖希望能引出各大厂商这块玉,希望各大厂商保护好第一道门。
最后祝愿iot越来越红火。
一年没有见,刀郎想你们了。
*本文原创作者:刀郎,本文属于FreeBuf原创奖励计划,未经许可禁止转载