【建议收藏】这个工具专门用于寻找路由器中的安全漏洞

本文介绍了使用angr进行二进制分析,以检测路由器固件中的安全漏洞。通过angr的Reaching Definitions分析技术,生成函数间的use-def关系图,寻找命令注入漏洞。工具在DLink和PROLiNK路由器上测试,发现多个命令注入、后门及DoS漏洞,大大提高了分析效率。
摘要由CSDN通过智能技术生成

关于工具

现有工具

现在,现成的污点分析工具已经有很多了。其中,我最感兴趣的是Triton和bincat,因为两者已经相当成熟。然而,我们却无法使用这两种工具,因为它们不支持目标设备所使用的MIPS架构。

使用angr进行符号执行测试

因此,我们把工作重点放在利用angr打造自己的工具上;angr是一个基于Python的二进制分析框架。我们之所以选择angr,是因为它支持大多数架构,包括我们所针对的MIPS和ARM架构。早些时候,@puzzor曾经对angr进行了一些自定义修改,用于静态污点分析:在angr的帮助下,通过符号执行模拟程序,然后根据生成的VEX IR程序跟踪信息进行静态分析。通过这种方法,我们成功地在测试固件中发现了命令注入漏洞。

然而,我们很快就遇到了一个问题:为了生成程序跟踪信息,我们需要angr通过模拟每条指令来模拟每个函数,并使用符号执行来决定是否跟随一条分支指令。

具体来说,angr会维护一个状态堆栈。一个状态包含诸如寄存器值和内存内容方面的信息。因此,当模拟一个函数时,它只会从一个状态开始。当遇到一个分支指令时,如果angr不确定是否跟随该分支,angr将重复该状态,其中一个将跟随该分支,而另一个则不跟随。

大多时候,函数中都会存在循环。如果循环条件是基于一些用户的输入,那么,状态的堆栈就会“爆炸”。由于angr将始终不确定是继续还是从循环中跳出,所以,它会不断复制状态。此外,还需要注意的一件事是,这些状态并不是同时模拟的。相反,每次只有一个状态被模拟。在这种情况下,需要很长的时间才会有一个状态达到易受攻击的代码;或者,如果该函数根本没有易受攻击的代码,那么,模拟过程可能永远不会终止。

作为一个符号执行框架,angr提供了多种可定制设置(称为模拟技术)来决定先模拟哪个状态。并且,在尝试了许多不同的技术后,我们仍然无法改善执行时间。

例如,在为待分析二进制代码中的每个函数设置了2分钟的超时的情况下,有时候即使经过了2小时,仍然无法完成对二进制文件的分析(因为如果一个函数没有漏洞,它将一直模拟执行下去,直到超时位置)。更糟糕的是,angr中存在一个未知的内存泄漏问题,所以,2小时后,电脑的内存早就耗尽了……

别忘了,我们之前的目标是希望这个工具比手工方式更快一些。所以,通过这种方式是不可能的,所以,我们继续寻找改进方法或替代方案。

在这里插入图片描述
应用angr的Reaching Definition分析技术

最终,我们偶然发现了这个漏洞后,燃起了我们对于angr的Reaching Definitions分析技术的热情,于是仔细阅读了下面的资料:

◼A reaching definition engine for binary analysis built-in in angr

◼Handle function calls during static analysis in angr

◼CSE545 Guest Lecture: Binary Analysis

Use-def关系

总之,这种分析方法将生成函数中原子之间的use-def关系。在这里,所谓原子类似于变量,并且,原子也具有各种类型,如寄存器、栈变量、堆变量。实际上,只要把原子看作变量,事情就很简单了,下面,我们举例说明:

在这里插入图片描述
在上面的函数中,存在一个明显的命令注入漏洞:含有漏洞的代码为system(command),其中注入的命令来自querystring的参数name。在这个函数中,querystring和其他原子之间的use-def关系如下所示:
在这里插入图片描述
首先,我们看到querystring被定义为函数vuln的参数,并被get_querystring_value函数作为参数querystring使用。除此之外,函数get_querystring_value还定义了一个参数name。最后,get_querystring_value函数定义了一个返回值,并用到了上面定义的两个参数。

然后,通过下图我们可以看到࿰

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值