论文名称:Geneva:Evolving Censorship Evasion Strategie
通常都是研究人员人工分析出规避审查策略,然后网络审查人员再完善审查系统,而人工分析规避审查策略需要研究人员熟悉审查系统中的协议实现,十分费时费力。因此本文提出了一种遗传算法 Geneva,能针对国家级的审查系统,自动生成基于修改数据包的审查规避策略。
Geneva 生成的规避策略都基于四种操作原语:drop、tamper headers、duplicate、fragment。通过对这四种操作原语进行组合、变异和演化,生成复杂的规避策略。
具体而言,Geneva 是基于遗传算法而设计的,而遗传算法由三个关键部分组成:构建块 (building block)、适应函数 (fitness function)、变异生成函数 (mutation and crossover)。论文提出使用 (trigger, action tree) 表示规避策略,如果发现数据包中存在匹配的 trigger,则执行 action tree 中的一系列数据包修改操作,然后计算生成的数据包的适应度,将适应度高的数据包对应的规避策略留下,作为下一轮迭代演化的种子策略。
构建块是表示规避策略 (Strategy) 的基本单元,论文给出了 trigger 的编码语法以及 action tree 的表示方式(利用四种 Actions 原语构建二叉树 Action Trees),由两组 (trigger, action tree) 构成一个策略(两组分别表示为 Inbound 和 Outbound)。
针对适应函数,论文选择将生成数据包直接输入至目标审查系统,根据网络连接是否被审查,返回策略的适应度。再通过一些选择算法保留一部分策略进入下一次迭代演化。
针对变异生成函数,变异从四个方面进行:trigger 变异、Action 变异、Action Tree 结构变异、Strategy Inbound和Outbound变异。生成则是交换两个不同 Strategy 的Inbound和Outbound。
具体实现中还有一些细节优化,可参见论文。
论文名称:Themis:Ambiguity-Aware Network Intrusion Detection based on Symbolic Model Comparison
由于网络终端主机与NIDS在网络协议实现上存在一些差异,攻击者可以利用这些差异精心设计网络数据包,以此绕过NIDS的检测。
为了防范这种攻击,本文提出一个轻量级系统,THEMIS,使NIDS具有识别差异的能力,并且当遇到具有“歧义”的数据包时能有效地 fork 连接状态,通过分析所有连接状态,确保其中存在一个连接状态与终端主机的状态相同。
Themis模型包括两个阶段:离线阶段和在线阶段。离线阶段的主要任务是对比分析各种TCP协议实现的差异。在线阶段的主要任务是构建能识别这些差异的 NIDS。
论文名称:Learn&Fuzz: Machine Learning for Input Fuzzing
基于语法的模糊测试(Grammar-based Fuzzing)是当今对复杂的结构化输入程序的最有效的模糊测试方法。与其他全自动的模糊测试技术相比,基于语法的 Fuzzing 需要人工制定待测程序能够接收的输入格式规范。但是人为编写规范带来了巨大的人工操作负担,十分耗时并且容易出错。
因此本文研究了如何将机器学习结合至模糊测试中,来自动化生成测试用例。具体来说,本文研究了利用神经网络学习非二进制的 PDF object 的语法,用于指导fuzzing 中生成测试用例,并讨论了 learning 和 fuzzing 之间的冲突关系。
论文名称:FuzzGuard: Filtering out Unreachable Inputs in Directed Grey-box Fuzzing through Deep Learning
DGF(directed grey-box fuzzing)用于测试可能存在漏洞的代码是否真的存在漏洞。如果大部分测试样本不能执行到目标代码,测试的效率将会十分低下。
本文研究了如何在不执行目标程序的情况下,利用 CNN 预测输入样本能否执行至目标代码,帮助DGF过滤无用的样本输入,以此提高 fuzzing 的效率。
FuzzGuard 算法包含三个步骤:模型初始化(model initialization, MI)、模型预测(model prediction, MP)、模型更新(model updating, MU)。
MI 阶段,首先使用 DFG fuzzer 生成大量输入,并用待测程序(PUT)执行,FuzzGuard 会观察并记录输入的程序执行路径。然后,使用 step-forwarding 方法将目标代码执行路径拆分成一步一步的前置执行路径,并使用前置执行路径作为中间阶段的目标代码,以缓解数据集不均衡的问题。当收集到足够平衡的前置执行路径的数据集后训练 CNN 模型。
MP 阶段,FuzzGuard 使用 CNN 模型预测 Fuzzer 新生成的输入能否执行至中间阶段的目标代码,如果 CNN 输出 True,则让 PUT 执行输入,同时 FuzzGuard 记录输入的程序执行路径以用于后续的模型更新。这个过程中,FuzzGuard 使用了representative data selection 方法根据 fuzzer 的 seed 和 mutate strategy 筛选不同的输入来进行预测,从而减少不必要的模型预测和程序执行时间。
MU阶段,当 FuzzGuard 在 MP 阶段收集到了进一步的前置执行路径的平衡数据集,则使用 incremental learning 更新模型。之后迭代 MI、MP、MU,直到执行路径到达最终的目标代码。
在45个真实漏洞的检测上,FuzzGuard 能平均加快 AFLGo 的检测速度 17.1 倍。并且在实验中还偶然发现了新的漏洞,并已获得了 CVE 号。