-
摘要:
内核中的引用计数缺陷会引起内存泄露、释放后使用漏洞等严重安全问题. 针对这类缺陷,提出基于错误路径行为一致性分析的缺陷检测方案. 相比已有工作,该方案引入错误路径的语义信息来推断合理的引用计数行为,从而检出以往难以覆盖的引用计数缺陷.具体而言,首先,该方案基于代码特征识别函数中所有的错误路径. 其次,采用路径敏感的静态分析对各条错误路径上的引用计数行为进行分析汇总,以推断该函数在错误路径上引用计数操作的主流倾向.最终,基于一致性分析原理,将与主流倾向不一致的路径标识为潜在缺陷.实验表明,该方案在Linux内核版本5.6-rc2和版本5.17上分别发现21个和9个引用计数缺陷,且大部分都被开发者确认;其中,在内核版本5.6-rc2上有9个缺陷是已有工作无法覆盖的.
Abstract:Reference counting (refcount) bugs in the kernel could cause critical security problems including memory leak and use-after-free vulnerabilities. To detect such defects, we propose a refcount bug detection system based on consistency analysis of error path behavior. Compared with the existing work, our method introduces semantic information of the error paths to infer the appropriate refcount behavior on these paths, thus detecting refcount defects cannot be covered by the existing work. First, the system identifies all the error paths in the target function based on the function return value and fault handling code. Second, path-sensitive analysis is performed to collect the specific refcount behavior on each error path within the target function, which is aggregated to infer the dominant tendency of refcount behavior of the error paths in the target function. Finally, based on the idea of consistency checking, the error paths whose refcount behavior is inconsistent with the dominant tendency are identified as potential refcount bugs. In the evaluation, the proposed system finds 21 and 9 bugs on Linux kernel version 5.6-rc2 and version 5.17, respectively, most of which have been confirmed by the kernel developers. In addition, on kernel version 5.6-rc2, the system detects 9 new refcount bugs that could not be identified by existing work.
-
点击率(click through rate, CTR)预测是推荐系统中的一个重要任务[1-4],它的目标是预测用户对候选物品的点击概率,并根据预测概率对用户进行物品的个性化推荐. 特征交叉是CTR预测任务中非常重要的一环,学习有效的高阶特征交叉可以提高模型的性能[5-8]. 目前学习高阶交叉特征的方法主要基于低阶特征组合,通过不同的组合方式构造高阶的特征交叉. 但当原始特征的数量增加时,特征组合的数量会呈指数增长,带来巨大的时间开销. 而在实际应用中,原始输入特征往往是上万维的稀疏特征:例如用户或产品的ID字段,在进行one-hot编码后会产生一个非常稀疏的向量,基于高维稀疏向量的特征交叉会带来极大的开销,而且不可避免地会导致模型过拟合问题.
为了解决上述问题,基于特征交叉的研究工作分为3类:1)基于因子分解机(factorization machines, FM)的模型,例如FM[9],DeepFM[10],xDeepFM[11],FiBiNet[12];2)基于自注意力(self-attention)机制的模型,例如AutoInt[13],AFM[14],HoAFM[15];3)基于神经网络的特征交叉模型,例如DCN[16]及其改进版本DCN-V2[17],这类方法通过组合低阶特征交叉的方式来产生高阶特征交叉. 考虑到枚举所有的2阶交叉特征非常耗时,并且可能产生不相关的特征组合,使得模型引入噪声影响模型性能. 一些方法[10,18]尝试利用深度神经网络(deep neural network, DNN)来减小低阶特征组合的搜索空间,但其被证明不能很好地学习低阶的特征交叉信息[1,16],影响模型的预测性能.
为了能够同时学习有效的低阶和高阶的特征交叉,本文提出了一种基于多粒度特征交叉剪枝的模型FeatNet(feature interaction pruning network). 该模型包括显式特征子集生成网络(feature subset generation network, FSGN)和隐式特征交叉滤波网络(feature interaction filtering network, FIFN)这2个部分. 其中, 显式特征子集生成网络通过软阈值剪枝策略生成有效的特征集合,既保持了不同特征组合的多样性,又降低了高阶特征交叉的复杂度;隐式特征交叉滤波网络是基于剪枝后的特征集合,在特征元素粒度上进一步进行隐式高阶特征交叉,通过滤波器自动过滤无效的特征交叉信息,提升了模型性能.
相比于其他高阶特征交叉模型, 在本文提出的基于多粒度特征交叉剪枝的CTR预测模型FeatNet中,高阶特征交叉的生成来源于不同组合的低阶特征集合,在显式特征粒度筛除了噪声特征,为后续的隐式高阶特征交叉提供了更加丰富的特征组合信息,提高了模型的预测性能. 本文的贡献总结为3个方面:
1)提出了一种基于多粒度特征交叉剪枝的CTR预测模型FeatNet,该模型能够在显式的特征粒度和隐式的特征交叉粒度过滤噪声交叉信息,同时保留有效低阶和高阶特征交叉信息.
2)提出了一种基于软阈值特征剪枝的策略,能够自动生成带有不同信息的特征集合,并对不同剪枝阈值进行分析,验证了降低子集之间的相似度、生成差异性的特征组合,可以提升模型CTR预测的准确率;
3)在MovieLens和WeChat数据集上进行了大量的实验,验证FeatNet模型能够很好地处理高维输入特征,取得最优的点击率预测效果.
1. 相关工作
CTR预测的研究[19-23]通常分为2种:一种主流算法侧重于如何捕获高阶特征交互;另一种则试图找到更好的方法来学习特征交互的重要性,以获得更好的特征组合.
本文将从高阶特征交叉建模、特征重要性建模2个方面来梳理点击率预测的相关研究,并总结常用的剪枝策略.
1.1 高阶特征交叉建模
FM[9]是一种经典的特征交叉方法,它枚举了所有2阶特征组合,通过点积的方式来产生2阶交叉特征. FM模型在构建K阶交叉特征时,需要枚举所有K阶特征的全部组合,会产生非常高的开销. Blondel等人[24]提出了一种高阶特征交叉的方法HOFMs,通过引入核函数,构建了线性时间复杂度的动态规划算法,可以加快高阶特征交叉的速度. DeepFM[10]采用把FM和DNN相结合的方式,使用FM构造2阶交叉特征,利用深度神经网络构造隐式高阶交叉特征,减小了计算高阶交叉特征时的开销. xDeepFM[11]在DeepFM的基础上进行了改进,增加了压缩交叉网络(compressed interaction network, CIN)来显式枚举构造特征交叉,并利用求和池化操作对特征矩阵进行压缩来降低特征维度. 虽然CIN可以降低高阶交叉特征的时间开销,但是仍需要对所有特征进行两两组合. 为了能够让模型自动地学习特征的组合方式,DCN[16]及其改进版本DCN-V2[17]设计了Cross Net使用跨层信息来构造交叉特征,在学习隐式特征交叉方面取得更好的性能. AutoInt[13]模型基于Transformer[25]结构,利用多头自注意力模块来构建隐式高阶特征交叉,采用 Query 和 Key 来评估不同特征维度之间的相似度,然后将带有注意力权重的特征相加得到高阶特征交叉信息.
1.2 特征权重建模
在CTR预测任务中,除了有效建模高阶特征交叉,建模交叉特征的重要性权重也非常重要,可以用来去除无关的噪声信息,提升预测的准确率. 例如,FwFM[26]通过为每个交叉对分配可学习的权重来改进FM;IAFM[27]考虑特征和域信息来建模不同粒度的特征交叉权重;FiBiNet[28]使用Squeeze-Excitation网络通过双线性层来构建特征交叉并学习对应的权重值;AutoFIS[29]通过使用正则优化器来优化参数搜索空间,能够利用较少的资源自动识别重要的交叉特征.
1.3 剪枝策略
为了生成带有不同信息的特征子集,本文采用软阈值剪枝策略[30-32]来对特征进行选择. 目前,特征剪枝方法包括:Louizos等人[33]提出在神经网络中加入L0范数正则化,通过训练参数权重,并根据权重值来判定是否对网络进行剪枝. L0-SIGN[34]使用DNN不同交叉特征的重要性,并采用L0范数正则化方法来产生有意义的交叉特征;Kusupati等人[30]提出了一种更简单的软阈值方法STR,该方法从稀疏数据中学习,并使用软阈值权重来更新学习到的参数,当神经元的权重小于阈值时,它的权重被置为0. 该方法可以在保持高准确率的同时减少95%以上的嵌入参数[35].
2. 模型的提出
本文提出了基于多粒度特征交叉剪枝的点击率预测模型FeatNet. 该模型首先基于显式特征粒度,通过特征剪枝生成有效的特征集合,保持了不同特征组合的多样性,也降低了高阶特征交叉的复杂度;基于剪枝后的特征集合,通过滤波器在特征元素粒度上进一步进行隐式高阶特征交叉.
2.1 模型结构
如图1(a)所示,FeatNet由4部分组成:嵌入层、特征子集生成网络、特征交叉滤波网络和预测层. 原始特征在嵌入层转化为稠密向量后,特征子集生成网络在特征级别(feature-wise)对特征进行显式地选择,得到若干个特征子集,并保证每个子集中特征组合的多样性;特征交叉滤波网络对每个子集中的特征进行滤波降噪,并在元素级别(bit-wise)对特征进行隐式特征交叉;预测层输出最终预测结果.
2.2 嵌入层
嵌入层将原始的输入特征转化为稠密向量. 一般来说,输入的特征可以分为3类:数值类型、类别特征和向量. 数值类型数据,例如年龄,可以直接用数字来表示;类别特征数据,例如国籍、ID等,需要转化为one-hot编码,当类别特征较多时,产生的one-hot编码是一个非常稀疏的向量;向量数据一般是由上游任务产生的,例如某个用户的浏览序列数据或者多模态数据(如图像的视觉特征向量)等. 模型通过嵌入层把所有的原始特征都映射到低维的空间中,并把所有低维向量进行拼接得到最终的低维稠密特征向量的表示.
记M为稠密向量的个数,{{\boldsymbol{x}}_i}为第i个稠密向量,则最终的输入矩阵X可以表示为
{\boldsymbol{X}} = ({{\boldsymbol{x}}_1},{{\boldsymbol{x}}_2},…,{{\boldsymbol{x}}_M}) . (1) 2.3 特征子集生成网络
特征子集生成网络能够在特征层面进行显式的特征自动选择,产生若干个不同的特征子集. 每一个特征子集为特征交叉提供了不同的搜索空间,在每个子集中分别进行高阶特征交叉,不仅减少了高阶特征交叉的搜索空间,还能使得模型能够学习到带有不同高阶信息的特征交叉组合. 通过基于软阈值的特征剪枝策略,每个子集中的特征种类和数目保持差异化,使得特征交叉滤波网络能够从信息更加多样的特征组合中学习丰富的交叉特征,从而提高模型的表达能力. 基于软阈值剪枝策略的特征子集生成网络结构如图1(b)所示.
假设特征子集生成网络有K个子集,每个子集都有一组权重参数set param和剪枝参数pruning param,分别记为S和P. 权重参数S决定了在该子集中某个特征的重要程度,剪枝参数P决定了在该子集中某个特征是否应该保留. 通过软阈值剪枝操作,2组参数共同决定了这个子集中每个特征剪枝后的特征权重值W:
{\boldsymbol{W}} = ReLU({\boldsymbol{S}} - Sigmoid({\boldsymbol{P}})) \text{,} (2) 其中,激活函数Sigmoid保证剪枝参数P都分布在(0, 1)之间,且剪枝参数不会太大. 如果剪枝参数太大,就会导致过多的特征被去除,影响模型的性能;而太小的剪枝参数,又会使得剪枝力度过小,过滤不掉噪声特征. 对权重参数S进行[0, 1]区间内的随机初始化,并通过改变剪枝参数P的初始化范围来观察各个子集之间的差异性变化. 用权重参数S减去激活后的剪枝参数P得到剪枝权重,并通过激活函数ReLU把剪枝权重小于0的值置为0,得到最终的特征权重W.
最后,把特征权重W和输入的稠密特征X相乘,权重为0的特征就从集合中被自动过滤,权重不为0的特征以加权的方式保留在集合中,生成K个具有不同特征组合的特征子集 {\boldsymbol{X}} ',计算公式为:
{{\boldsymbol{X}}_i}' = {{\boldsymbol{W}}_i} \odot {\boldsymbol{X}} , (3) {\boldsymbol{X}}' = ({{\boldsymbol{X}}_1}',\;{{\boldsymbol{X}}_2}',\;…,\;{{\boldsymbol{X}}_K}') . (4) 其中 \odot 表示哈达玛积.
2.4 特征交叉滤波网络
考虑到在序列推荐工作[36]中,滤波器能够有效为原始数据进行滤波降噪,学习数据的序列关联信息,我们将滤波器和隐式特征交叉结合起来,提出了一个结构简单且有效的特征交叉滤波网络来捕捉高阶隐式特征交叉. 特征交叉滤波网络基于特征子集生成网络的输出,把特征子集输入到多个滤波器(filter)的串行结构中,对特征进行滤波降噪,并在元素级别对特征进行隐式高阶交叉. 滤波器的结构如图2所示.
借鉴序列推荐工作[36]中滤波网络的模型结构,在滤波交叉网络中,输入的特征子集被分别送到多个滤波头中,对于每一个特征子集{{\boldsymbol{X}}_i}',滤波头通过快速傅里叶变换把特征转换到频率域中,利用可学习的滤波权重和其相乘进行滤波降噪,再通过逆快速傅里叶变换把特征转换回原始的分布空间以完成滤波操作,得到滤波后的特征子集{{\boldsymbol{X}}_i}''. 记傅里叶变换为F(·),逆傅里叶变换为IF(·),第i个滤波头的滤波权重为{{\boldsymbol{w}}_i},则第i个滤波头将{{\boldsymbol{X}}_i}'转化为{{\boldsymbol{X}}_i}''的方式为
{{\boldsymbol{X}}_i}'' = IF(F({{\boldsymbol{X}}_i}') \odot {{\boldsymbol{w}}_i}) . (5) 最后将多个滤波头的输出进行拼接,输入到多层感知机中进行隐式特征交叉,得到交叉后的高阶特征向量. 多个滤波器的串行叠加,保证了模型能够学习到更丰富的高阶特征交叉信息.
2.5 预测层
预测层把特征交叉滤波网络输出的所有交叉特征进行拼接,得到特征的最终表示{\boldsymbol{X}}'' = ({{\boldsymbol{X}}_1}'',{{\boldsymbol{X}}_2}'',…, {{\boldsymbol{X}}_K}''). 然后把{\boldsymbol{X}}''输入到一个多层感知机中,输出预测结果. 记初始状态为{{\boldsymbol{a}}^{(0)}} = {\boldsymbol{X}}'',点击率预测概率\hat y为
\hat y = Sigmoid({{\boldsymbol{H}}^{(l)}}{{\boldsymbol{a}}^{(l - 1)}} + {{\boldsymbol{b}}^{(l)}}) \text{,} (6) 其中H和b为转换矩阵的权重和偏置,l为多层感知机的层数.
2.6 损失函数
在CTR预测任务中,最常使用LogLoss损失函数,它度量了样本真实标签与预测标签分布的KL散度:
E = - \frac{1}{N}\sum\limits_{i = 1}^N {({y_i} \times \ln ({{\hat y}_i}) + (1 - {y_i}) \times (1 - \ln (1 - {{\hat y}_i})))} \text{,} (7) 其中{y_i}是样本{x_i}的真实标签值, {\hat y_i} 是模型预测的标签,E是数据集中每个样本的平均LogLoss损失.
3. 实 验
为了验证模型的有效性,本文选取了CTR预测模型中的4个代表性模型,在2个真实数据集上进行试验,通过AUC(area under curve)和LogLoss来评估模型的推荐效果. AUC值可以评估随机抽样时正样本排在负样本前的概率[37],LogLoss能够度量样本的真实标签与预测标签的分布距离,这2个指标在推荐场景中都有重要的意义.
3.1 实验设置
3.1.1 数据集
本文在2个数据集上进行实验,包括公开数据集MovieLens,以及一个来自微信的企业数据集WeChat. 如表1所示.
表 1 数据集统计信息Table 1. Dataset Statistics数据集 特征数 数据量 MovieLens 12 1000000 WeChat 261 10000000 MovieLens数据集是在个性化推荐中常用的数据集,其中包含了电影的题材、标题以及用户的性别、年龄、职业和对电影的评分等信息;WeChat数据集中以字典的方式存放了用户和推文的特征,特征的ID索引值为190万,每个样本取其中261个作为样本特征,数据非常稀疏.
3.1.2 对比方法
实验选取CTR预测模型中4个代表性模型DeepFM,xDeepFM,AutoInt,DCN-V2作为对比.
1)DeepFM[9]用因子分解机学习低阶交叉特征,并通过深度神经网络产生高阶交叉特征;
2)xDeepFM[10]在DeepFM基础上新增了CIN这一新的模块,实现了特征级别的显式交叉;
3)AutoInt[12]采用Query和Key来评估不同特征维度之间的相似度,然后将带有注意力权重的特征相加得到高阶特征交叉信息;
4)DCN-V2[16]是基于深度神经网络的模型,采用CrossNet来学习跨层特征交叉信息,能够较好地捕捉隐式特征交叉.
3.1.3 参数设置
在实验中,数据集以8∶1∶1的比例划分为训练集、验证集和测试集. 采用网格搜索的方式来调整各个模型中的超参数并记录不同超参数下各个模型的最优结果. FeatNet的子集数K在[2, 12]之间搜索,滤波头个数F在[1, 5]之间搜索,学习率lr设置在{1E−4, 1E−5, 5E−6, 1E−6}搜索. 所有实验均在Python 3.6.13, Pytorch 1.10.1环境下完成.
调参实验后,FeatNet在MovieLens数据集上的最优配置为:学习率lr =1E−4,滤波头个数F=4,子集数K=5,权重参数S的初始化区间为[0.2,1],剪枝参数P的初始化区间为[−4, 1]. 在WeChat数据集上的最优配置为:学习率lr =1E−6,滤波头个数F=[2,2](2个滤波器串行叠加,每个滤波器有2个滤波头),子集数K=10,权重参数S的初始化区间为[0.4, 1],剪枝参数P的初始化区间为[−4, −2].
3.2 实验结果及分析
模型结果如表2所示,可以得出4个结论:
表 2 在MovieLens和WeChat数据集上的对比结果Table 2. Comparative Results on MovieLens and WeChat Datasets模型 MovieLens WeChat AUC LogLoss AUC LogLoss DeepFM 0.8884 0.33103 0.6571 0.27373 xDeepFM 0.8880 0.33252 0.6571 0.27380 AutoInt 0.8911 0.33071 0.6585 0.27381 DCN-V2 0.8920 0.32948 0.6578 0.27444 FeatNet(本文方法) 0.8923 0.32613 0.6651 0.27290 注:已有工作证明,在CTR预测中,AUC在0.0001级别的提升为显著的提升. 加粗和下划线数字分别表示最优结果、次优结果. 1)DeepFM和xDeepFM在2个数据集上的表现最差,说明这2个模型构造低阶和高阶特征交叉的能力较弱,不能把2阶噪声特征(把2个不相关的特征组合到一起)去除,在高维稀疏数据集上可能会拟合噪声数据,影响预测结果,因此这2个模型在2个数据集上效果较差.
2)AutoInt模型在WeChat数据集上的效果仅次于FeatNet,表明self-attention机制能够很好地捕捉高阶交叉特征的信息. 但是在MovieLens数据集上的效果一般,原因可能是self-attention机制对于低阶特征不能有效地学习,限制了模型的建模能力.
3)DCN-V2在MovieLens数据集上的AUC值仅次于FeatNet,说明DCN-V2组合低阶特征的能力强,能够产生有意义的高阶特征交叉. 但是DCN-V2在WeChat数据集上的表现一般,原因是在处理高维稀疏向量时,模型没有对输入特征进行降噪,会拟合噪声数据,导致模型效果下降.
4)FeatNet模型在2个数据集上都取得了最高的AUC值和最低的LogLoss,说明模型通过软阈值剪枝,能够对原始的稀疏特征信息进行自动降噪,为隐式交叉网络提供了有效的输入特征,使得模型能够建模有效的高阶特征交叉信息.
3.3 消融实验
为了验证本文提出的特征子集生成网络和特征交叉滤波网络的有效性,本文基于MovieLens上的最优模型进行了消融实验,设置了仅保留特征子集生成网络和仅保留特征交叉滤波网络2组实验来观察2个模块对模型整体结果的影响,其中在使用特征子集生成网络的实验中,保留了特征交叉滤波网络中的特征交叉部分,实验结果如表3所示.
表 3 消融实验结果Table 3. Ablation Experiment Results特征子集生成网络 特征交叉滤波网络 AUC √ 0.8895 √ 0.8911 √ √ 0.8923 注:“√”表示保留该网络. 由表3可以看出,仅有特征交叉滤波网络的对照组AUC值大幅度下降,说明如果在特征交叉前不进行剪枝处理,那么在特征交叉时会因为搜索空间太大且单一导致模型不能学习到带有不同高阶信息的特征交叉组合,限制了模型的表达能力. 使用特征子集生成网络的模型AUC值也有一定程度的下降,说明没有特征交叉滤波网络,特征中存在的噪声不能有效地被去除,进而影响模型的预测效果. 与都保留这2种网络相比,2组实验的AUC值都有所下降,验证了特征子集生成网络和特征交叉滤波网络的有效性.
3.4 模型超参数分析
为了探究超参数对模型效果的影响,本文选取MovieLens上最优模型配置,进行了模型超参数分析实验,选取特征子集生成网络中特征子集生成个数K、特征交叉滤波网络中滤波头的个数F和剪枝参数P进行分析. 图3和图4为MovieLens数据集上,超参数K,F,P对于模型AUC值的影响. 可以看出:
1)如图3(a),随着子集个数K的增加,模型AUC值呈现先增大后减小的趋势. 当子集个数K=5时,模型取得最优效果. 产生这种现象的原因在于:子集中带有不同的特征组合信息,随着K的增大,特征交叉滤波网络可以学习到更加多样的特征交叉信息,因此模型的AUC值提高. 但是随着K的继续增大,学习的参数空间也会增加,加大了模型拟合的难度,导致模型的AUC值降低.
2)如图3(b),随着滤波头个数F的增长,模型AUC值也呈现先增大后减小的趋势. 当滤波头个数F=4时,模型取得最优效果. 产生这种现象是因为随着滤波头个数的增加,滤波后拼接得到的向量长度会成倍增长. 向量长度过长,就会导致模型训练参数增加,拟合速度变慢,同时加大了拟合难度;向量长度过短,就限制了模型的表达能力,不能产生有效的高阶交叉特征,模型AUC值降低.
3)图4(a)是固定剪枝参数P的区间左端点时,模型AUC值随右端点变化的情况;图4(b)是固定右端点时,模型AUC值随左端点变化的情况. 可以看出,模型AUC值随另一个端点的变化呈先增大后减小的趋势.剪枝参数P的初始化范围是[−4, 1]时,模型取得最优效果. 当端点取值较小时,剪枝后每个子集都保留了大部分特征信息,在特征交叉时能够得到的信息增多,模型的建模能力增强,模型AUC值提高. 但是随着端点取值的增大,剪枝后的权重W会不断趋近于0,导致每个子集中只能保留少量特征,模型中的特征信息量减少,模型的建模能力受到了限制,模型AUC值降低.
4. 总 结
本文从多粒度剪枝的角度出发,设计了一个点击率预测模型FeatNet. FeatNet能够在特征级别进行特征选择,对不相关的特征进行剪枝,产生多个特征子集,并保证各个子集之间的差异性;该模型还能够在元素级别对特征进行隐式交叉,构造有效的高阶交叉特征. 目前工作中剪枝策略的阈值是通过超参数进行搜索,未来工作中将探索阈值自动学习方法,进一步提升点击率预测的效果.
作者贡献声明:白婷提出了算法思路、实验方案并修改论文;刘轩宁完成实验并撰写论文;吴斌提出指导意见并修改论文;张梓滨、徐志远和林康熠提供了微信数据集并对模型构建和写作提出了指导意见.
-
表 1 函数siw_fastreg_mr中的路径
Table 1 Paths in Function siw_fastreg_mr
路径 路径分类 错误路径行为 ①⇒② 错误路径 无引用计数减,也无引用逃逸 ①⇒③⇒⑦ 错误路径 引用计数减 ①⇒④⇒⑦ 错误路径 引用计数减 ①⇒⑤⇒⑦ 错误路径 引用计数减 ①⇒⑥⇒⑦ 正常路径 注:路径中的序号与图2左侧标出的带圈序号同义,用于标注代码块. 表 2 缺陷检测结果
Table 2 Results of Bug Detection
检测版本 工具报告缺陷数量 人工确认缺陷数量 开发者确认缺陷数量 5.6-rc2 66 21 17 5.17 46 9 7 表 3 错误路径识别效果
Table 3 Effectiveness of Error Path Identification
分类 函数总数 采样数量 人工分析
正确数量人工分析
错误数量准确率/% 识别到错误
路径的函数4639 40 31 9 77.5 未识别到错
误路径的函数8173 40 32 8 80 -
[1] 张静,黄志球,沈国华,等. C程序中的内存泄漏机制分析与检测方法设计[J]. 计算机工程与科学,2020,42(5):776−787 Zhang Jing, Huang Zhiqiu, Shen Guohua, et al. Memory leak mechanism analysis and detection of C programs[J]. Computer Engineering and Science, 2020, 42(5): 776−787 (in Chinese)
[2] 冯震,聂森,王轶骏,等. 基于S2E的Use-After-Free漏洞检测方案[J]. 计算机应用与软件,2016,33(4):273−276 Feng Zhen, Nie Sen, Wang Yijun, et al. Use-after-free vulnerabilities detection scheme based on S2E[J]. Computer Applications and Software, 2016, 33(4): 273−276 (in Chinese)
[3] Mitre. CVE-2022−28356 [DB/OL]. 2022[2022-11-23].https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022−28356
[4] Mitre. CVE-2021−20226 [DB/OL]. 2021[2022-11-23].https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021−20226
[5] Mitre. CVE-2022−29581 [DB/OL]. 2022[2022-11-23].https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022−29581
[6] Firefox. Refcount tracing and balancing [DB/OL]. 2022[2022-11-23].https://firefox-source-docs.mozilla.org/performance/memory/refcount_tracing_and_balancing.html
[7] Emmi M, Jhala R, Kohler E, et al. Verifying reference counting implementations [C]//Proc of the 15th Tools and Algorithms for the Construction and Analysis of Systems. Berlin: Springer, 2009: 352−367
[8] Li Siliang, Tan Gang. Finding reference-counting errors in Python/C programs with affine analysis [C]//Proc of the 28th European Conf on Object-Oriented Programming. Berlin: Springer, 2014: 80−104
[9] Mao Junjie, Chen Yu, Xiao Qixue, et al. RID: Finding reference count bugs with inconsistent path pair checking [C]//Proc of the 21st Int Conf on Architectural Support for Programming Languages and Operating Systems. New York: ACM , 2016: 531−544
[10] Tan Xin, Zhang Yuan, Yang Xiyu, et al. Detecting kernel refcount bugs with two-dimensional consistency checking [C]//Proc of the 30th USENIX Security Symp (USENIX Security 21). Berkeley, CA: USENIX Association, 2021: 2471−2488
[11] Liu Jian, Yi Lin, Chen Weiteng, et al. LinKRID: Vetting imbalance reference counting in Linux kernel with symbolic execution [C]//Proc of the 31st USENIX Security Symp (USENIX Security 22). Berkeley, CA: USENIX Association, 2022: 125−142
[12] Saha S, Lozi J P, Thomas G, et al. Hector: Detecting resource-release omission faults in error-handling code for systems software [C]//Proc of the 43rd Annual IEEE/IFIP Int Conf on Dependable Systems and Networks (DSN). Piscataway, NJ: IEEE, 2013: 1−12
[13] Kang Yuan, Ray B, Jana S. APEx: Automated inference of error specifications for C APIs [C]// Proc of the 31st IEEE/ACM Int Conf on Automated Software Engineering. New York: ACM, 2016: 472−482
[14] Tian Yuchi, Ray B. Automatically diagnosing and repairing error handling bugs in C [C]// Proc of the 11th Joint Meeting on Foundations of Software Engineering. New York: ACM, 2017: 752−762
[15] Lu Kangjie, Pakki A, Wu Qiushi. Automatically identifying security checks for detecting kernel semantic bugs [C]// Proc of the 24th European Symp on Research in Computer Security. Berlin: Springer, 2019: 3−25
[16] Lu Kangjie, Pakki A, Wu Qiushi. Detecting missing-check bugs via semantic-and context-aware criticalness and constraints inferences [C]//Proc of the 28th USENIX Security Symp (USENIX Security 19). Berkeley, CA: USENIX Association, 2019: 1769−1786
[17] Project LLVM. LLVM language reference manual [DB/OL]. 2022[2022-11-23].https://llvm.org/docs/LangRef.html
[18] Lu Kangjie, Hu Hong. Where does it go? Refining indirect-call targets with multi-layer type analysis [C]// Proc of the 26th ACM SIGSAC Conf on Computer and Communications Security. New York: ACM , 2019: 1867−1881
[19] Project LLVM. The LLVM compiler infrastructure [DB/OL]. 2022[2022-11-23].https://llvm.org/
[20] Sui Yulei, Xue Jingling. SVF: Interprocedural static value-flow analysis in LLVM [C]//Proc of the 25th Int Conf on Compiler Construction. New York: ACM, 2016: 265−266
[21] Linux kernel. Adding reference counters (krefs) to kernel objects [DB/OL]. 2018[2022-11-23].https://www.kernel.org/doc/html/v5.17/core-api/kref.html
[22] Clang. libclang: C interface to clang [DB/OL]. 2021[2022-11-23].https://clang.llvm.org/doxygen/group__CINDEX.html
-
期刊类型引用(0)
其他类型引用(1)