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