[论文笔记] Machine-Learning-Guided Selectively Unsound Static Analysis

news/2025/11/2 19:27:28/文章来源:https://www.cnblogs.com/sysss-blogs/p/19185044

Introduction

现有的静态分析工具都是 unsound 的,并且体现为 uniformly unsound。这里的“uniformly”指静态分析工具会用一种统一地忽略所有不能处理的特性,而不考虑代码上下文。这种策略会减少误报率 \(\frac{false \ alarm}{all \ alarm}\),但是会提高漏报率 \(\frac{true \ bug}{all \ bug}\)。另一种方法是把分析改进为 uniformly sound,但是这会降低漏报率,提高误报率。

一个结论是:产生误报的程序片段(循环和库调用)是相似的、可预测的,并且具有一些共同特性。与此同时,真实的漏洞通常是由不同的原因引起的,这些原因在某种程度上是非典型和不可预测的。提出一种方法:通过传统机器学习的手段捕捉无害但降低精度的程序片段的共同特征,在 uniformly sound analysis 中识别可能引入 false alarm 的程序片段,然后选择性的应用 unsound analysis。

实验结果证明 selectively unsound analysis 在大幅减少漏报数量的同时维持了原有的精度。

Overview

考虑区间分析 interval analysis 的一个例子,这段代码包含两次缓冲区访问,第一次是安全的,而第二次是不安全的:

image

Uniformly unsound analysis 会放弃对循环的分析,转而将每个循环 unroll 成下面的形式,这会使得分析认为 \(i\) 的区间始终是 \([0, 0]\),从而没有发现第二次的不安全缓冲区访问:

image

Uniformly sound analysis 会注意到循环,但由于无法处理 \(i \neq 11\) 的特征,认为 \(i\) 的区间始终是 \([0, +∞]\),从而在第一次缓冲区访问的位置产生了 false alarm。如果在第一次的缓冲区访问使用 unsound analysis,在第二次的缓冲区访问使用 sound analysis 就可以解决误报率和漏报率的问题:

image

没了解过区间分析,他也没给定义,感觉这个例子找的不够好,看上去是可以通过一些手段实现更 soundy 的区间分析的

学习阶段分为三个步骤:

  • 收集具备无害特征的代码段

  • 用一组预先定义的特征集合为每个无害代码段构建一个特征向量

  • 使用无监督的机器学习方法训练一个能够区分无害代码的分类器

Technique

Parameterized static analysis

A variant of well-known setting for parameterized static analysis。程序 \(P \in Pgm\),程序 \(P\) 的片段 \(J_P\)(可能是循环的集合,库调用的集合等等)和程序点 \(C_P\),分析器被定义为:\(Pgm \times \delta(J) \rightarrow \delta(C)\),由 soundness parameter \(\pi \in \delta(J)\) 参数化。\(\pi \in \delta(J)\) 是一组需要被 soundly 分析的程序片段。例如,所有的循环 \(J = \{J_1, J_2, ...\}\)\(J_1 \in \pi\) 意味着 \(J_1\) 需要被 soundly 分析。

Learning a classifier

手动构建的一组 features:\(f_i: J \rightarrow \{0, 1\}\)\(f = \{f_1, f_2, ..., f_n\}\)

分类器 \(C\) 应当接受某个程序片段及其特征向量作为输入,输出这个程序片段是否 harmless:\(C: \{0, 1\}^n \rightarrow \{0, 1\}\)

模型 \(M\) 根据给出的程序 \(P\) 得到参数 \(\pi\)\(M: Pgm \rightarrow \delta(J)\)

使用 One-Class Support Vector Machine(OC-SVM)学习这个模型。首先逐个对代码库中的每个程序片段应用不可靠分析,运行分析并从给定代码库中收集所有无害组件的特征向量。如果在不可靠分析中真实警报的数量保持不变且虚假警报的数量减少,则认为一个程序片段是无害的。

image

Instance analysis

给出了一个通用的分析框架,这个框架对于循环和标准库调用是 selectively sound 的,选择了两个分析及其对应的两种程序片段作为实例。

A Generic, Selectively Unsound Static Analysis

抽象文法如下:

image

抽象语义如下,函数 \(s\) 是一个从抽象位置到抽象值的映射,可以看作程序状态的一种表示,\(s[L \rightarrow V]\) 可以看作 \(s\)\(L\) 对应的应设置被更新为 \(V\);为了简化形式语义,定义两个函数 \(L\)\(S\) 来区分左值右值的语义:

image

注意到 while 和 lib() 是受参数 \(\pi\) 调控的

下面的两个形式语义没啥大意思,可能是写给审稿人看的

对于区间分析,有:

image

对于污点分析,有:

image

Experiments

要解决如下的问题:

  • Selectively unsound analysis 的表现怎么样?

  • OC-SVM 的表现怎么样?

  • 如何手动设计一组合适的 features?

  • Selectively unsound analysis 的效率怎么样?

Setting

Baseline:在一个完整C语言的静态分析器上实现了上述方法,对于每个分析,建立了一个 sound 的版本(BASELINE)、一个 uniformly unsound 的版本(UNIFORM)和一个 selectively unsound 的版本(SELECTIVE)。

Benchmark:36个已知存在缺陷的程序,来自开源软件或之前关于静态分析的工作,包含138个真实的缓冲区溢出漏洞和106个真实的 formatted string 漏洞

Effectiveness of approach

image

image

image

Time cost

BASELINE分析所有列出的程序花费了42.1秒,而UNIFORM仅花费了27.7秒,减少了14.4秒(34.2%)。SELECTIVE花费了33.8秒,减少了8.3秒(19.7%)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/953749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年 11 月精密无缝钢管,合金无缝钢管,厚壁无缝钢管厂家最新推荐,实力品牌深度解析采购无忧之选!

近期,行业权威协会针对精密无缝钢管、合金无缝钢管、厚壁无缝钢管领域开展了 2025 年度 11 月专项测评,测评覆盖近百家主流厂家,从技术实力、产品质量、生产能力、售后服务、市场口碑五大维度,采用数据化评分与实地…

题解:AT_abc166_f [ABC166F] Three Variables Game

题目 思路 这是一道比较简单的贪心题。 不断地分类讨论。哪一个小就加一,另一个就减一。如果两个都相等时,就判断下一个,有相同的就加一,另一个减一,如果都没有相同的,就随便加减。如果两个都为 $0$ 时,就直接输出…

Awesome Neovim - 精选Neovim插件大全

Awesome Neovim是一个精心策划的Neovim插件集合,专注于展示Neovim特有功能的插件。项目包含插件管理器、LSP支持、自动补全、语法高亮等各类高质量插件,帮助用户打造高效开发环境。Awesome Neovim精选的Neovim插件集…

不会AI编程?没关系!这几个框架也让你也能开发AI聊天助手!

这篇教程教你从零开始,使用FastAPI+Vue构建类似Deepseek的AI助手。内容涵盖完整的前后端架构设计、数据库规划、LLM集成、安全防护与性能优化等。即使编程经验不多,也能跟着步骤实现打字机效果等流畅交互功能,打造一…

[KaibaMath]1018 基于复合函数理解子数列的一般项

[KaibaMath]1018 基于复合函数理解子数列的一般项子数列一般项的下标形如阶梯,我们不妨称其为数列下标的阶梯表示法。但这种表示法给出的一般项委实不容易理解,故本文基于复合函数给出一种更容易的理解方式。基于此,…

窗口函数

窗口函数:它们都用于为查询结果集中的每一行分配一个排名或序号 核心区别总结表函数功能描述排序特点(针对相同值)序号示例ROW_NUMBER() 为每一行生成一个唯一的、连续的序号。 即使值相同,也会分配不同序号(顺序…

别只怪客户端宕机!还有这些导致 Redis 分布式锁“死锁”的原因 - 公众号

本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!🚀 魔都架构师 | 全网30W技术追随者🔧 大厂分布式系统/数据中台实战专家🏆 主导交易系统百万级流量调优 & 车联网平台架构🧠 AIGC应用开发…

CCF CSP-S2 2025 游记

\(\text{Day0}\) 看到了 2024 年的第三题,我一直在复习组合计数 DP。结果,一天就弄懂了两道题。。。 \(\text{Day1}\) 第一件事自然是洛谷签到,中吉,忌出行、摸鱼。 早上八点出发,一早起来大雾,告诉走不了高速,…

CSP-S 2025 总结

114,514,1919810.0.前言 信心十足! 1.正文 不会做原题。 2.总结 我是人类吗?

LangChain v1.0 中间件详解:彻底搞定 AI Agent 上下文控制

用 LangChain 构建 AI Agent 的人应该都遇到过这种情况:测试阶段一切正常,部署到生产环境就开始出各种问题。上下文管理混乱,Agent 的行为变得难以预测,最后不得不写一堆自定义代码来控制信息流向。 这是因为在v1.…

【EF Core】“多对多”关系与跳跃导航

“多对多”关系不像“一对多”那么“单纯”,它内部涉及到“连接实体”(Join Entity)的概念。咱们先放下这个概念不表,来了解一下多对多数据表为什么需要一个“辅助表”来建立关系。 假设有两张表:一张表示学生,一…

DeepSeek-MTP多token预测

多Token预测(Multi-Token Prediction, MTP)是DeepSeek-V3模型的一项核心创新技术,旨在通过一次前向传播预测多个未来词元,从而显著提升模型的训练效率和推理速度,同时增强对上下文的理解能力。该技术原始论文是由…

11.2阅读笔记

《断言式编程》这一章教我如何主动地、有章法地处理程序中的“意外”情况。 ​​1. 断言式编程:明确你的假设​​ “断言式编程”的核心思想是:​​用代码明确地表达你对程序状态的假设,如果假设被违反,就果断地报…

温故知新,英语口语提升计划之Social English - Greeting People

Greeting People Look at some ways to greet people. Do you greet people that you meet for the first time the same way that you greet people you know? What can change? Greeting People You Meet for the …

23432

23432 32423 ‍本文来自博客园,作者:对象存储与RustFS,转载请注明原文链接:https://www.cnblogs.com/rsfs/p/19185241/23432-2fnvqw

关于dp

dddddddddpppppppp发扬多头精神,质疑dp,理解dp,成为dp! 由浅入深 ATcoder Dp 普及~提高的版子记录 LinkA - Frog 1B - Frog 2C - VacationD - Knapsack 1E - Knapsack 2F - LCSG - Longest PathH - Grid 1I - Coin…

Git 协作实战与 Gerrit 评审流程

Git 协作实战与 Gerrit 评审流程Git 协作实战与 Gerrit 评审流程适用场景:公司内网仓库 + Gerrit 评审流程;服务器上 Git 版本较老(无 git switch、git restore)。 示例仓库:/home/aaa/bbb/ccc,远端别名 origin。…

分库分表MyCat 架构迁移 OceanBase | 百丽核心财务系统迁移经验总结与问题汇总

分库分表MyCat 架构迁移 OceanBase | 百丽核心财务系统迁移经验总结与问题汇总百丽时尚集团(以下简称百丽)是中国领先的大型时尚鞋服集团,其核心财务系统刚刚经历了一场“换心脏”手术。 本文详细拆解MyCat 切换 Oc…

算法研究内容算法有关概念

1.1调度问题与投资问题 1. 调度问题问题&建模2. 贪心算法: 加工时间短的先做,加工时间从小到大排序(有反例 根据实际问题使用) 3. 算法设计: 1.问题建模 2.选择什么算法?如何描述这个算法? 3.这个算法是否对所有…

第13天(中等题 滑动窗口)

打卡第十三天 2道中等题一个高效的方法来获取数组中所有不重复的元素。 unordered_set<int> uniqueSet(nums.begin(), nums.end());//获取数组中所有不重复的数字 int k = uniqueSet.size();//不重复数字的个数k…