机器学习解决信息安全问题之ADFA-LD

0x00 前言

  本文记录基于兜哥《Web安全之深度学习实战》、论文《A Semantic Approach to Host-Based Intrusion Detection Systems Using Contiguous and Discontiguous System Call Patterns》和数据集ADFA-LD,利用机器学习解决信息安全问题。

0x01 数据集介绍

  “The ADFA Intrusion Detection Datasets”为澳大利亚国防学院用于测试HIDS生成的数据集,++数据集介绍、相关论文及下载地址++。ADFA数据及分为基于linux操作系统的The ADFA Linux Dataset(ADFA-LD)和和基于windows操作系统的The ADFA Windows Dataset(ADFA-WD)。本文中使用的数据集为ADFA-LD,采集系统配置如下表。1

系统 版本
Ubuntu Linux 11.04
Apache 2.2.17
PHP 5.3.5
TikiWiki 8.1

其中Ubuntu打上了所有的补丁,TikiWiki 8.1版本存在已知远程注入漏洞,这样的配置能够提供一个较为安全但存在漏洞的实验环境(官方数据更新时间为2013年)。ADFA-LD数据集解压后包括三个文件夹,如下表所示。

名称 描述 数量
Attack_Data 标记为恶意的数据 833
Training_Data 标记为正常的数据 60
Validation_Data 评估模型误报率 4372

  其中Attack_Data中包含6类攻击,分别为Adduser、Hydra_FTP、Hydra_SSH、Java_Meterpreter、Meterpreter、Web_Shell。在Gideon Creech和Jiankun Hu论文中对攻击数据进行了解释,攻击包含web-based exploitation、simulated social engineering、poisoned executables、emotely triggered vulnerabilities、remote password brute force、system manipulation using the C100 webshell。结合论文中的描述和参考文献1,对6类攻击描述如下表。

名称 描述
Adduser 通过各种姿势添加root权限用户
Hydra_FTP Hydra暴力破解FTP
Hydra_SSH Hydra暴力破解SSH
Java_Meterpreter metasploit - java meterpreter
Meterpreter metasploit - meterpreter
Web_Shell C100 webshell

  数据集已经对捕获的系统调用进行了处理,对每一个捕获的系统调用都使用唯一的数字进行代替,对应关系文件下载地址++ADFA-LDSyscallList.txt++

0x02 机器学习实战

本文分别提取2-gram, 3-gram, (2-3gram), (1-5gram)作为特征向量,词袋大小为1000

1
from sklearn.feature_extraction.text import CountVectorizer

并使用tf-idf优化

1
from sklearn.feature_extraction.text import TfidfTransformer

选择kaggle比赛神器xgboost和深度学习mlp来进行测试。

1
2
import xgboost as xgb
from sklearn.neural_network import MLPClassifier

使用train_test_split将Attack_Data和Training_Data随机取70%作为训练集,30%作为测试集,并将Validation_Data数据输入生成的模型检查误报数。

train_test_split(x, y, test_size=0.3)

测试结果如下表所示。

1
from sklearn.metrics import classification_report

xgboost precision recall f1-score 误报数(误报率)
2-gram 0.98 0.98 0.98 679(15.53%)
3-gram 0.99 0.99 0.99 655(14.98%)
2-3gram 0.99 0.99 0.99 665(15.21%)
1-5gram 0.87 0.84 0.84 655(14.98%)
mlp precision recall f1-score 误报数
2-gram 1 1 1 609(13.93%)
3-gram 1 1 1 684(15.64%)
2-3gram 1 1 1 693(15.85%)
1-5gram 0.99 0.99 0.99 684(15.65%)

0x03 小结

  1. 本文并未进行调参,所得结论不一定准确或者一定不准确。
  2. 从测试集评分和Validation_Data数据集误报率看,选择2-gram和mlp具有最好的实验效果。
  3. 测试集评分mlp高于xgboost,Validation_Data数据集误报率xgboost优于mlp,mlp过拟合现象比xgboost严重。
    1. 由于没有调参,mlp参数设置不合理。
    2. 训练样本太少。
    3. xgboost做分类就是强
  4. 从误报率看,使用n-gram特征能够取得一定的实验效果,但高误报率依然存在,无法直接用于生产。

    参考文献

  5. ADFA数据集介绍
  6. Web安全之深度学习实战