这是我参与「第五届青训营 」伴学笔记创作活动的第23天。是青训营第四阶段的最后一天,主要介绍了国内黑灰产的情况,挑选了几种比较经典的黑产作弊手段进行详细分析,该文章将在此基础上整理一些Web安全漏洞的检测技术。
Web安全漏洞检测方法
静态检测方法
属于白盒测试方法,通过分析程序执行流程来建立程序工作的数学模型,根据对数学模型的分析,发掘出程序中潜在的安全缺陷。静态检测的对象通常是源代码,常用的静态检测方法主要有词法分析、数据流分析、模型检验和污点传播分析等。
- 词法分析:将源文件处理为token流,然后将token流和程序缺陷结构进行匹配,以查找不安全的函数调用。该方法效率较高,但误报率也较高。
- 数据流分析:通过确定程序某点上变量的定义和取值情况来分析潜在的安全缺陷,首先将代码构造成抽象语法树和程序控制流图等模型,然后通过代数方法计算变量的定义和使用,描述程序运行时的行为,进而根据相应规则发现程序中的安全漏洞。该方法分析能力较强,但分析速度慢,效率较低。
- 模型检验:通过状态迁移系统来判断程序的安全性质,首先将软件构造为状态机或者有向图等抽象模型,并使用模态或时序逻辑公式等形式化方法来描述安全属性,然后对模型进行遍历检查,已验证软件是否满足这些安全属性。该方法对路径和状态的分析比较准确,但处理开销较大。
- 污点传播分析:通过静态跟踪不可信的输入数据来发现安全漏洞,首先通过对不可信的输入数据进行标记,静态跟踪和分析程序运行过程中污点数据的传播路径,发现五点数据的不安全使用方式,进而分析出由于敏感数据被改写而引发的输入验证类漏洞,如SQL注入、XSS等。
动态检测方法
动态检测技术属于黑盒测试技术,通过运行具体程序并获取程序的输出或内部状态等信息,根据这些信息的分析,检测出软件中潜在的安全漏洞。动态检测的对象通常是二进制可执行代码,常见的动态检测方法主要有渗透测试、模糊测试、错误注入和补丁比对等。
- 渗透测试:是经典的动态监测方法,测试人员通过模拟攻击方式对软件系统进行安全性测试,检测出软件系统中可能存在的代码缺陷、逻辑设计错误及安全漏洞等,是目前Web应用系统安全漏洞检测中最常用的测试技术。
- 模糊测试:模糊测试技术是Web应用系统安全漏洞检测中常用的测试技术,它模拟攻击者的行为,产生大量异常、非法、包含攻击载荷的模糊测试数据,提交给Web应用系统,同时监测Web应用系统的反应,检测Web应用系统中是否存在安全漏洞。
- 错误注入:Purdue大学的Wenliang Du等人提出了针对软件安全性测试的环境错误注入方法,并设计了环境-应用交互故障模型(Environmental-Application Interaction fault model, EAI),用于对环境错误进行分类。
- 补丁对比:其基本思想是通过对补丁前和补丁后两个二进制文件的对比分析,找出两个文件的差异点,定位其中的安全漏洞。
各种漏洞的检测技术
SQL注入漏洞检测技术
SQL注入漏洞检测可采用基于源码复查地静态检测方法和基于渗透测试的动态检测方法。静态检测方法的主要优点是有针对性地对代码依赖关系进行分析,对变量和数据流进行跟踪,该方法具有较高的检查效率,但误报率和漏报率较高,需要有经验的程序员来进行复查。动态检测方法主要采用渗透测试技术,通过查找网页地注入点,构建相应的测试用例,对Web应用系统进行测试,通过分析Web服务器的相应信息来验证是否存在SQL注入漏洞。由于动态检测方法限制条件少,针对性强,检测准确率高,更适合对Web应用系统进行安全性检测。该技术主要要解决两个关键问题:如何找出用于输入测试用例的注入点和如何根据注入点构建测试用例,测试该注入点是否存在漏洞。下面介绍一种针对Web2.0环境的SQL注入漏洞检测方法,该方法由两部分组成:检测主机和被测服务器,两者之间通过网络连接起来,在检测主机上运行程序,对被测服务器进行测试,在被测服务器上运行Web服务器及应用程序。基本步骤如下:
- 获取被测站点的网页;
- 提取简单网页中的注入点;
- 提取复杂网页中的注入点;
- 根据提取的注入点构造测试用例;
- 分析Web服务器的响应信息;
- 建立SQL注入漏洞的判定规则。
XSS漏洞检测技术
XSS漏洞检测同样可以采用静态的源码复查技术和动态渗透测试技术。基于动态渗透测试技术的检测方法同SQL注入检测方法一样,由检测主机和被测服务器组成。主要步骤如下:
- Web网页获取:采用网络爬虫工具,自动获取目标Web服务器上所有网页去除每个网页的广告、导航、重复等干扰信息后存储在磁盘中,构成检测数据集。
- 检测点处理:首先通过分析Web网页中包含的表单和可用于向Web服务器提交信息的URL等信息,提取出检测点。然后对检测点进行去重处理,过滤掉不同网页中的相同检测点,以避免重复检测。
- 渗透测试:首先按照渗透策略构造每个检测点的攻击向量,利用检测点,模拟浏览器的提交过程,向Web服务器提交攻击向量。然后对Web服务器返回的响应网页进行分析,确定相应的Web网页中是否存在XSS漏洞。