一句话:提出 Siro,用分治骨架与程序合成自动生成 LLVM IR 版本翻译器,并成功辅助静态分析与 fuzzing。
IR 版本不兼容使基于中间表示的软件(如静态分析器)难以复用既有工具。本文提出 Siro,一个在不同版本 IR 之间进行转换的程序变换框架。其方法采用分治算法骨架,并利用程序合成在巨大搜索空间中自动生成 IR 指令翻译器,以减少人工实现。作者在 LLVM IR 上实例化 Siro,为十个不同版本对生成了可用的翻译器,每个耗时少于三小时。评估中,这些翻译器协助静态分析器和 fuzzer 报告漏洞,准确率分别达到 91% 和 95%;Siro 已在真实场景部署,帮助现有静态分析器保护 Linux 内核并发现 80 个新漏洞。
This paper presents Siro, a new program transformation framework that translates between different versions of Intermediate Representations (IR), aiming to better address the issue of IR version incompatibility on IR-based software, such as static analyzers. We introduce a generic algorithm skeleton for Siro based on the divide-and-conquer principle. To minimize labor-intensive tasks of the implementation process, we further employ program synthesis to automatically generate translators for IR instructions within vast search spaces. Siro is instantiated on LLVM IR and has effectively helped to produce ten well-functioning IR translators for different version pairs, each taking less than three hours. From a practical perspective, we utilize these translators to assist static analyzers and fuzzers in reporting bugs and achieving accuracy of 91% and 95%, respectively. Remarkably, Siro has already been deployed in real-world scenarios and makes existing static analyzers available to safeguard the Linux kernel by uncovering 80 new vulnerabilities.
@inproceedings{ZhangCYWTZ24,
title = {SIRO: Empowering Version Compatibility in Intermediate Representations via Program Synthesis},
author = {Bowen Zhang and Wei Chen and Peisen Yao and Chengpeng Wang and Wensheng Tang and Charles Zhang},
booktitle = {ASPLOS},
year = {2024},
doi = {10.1145/3620666.3651366}
}