路由器漏洞挖掘技术
1、简介
漏洞研究主要分为漏洞分析和漏洞挖掘两部分。漏洞分析技术是指对已发现漏洞的细节进行深入分析,为漏洞利用、补救等处理措施做铺垫。
漏洞挖掘技术是指对未知漏洞的探索,综合各种应用各种技术和工具,尽可能找出软件中潜在的漏洞。
2、漏洞挖掘技术分类
目前广泛应用的漏洞挖掘技术可以分为两类:
- 静态代码审计:代码审计技术根据分析对象的不同,可以分为源码审计和基于目标代码的漏洞挖掘。(白盒测试)
- 模糊测试:使用模糊测试的方法可以发现那些在源代码审计中无法发现的关键漏洞。(黑盒测试)
2.1、静态代码审计
在路由器漏洞挖掘技术中,由于系统的封闭性,所以基本上是得不到源代码的。可以使用IDA等汇编工具帮助我们将二进制代码转换为可读性更好的汇编代码,以便对代码进行汇编层次的审计。
2.1.1、人工代码审计
通常对路由器进行人工审计,需要具备审核人员熟悉二进制、多种汇编语言、操作系统底层的知识。一般采用的步骤为:
(1)使用IDA对目标程序进行反汇编。
(2)搜索可能造成安全漏洞的危险函数。
(3)跟踪危险函数如何提取和处理用户提供的数据的过程,判断是否存在安全漏洞。
1、可能造成安全漏洞的函数
(1)部分用户提供数据来源的相关函数
命令行参数:argv操作。
环境变量:getenv()。
输入数据文件:read()、fscanf()、getc()、fgetc()、fgets()、vfscanf()。
键盘输入/stdin:read()、scanf()、getchar()、gets()。
网络数据:read()、recv()、recvfrom()。
(2)部分数据操作相关的危险函数
字符串复制:strcpy()、strncpy()。
命令执行:system()、execve()系列。
字符串合并:strcat()。
格式化字符串:sprintf()、snprintf()。
2、跟踪和分析方法
既然我们已经知道了哪些函数是可能造成安全漏洞的危险函数,接下来我们需要定位到危险函数以及如何跟踪其参数列表。根据危险函数类别的不同,提供了两种跟踪分析方法:
(1)正向数据流跟踪
适用于用户数据输入类型的危险函数跟踪。从用户输入点(用户数据输入函数)开始跟踪数据处理过程中数据会对程序逻辑造成何种影响,从而判断是否造成可利用的安全漏洞。
(2)数据处理逆向流跟踪
适用于数据操作类型的危险函数跟踪。跟踪常见的数据操作危险函数,反向跟踪函数参数的数据流向,找出源缓冲区和目的缓冲区,确定输入数据是否会造成安全漏洞。
这两种方法各有利弊。正向跟踪的流程稍显复杂、分支较多、跟踪难度大,但是覆盖全面,可以找到所有可能的安全漏洞。而逆向跟踪的数据构造较容易、流程比较确定,却容易遗漏漏洞,覆盖面不广。
2.1.2、二进制自动化漏洞审计
要想实现对二进制文件潜在漏洞审计的自动化,必须理解二进制文件是哪一种可执行文件格式,理解其使用的机器语言指令,并且能够通过对指令流和数据流的分析确定指令所执行的动作是否可被利用。
二进制文件漏洞自动化审计工具的主要难题集中在如何准确地描述导致漏洞条件的行为特征上。这类行为包括越界访问分配的内存(栈或堆内存)、使用未初始化的变量或直接将用户输入传给危险函数。要想完成这些任务中的任何一个,自动化分析工具都必须能够精确计算索引变量或指针的值的范围,追踪程序使用的用户输入的处理流程,并跟踪程序引用的所有变量的初始化代码。最后,为了做到真正有效,还必须能够可靠地执行以上所有任务。
1、BugScam工具
BugScam是Halvar Flake编写的一组用于IDA Pro的脚本。
IDA Pro具有两个异常强大的功能,即脚本编程和插件架构。这两个功能都可以让用户扩展IDA Pro的功能,并利用IDA Pro对目标二进制代码进行大量分析。
BugScam工具会扫描那些往往会导致可被利用漏洞条件的潜在的不安全函数。而且会尝试执行一些初步的数据流分析,以便更准确地判断这些不安全函数是否真的可以被利用。
BugScam工具会在扫描完成后生产一份HTML报告,其中包含潜在问题所处的虚拟地址,以及扫描发现的问题。
BugScam工具在x86平台上的运行效果还是不错的,但是存在一定局限性。不能审计MIPS指令系统的应用程序,而且误报率和漏报率还是稍微高一些。但是可以将其移植到MIPS系统中。
具体玩法,等以后测试过在写。
2.2、模糊测试Fuzzing
模糊测试的是一种介于完全的手工渗透测试与完全自动化测试自己的安全性黑盒测试类型。测试过程大致分为5个阶段。
- 确定输入向量
- 生成模糊测试数据
- 执行模糊测试
- 监视异常
- 根据被测系统的状态判断是否存在潜在的安全漏洞。