SoReL-20M发布2000万个恶意软件样本数据集

SoReL-20M发布2000万个恶意软件样本数据集

网络安全公司Sophos和ReversingLabs周一联合发布了有史以来第一个生产规模的恶意软件研究数据集,该数据集将提供给公众,旨在建立有效的防御措施并推动整个行业在安全检测和响应方面的改进。

SoReL-20M ”(简称 Sophos-ReversingLabs – 20 Million),因为它被称为是包含元数据,标签数据集,并提供了20亿个Windows移植可执行(.PE)文件,含1000万撤消了恶意软件样本的武装,目的是设计机器学习方法,以提供更好的恶意软件检测功能。

Sophos AI小组表示:“对网络威胁的开放知识和了解也可以带来更具预测性的网络安全性。” “防御者将能够预见攻击者在做什么,并为下一步行动做好更好的准备。”

随版本一起发布的是一组基于PyTorchLightGBM的机器学习模型,这些模型已在此数据上作为基线进行了预训练

与自然语言和图像处理等其他领域不同,这些领域已从MNISTImageNetCIFAR-10IMDB ReviewsSentiment140WordNet等大量公开可用的数据集中受益,事实证明,掌握致力于网络安全的标准化标签数据集具有挑战性由于存在个人身份信息,敏感的网络基础结构数据和私有知识产权,更不用说为未知的第三方提供恶意软件的风险了。

我们为什么要发布这些数据?

数据是构建机器学习模型的基础。标准化数据集是开发,测试和相互比较新功能和模型的方式。标准化数据集(例如MNIST位数数据集)以及后来的大规模,现实的数据集(例如ImageNet数据集和Pascal视觉对象分类数据集)的开发和访问变得容易,从而引发了机器学习的爆炸式增长,最终实现了图像识别。今天可用的超人模型。

与图像识别或自然语言处理不同,安全领域的活动少得多,改进速度相对较慢。造成这种情况的主要原因仅仅是缺乏标准的,大规模的,现实的数据集,而这些数据集可以由独立研究人员到学术实验室再到大型企业集团的广泛用户轻松获取和测试。获得大量精选的,带有标签的样本既昂贵又具有挑战性,并且由于知识产权问题以及向未知第三方提供恶意软件的风险,共享数据集通常很困难。结果,大多数有关恶意软件检测的已发表论文都在私有内部数据集中工作,其结果无法直接进行比较。

EMBER数据集(https://github.com/endgameinc/ember ; https://arxiv.org/abs/1804.04637)是解决此问题的第一步,但是Ember数据集相对较小(大约100万个文件) ,并且每个样品仅包含一个标签(良性/恶意软件),从而限制了可以对其进行的实验范围。它还不包含任何原始样本,这意味着用户必须依靠数据集开发人员预先提取的功能。相比之下,我们的数据集包含完整的(尽管已撤防)恶意软件,恶意软件/良性软件标签的样本,以及ReversingLabs扫描仪的阳性结果数量和从检测名称得出的标签计数。我们还提供了通过pefile库提取的元数据转储(https://github.com/erocarrera/pefile)的所有示例。

数据集中有什么?

SoReL-20M数据集由Sophos AI和ReversingLabs合作开发,旨在通过机器学习进一步加速恶意软件检测的研究。SoReL 20M是一个生产规模的数据集,涵盖2000万个样本,其中包括1000万个可供下载的撤防的恶意软件样本,以及另外1000万个良性样本的提取特征和元数据。在实践中,我们发现2000万个样本足以获得良好的模型等级排序,从而使我们能够在模型之间获得公平,稳定的比较。这些样本根据首次见习时间分为训练,验证和测试部分。对于每个样本,我们提供:

  1. 根据EMBER 2.0数据集提取的特征
  2. 通过将外部和Sophos内部来源汇总到一个高质量标签中而获得的标签
  3. 每样本样本检测元数据,包括ReversingLabs引擎上阳性结果的总数,以及描述根据我们的论文“通过属性标记和相似性嵌入进行自动恶意软件描述”获得的样本重要属性的标记,https://arxiv.org/ abs / 1905.06262
  4. 使用dump_dict()方法从pefile库获得的文件元数据的完整转储
  5. 对于恶意软件样本,我们提供了完整的二进制文件,其中OptionalHeader.Subsystem标志和FileHeader.Machine标头值都设置为0,以防止意外执行

为了配合这些数据,我们还发布了一组经过预先训练的PyTorch(https://pytorch.org/)模型和以该数据为基准训练的LightGBM(https://github.com/Microsoft/LightGBM)模型,以及用于加载和迭代数据以及加载,训练和测试模型的脚本。基于PyTorch的深度学习模型基于ALOHA架构(https://www.usenix.org/system/files/sec19-rudd.pdf);使用HyperOpt库选择LightGBM参数。用于训练模型的代码以及到数据的链接都可以在https://github.com/sophos-ai/SOREL-20M上找到。

恶意软件和标签的频率如下

请注意,数据集在恶意软件方面大致平衡,但在其他方面则相当不平衡。数据中有19724997个样本,细分如下:

 类别不是
Is_malware [是否为恶意软件]97621779962820
Adware[广告软件]241126217313735
Flooder10159519623402
Ransomware [勒索软件]115235418572643
Dropper357711116147886
Spyware [间谍软件]455000715174990
Packed [打包好的]372605915998938
Crypto_miner [加密矿工]33956519385432
File_infector [文件传播者]331756916407428
Installer [安装程序]101888018706117
Worm [蠕虫]341413216310865
Downloader [下载器]256583817159159

您是否担心攻击者可能使用此数据集造成伤害?

我们释放的恶意软件已“撤防”因此不会执行。这意味着重新构造样本并使它们实际运行将需要知识,技能和时间。也就是说,我们认识到,熟练的攻击者至少有某种可能性可以从这些样本中学习技术,或者使用数据集中的样本来组装攻击工具以用作其恶意活动的一部分。但是,实际上,攻击者已经可以利用许多其他来源来获取对恶意软件信息和样本的访问,这些信息和样本使用起来更容易,更快捷且更具成本效益。换句话说,这种解除武装的样本集对寻求改进和发展其独立防御的研究人员而言,将比对攻击者具有更大的价值。 

网络安全行业已达成共识,负责任的进攻性参与使我们所有人都变得更加强大,而公开发布攻击工具则对此起到了促进作用。诸如“ afl”之类的成熟项目支持漏洞识别(https://lcamt​​uf.coredump.cx/afl/),诸如sqlmap(http://sqlmap.org/)之类的工具和Metasploit提供了使对手进入并在其中进行特权升级的手段。网络(https://www.metasploit.com/download),像MimiKatz这样的工具支持横向运动https://github.com/gentilkiwi/mimikatz/releases,Powershell Empire等工具支持持久性,数据渗透和其他功能(https://github.com/EmpireProject/Empire)。这些工具的负责任可用性可为防御者提供有关其防御内容的更多信息,从而使防御更为有效。对网络威胁的开放知识和了解也可以带来更具预测性的网络安全。防御者将能够预见攻击者在做什么,并为下一步行动做好更好的准备。

我们发布的恶意软件二进制文件已经流行了一段时间。即使它们可以运行,我们希望它们将被配置为伸出手来指挥和控制已经拆除的基础设施。我们还希望防病毒供应商能够轻松识别绝大多数样本。我们正在发布带有示例的元数据,包括哈希值,这将使防病毒供应商能够识别尚未存在的示例。我们还期望随着研究人员有机会与他们合作,这些样本将很快得到很好的认可。

最后,我们预计发布数据集的公共利益将包括对恶意软件识别和防御的重大改进。我们正在为研究人员提供一个使他们的结果可衡量的机会。我们已经看到了ImageNet基准图像数据集对特定领域的计算机视觉和更广泛的深度学习产生了怎样的影响。并且,与负责发布相关数据集的同事一样,我们在将此类数据发布给社区方面也处于坚不可摧的境地,以促进创建基准测试的文化,我们希望这将超出我们在此处所做的工作。

详细的资料库统计(针对技术倾向)

所有数据都可以通过AWS S3在s3://sorel-20m/09-DEC-2020 – baseline上获得–基线预训练模型和结果在’baselines’子目录中可用;预提取的功能和元数据位于“处理数据”子目录中,而原始(已解散)的二进制文件(使用python zlib库压缩)包含在“ binaries”子目录中。

meta.db“ processed-data”子目录中文件的SQLite数据库架构如下:

CREATE TABLE meta (sha256 text primary key,
  is_malware SMALLINT,
  rl_fs_t DOUBLE,
  rl_ls_const_positives INTEGER,
  adware INTEGER,
  flooder INTEGER,
  ransomware INTEGER,
  dropper INTEGER,
  spyware INTEGER,
  packed INTEGER,
  crypto_miner INTEGER,
  file_infector INTEGER,
  installer INTEGER,
  worm INTEGER,
  downloader INTEGER );
  • sha256 –未修改文件的sha256(请注意,所有提供的文件均已“撤防”)
  • is_malware –值为0表示良性软件,值为1表示恶意软件
  • rl_fs_t –第一次(在Unix时代)在ReversingLabs提要中看到给定的样本(sha256唯一)
  • rl_ls_const_positives –在最近一次看到样本时,所有检测器得出的“阳性”(即恶意软件)总数(假设由于签名更新等,较新的扫描将具有更高的质量)
  • 广告软件,泛洪器,勒索软件,滴管,间谍软件,打包,crypto_miner,file_infector,安装程序,蠕虫,下载程序(adware, flooder, ransomware, dropper, spyware, packed, crypto_miner, file_infector, installer, worm, downloader)–检测名称中与指定标签相关的令牌数量;值> 0表示阳性结果,值越大表示标签中的确定性越高

关于数据集大小的注释

该数据集的总大小约为8TB。强烈建议您仅获取所需的特定元素。大于1GB的文件如下所示。

s3://sorel-20m
|   Terms and Conditions of Use.pdf -- the terms you agree to by using this data and code
|
+---baselines
|   +---checkpoints
|   |   +---FFNN - per-epoch checkpoints for 5 seeds of the feed-forward neural network
|   |   +---lightGBM - final trained lightGBM model for 5 seeds
|   |
|   +---results
|       |  ffnn_results.json - index file of results, required for plotting
|       |  lgbm_results.json - index file of results, required for plotting
|       |
|       +---FFNN
|       |   +---seed0-seed4 - individual seed results, ~1GB each
|       |
|       +---lightgbm
|           +---seed0-seed4 - individual seed results, ~1GB each
|
+---binaries
|      approximately 8TB of zlib compressed malware binaries
|
+---lightGBM-features
|      test-features.npz - array of test data for lightGBM; 37GB
|      train-features.npz - array of training data for lightGBM; 113GB
|      validation-features.npz - array of validation data for lightGBM; 22GB
|
+---processed-data
    |   meta.db - contains index, labels, tags, and counts for the data; 3.5GB
    |
    +---ember_features - LMDB directory with baseline features, ~72GB
    +---pe_metadata - LMDB directory with full metadata dumps, ~480GB

注意:LMDB文件中的值通过msgpack序列化,并通过zlib压缩;下面的代码会自动处理此提取,但是,如果您使用自己的代码来处理数据,则需要手工解压缩和反序列化。

快速开始

感兴趣的主要脚本是:

  1. train.py 用于训练深度学习或(在具有足够内存的机器上)LightGBM模型
  2. evaluate.py 用于获取预训练的模型并产生结果csv
  3. plot.py 用于绘制结果

所有脚本都有多个命令,通过–help查看

克隆存储库后,进入存储库目录并创建一个conda环境:

cd SoReL-20M
conda env create -f environment.yml
conda activate sorel

确保在本地目录中具有SOREL处理的数据。编辑config.py以指示要使用的设备(CPU或CUDA)以及数据集位置和所需的检查点目录。数据集位置应指向包含meta.db文件的文件夹。

请注意:已处理数据的完整内容大约需要552 GB磁盘空间,其中大部分是PE元数据,在训练基准模型时不会使用。如果您只希望重新训练基线模型,则仅需要以下文件(总共约78GB):

/meta.db
/ember_features/data.mdb
/ember_features/lock.mdb

shas_missing_ember_features.json此存储库中的文件包含sha256值列表,该列表指示无法提取Ember v2特征值的样本;它是强烈建议该文件的位置传递给--remove_missing_features参数train.train_networkevaluate.evaluate_network以及evaluate.evaluate_lgb以显著加快数据加载时间。如果未提供,则应指定--remove_missing_features='scan'在构建数据加载器之前将扫描所有键以检查并删除具有缺失功能的键;如果数据加载器达到缺少的功能,将导致错误。

您可以使用以下内容训练神经网络模型(请注意,可以通过命令行开关覆盖config.py值:

python train.py train_network --remove_missing_features=shas_missing_ember_features.json 

假设已将检查点写入/home/ubuntu/checkpoints/,并且您希望将results.csv文件放置在/home/ubuntu /results/0中,则可以生成测试集评估,如下所示:

python evaluate.py evaluate_network /home/ubuntu/results/0 /home/ubuntu/checkpoints/epoch_9.pt 

要启用多个序列的绘图,该plot.plot_roc_distributions_for_tag函数需要一个json文件,该文件将特定运行的名称映射到该运行的results.csv文件。

# Re-plot baselines -- note that the below command assumes 
# that the baseline models at s3://sorel-20m/09-DEC-2020/baselines
# have been downloaded to the /baselines directory
python plot.py plot_roc_distribution_for_tag /baselines/results/ffnn_results.json ./ffnn_results.png

神经网络训练

GPU可以加快训练速度(可以在大约90分钟内完成10个纪元),但该模型也可以通过CPU进行训练;提供的结果是通过在Amazon g3.4xlarge EC2实例上通过GPU获得的,该实例以“深度学习AMI(Ubuntu 16.04)版本26.0(ami-025ed45832b817a35)”开头并按上述进行更新。实际上,假设使用GPU,从功能数据库中加载磁盘I / O功能似乎是一个限速步骤,因此建议在具有多核的计算机上运行并使用具有高IOPS的驱动器。通过CPU训练网络时,训练网络大约需要12GB的RAM,尽管它随内核数的变化而变化。强烈建议使用该--remove_missing_features=shas_missing_ember_features.json选项,因为这可以显着缩短数据加载时间。

注意:如果收到错误消息RuntimeError: received 0 items of ancdata,通常是由于打开文件的最大数量限制太低导致的;这可以通过ulimit命令增加。在某些情况下-如果您使用大量并行工作程序-可能还需要增加共享内存。

训练和评估神经网络模型的命令是

python train.py train_network
python evaluate.py evaluate_network

使用--help了两种脚本来查看详细信息和选项。模型本身在nets.PENetwork

LightGBM培训

由于数据集的大小,训练增强模型很困难。我们使用lightGBM,它具有相对高效的内存处理程序,可以使用大约175GB的RAM来适应内存中的模型。此存储库中提供的lightGBM模型在Amazon m5.24xlarge实例上进行了培训。

该脚本build_numpy_arrays_for_lightgbm.py将接受训练/验证/测试数据集,并将它们分成指定数据位置中的三个.npz文件,然后可用于训练LightGBM模型。请注意,使用提供的Ember功能,这些文件将非常大(分别为113GB,23GB和38GB)。

另外,您可以使用预先提取的npz文件,s3://sorel-20m/09-DEC-2020/lightGBM-features/其中包含Ember功能,并使用默认时间间隔进行训练,验证和测试。

lightGBM模型可以通过与神经网络几乎相同的方式进行训练

python train.py train_lightGBM --train_npz_file=/dataset/train-features.npz --validation_npz_file=/dataset/validation-features.npz --model_configuration_file=./lightgbm_config.json --checkpoint_dir=/dataset/baselines/checkpoints/lightGBM/run0/

假设您已按照上述建议将S3数据集放置在/ dataset中,则此命令将执行一次评估运行。

python evaluate.py evaluate_lgb /dataset/baselines/checkpoints/lightGBM/seed0/lightgbm.model /home/ubuntu/lightgbm_eval --remove_missing_features=./shas_missing_ember_features.json 

可在中找到用于从数据库生成numpy数组文件的脚本generate_numpy_arrays_for_lightgbm.dump_data_to_numpy。请注意,此脚本所需的内存与训练模型所需的内存差不多。建议使用m5.24xlarge或等效的EC2实例类型。

from from