Modeling and Discovering Vulnerabilities with Code Property Graphs论文分享

今天分享的论文是《Modeling and Discovering Vulnerabilities with Code Property Graphs》

原文链接:Modeling and Discovering Vulnerabilities with Code Property Graphs | IEEE Conference Publication | IEEE Xplore

读这篇论文主要是做挖洞工作的时候要用,所以学习了解了一下,是一篇2014年的论文。

论文主要是介绍一种图格式去挖洞,实验评估部分大段数学公式,不再过多介绍了。

在本文中提出了一种有效地挖掘大量源代码漏洞的方法。为此,引入了一种称为代码属性图的源代码新表示,它将经典程序分析的概念,即抽象语法树、控制流图和程序依赖图,合并到一个联合数据结构中。这种全面的表示使得能够通过图形遍历为常见漏洞优雅地建模,例如,可以识别缓冲区溢出、整数溢出、格式字符串漏洞或内存泄漏。使用一个流行的图形数据库来实现方法,并通过识别 Linux 内核源代码中的 18 个以前未知的漏洞来证明其有效性。

贡献:

(1)代码属性图。介绍了一种新颖的源代码表示法,它结合了抽象语法树、控制流图和程序依赖的特性联合数据结构中的密度图。

(2)漏洞类型的遍历。常见类型的漏洞可以优雅地建模为代码属性图的遍历,并产生有效的检测模板。

(3)有效实施。证明了通过将代码属性图导入到图形数据库中,可以在大型代码上有效地执行遍历基础,比如 Linux 内核

(In summary, we make the following contributions to the problem of vulnerability discovery: • Code property graph. We introduce a novel representation of source code that combines properties of abstract syntax trees, control flow graphs and program dependence graphs in a joint data structure. • Traversals for vulnerability types. We show that common types of vulnerabilities can be elegantly modeled as traversals of the code property graph and give rise to efficient detection templates. • Efficient implementation. We demonstrate that by importing the code property graph into a graph database, traversals can be efficiently executed on large code bases, such as the Linux kernel.)

不足:

首先,方法是纯静态的,因此不能克服静态程序分析的固有限制。当实现控制和数据流跟踪时,不解释代码,例如,使用符号执行可能找到等价但不同表达的表达式。因此,由运行时行为(如竞争条件)引发的漏洞无法使用代码属性图进行建模。

第二,由于漏洞发现问题在一般情况下是不可判定的,方法只能发现潜在的易受攻击的代码。与针对特定类型漏洞的方法相比,侧重于挖掘漏洞的一般方法,这种方法可能无法保证存在安全漏洞,但可以识别超大型软件项目中的潜在漏洞。

第三,当前的实现没有处理过程间分析。当根据图数据库中的调用关系链接函数时,制定有效的过程间遍历带来了额外的挑战。这不是方法的固有限制,因为存在控制流图和程序依赖图的过程间变体以程序间控制流程图和系统依赖图的形式。

总结:

为分析人员提供发现软件漏洞的实用方法对于保护计算机系统至关重要。本文提出了一种从大量代码中挖掘漏洞的方法。这种方法建立在一种新颖的源代码表示法——代

码属性图——的基础上,它能够根据图遍历对常见漏洞的模式进行建模。使用这种表示,已经为许多众所周知的漏洞类型提供了小而简洁的遍历,包括缓冲区溢出、格式字符串漏洞和内存地址泄漏。此外,使用代码属性图审计了一个大型代码库(Linux 内核),并在供应商确认和修复的源代码中发现了总共 18 个以前未知的漏洞。

代码属性图和图遍历适用于找到常见类型的漏洞,但更重要的是,它们可以被很好地定制,以识别特定于代码库的漏洞。通过重新定义遍历,分析师可以完全控制误报率和漏报率,从而允许在分析的发现阶段制定模糊遍历,并允许非常精确的遍历来捕获充分了解的漏洞类型的实例。

### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值