文章目录
前言
变种分析这个概念是来自于semmle这个产品对自己技术的推广。原文的链接来自这里 https://semmle.com/variant-analysis
1.variant Analysis (变种分析)是什么?
变种分析(variant analysis)是使用一个已知的漏洞作为一个种子去发现代码中相似问题的一个过程。安全工程师通常会执行变种分析去识别出相似可能性的漏洞并且确保这些威胁能够被正确的修复通过多个代码数据库。
从哪里开始
变种分析常常从一个已知的问题开始。这个“种子”漏洞常常可以通过渗透测试发现,或者是来自bug的赏金项目,或者是使用fuzzing 技术。一旦一个重要的bug 的根本原因被发现了, 安全的团队常常会执行手动安全审计去代码库中识别其他类似代码可能存在这些问题的可能性。
2.常用技术
虽然变种分析不是总是遵循相同的脚本,算法,但是这里常常也会有一些相同的技术用来识别漏洞。
2.1 控制流分析(Control flow analysis (CFA))
**控制流分析(CFA)**可以检查不同部分的代码是怎么被执行的,并且是以怎样的顺序去执行的。控制流分析是一种非常重要的手段去发现有问题的代码路径。这些路径通常是开发人员没有预料到的不太可能的环境下执行的到的一些易受攻击的代码。开发人员可以尝试向运用程序提供恶意负载或者是环境去尝试触发此类的代码。
2.2 数据流分析 (Data flow analysis)
数据流分析 (DFA) 是从数据的源头(source)(数据进入到程序的初始位置)去跟踪数据一直到达某个接收器 (sink)。如果再次过程中,数据从未经过清洗,那么这些数据在使用的过程中可能会有潜在的危险。
2.3 污点跟踪 (Taint tracking )
污点跟踪 (Taint tracking ) 通常是指的是不受信任的或者是污染的数据,这些数据由用户部分或者完全控制。使用数据流分析,通过方法调用和变量分析(包括容器和类成员)将污染数据从源跟踪到接收器。从源到接收器的路径越长,开发人员得到的信任的数据就越困难。
2.4 范围分析 (Range Analysis)
范围分析 (Range Analysis)又叫做边界分析 (Bounds Analysis) 用于调查变量可以保留哪些可能的值,以及哪些值永远不会被保留。例如, 范围分析可以识别源代码中程序员错误的假设了字符串长度上限的区域,从而导致缓冲区溢出。范围分析也可以用于识别dead code (就是一些不会被调用的代码)。
2.5 语义代码搜索 (Semantic code search)
语义代码搜索 (Semantic code search) 允许您快速查询代码库并且确定感兴趣的区域以供进一步的调查。这对于识别具有特定签名的方法或者包含某种证书的变量很有价值。
传统的挑战
传统的变量分析依赖于手动代码检测使用一些标准的工具像 grep, AWK, 或者是一些IDE的工具。上面提到的一些技术都是高度迭代的,这使得分析他们非常的乏味又耗时间。他们还要求安全工程师对他们的代码库有深入的了解,并对各种威胁模型有很好的理解 (They also require security engineers to have intimate knowledge of their codebase as well as a good understanding of various threat models. )。鉴于大多数开发团队的速度,任何的安全团队都不可能跟上每一次审查。