Memory Copy Function Identification Technique with Control Flow and Data Flow Analysis
-
摘要:
内存错误漏洞仍是当前网络攻击中造成危害最严重的漏洞之一.内存错误漏洞的产生往往与对内存拷贝类函数的误用有关.目前针对内存拷贝类函数的识别主要借助于符号表和代码特征模式匹配,具有较高的误报率和漏报率,并且适用性较差.提出了一种内存拷贝类函数识别技术CPYFinder(copy function finder).该技术在内存拷贝类函数控制流特征的基础上,将二进制代码转换为中间语言表示VEX IR(intermediate representation)进行数据流的构建和分析,根据内存拷贝类函数在数据流上的特征进行识别.该技术能够在较低的运行时间下对多种指令集架构(x86,ARM,MIPS,PowerPC)的二进制程序中的内存拷贝类函数进行识别.实验结果表明,相比于最新的工作BootStomp和SaTC,CPYFinder在对内存拷贝类函数识别上具有更好的表现,在精准率和召回率上得到更好的平衡,并且运行时间与SaTC几乎相等,仅相当于BootStomp耗时的19%.此外,CPYFinder在漏洞函数识别上也具有更好的表现.
Abstract:Memory error vulnerability is still one of the most widely used and harmful vulnerabilities in current cyber-attacks, whose timely discovery and repair in binary programs bear great value in preventing cyber-attacks. Memory error vulnerabilities are often associated with the misuse of memory copy functions. However, the current identification techniques of memory copy functions mainly rely on the matching of symbol tables and code feature pattern, which have high false positive and false negative rates and poor applicability, and there are still many problems to be solved. To address the above problems, we propose a memory copy function identification technology CPYFinder, based on the control flow of memory copy functions. CPYFinder lifts the binary code into the VEX IR (Intermediate Representation) code to construct and analyze the data flow, and identifies binary code according to the pattern of the memory copy function on the data flow. This method can identify the memory copy functions in stripped binary executables of various instruction set architectures (i.e. x86, ARM, MIPS and PowerPC) in a short runtime. Experimental results show that CPYFinder has better performance in identifying memory copy functions in C libraries and user-defined implementations. Compared with the state-of-the-art works BootStomp and SaTC, CPYFinder gets a better balance between precision and recall, and has equal time consumption compared with SaTC and its runtime only amounts to 19% of BootStomp. In addition, CPYFinder also has better performance in vulnerability function identification.
-
小目标检测作为目标检测中的难点技术,被广泛应用于自动驾驶、医学领域、无人机导航、卫星定位和工业检测等视觉任务中. 近些年基于深度学习的目标检测算法发展迅猛. 以YOLO(You Only Look Once)[1]和SSD(Single Shot MultiBox Detector)[2]为代表的一阶段算法直接预测出目标的位置和类别,具有较快的速度. 而二阶段算法[3-4]在生成候选框的基础上再回归出目标区域,具有更高的精度.但是这些算法在检测只含有较少像素的小目标(小于32×32像素)时表现较差,检测率甚至不到较大目标的一半. 因此,小目标检测仍然具有很大的改进空间.
小目标检测效果差主要是由于网络本身的局限性以及训练数据不平衡所导致[5]. 为了获得较强的语义信息和较大的感受野,检测网络不断堆叠下采样层,使得小目标信息在前向传播的过程中逐渐丢失[6],限制了小目标的检测性能. 特征金字塔网络(feature pyramid network, FPN)[7]将低层特征图和高层特征横向融合,可以在一定程度上缓解信息丢失的问题[1-2]. 然而FPN直接融合不同层级的特征会造成语义冲突,限制多尺度特征的表达,使小目标容易淹没于冲突信息中. 同时,目前主流的公开数据集中,小目标的数量远远小于较大目标,使得小目标对损失的贡献小,网络收敛的方向不断向较大目标倾斜.
针对小目标检测效果差的问题,本文提出一种上下文增强和特征提纯相结合的复合FPN结构,该结构主要包括上下文增强模块(context augmentation module, CAM)和特征提纯模块(feature refinement module, FRM). 同时,提出一种复制—缩小—粘贴(copy-reduce-paste)的数据增强方法,具体有3点:
1)CAM融合多尺度空洞卷积特征以获取丰富的上下文信息,补充检测所需信息;
2)FRM引入通道和空间自适应融合的特征提纯机制以抑制特征中的冲突信息;
3)通过copy-reduce-paste数据增强来提高小目标在训练过程中对损失的贡献率.
1. 相关工作
1.1 现代目标检测器
目标检测是一种基础的计算机视觉任务,经过多年的发展,基于卷积神经网络(convolutional neural network, CNN)的目标检测器逐渐成为主流. RCNN[3]首先生成候选区域以匹配不同尺寸的目标,然后通过CNN筛选候选区域. FasterR-CNN[4]将候选区域生成阶段和分类阶段结合在一起,以提高检测速度. EFPN[8]提出超分辨率FPN结构以放大小目标的特征[9]. 一阶段网络SSD将锚盒密集的布置在图像上以回归出目标框,同时充分利用不同尺度的特征,以检测较小目标. YOLOV3[1]利用特征金字塔的3层输出分别检测大、中、小目标,明显提高小目标检测性能. RefineDet[10]引入一种新的损失函数以解决简单样本和复杂样本不平衡的问题. 同时也有研究者提出基于anchor-free架构的检测器[11].尽管目标检测算法发展迅速,但是小目标检测率却一直较低. 本文选用带有FPN的YOLOV3作为基础网络,并在此基础上做出改进.
1.2 多尺度特征融合
多尺度特征是一种提高小目标检测率的有效方法. SSD[2]首次尝试在多尺度特征上预测目标位置和类别. FPN[7]自上而下地将含有丰富语义信息的高层特征图和含有丰富几何信息的低层特征图横向融合. PANet[12]在FPN的基础上添加了额外的自下而上的连接以更高效地传递浅层信息到高层. NAS-FPN[13]利用神经架构搜索技术搜索出了一种新的连接方式. BiFPN[14]改良了PANet的连接方式,使其更加高效,并在连接处引入了简单的注意力机制. 虽然文献[12−14]中的结构都能提升网络多尺度表达的能力,但是都忽略了不同尺度特征之间冲突信息的存在可能会阻碍性能的进一步提升,本文则充分考虑了冲突信息对检测精度的影响.
1.3 数据增强
深度学习是基于数据的方法,因而对训练数据的预处理是其关键的一环. 常见的数据预处理方法如旋转、变形、随机擦除、随机遮挡和光照畸变等. Stitcher[15]将4张训练图像缩小为原图的1/4,并且将它们拼接为1张图像来实现小目标的数据增强,同时将损失值作为反馈信号以指导数据增强的进行. YOLOV4[16]将4张训练图像缩小为不同大小并且拼接为1张来实现小目标的数据增强. 文献[15−16]中的方式对于目标尺寸普遍很大的图像来说,会将大目标图像缩小为中等目标大小,最终提高中等目标图像的检测率. Kisantal等人[5]采用将图像的小目标区域复制然后粘贴回原图的方式实现小目标数据增强. 但这种方式只能增加小目标个数而不能增加含有小目标的图像个数,也会造成一定的不平衡. 本文提出的数据增强算法则基于较大目标广泛分布于训练的各个批次的事实,保证训练平衡进行. 本文算法结构图如图1所示:
2. 本文算法
图1中{C2, C3,C4,C5}分别表示图像经过{4, 8, 16, 32}倍下采样后的特征图,{C3,C4,C5}经过1层卷积后分别生成{F1,F2,F3},其中C2由于含有大量噪声而未被使用. {L1,L2,L3}分别是{F1,F2,F3}经过FPN后的结果,{P1,P2,P3}为{L1,L2,L3}经过FRM的输出.
CAM启发于人类识别物体的模式. 如,我们很难分辨很高天空中的小鸟,但是考虑天空作为其背景,我们就很容易分辨出,因为从我们学习到的知识中可知,在天空背景下的微小目标很有可能是小鸟,而这种背景信息,即是目标的上下文信息.因此如果目标检测网络也在图像中学习到这样的“知识”将会有助于检测小目标.
由于FPN不同层的特征密度不同,因而含有大量的语义差异,在实现信息共享的同时也引入了很多冲突信息. 因此,本文提出了FRM用于过滤冲突信息,减少语义差异. FRM通过将不同层间的特征自适应融合,以达到抑制层间冲突信息的目的.
针对小目标对损失贡献低的问题,提出了一种copy-reduce-paste数据增强方法,以提高小目标对损失的贡献.
2.1 上下文增强和特征提纯的特征金字塔网络
2.1.1 上下文增强模块(CAM)
目标检测需要定位信息也需要语义信息,处于FPN最低层的L3含有较多的定位信息而缺少语义信息. FPN自上而下的信息共享结构在通道数减少之后才进行融合,使得L3未能获取充分的语义信息. 为此我们利用不同空洞卷积率的空洞卷积来获取上下文信息,并将其注入到FPN中,以补充上下文信息.
图2(a)是CAM的结构图. 对于大小为[bs, C, H, W]的输入分别进行空洞卷积率为1,3,5的空洞卷积[17]. bs, C, H, W分别为特征图的批次大小、通道数、高和宽.由于该模块输入的尺寸较小,为了获取更多的细节特征,不宜使用大卷积,因此选用3×3的卷积.同时为了避免引入较多的参数量,选取卷积核的个数为C/4,即首先压缩通道数为输入的1/4,然后再通过1×1的卷积扩张通道数为C,得到3种大小相同而感受野不同的输出,最后融合得到的特征. 特征融合可采用的方式如图2(b)~(d)所示. 图2(b),(c)分别为拼接融合和加权融合,即分别在通道和空间维度上直接拼接和相加. 图2(d)是自适应融合方式,即通过卷积、拼接和归一化等操作将输入特征图压缩为通道为3的空间权重,3个通道分别与3个输入一一对应,计算输入特征和空间权重的加权和可以将上下文信息聚合到输出中.
本文通过消融实验验证各个融合方式的有效性,实验结果如表1所示.
表 1 CAM消融实验结果Table 1. Ablation Experimental Results of CAM% 算法 AP(IOU=0.5) AR(IOU=0.5) APs APm ARs ARm 基线模型 34.8 60.5 57.9 78.7 相加融合 35.6 63.0 60.5 81.8 自适应融合 36.0 63.1 58.9 81.0 拼接融合 36.6 61.0 59.8 79.5 注:基线模型为YOLOV3,测试数据集为VOC,IOU为交并比. APs,APm分别指小目标、中目标的平均精度;ARs,ARm分别指小目标、中目标的平均召回率. 由表1可知,对于小目标来说,拼接融合所取得的增益最大,APs和ARs分别提高了1.8%和1.9%. 自适应融合对中目标的提升最为明显,APm提升了2.6%. 相加融合带来的提升则基本介于拼接融合和自适应融合两者之间,因此本文选择拼接融合的方式.
本文将部分特征图可视化以说明CAM的效果,可视化结果如图3所示.
图3(b)为CAM输入特征图,从中可以发现在图像的目标处有微小响应,呈现为较小的“白点”. 图3(c)为CAM输出特征图,可以明显看到目标处的响应明显增强,并且响应范围更大,这是因为CAM将目标周围的上下文信息也融入特征中,使得目标处的响应更强. 因此将CAM提取的上下文信息注入网络中将有助于小目标的检测.
2.1.2 特征提纯模块(FRM)
FPN用于融合不同尺度大小的特征,然而不同尺度的特征具有不可忽视的语义差异,将不同尺度的特征直接融合可能引入大量的冗余信息和冲突信息,降低多尺度表达的能力. 为了抑制冲突信息,本文提出FRM,该模块结构如图4所示.
图4(a)为接在FPN第2层后的FRM结构图. 从图(4)可看出,
{\boldsymbol{X}}^1 ,{\boldsymbol{X}}^2 ,{\boldsymbol{X}}^3 (FPN的3层输出)为该模块的输入,首先将{\boldsymbol{X}}^1 ,{\boldsymbol{X}}^2 ,{\boldsymbol{X}}^3 3个输入缩放到同一大小,分别为{\boldsymbol{R}}^1 ,{\boldsymbol{R}}^2 ,{\boldsymbol{R}}^3 ,然后再利用拼接和卷积操作将所有输入特征的通道数压缩为3,随后接上并联的通道提纯模块和空间提纯模块.通道提纯模块的具体结构如图4(b)所示,为了计算通道注意力,采用平均池化和最大池化相结合的方式来聚合图像的全局空间信息. 用
{\boldsymbol{X}}^m 表示FRM的第m(m∈{1,2,3})层输入特征图,其输出可表示为{\boldsymbol{U}} = {\boldsymbol{\alpha }} \times RS({{\boldsymbol{X}}^1}) + {\boldsymbol{\beta }} \times {{\boldsymbol{X}}^2} + {\boldsymbol{\gamma }} \times RS({{\boldsymbol{X}}^3}). (1) 其中RS表示resize函数,在式(1)中将
{\boldsymbol{X}}^1 和{\boldsymbol{X}}^3 特征缩放到和{\boldsymbol{X}}^2 同一尺度.{\boldsymbol{\alpha }} ,{\boldsymbol{\beta }} ,{\boldsymbol{\gamma }} 为通道自适应权重,其尺度为1×1×1. 经过归一化的{\boldsymbol{\alpha }} ,{\boldsymbol{\beta }} ,{\boldsymbol{\gamma }} 代表3个输入的相对权重,这3个值越大表示具有更大的响应,将它们与输入相乘,响应大的输入将被放大,响应小的输入将被抑制,以此将更加有用的信息增强而抑制不重要的噪声.{\boldsymbol{\alpha }} ,{\boldsymbol{\beta }} ,{\boldsymbol{\gamma }} 可表示为{\text{[}}{\boldsymbol{\alpha }},{\boldsymbol{\beta }},{\boldsymbol{\gamma }}{\text{]}} = sigmoid{\kern 1pt} {\kern 1pt} {\text{[}}{AvgPool} {\text{(}}{\boldsymbol{F}}{\text{)}} + {MaxPool} {\text{(}}{\boldsymbol{F}}{\text{)]}}. (2) 其中F为图4(a)中标识的特征图,AvgPool和MaxPool分别为平均池化和最大池化操作.
空间提纯模块利用softmax函数将特征图在空间上归一化,得到特征图中某点关于其他所有位置的相对权重,然后将其与输入分别相乘. 其输出可表示为
\begin{split} {\boldsymbol{D}} =\;& {{\boldsymbol{\mu }}_{{\text{(}}x,y{\text{)}}}} \times RS\left( {{\boldsymbol{X}}_{{\text{(}}x,y{\text{)}}}^1} \right) + \;{{\boldsymbol{\nu }}_{{\text{(}}x,y{\text{)}}}} \times {\boldsymbol{X}}_{{\text{(}}x,y{\text{)}}}^2+ \\ &{{\boldsymbol{\omega }}_{{\text{(}}x,y{\text{)}}}} \times RS\left( {{\boldsymbol{X}}_{{\text{(}}x,y{\text{)}}}^3} \right). \end{split} (3) (x,y)表示特征图的空间坐标.
{\boldsymbol{\mu }} ,{\boldsymbol{\nu }} ,{\boldsymbol{\omega }} 为空间自适应权重,目标区域的响应较大,将会获得更大的权重,反之背景区域获得的权重较小.{\boldsymbol{\mu }} ,{\boldsymbol{\nu }} ,{\boldsymbol{\omega }} 与输入具有相同的空间大小,因此将它们和输入直接相乘可以达到将目标特征放大和背景噪声抑制的目的.{\boldsymbol{\mu }} ,{\boldsymbol{\nu }} ,{\boldsymbol{\omega }} 可由式(4)表示.[{\boldsymbol{\mu }},{\boldsymbol{\nu }},{\boldsymbol{\omega }}] = {\text{soft}}\max ({\boldsymbol{F}}). (4) softmax函数用于归一化特征参数以提高模型的泛化能力.那么此模块的总输出为
{\boldsymbol{P}} = {\boldsymbol{U}} + {\boldsymbol{D}}. (5) FPN所有层的特征都在自适应权重的引导下融合,融合的结果作为整个网络的输出.
为更加直观地说明特征提纯模块的作用,图5展示了部分可视化的特征图. 由于小目标的检测由FPN的最低层主导,因此我们仅可视化了最低层的特征. 图5中F3,L3,P3分别对应图1中的标签F3,L3,P3.
由图5可知,F3特征可大致定位目标位置,但是包含较多背景噪声,具有较大误检的可能. L3相比于F3,背景信息明显减少,这是FPN融合高层信息的结果. 高层信息更加关注于物体的抽象信息而不关注背景信息,因此背景信息会被中和. 但是由于特征的细腻度不同,引入了冲突信息,使得目标的响应被削弱.而P3的目标特征被强化,并且目标和背景之间的边界更加明显. 由可视化分析可知,本文提出的FRM可减少干扰小目标的冲突信息,提高判别性,以此提高小目标的检测率.
2.2 copy-reduce-paste数据增强
当前主流的公开数据集中,小目标的数量或包含小目标的图片数量远远小于较大目标的,如VOC数据集,统计情况如表2所示. 同时,如图6(a)所示,小目标产生的正样本数量远远小于较大目标的,因而小目标对损失的贡献率远远小于较大目标的,使得网络收敛的方向不断向较大目标倾斜.
表 2 VOC数据集目标尺寸统计结果Table 2. Statistical Results of Target Size on VOC Datebase% 统计值 小目标 中目标 大目标 目标数量占比 10.0 16.6 73.4 图片数量占比 8.2 16.2 75.6 为了缓解这个问题,我们在训练过程中复制、缩小、粘贴图像中的目标,以增加小目标产生的正样本数量以及对损失的贡献值,使得训练更为平衡. 数据增强效果如图6(b)和图6(c)所示.
图6(b),图6(c)是粘贴1次的结果示例,实线框是原有的目标,虚线框为粘贴的目标. 首先复制大目标图像块,然后对图像块进行缩小,最后粘贴到原图的不同位置.我们提出的数据增强方法并没有直接复制小目标图像区域粘贴到不同位置,这是考虑到数据集中含有小目标的图像数量较少,如果仅仅复制粘贴小目标,在很多批次中小目标对损失的贡献仍然很低. 此外,我们研究了粘贴次数对小目标检测性能的影响, 实验结果如表3所示.
表 3 数据增强消融实验结果Table 3. Ablation Experimental Results of Data Augmentation% 粘贴次数 AP(IOU=0.5) AR(IOU=0.5) APs APm ARs ARm 0(基线模型) 34.8 60.5 57.9 78.7 1 37.3 62.7 59.8 80.9 2 36.8 62.6 58.0 81.0 3 33.2 59.7 58.0 79.8 注:基线模型为YOLOV3,IOU为交并比.APs,APm分别指小目标、中目标的平均精度;ARs,ARm分别指小目标、中目标的平均召回率. 从表3中可知,随着粘贴次数的增加,小目标的检测率逐渐减小,甚至会造成低于基线模型的情况.这可能是由于随着粘贴次数的增加,逐渐破坏了原始数据的分布,使得在测试集的表现较差. 在粘贴1次时,APs提高了2.5%,ARs提高了1.9%,同时中目标的检测率也略有提升,结果表明粘贴1个目标是最佳的设定.
3. 实 验
3.1 训练设置
本文实验在VOC和TinyPerson两种数据集[18]上进行. VOC有22136张训练图像和4952张测试图像,共20个类别. TinyPerson数据集包含2个类别,798张训练图片和816张测试图片,其场景多为远距离大背景下的图像,所标注目标的平均大小为18像素,是一个真正意义上的小目标数据集.
本文所使用的评估指标为:
精度(precision, P),用来检测结果中相关类别占总结果的比重;
召回率(recall, R),用来检测结果中相关类别占总类别的比重. 由P-R曲线可计算所有大、中、小目标平均检测精度的均值(mAP):
mAP = \frac{{\text{1}}}{k}\sum\limits_{n = 1}^N {P\left( n \right) \times\Delta r\left( n \right)} . (6) 其中N为测试集总数,P(n)表示n张图像的精确度,∆r(n)表示从n−1增加到n时召回率的变化量,k为类别数. 同时,使用下标s,m,l分别表示在小尺度、中尺度和大尺度目标上的性能. 本文所有的实验在同样的软件和硬件条件下进行(pytorch[19]框架,Intel Core i7-5820k CPU@3.30 GHz处理器,16 GB内存,GeForce GTX TITAN显卡).
图7为训练时的损失变化曲线,我们采用SGD优化器训练50轮次(前2个轮次预热),批次设定为8,学习率初始值为 0.0001,训练的损失值平滑下降.部分特征可视化结果如图8所示.
如图8所示,图8(b)为浅层特征,网络更关注物体的纹理信息. 图8(c)为深层特征,图像的信息逐渐抽象,网络更关注物体的高层语义信息.
3.2 实验结果
为验证本文算法在小目标检测上的有效性,本文在TinyPerson和VOC数据集上分别进行了实验.
本文复现了4种算法在TinyPerson数据集上的检测结果,由于该数据集几乎全是小目标,因此只进行APs指标的对比,对比结果如表4所示.
由表4可知,本文算法在该数据集上的APs达到55.1%. 相比YOLOV5和DSFD算法,本文算法分别有0.8%和3.5%的提升,而相比于AL-MDN和MaskR-CNN则分别高出21%和12.6%.
本文复现了3种较为前沿的目标检测算法在VOC上的结果,并且比较这些算法在小目标、中目标上的AP和AR,实验结果如表5所示:
表 5 VOC数据集上的小目标检测结果Table 5. Results of Small Targets Detection on VOC Dataset% 由表5可知,本文算法相比于YOLOV4,APs高3.9%,ARs高11.3%;相比于RefineDet,APs高5.3%,ARs高9.2%;而相比于CenterNet,本文算法的APs和ARs分别具有7.7%和12.0%的优势. 不难发现,本文算法在小目标的召回率上具有较大优势,说明本文算法具有较强的小目标查找能力.
将本文算法和近几年的一阶段算法和二阶段算法在VOC数据集上的mAP进行对比,对比结果如表6所示.
表 6 VOC数据集上的实验结果(IOU=0.5)Table 6. Experimental Results on VOC Dataset (IOU=0.5)类型 算法 主干网络 输入尺寸 mAP/% 二阶段 Faster R-CNN[4] ResNet101 1000×600 76.4 R-FCN[3] ResNet101 1000×600 80.5 HyperNet[25] VGG16 1000×600 76.3 CoupleNet[26] ResNet101 1000×600 82.7 Reconfig[27] ResNet101 1000×600 82.4 IPG-Net[28] IPGNet101 1000×600 84.8 一阶段 SSD[2] VGG16 512×512 79.8 RefineDet[10] VGG16 512×512 81.8 RFBNet[29] VGG16 512×512 82.2 ScratchDet[30] RestNet34 320×320 80.4 PFPNet[31] VGG16 512×512 82.3 本文算法 Darknet53 448×448 83.6 本文算法+ Darknet53 448×448 85.1 注:“+”表示多尺度测试. 由表6可知,与一阶段算法相比,本文算法比PFPNet的mAP高1.3%,具有最好的表现. 与二阶段算法相比,本文算法优于大部分的二阶段算法,但比IPG-Net的mAP低1.2%,这主要是由于本文算法的主干网络性能较差以及输入图像大小较小. 如果本文采用多尺度测试的方法,则在VOC数据集上的检测率可达到85.1%,高于所有的对比算法.
本文算法对小目标的检测具有较大优势,不管是总体检测效果还是小目标的检测率、召回率都表现良好,优于大多数检测算法.
3.3 消融实验
本文以消融实验验证每个模块的贡献.通过逐个添加数据增强方法、CAM和FRM到基线模型YOLOV3中,得出实验结果如表7所示:
表 7 消融实验结果Table 7. Ablation Experimental Results基线模型 增强 CAM FRM AP/% (IOU = 0.5) AR/% (IOU = 0.5) APs APm APl ARs ARm ARl √ 34.8 60.5 83.6 57.9 78.7 92.8 √ √ 37.3 62.7 83.4 59.8 80.9 93.0 √ √ 36.6 61.0 84.2 59.8 79.5 93.1 √ √ 37.6 62.1 83.9 59.0 79.1 92.6 √ √ √ √ 40.2 64.1 84.6 64.8 81.0 93.9 注:√表示包含该模块,IOU为交并比.APs,APm,APl分别指小目标、中目标和大目标的平均精度;ARs,ARm,ARl分别指小目标、中目标和大目标的平均召回率. 总体来说,本文提出的算法可显著提高目标检测率,尤其是小目标和中等目标的检测率,这也符合本文算法的初衷. 如表7所示,APs提升5.4%,APm提升3.6%,而APl提升1.0%. 同时对于不同尺度目标的召回率也有不同程度的提升. 具体来说,ARs提升6.9%,ARm提升1.3%,ARl提升1.1%.
copy-reduce-paste数据增强方法将APs和APm分别提高2.5%和2.2%.而APl略有下降. 由此可知,该方法可有效提高小目标检测率.
CAM分别提高小目标的APs和ARs 1.8%和0.6%.证实了补充上下文信息对于小目标检测的重要性.
FRM将APs和APm分别提高2.8%和1.6%,而APl基本持平. 由此可见,FRM可滤除特征的冲突信息,提高较小目标特征的判别性.
4. 总 结
小目标特征模糊,能够提取的特征少,是目标检测领域的难点. 为了解决小目标特征消散的问题,本文引入CAM,通过不同空洞卷积率的空洞卷积提取上下文信息,以补充小目标的上下文信息. 由于小目标容易淹没在冲突信息中,本文提出FRM,该模块结合通道和空间自适应融合来抑制冲突信息,提高特征的判别性. 同时,提出一种copy-reduce-paste的小目标增强方法来提高小目标对损失函数的贡献,使得训练更加平衡.通过实验结果可知,本文提出的小目标检测网络在TinyPerson和VOC数据集上均表现良好,优于大多数的目标检测算法.
致谢 感谢武汉大学超级计算中心对本文的数值计算提供的支持.
作者贡献声明:肖进胜和赵陶设计网络并实践;肖进胜和周剑负责论文撰写;乐秋平和杨力衡提供数据支持和文章的润色
-
表 1 VEX IR的指令类型及示例
Table 1 Instruction Types and Examples of VEX IR
指令类型 VEX IR操作码 示例 寄存器访问 GET, PUT PUT(r7) = t2 内存访问 LDb(l)e, STb(l)e STbe(t22) = t23 算术运算 Sub, Add, Mul, Div t6 = Add16(t4,0x001) 逻辑运算 Xor, Not, Or, And t2 = Not32(t3) 移位运算 Shl, Shr t57 = Shl32(t54,0x02) 转换 *to*, *Uto*,*Sto* t16 = 1Uto32(t17) 函数调用 Ijk_Call PUT(pc) = 0x11008 其他指令 Cmp, ITE, Ctz, Clz, if t10 = CmpNE8(t6,t9) 表 2 现有方法与CPYFinder对比
Table 2 Comparison of Existing Methods and CPYFinder
方法 依赖工具 支持的指令集 BootStomp IDA Pro ARM Karonte angr, pyvex ARM, MIPS SaTC angr, pyvex ARM, MIPS CPYFinder IDA Pro, pyvex x86, ARM, MIPS, PPC 表 3 实验中使用的内存拷贝类函数
Table 3 Memory Copy Functions Used in the Experiment
来源文件 函数 string.h memcpy, memmove, strcpy, strncpy,
strcat, strncat, strxfrmwchar.h wcscat, wcscpy, wcsxfrm, mbsnrtowcs, wcsncpy, wmemmove, wcsnrtombs,wcsncat, wmemcpy Netgear R7000及Mirai my_copy, yystpcpy, yy_flex_strncpy, zmemcpy, stpcpy, unistrcpy, BUF_strlcpy, util_memcpy, tr_strlcpy, g_strlcpy, wxStrncpy, wxStrcpy, wxStrcat, w_copy, strlcpy, MD5_memcpy, resolv_domain_to_hostname, alps_lib_toupper, strncpy_w, sstrncpy,
alpha_strcpy_fn, StrnCpy_fn表 4 评估实验中所使用的编译器
Table 4 Compilers Used in the Evaluation Experiments
编译器 编译器版本 优化等级 GCC 4.5.4, 4.6.4, 4.7.4, 4.8.5, 5.4.0, 5.5.0, 6.5.0, 7.5.0 O0~O3 Clang 3.9.1, 4.0.1, 5.0.1, 6.0.1 O0~O4 表 5 各方法对C语言库中内存拷贝函数识别对比
Table 5 Comparison of Methods for Identifying Memory Copy Functions in C Libraries
二进制
程序(ARM)BootStomp SaTC SaTC+ CPYFinder R P R P R P R P gcc-4.5.4-0 0.50 1.0 0.07 0.09 0.36 0.28 1.0 0.56 gcc-4.6.4-0 0.50 1.0 0.14 0.20 0.36 0.28 1.0 0.56 gcc-4.7.4-0 0.43 1.0 0.00 0.00 0.29 0.44 1.0 0.81 gcc-4.8.5-0 0.43 1.0 0.00 0.00 0.36 0.50 0.85 0.79 注:R为召回率;P为精准率. 表 6 各方法对自定义内存拷贝类函数识别对比
Table 6 Comparison of Methods on the Identification of Custom Memory Copy Functions
二进制程序
(ARM)BootStomp SaTC+ CPYFinder R P R P R P gcc-4.5.4-O0 0.00 0.00 0.29 0.64 0.45 0.62 gcc-4.6.4-O0 0.00 0.00 0.29 0.64 0.45 0.62 gcc-4.7.4-O0 0.00 0.00 0.29 0.64 0.45 0.62 gcc-4.8.5-O0 0.02 1.0 0.29 0.64 0.68 0.81 gcc-5.4.0-O0 0.02 1.0 0.29 0.61 0.68 0.81 gcc-5.5.0-O0 0.02 1.0 0.29 0.61 0.68 0.81 gcc-6.5.0-O0 0.02 1.0 0.29 0.61 0.68 0.81 gcc-7.5.0-O0 0.02 1.0 0.29 0.61 0.70 0.87 注:R为召回率;P为精准率. 表 7 不同指令集及优化等级对识别的影响
Table 7 Effect of Different Instruction Sets and Optimization Levels on the Identification
二进制程序 x86 ARM MIPS PPC R P R P R P R P gcc-O0 0.62 0.76 0.81 0.68 0.81 0.65 0.87 0.63 gcc-O1 0.78 0.64 0.78 0.64 0.78 0.64 0.78 0.61 gcc-O2 0.71 0.62 0.64 0.60 0.71 0.62 0.71 0.58 gcc-O3 0.71 0.66 0.64 0.64 0.71 0.66 0.71 0.62 注:R为召回率;P为精准率. 表 8 优化等级对各个方法识别的影响
Table 8 Effect of Optimization Level on the Identification of Each Method
二进制程序
(ARM)BootStomp SaTC+ CPYFinder R P R P R P gcc-O0 0.03 1.0 0.30 0.61 0.81 0.68 gcc-O1 0.22 1.0 0.19 0.44 0.78 0.64 gcc-O2 0.22 0.89 0.08 0.60 0.64 0.60 gcc-O3 0.19 1.0 0.08 0.75 0.64 0.64 注:R为召回率;P为精准率. 表 9 不同编译器下各方法的识别效果对比
Table 9 Comparison of the Identification Effect of Each Method Under Different Compilers
编译器 二进制程序
(ARM)BootStomp SaTC+ CPYFinder R P R P R P GCC gcc-4.5.4-O1 0.13 1.0 0.24 0.56 0.78 0.64 gcc-4.6.4-O1 0.16 1.0 0.18 0.43 0.78 0.64 gcc-4.7.4-O1 0.18 1.0 0.16 0.42 0.78 0.64 gcc-4.8.5-O1 0.18 1.0 0.16 0.42 0.76 0.62 Clang clang-3.9.1-O1 0.29 1.0 0.27 0.58 0.81 0.72 clang-4.0.1-O1 0.29 1.0 0.27 0.58 0.81 0.72 clang-5.0.1-O1 0.29 1.0 0.27 0.58 0.87 0.73 clang-6.0.1-O1 0.29 1.0 0.27 0.58 0.87 0.73 注:R为召回率;P为精准率. 表 10 Clang编译器对内存拷贝类函数识别的影响
Table 10 Effect of Clang Compiler on the Identification of Memory Copy Function
二进制程序
(ARM)BootStomp SaTC+ CPYFinder R P R P R P clang-3.9.1-O0 0.0 0.0 0.16 0.66 0.75 0.63 clang-3.9.1-O1 0.29 1.0 0.27 0.58 0.81 0.72 clang-3.9.1-O2 0.24 1.0 0.0 0.0 0.78 0.68 clang-3.9.1-O3 0.24 1.0 0.02 0.50 0.78 0.68 clang-3.9.1-O4 0.24 1.0 0.02 0.50 0.78 0.68 clang-6.0.1-O0 0.0 0.0 0.16 0.66 0.81 0.65 clang-6.0.1-O1 0.29 1.0 0.27 0.58 0.87 0.73 clang-6.0.1-O2 0.24 1.0 0.02 0.50 0.78 0.68 clang-6.0.1-O3 0.24 1.0 0.0 0.0 0.78 0.68 clang-6.0.1-O4 0.24 1.0 0.0 0.0 0.78 0.68 注:R为召回率;P为精准率. 表 11 对由循环拷贝导致的溢出漏洞的识别结果
Table 11 Identification Results for Overflow Vulnerabilities Caused by Loop Copy
溢出漏洞 厂商 检测结果 BootStomp SaTC+ CPYFinder CVE-2017-13772 TP-Link * × √ CVE-2018-3950 TP-Link * * √ CVE-2018-3951 TP-Link * * √ CVE-2018-11013 D-Link * × × CVE-2020-8423 TP-Link * × √ 注:* 表示不支持或者运行崩溃;×表示未识别出;√表示识别出. 表 12 对内存拷贝类函数识别时耗对比
Table 12 Comparison of Time Consumption for Memory Copy Functions Identification
二进制程序 时耗/s BootStomp SaTC SaTC+ CPYFinder gcc-4.5.4-O0 12.54 4.16 3.95 3.8 gcc-4.6.4-O0 14.47 4.26 4.57 3.60 gcc-4.7.4-O0 9.75 1.59 0.84 2.56 gcc-4.8.5-O0 9.68 0.99 0.86 2.56 gcc-5.5.0-O0 71.84 15.12 13.89 10.47 总时耗/s 118.28 26.12 24.11 22.99 时耗比值/% 19 88 95 100 注:时耗比值为CPYFinder的时耗除以其他方法的时耗. -
[1] The MITRE Corporation. 2021 CWE top 25 most dangerous software weaknesses[EB/OL]. [2021-08-20]. http://cwe.mitre.org/top25/archive/2021/2021_cwe_top25.html
[2] The MITRE Corporation. CWE-787: Out-of-bounds write[EB/OL]. [2021-07-20]. https://cwe.mitre.org/data/definitions/787.html
[3] The MITRE Corporation. CWE-125: Out-of-bounds read[EB/OL]. [2021-07-20]. https://cwe.mitre.org/data/definitions/125.html
[4] The MITRE Corporation. CWE-119: Improper restriction of operations within the bounds of a memory buffer[EB/OL]. [2021-07-20]. https://cwe.mitre.org/data/definitions/119.html
[5] 王雅文,姚欣洪,宫云战,等. 一种基于代码静态分析的缓冲区溢出检测算法[J]. 计算机研究与发展.,2012,49(4):839−845 Wang Yawen, Yao Xinhong, Gong Yunzhan, et al. A method of buffer overflow detection based on static code analysis[J]. Journal of Computer Research and Development, 2012, 49(4): 839−845 (in Chinese)
[6] 李珍,邹德清,王泽丽,等. 面向源代码的软件漏洞静态检测综述[J]. 网络与信息安全学报,2019,5(1):1−14 doi: 10.11959/j.issn.2096-109x.2019001 Li Zhen, Zou Deqing, Wang Zeli, et al. Survey on static software vulnerability detection for source code[J]. Chinese Journal of Network and Information Security, 2019, 5(1): 1−14 (in Chinese) doi: 10.11959/j.issn.2096-109x.2019001
[7] Heelan S, Gianni A. Augmenting vulnerability analysis of binary code[C] //Proc of the 28th Annual Computer Security Applications Conf. New York: ACM, 2012: 199−208
[8] Redini N, Machiry A, Das D, et al. BootStomp: On the security of bootloaders in mobile devices[C] //Proc of the 26th USENIX Security Symp (USENIX Security 17). Berkeley, CA: USENIX Association, 2017: 781−798
[9] Redini N, Machiry A, Wang Ruoyu, et al. Karonte: Detecting insecure multi-binary interactions in embedded firmware[C] //Proc of the 41st IEEE Symp on Security and Privacy (SP). Piscataway, NJ: IEEE, 2020: 1544−1561
[10] Chipounov V, Kuznetsov V, Candea G. S2E: A platform for in-vivo multi-path analysis of software systems[J]. ACM SIGPLAN Notices, 2011, 46(3): 265−278 doi: 10.1145/1961296.1950396
[11] Cha S K, Avgerinos T, Rebert A, et al. Unleashing mayhem on binary code[C] //Proc of the 33rd IEEE Symp on Security and Privacy (SP). Piscataway, NJ: IEEE, 2012: 380−394
[12] Mouzarani M, Sadeghiyan B, Zolfaghari M. A smart fuzzing method for detecting heap-based buffer overflow in executable codes[C] //Proc of the 21st IEEE Pacific Rim Int Symp on Dependable Computing (PRDC). Piscataway, NJ: IEEE, 2015: 42−49
[13] Cheng Kai, Li Qiang, Wang Lei, et al. DTaint: Detecting the taint-style vulnerability in embedded device firmware[C] //Proc of the 48th Annual IEEE/IFIP Int Conf on Dependable Systems and Networks (DSN). Piscataway, NJ: IEEE, 2018: 430−441
[14] Chen Libo, Wang Yanhao, Cai Quanpu, et al. Sharing more and checking less: Leveraging common input keywords to detect bugs in embedded systems[C] //Proc of the 30th USENIX Security Symp (USENIX Security 21). Berkeley, CA: USENIX Association, 2021: 303−319
[15] The MITRE Corporation. A buffer overflow in the httpd daemon on TP-Link TL-WR841N V10[EB/OL]. [2021-07-20]. https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-8423
[16] Hex-ray Corporation. Fast library identification and recognition technology[EB/OL]. [2021-07-30]. https://hex-rays.com/products/ida/tech/flirt/
[17] Radare2 Organization. The Official Radare2 Book[M/OL]. 1st ed. 2018 [2021-07-30]. https://github.com/radareorg/radare2-book
[18] Free Software Foundation. Options that control optimization[EB/OL]. [2021-07-15]. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
[19] 刘剑,苏璞睿,杨珉,等. 软件与网络安全研究综述[J]. 软件学报,2018,29(1):42−68 doi: 10.13328/j.cnki.jos.005320 Liu Jian, Su Purui, Yang Min, et al. Software and cyber security—A survey[J]. Journal of Software, 2018, 29(1): 42−68 (in Chinese) doi: 10.13328/j.cnki.jos.005320
[20] 陈千,程凯,郑尧文,等. 函数级数据依赖图及其在静态脆弱性分析中的应用[J]. 软件学报,2020,31(11):3421−3435 doi: 10.13328/j.cnki.jos.005833 Chen Qian, Cheng Kai, Zheng Yaowen, et al. Function-level data dependence graph and its application in static vulnerability analysis[J]. Journal of Software, 2020, 31(11): 3421−3435 (in Chinese) doi: 10.13328/j.cnki.jos.005833
[21] 王蕾,何冬杰,李炼,等. 基于稀疏框架的静态污点分析优化技术[J]. 计算机研究与发展,2019,56(3):480−495 doi: 10.7544/issn1000-1239.2019.20180071 Wang Lei, He Dongjie, Li Lian, et al. Sparse framework based static taint analysis optimization[J]. Journal of Computer Research and Development, 2019, 56(3): 480−495 (in Chinese) doi: 10.7544/issn1000-1239.2019.20180071
[22] Tonder R, Kotheimer J, Goues C. Semantic crash bucketing[C] //Proc of the 33rd ACM/IEEE Int Conf on Automated Software Engineering. New York: ACM, 2018: 612–622
[23] Bao T, Burket J, Woo M, et al. BYTEWEIGHT: Learning to recognize functions in binary code[C] //Proc of the 23rd USENIX Security Symp (USENIX Security 14). Berkeley, CA: USENIX Association, 2014: 845−860
[24] Shin E C R, Song D, Moazzezi R. Recognizing functions in binaries with neural networks[C] //Proc of the 24th USENIX Security Symp (USENIX Security 15). Berkeley, CA: USENIX Association, 2015: 611−626
[25] Cisco. SNMP remote code execution, CVE-2017-6736[EB/OL]. [2021-08-10]. https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20170629-snmp
[26] The MITRE Corporation. Multiple stack-based buffer overflows in TP-Link WR940N[EB/OL]. [2021-08-10]. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-13772
[27] Rawat S, Mounier L. Finding buffer overflow inducing loops in binary executables[C] //Proc of the 6th IEEE Int Conf on Software Security and Reliability. Piscataway, NJ: IEEE, 2012: 177−186
[28] Luo Peng, Zou Deping, Du Yajuan, et al. Static detection of real-world buffer overflow induced by loop[J]. Computers & Security, 2020, 89: 101616
[29] Song D, Brumley D, Yin Heng, et al. BitBlaze: A new approach to computer security via binary analysis[C] //Proc of the 4th Int Conf on Information Systems Security. Berlin: Springer, 2008: 1−25
[30] Pewny J, Garmany B, Gawlik R, et al. Cross-architecture bug search in binary executables[C] //Proc of the 36th IEEE Symp on Security and Privacy. Piscataway, NJ: IEEE, 2015: 709−724
[31] Shoshitaishvili Y, Wang Ruoyu, Salls C, et al. Python bindings for Valgrind's VEX IR[EB/OL]. [2021-05-23]. https://github.com/angr/pyvex
[32] Shoshitaishvili Y, Wang Ruoyu, Salls C, et al. Sok (state of) the art of war: Offensive techniques in binary analysis[C] //Proc of the 37th IEEE Symp on Security and Privacy (SP). Piscataway, NJ: IEEE, 2016: 138−157
[33] Hu Yikun, Zhang Yuanyuan, Li Juanru, et al. Cross-architecture binary semantics understanding via similar code comparison[C] //Proc of the 23rd IEEE Int Conf on Software Analysis, Evolution, and Reengineering (SANER). Piscataway, NJ: IEEE, 2016: 57−67
[34] Hu Yikun, Zhang Yuanyuan, Li Juanru, et al. Binmatch: A semantics-based hybrid approach on binary code clone analysis[C] //Proc of the 34th IEEE Int Conf on Software Maintenance and Evolution (ICSME). Piscataway, NJ: IEEE, 2018: 104−114
[35] Hagberg A, Schult A, Swart J. Exploring network structure, dynamics, and function using networkx[C/OL] //Proc of the 7th Python in Science Conf (SciPy2008). 2008 [2021-05-23]. http://conference.scipy.org/proceedings/SciPy2008/paper_2/
[36] Netgear. Netgear GPL code[EB/OL]. [2021-06-15]. https://github.com/jameshilliard/R7000
[37] Senpai A. Leaked Mirai source code for research purposes[EB/OL]. [2021-06-15]. https://github.com/jgamblin/Mirai-Source-Code
-
期刊类型引用(13)
1. 田青,王颖,张正,羊强. 改进YOLOv8n的选通图像目标检测算法. 计算机工程与应用. 2025(02): 124-134 . 百度学术
2. 鞠伟强,曹立华. 基于改进的YOLOv7小目标检测算法. 计算机工程与设计. 2025(01): 145-151 . 百度学术
3. 郝佳,姚国英,周剑,王斯远,肖进胜. 基于图像和点云融合的三维小目标检测方法. 测绘通报. 2025(03): 33-38 . 百度学术
4. 杨新秀,徐黎明,冯正勇. 基于YOLOv5全局注意力和上下文增强的遥感图像目标检测方法. 西华师范大学学报(自然科学版). 2024(03): 321-326 . 百度学术
5. 杨帅鹏,李贺,刘金江,付主木,张锐,贾会梅. 基于多尺度特征融合和注意力机制的水面死鱼检测方法. 郑州大学学报(理学版). 2024(06): 32-38 . 百度学术
6. 李耀. 基于YOLOv5-PNCM的飞鸟目标检测算法研究. 现代计算机. 2024(11): 9-15+22 . 百度学术
7. 冉庆东,郑力新. 基于改进YOLOv5的锂电池极片缺陷检测方法. 浙江大学学报(工学版). 2024(09): 1811-1821 . 百度学术
8. 郭虎升. 目标检测综述:从传统方法到深度学习. 新兴科学和技术趋势. 2024(02): 128-145 . 百度学术
9. 马枫,石子慧,孙杰,陈晨,毛显斌,严新平. 自注意力机制驱动的轻量化高鲁棒船舶目标检测方法. 中国舰船研究. 2024(05): 188-199 . 百度学术
10. 周楝淞,邵发明,杨洁,彭泓力,李赛野,孙夏声. 基于区域预推荐和特征富集的SOD R-CNN交通标志检测网络. 信息安全与通信保密. 2024(10): 115-126 . 百度学术
11. 贾帅帅,田明浩,路红阳. 基于数据增强的组合神经网络异常检测算法. 信息技术与信息化. 2023(04): 187-190 . 百度学术
12. 潘晓英,贾凝心,穆元震,高炫蓉. 小目标检测研究综述. 中国图象图形学报. 2023(09): 2587-2615 . 百度学术
13. 齐向明,柴蕊,高一萌. 重构SPPCSPC与优化下采样的小目标检测算法. 计算机工程与应用. 2023(20): 158-166 . 百度学术
其他类型引用(16)