基于深度学习(TextCNN&XGBoost stacking融合)对恶意软件的检测算法设计与实现
字数 1816 2025-08-22 12:23:25

基于深度学习的恶意软件检测算法设计与实现

1. 研究背景与意义

恶意软件检测是信息安全领域的重要研究方向。随着互联网技术的发展,恶意软件数量和种类不断增加,传统检测技术面临以下局限性:

  1. 依赖人工特征选取,特征不足或缺乏代表性会导致准确率下降
  2. 无法自适应学习混淆、加密后的新恶意软件特征,难以应对零日漏洞

2. 研究内容概述

  1. 数据集收集:使用阿里云恶意软件检测大赛公开数据集
  2. 恶意软件分类与检测技术研究
  3. 提出TextCNN与XGBoost模型融合的新型检测模型

3. 数据集处理

3.1 数据来源

  • 阿里云公开恶意代码数据集
  • 数据格式:csv
  • 数据量:6亿条
  • 数据类型:Windows二进制可执行程序在沙箱中运行的API序列
  • 包含恶意软件类型:感染型病毒、木马软件、挖矿程序、DDOS木马、勒索病毒、蠕虫病毒、后门软件

3.2 数据预处理

  1. 使用Python将csv格式转换为pkl文件:
def read_test_file(path):
    names = []
    files = []
    data = pd.read_csv(path)
    goup_fileid = data.groupby('file_id')
    for file_name, file_group in goup_fileid:
        result = file_group.sort_values(['tid', 'index'], ascending=True)
        api_sequence = ' '.join(result['api'])
        names.append(file_name)
        files.append(api_sequence)
    with open("security_test.csv.pkl", 'wb') as f:
        pickle.dump(names, f)
        pickle.dump(files, f)
  1. 分组处理:
    • 按file_id分组
    • 在每个分组中按线程内部API调用顺序排序
    • 将排好序的线程API序列拼接成长字符串

4. 特征工程

4.1 特征向量化方法

采用One-Hot编码与Word2vec算法结合的特征向量模型:

  1. One-Hot编码优势

    • 降维处理高维文本数据
    • 以离散类别形式表现文字特征
    • 兼容不同类型的文本特征
  2. One-Hot编码示例

    原始API序列:
    API1 API3 API2
    API3 API4 API1
    API2 API1 API3
    
    词典:
    API1:1; API2:2; API3:3; API4:4;
    
    特征向量:
    API1:(1,0,0,0)
    API2:(0,1,0,0)
    API3:(0,0,1,0)
    API4:(0,0,0,1)
    
    序列特征向量:
    API1 API3 API2:(1,1,1,0)
    API3 API4 API1:(1,0,1,1)
    API2 API1 API3:(1,1,1,0)
    
  3. Word2vec补充

    • 解决One-Hot编码维度爆炸问题
    • 将One-Hot向量转化为低维连续值向量
    • 能够发现与中心词相似的API调用

4.2 TF-IDF特征抽取

使用sklearn的TfidfVectorizer:

  • 对API序列长字符串进行TF-IDF特征抽取
  • 选择5-gram
  • 忽略文档频率低于0.9或高于3的词条
  • 使用高斯映射实现降维

5. 模型设计

5.1 TextCNN模型

5.1.1 模型结构

def TextCNN():
    num_filters = 64
    kernel_size = [2,4,6,8,10]
    conv_action = 'relu'
    _input = Input(shape=(maxlen,), dtype='int32')
    _embed = Embedding(304, 256, input_length=maxlen)(_input)
    _embed = SpatialDropout1D(0.15)(_embed)
    
    warppers = []
    for _kernel_size in kernel_size:
        conv1d = Conv1D(filters=32, kernel_size=_kernel_size, 
                        activation=conv_action, padding="same")(_embed)
        warppers.append(MaxPool1D(2)(conv1d))
    
    fc = concatenate(warppers)
    fc = Flatten()(fc)
    fc = Dropout(0.5)(fc)
    fc = Dense(256, activation='relu')(fc)
    fc = Dropout(0.5)(fc)
    preds = Dense(8, activation='softmax')(fc)
    
    model = Model(inputs=_input, outputs=preds)
    model.compile(loss='categorical_crossentropy', 
                 optimizer='adam', 
                 metrics=['accuracy'])
    return model

5.1.2 各层功能

  1. 嵌入层

    • 将恶意代码词向量嵌入到低维矢量
    • 压缩原始信息同时保留主要特征
    • 提高模型理解能力,减少计算量
  2. 卷积层

    • 使用2,4,6,8,10五种不同内核大小
    • 每个卷积层32个过滤器
    • 多核融合提取不同特征信息
    • 卷积操作公式:
      f(W·X[i:i+h-1,:k] + b)
      
      其中h为滑动窗口长度,k为矩阵列数,W为权重矩阵,b为偏离参数
  3. 池化层

    • 使用early_stopping防止过拟合
    • 缩小输入大小,降低过拟合风险
  4. 全连接层

    • 根据惩罚层约定进行反向传播
    • 更新卷积核参数和恶意代码词向量
  5. 输出层

    • 使用Softmax函数输出概率分布
    • 预测恶意代码类别

5.2 XGBoost模型

5.2.1 模型特点

  • 应用梯度提升树算法
  • 特征输入:短距离n-gram信息和word2vec整体语义信息
  • 优势:完整的整体语义信息和短距离n元组信息的非线性表示,检测速度快

5.2.2 参数优化

通过网格搜索优化以下参数:

  • max_depth:树的最大深度
  • eta:学习率
  • subsample:对数据集的采样率
  • colsample_bytree:对特征的采样率

6. 模型融合(Stacking)

6.1 融合动机

  • TextCNN优势:加入多个长距离n元组中有效性最高的n元组信息
  • XGBoost优势:完整的整体语义信息和短距离n元组信息
  • 融合目标:获得更高检测率、较短检测耗时和更强泛化性

6.2 Stacking原理

  1. 基学习器(TextCNN和XGBoost)学习原数据并预测
  2. 将基学习器输出堆叠,构成(m,p)维新数据(m样本数,p基学习器个数)
  3. 新数据交给第二层模型拟合

6.3 代码实现

train = np.hstack([tfidf_train_result, textcnn_train_result])
test = np.hstack([tfidf_out_result, textcnn_out_result])
meta_test = np.zeros(shape=(len(outfiles), 8))

skf = StratifiedKFold(n_splits=5, random_state=4, shuffle=True)
dout = xgb.DMatrix(test)

for i, (tr_ind, te_ind) in enumerate(skf.split(train, labels)):
    X_train, X_train_label = train[tr_ind], labels[tr_ind]
    X_val, X_val_label = train[te_ind], labels[te_ind]
    
    dtrain = xgb.DMatrix(X_train, label=X_train_label)
    dtest = xgb.DMatrix(X_val, X_val_label)
    
    param = {
        'max_depth':6,
        'eta':0.01,
        'eval_metric':'mlogloss',
        'silent':1,
        'objective':'multi:softprob',
        'num_class':8,
        'subsample':0.9,
        'colsample_bytree':0.85
    }
    
    evallist = [(dtrain, 'train'), (dtest, 'val')]
    num_round = 10000
    bst = xgb.train(param, dtrain, num_round, evallist, 
                   early_stopping_rounds=100)
    preds = bst.predict(dout)
    meta_test += preds

7. 研究不足与改进方向

  1. 模型融合范围

    • 目前仅融合TextCNN和XGBoost
    • 可考虑加入更多表现优异的模型
  2. 系统兼容性

    • 仅针对Windows二进制可执行文件
    • 可扩展至移动端和Linux系统
  3. 鲁棒性

    • 未对异常输入进行检测
    • 可增强框架鲁棒性
  4. 技术扩展

    • 目前借鉴自然语言处理思路
    • 可尝试将恶意软件特征转换为灰度图像,应用图像处理技术

8. 总结

本文提出的基于TextCNN和XGBoost模型融合的恶意软件检测方法,通过以下创新点提高了检测性能:

  1. 结合One-Hot编码和Word2vec的特征向量化方法
  2. TextCNN模型的多核融合卷积结构
  3. XGBoost模型的快速检测优势
  4. Stacking融合策略的综合性能提升

该方法在检测准确率和速度之间取得了良好平衡,为恶意软件检测提供了新的技术思路。

基于深度学习的恶意软件检测算法设计与实现 1. 研究背景与意义 恶意软件检测是信息安全领域的重要研究方向。随着互联网技术的发展,恶意软件数量和种类不断增加,传统检测技术面临以下局限性: 依赖人工特征选取,特征不足或缺乏代表性会导致准确率下降 无法自适应学习混淆、加密后的新恶意软件特征,难以应对零日漏洞 2. 研究内容概述 数据集收集:使用阿里云恶意软件检测大赛公开数据集 恶意软件分类与检测技术研究 提出TextCNN与XGBoost模型融合的新型检测模型 3. 数据集处理 3.1 数据来源 阿里云公开恶意代码数据集 数据格式:csv 数据量:6亿条 数据类型:Windows二进制可执行程序在沙箱中运行的API序列 包含恶意软件类型:感染型病毒、木马软件、挖矿程序、DDOS木马、勒索病毒、蠕虫病毒、后门软件 3.2 数据预处理 使用Python将csv格式转换为pkl文件: 分组处理: 按file_ id分组 在每个分组中按线程内部API调用顺序排序 将排好序的线程API序列拼接成长字符串 4. 特征工程 4.1 特征向量化方法 采用One-Hot编码与Word2vec算法结合的特征向量模型: One-Hot编码优势 : 降维处理高维文本数据 以离散类别形式表现文字特征 兼容不同类型的文本特征 One-Hot编码示例 : Word2vec补充 : 解决One-Hot编码维度爆炸问题 将One-Hot向量转化为低维连续值向量 能够发现与中心词相似的API调用 4.2 TF-IDF特征抽取 使用sklearn的TfidfVectorizer: 对API序列长字符串进行TF-IDF特征抽取 选择5-gram 忽略文档频率低于0.9或高于3的词条 使用高斯映射实现降维 5. 模型设计 5.1 TextCNN模型 5.1.1 模型结构 5.1.2 各层功能 嵌入层 : 将恶意代码词向量嵌入到低维矢量 压缩原始信息同时保留主要特征 提高模型理解能力,减少计算量 卷积层 : 使用2,4,6,8,10五种不同内核大小 每个卷积层32个过滤器 多核融合提取不同特征信息 卷积操作公式: 其中h为滑动窗口长度,k为矩阵列数,W为权重矩阵,b为偏离参数 池化层 : 使用early_ stopping防止过拟合 缩小输入大小,降低过拟合风险 全连接层 : 根据惩罚层约定进行反向传播 更新卷积核参数和恶意代码词向量 输出层 : 使用Softmax函数输出概率分布 预测恶意代码类别 5.2 XGBoost模型 5.2.1 模型特点 应用梯度提升树算法 特征输入:短距离n-gram信息和word2vec整体语义信息 优势:完整的整体语义信息和短距离n元组信息的非线性表示,检测速度快 5.2.2 参数优化 通过网格搜索优化以下参数: max_ depth:树的最大深度 eta:学习率 subsample:对数据集的采样率 colsample_ bytree:对特征的采样率 6. 模型融合(Stacking) 6.1 融合动机 TextCNN优势:加入多个长距离n元组中有效性最高的n元组信息 XGBoost优势:完整的整体语义信息和短距离n元组信息 融合目标:获得更高检测率、较短检测耗时和更强泛化性 6.2 Stacking原理 基学习器(TextCNN和XGBoost)学习原数据并预测 将基学习器输出堆叠,构成(m,p)维新数据(m样本数,p基学习器个数) 新数据交给第二层模型拟合 6.3 代码实现 7. 研究不足与改进方向 模型融合范围 : 目前仅融合TextCNN和XGBoost 可考虑加入更多表现优异的模型 系统兼容性 : 仅针对Windows二进制可执行文件 可扩展至移动端和Linux系统 鲁棒性 : 未对异常输入进行检测 可增强框架鲁棒性 技术扩展 : 目前借鉴自然语言处理思路 可尝试将恶意软件特征转换为灰度图像,应用图像处理技术 8. 总结 本文提出的基于TextCNN和XGBoost模型融合的恶意软件检测方法,通过以下创新点提高了检测性能: 结合One-Hot编码和Word2vec的特征向量化方法 TextCNN模型的多核融合卷积结构 XGBoost模型的快速检测优势 Stacking融合策略的综合性能提升 该方法在检测准确率和速度之间取得了良好平衡,为恶意软件检测提供了新的技术思路。