| 首页 > 新闻公告 > 公告详情
IoT安全人才培养 · 第三课课程回顾
2018-10-03

课题:固件提取与软件漏洞挖掘

讲师:Chu

授课时间:11月15日

主要内容:

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

       Chu师傅首先讲解了逆向工程,他认为逆向工程在漏洞挖掘里面最重的一项工作,大部分时间都是花在这个环节。逆向工程具有一定的技术含量,需要时间的积累,要想做好逆向工程,就要先学好正向——也就是开发和编程。这节课先简单介绍一下基础部分。

    先介绍一下常用的工具:IDAradare2angrIDA是业界做好的工具,radare2相比IDA好在它是个开源的工具,angr主要用来做一些自动化的逆向和符号执行的工作,如果你需要批量处理一些任务那就需要angr

而常见的CPU架构则和上节课讲的相似:x86ARMMIPSPowerPC。本节课就以MIPS为例进行讲解。

    首先看一个被MIPS编译器编译过的Hello WorldMIPS的指令特点有哪些呢?首先它是定长的,另一个是MIPS中大量使用寄存器,还有一个是峰值延迟的效果,这是因为MIPS流水线的一个功能导致的效果。

再来看一下复杂一点的函数调用。

这是外部调用函数的一个操作,接下来看一下内部是怎么操作的。

    如果说只想做一些简单的逆向,搞清楚一些调用原理就可以了。如果想要深入了解的话,还是要继续学习。

 

    接下来具体谈一下漏洞。首先还是先讲一下漏洞产生的原因:配置错误、逻辑错误、设计错误、输入验证、内存破坏…..Chu师傅认为如果想要真正的理解漏洞挖掘漏洞,你要理解的是程序员的开发逻辑,这就是为什么说逆向这个过程很重要,因为大部分时间都花在了理解这个逻辑上了。漏洞的挖掘方式也有很多:黑盒、白盒和灰盒。

    下面看两个具体的漏洞:

  • 命令注入

    程序根据输入,把输入拼接到一段命令中并执行。执行时如果通过注入一些引号分号能够让我写的东西也能被当作命令执行,那我就可以获取到这个程序的权限,这就是命令注入。

    以某路由器web应用为例,该程序未经过滤便将用户的输入拼接到要执行的命令中,导致命令注入。通过该漏洞可完整控制该路由器。

  • 栈溢出

    当我们发现漏洞之后,如何进行漏洞调试?

    这里用到QEMUQEMU是一个通用的虚拟机。主要提供两种模拟方式:用户模式和系统模式。在使用用户模式时,需要注意动态链接和静态链接的区别,并在这里加以介绍。

    现在我们已经可以把程序跑起来,这时候需要使用另一个参数——-g,进到调试台,接下来就开始验证漏洞是否存在。

    确定漏洞存在后,就要思考如何利用了。由于通过刚才的课程我们可以确定输入一个过长的字符串程序会崩溃,但不知道究竟是多长。这时我们就要做一个计算输出长度的设计。通过输入唯一的字符串对应地址看一下字符有多少。然后定位到相应位置进行判断。

 要写利用还有一个操作就是确定保护措施。因为确定了保护措施后才能用具体的手段写一个完整的利用。