基于深度学习(TextCNN&XGBoost stacking融合)对恶意软件的检测算法设计与实现
字数 1816 2025-08-22 12:23:25
基于深度学习的恶意软件检测算法设计与实现
1. 研究背景与意义
恶意软件检测是信息安全领域的重要研究方向。随着互联网技术的发展,恶意软件数量和种类不断增加,传统检测技术面临以下局限性:
- 依赖人工特征选取,特征不足或缺乏代表性会导致准确率下降
- 无法自适应学习混淆、加密后的新恶意软件特征,难以应对零日漏洞
2. 研究内容概述
- 数据集收集:使用阿里云恶意软件检测大赛公开数据集
- 恶意软件分类与检测技术研究
- 提出TextCNN与XGBoost模型融合的新型检测模型
3. 数据集处理
3.1 数据来源
- 阿里云公开恶意代码数据集
- 数据格式:csv
- 数据量:6亿条
- 数据类型:Windows二进制可执行程序在沙箱中运行的API序列
- 包含恶意软件类型:感染型病毒、木马软件、挖矿程序、DDOS木马、勒索病毒、蠕虫病毒、后门软件
3.2 数据预处理
- 使用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)
- 分组处理:
- 按file_id分组
- 在每个分组中按线程内部API调用顺序排序
- 将排好序的线程API序列拼接成长字符串
4. 特征工程
4.1 特征向量化方法
采用One-Hot编码与Word2vec算法结合的特征向量模型:
-
One-Hot编码优势:
- 降维处理高维文本数据
- 以离散类别形式表现文字特征
- 兼容不同类型的文本特征
-
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) -
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 各层功能
-
嵌入层:
- 将恶意代码词向量嵌入到低维矢量
- 压缩原始信息同时保留主要特征
- 提高模型理解能力,减少计算量
-
卷积层:
- 使用2,4,6,8,10五种不同内核大小
- 每个卷积层32个过滤器
- 多核融合提取不同特征信息
- 卷积操作公式:
其中h为滑动窗口长度,k为矩阵列数,W为权重矩阵,b为偏离参数f(W·X[i:i+h-1,:k] + 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 代码实现
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. 研究不足与改进方向
-
模型融合范围:
- 目前仅融合TextCNN和XGBoost
- 可考虑加入更多表现优异的模型
-
系统兼容性:
- 仅针对Windows二进制可执行文件
- 可扩展至移动端和Linux系统
-
鲁棒性:
- 未对异常输入进行检测
- 可增强框架鲁棒性
-
技术扩展:
- 目前借鉴自然语言处理思路
- 可尝试将恶意软件特征转换为灰度图像,应用图像处理技术
8. 总结
本文提出的基于TextCNN和XGBoost模型融合的恶意软件检测方法,通过以下创新点提高了检测性能:
- 结合One-Hot编码和Word2vec的特征向量化方法
- TextCNN模型的多核融合卷积结构
- XGBoost模型的快速检测优势
- Stacking融合策略的综合性能提升
该方法在检测准确率和速度之间取得了良好平衡,为恶意软件检测提供了新的技术思路。