静态分析
在Trail of Bits,我们投入大量精力构建可靠的静态分析工具(如McSema和Slither)。ICSE会议展示了提升静态分析可扩展性的两大趋势:轻量级与高成本分析的结合,以及参数在线调优。
基于SMT的Clang静态分析器误报消除
作者:Mikhail R. Gadelha等(pdf)
该研究通过SMT求解器过滤Clang静态分析器的误报,虽技术非全新但实现了在编译器内的直接集成,且无需显著开销即可使用。
基于在线抽象缩放的资源感知程序分析
作者:Kihong Heo等(pdf)
通过实时调整分析参数(如空闲内存),动态启用/禁用变量的流敏感性。首先对变量评分以确定流敏感重要性,再由控制器决定处理数量,未达到固定点时动态调整。这是向自适应静态分析器迈出的重要一步。
SMOKE:百万行代码级路径敏感内存泄漏检测
作者:Gang Fan等(pdf)
通过两阶段方法检测大规模代码库内存泄漏:先使用流图快速分析过滤多数泄漏候选,再对剩余对象进行精确分析。该工具基于LLVM,可处理800万行代码项目(工具与实验数据公开,源代码未公开)。
测试技术
我们持续关注基于模糊测试和符号执行的输入生成技术,例如在Manticore中集成新方法。
随机生成结构丰富的代数数据类型值
作者:Agustín Mista等(pdf)
为Haskell设计代数数据类型值生成方法,确保值构造器生成频率均匀以提升bug发现概率。生成代码在编译时完成,可用于测试非Haskell程序(源代码)。
DifFuzz:侧信道分析的差分模糊测试
作者:Shirin Nilizadeh等(pdf)
通过最大化两个输入间资源使用差异(时间/内存)检测侧信道,输入包含相同公共部分和不同私有部分。资源差异超过阈值则存在信息泄露风险(代码)。
SLF:无有效种子输入的模糊测试
作者:Wei You等(pdf)
在无种子或源代码时改进模糊测试:先使用AFL识别输入字段,再通过动态分析确定字段验证类型(算术/索引/计数等),最后按类型生成突变输入。实验显示其在发现新bug和提升覆盖率方面有效(未开源)。
二进制代码灰盒混合测试
作者:Jaeseung Choi等(pdf)
提出Eclipser模糊测试工具,结合符号执行思想但保持可扩展性,已集成至DeepState(C/C++基于属性的测试工具)。
区块链
学术圈区块链热度不减,ICSE涌现多篇相关论文。
更智能的合约开发工具(WETSEB)
作者:Michael Coblenz等(pdf)
介绍Obsidian语言,通过静态证明和动态检查提升安全性(当前仅编译至HyperLedger Fabric),正在进行用户研究以改进设计。
Gigahorse:智能合约声明式反编译
作者:Neville Grech等(pdf)
基于Datalog的EVM反编译器,将反编译步骤编写为规则并外接定点循环克服语言限制(在线服务,源代码未公开)。
自动化修复
自动补丁生成复杂但具潜力,我们通过slither-format在智能合约领域初步探索。
SapFix:大规模端到端自动化修复
作者:A. Marginean等(pdf)
Facebook部署的针对空指针的修复工具,结合Sapienz和Infer,集成动态崩溃信息与静态分析改进故障定位。七天内无开发者审核则放弃补丁。
补丁正确性评估的可靠性
作者:Xuan-Bach D. Le等(pdf)
评估八款自动修复工具(35名开发者参与),结果显示工具效果不如宣称但可作为现有工具补充。
海报环节
展示进行中的研究并支持作者直接交流。
- 需求驱动的指针分析优化(Chenguang Sun等,pdf)通过切片程序元素提升指针分析可扩展性。
- WOK:生产环境静态程序切片(Bogdan-Alexandru Stoica等,pdf)利用静态数据流和硬件支持(如Intel PT)实现动态切片。
- 有效性模糊测试与参数化生成器(Rohan Padhye等,pdf)通过验证器丢弃无效输入并转换结构以保持输入语法/语义。
- 机器学习优化模糊测试种子输入(Liang Cheng等,pdf)通过神经网络学习输入与执行轨迹关联性,PDF实验效果优于前人工作。
学术合作
我们基于最新研究构建可靠工具(如Manticore、McSema),乐于与学术界交流技术愿景,并为学术研究提供工具技术支持(欢迎联系)。