变异器
更多的软件
我们如何有效地模糊更多类型的软件系统?我们已经知道如何模糊命令行工具(AFL和KLEE)和应用程序编程接口(api) (LibFuzzer)。fuzzer产生输入并观察程序的输出。社区正在积极地研究如何模糊那些具有高度结构化输入的程序,比如文件解析器或面向对象的程序。然而,作为其执行的一部分与环境进行交互的模糊网络物理系统,或由其训练数据决定行为的机器学习系统,都是一个探索不足的领域。我们如何模糊有状态的软件,比如协议实现,它可以为相同的输入产生不同的输出?大多数灰盒和白盒模糊器都是用一种编程语言编写的。我们如何模糊使用多种语言编写的多语言软件?我们如何模糊基于gui的程序,将在用户界面上执行的事件序列作为输入?对于白盒模糊,我们已经知道符号执行如何表示基于数字或字符串的输入域的约束。然而,给定一个输入域由语法和/或协议定义的程序,符号执行工具如何有效地在这样的“结构化”输入域上形成约束呢?
更多的漏洞类型
fuzzer如何识别更多类型的漏洞?目前关于模糊的工作有很大一部分集中在简单的预言上,比如查找崩溃。我们需要研究安全关键级别的bug,这些bug不会表现为崩溃,我们需要开发能够有效检测它们的oracle。漏洞通常被编码为程序状态的断言。通过使用这样的断言,我们已经知道如何发现与内存或并发相关的错误。侧通道漏洞的发现,如信息泄露或定时、缓存或与能源相关的侧通道,是当前一个活跃的研究课题展望未来,我们应该发明技术来自动检测和调用C/ c++和其他编程语言中的特权升级、远程代码执行和其他类型的关键安全缺陷。
更困难的bug
我们如何找到“深层bug”,这些bug存在有效的oracle,但却无法被发现?尽管进行了长期的模糊活动