首页
社区
课程
招聘
[原创]基于深度学习的恶意软件分类器(二)
发表于: 2022-4-2 22:40 13024

[原创]基于深度学习的恶意软件分类器(二)

2022-4-2 22:40
13024

一.前言

1.实验内容

实验内容来源于:Deep learning based Sequential model for malware analysis using Windows exe API Calls。虽然这只是一篇3区的论文,但是我觉得作者做的工作挺好的。在这篇论文中,作者提出了一个方法从公网上收集8种不同类型的恶意软件,并将其API调用序列保存下来。接下来,作者将获取的不同恶意软件的API调用序列作为输入数据,通过不同的机器学习算法作为模型来构建分类器。数据集以及相关代码作者也都放在github上,链接为:Windows Malware Dataset with PE API Calls。链接中的代码是基于Keras框架编写了一系列的分类器,其实最终的实验是表明通过SVM算法构建的分类器性能最优。

本文基于Pytorch框架实现了基于LSTM的分类器,至于基于其他算法构建的分类器,感兴趣还是去看看作者的论文和代码。在论文中,作者还是做了很多的实验,其中也包括了二分类的实验。

2.实验环境

  • Python版本:3.6.13

  • Pytorch版本:1.8.1

  • CUDA版本:11.4

二.数据集

数据集的生成过程如下图所示,首先作者从github上下载一些恶意软件,接着分别通过VirusTotal和恶意软件的哈希值来获取恶意软件的类别,通过Cuckoo来获取恶意软件的API调用序列,最终将每个恶意软件的API调用序列和它所属的类别都保存起来构成数据集。

不过此时的数据集还不能用,因为输入数据都是如下图所示的调用的API名称:

所以作者给每一个API都指定了一个整型数字,将每个恶意软件的API调用序列都转换成一串数字:

最终作者共收集了8个类别,总计7107个恶意软件,数据样本分布如下:


以下是数据类的参考代码,由于会用10折交叉验证来验证分类器精度,所以数据的读取是在get_data函数中完成的:

from torch.utils.data import Dataset
import pandas as pd
import torch
from keras import preprocessing


class APIDataSet(Dataset):
    def __init__(self, x_data, y_data):
        self.x_data = x_data
        self.y_data = y_data
        self.len = len(self.y_data)

    def __getitem__(self, index):
        return self.x_data[index], self.y_data[index]

    def __len__(self):
        return self.len


# 获取API调用序列和对应类别
def get_data(calls_path, types_path, max_len):
    # 读取API序列
    calls_df = pd.read_csv(calls_path, delimiter=' ', header=None, compression="zip")

    ds_tmp = calls_df.values[:, 0].tolist()
    ds = []
    for v in ds_tmp:
        ds.append(v.split(','))
    # padding成固定长度
    x = preprocessing.sequence.pad_sequences(ds, maxlen=max_len)
    x_data = torch.tensor(x)

    # 读取标签
    types_df = pd.read_csv(types_path, delimiter=' ', header=None, compression="zip")
    y_data = types_df[0].astype('category').cat.codes.values

    return x_data, y_data

三.模型

1.循环神经网络

下图是一个典型的神经网络示意图,虽然神经网络已经可以拟合出很复杂的曲线了,可是同一层隐藏层中的神经元直接并没有联系,也就是说同一层隐藏层中的神经元的信息并不能传递给同一层隐藏层中另一个神经元。


[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2022-4-13 19:54 被1900编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 864
活跃值: (5144)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
u秀
2022-4-20 10:50
0
雪    币: 239
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
 优秀
2022-5-13 09:49
0
游客
登录 | 注册 方可回帖
返回