一句话:提出精确量化单次执行侧信道泄露比特数的程序分析方法,并实现工具 Abacus。
现有侧信道检测能发现大量潜在漏洞,却无法量化单次攻击泄露的信息量,开发者难以判断严重性。本文提出精确量化单条执行轨迹侧信道泄露比特数的程序分析方法:将攻击者对每个泄露点的观察建模为约束,用符号执行生成约束,再以蒙特卡洛采样估计泄露比特数,并基于中心极限定理给出误差界;实现工具 Abacus。在 OpenSSL、mbedTLS、Libgcrypt 与 Monocypher 上评估表明,Abacus 在性能与准确率上优于现有动态检测工具;多数报告漏洞实际难以利用,应降低优先级,同时发现若干现有工具漏报的敏感漏洞,并经人工检查与联系开发者确认。
Side-channel attacks allow adversaries to infer sensitive information from non-functional characteristics. Prior side-channel detection work is able to identify numerous potential vulnerabilities. However, in practice, many such vulnerabilities leak a negligible amount of sensitive information, and thus developers are often reluctant to address them. Existing tools do not provide information to evaluate a leak's severity, such as the number of leaked bits. To address this issue, we propose a new program analysis method to precisely quantify the leaked information in a single-trace attack through side-channels. It can identify covert information flows in programs that expose confidential information and can reason about security flaws that would otherwise be difficult, if not impossible, for a developer to find. We model an attacker's observation of each leakage site as a constraint. We use symbolic execution to generate these constraints and then run Monte Carlo sampling to estimate the number of leaked bits for each leakage site. By applying the Central Limit Theorem, we provide an error bound for these estimations. We have implemented the technique in a tool called Abacus, which not only finds very fine-grained side-channel vulnerabilities but also estimates how many bits are leaked. Abacus outperforms existing dynamic side-channel detection tools in performance and accuracy. We evaluate Abacus on OpenSSL, mbedTLS, Libgcrypt, and Monocypher. Our results demonstrate that most reported vulnerabilities are difficult to exploit in practice and should be de-prioritized by developers. We also find several sensitive vulnerabilities that are missed by the existing tools. We confirm those vulnerabilities with manual checks and by contacting the developers.