一句话:提出基于内存与线程事件偏序的并发内存漏洞检测方法,通过交换易漏洞事件顺序构造可行迹,兼顾效果与效率。
多线程程序中的内存漏洞往往只在特定执行交错下触发,穷举所有执行代价高且易漏报。本文提出一种基于事件偏序的并发内存漏洞检测方法。偏序表示事件之间确定的执行顺序,通过交换潜在漏洞事件对的顺序来构造能够暴露漏洞的可行迹,从而缩小搜索空间并提升效率。作者针对三类内存漏洞设计了提取潜在漏洞事件对的算法,并提出计算事件对可行集的新算法,可行集包含构造可行迹所需的相关事件。该方法还扩展了已有数据竞争检测思路,考虑两个事件由同一把锁保护的情形。原型工具实验表明,其在检测效果和效率上均优于当前先进算法。
Memory vulnerabilities are the main causes of software security problems. However, detecting vulnerabilities in multi-threaded programs is challenging because many vulnerabilities occur under specific executions, and it is hard to explore all possible executions of a multi-threaded program. Existing approaches are either computationally intensive or likely to miss some vulnerabilities due to the complex thread interleaving. This paper introduces a novel approach to detect concurrency memory vulnerabilities based on partial orders of events. A partial order on a set of events represents the definite execution orders of events. It allows constructing feasible traces exposing specific vulnerabilities by exchanging the execution orders of vulnerability-potential events. It also reduces the search space of possible executions and thus improves computational efficiency. We propose new algorithms to extract vulnerability-potential event pairs for three kinds of memory vulnerabilities. We also design a novel algorithm to compute a potential event pair's feasible set, which contains the relevant events required by a feasible trace. Our method extends existing approaches for data race detection by considering that two events are protected by the same lock. We implement a prototype of our approach and conduct experiments to evaluate its performance. Experimental results show that our tool exhibits superiority over state-of-the-art algorithms in both effectiveness and efficiency.
DOI 原文 ·
@inproceedings{paperbot6403,
title = {Detecting concurrency vulnerabilities based on partial orders of memory and thread events},
author = {Kunpeng Yu and Chenxu Wang and Yan Cai and Xiapu Luo and Zijiang Yang},
booktitle = {FSE},
year = {2021},
doi = {10.1145/3468264.3468572}
}