Page 293 - 《软件学报》2025年第8期
P. 293

3716                                                       软件学报  2025  年第  36  卷第  8  期


                 模型输入的形式. 考虑到包含程序语义的操作码序列具有顺序性、上下文依赖性并具有一定的语法结构                                   (例如函
                 数调用、条件跳转等固定的操作组合), 这与自然语言句子具有高度的相似性. 与理解自然语言句子逻辑含义时考
                 虑的单词顺序和含义相似, 程序中的操作码也时按照特定顺序排列, 并反映了程序的结构和逻辑. 因此考虑使用能
                 够理解语言上下文和语义的          BERT  自然语言处理模型帮助解析操作码序列, 并从中学习程序的语义特征表示. 由
                 于  BERT  的预训练任务    MLM  和  NSP  都无法直接满足本文的任务需求, MCBA          仅使用   BERT  作为编码器来获取
                 程序操作码字符串的向量表示形式, 并使用              [CLS] 向量作为程序特征向量. MCBA        将静态分析得到的操作码序列
                 组合成一个带空格的长句子, 整体输入到             BERT  进行编码处理得到代表当前样本的           [CLS] 向量, 如图  3  所示.

                               损失             NSP 损失     +      MASK 损失
                                                               FC(21128, Softmax)
                                              FC(2, Softmax)
                                                                 归一化
                                            FC(768,
                               池化层输出        tanh)               FC(768,GELU)
                                                 0   1    2    3   4    5   6    …   512
                               隐藏状态         Transformer 编码器×12

                                                                  归一化

                                                           前向传播 (3072,GELU→768)

                                                                  归一化


                                                             多头自注意力 (768,12)
                               输入:

                                Attention mask   1   1    1    1    1   …   …    …    1
                                Token_type_embeddings  768  768  768  768  768  …  …  …  768
                                Position_ids     0   1    2    3    4   …   …    …   511
                                Input_ ids      101  5 589  2 694  12 827  5 378  …  …  …  4 944
                                Sentence             add  mov  cmp  jmp  …  …    …    sub
                                                      图 3 向量嵌入

                    操作码助记符本身极为简洁, 与自然语言有所差异. 因此考虑将其转换为更接近自然语言的词语, 例如: mov
                 转换为   move、jmp  转换为  jump  等. 此外, 考虑到自然语言句子本身不会过长和模型开销的实用性等因素, BERT
                 模型输入上限限制在        512  个单词. 然而, 虽然恶意软件的体积较小, 但其操作码数量往往超过                 512  个. 现有的相关
                 工作  [32,33] 直接将提取的操作码按顺序截断, 只取小于         512  个操作码进行分析. 虽然这些工作已经被证明是有效的,
                 但这种方式会丢弃掉大量与分类任务相关的有价值信息. 考虑到                     BERT  进行上下文计算生成向量的过程是资源密
                 集型的, 输入数据的大小无法直接扩展. 本文设计了               BERT  滑动窗口的方式进行向量嵌入, 以更多的利用程序指令
                 信息. MCBA  将最大输入形式的       BERT  作为滑动窗口对程序操作码字符串进行处理, 使用                512  个操作码作为一个
                 处理单元, 获得多个      BERT  向量输出. 然后将代表每个输出整体特征的            [CLS] 向量拼接, 生成代表整个程序的特征
                 向量  (如图  1  和图  3  所示). 需要注意的是虽然随着     BERT  滑动窗口数量的增加, 模型可以提取更多特征信息, 但其
                 所需的计算资源也将迅速增长. 经过实验             (第  4.4  节) 评估, MCBA  的  BERT  的窗口数量设置为  3  个.

                 3.3   基于几何中位数子空间和瓶颈自编码器的模型优化训练和分类
                    为了提高系统的稳定性, 提高在概念漂移场景下的性能表现, 本节对模型训练过程进行优化, 通过特征映射和
                 降维, 提取与任务目标相关的有效特征. 在自然语言理解领域的相关研究中, 模型在不同数据集上的性能变化一直
   288   289   290   291   292   293   294   295   296   297   298