《web安全之机器学习入门》第五章:K近邻算法提供了三种web攻击的识别应用。以下均使用KNN算法解决。
一、异常检测操作识别
黑客入侵web服务器后,通常会通过系统漏洞进一步提权,获得root权限。schonlau在他的个人网站上发布了针对Linux操作的数据信息。
1.1、数据介绍
- 训练数据包含15000条操作命令,前5000条为正常操作,后10000条日志中随机包含异常操作。
- 为了便于分析,每100条操作作为一个操作序列,同时进行标准,每个操作中只要有1条操作异常就认为这个操作序列异常。
1.2、特征提取
- 去重指令,15000个指令去重后的指令为107个。把这107个指令作为数据集的特征提取,1/0分别表示是否包含该指令。
1.3、有监督学习KNN
使用cross_val_score检验模型识别准确率稳定性,显然整体结果不错。
cross_validation.cross_val_score(neigh, user_cmd_feature, y, n_jobs=-1, cv=10)
以下为运行10次KNN算法的运算精度。
[1. 1. 0.93333333 1. 1. 1. 1. 1. 0.93333333 0.92857143]
1.4、识别机制原理
通过以上数据集训练KNN算法形成一个操作命令的识别机制。
当出现新操作命令时,提取它的107个特征数据集,去寻找与他距离最接近的邻居,邻居的分类就是新操作命令的分类。
二、Rootkit恶意软件的识别
rootkit是一种恶意软件,而Linux是其重要的攻击对象,数据集采用KDD 99的tcp连接内容。
KDD数据提取与Rootkit相关的特征:
特征 | 描述 |
---|---|
hot | 访问系统敏感文件/目录的次数,范围 [0,101] |
num_failed_logins | 尝试登陆失败的次数,范围 [0,5] |
logged_in | 是否成功登陆1/0 |
num_compromised | compromised条件(**)出现的次数,范围 [0, 7479] |
root_shell | 是否获得超级用户权限1/0 |
su_attempted | 若出现”su root” 命令则为1 |
num_root | root用户访问次数,范围 [0, 7468] |
num_file_creations | 文件创建操作的次数,范围 [0, 100] |
num_shells | 使用shell命令的次数,范围 [0, 5] |
num_access_files | 访问控制文件的次数,范围 [0, 9] |
num_outbound_cmds | 一个FTP会话中出站连接的次数 |
is_hot_login | 登录是否属于“hot”列表(***) |
is_guest_login | 是否为guest 登录1/0 |
特征提取完以后,训练KNN模型。当出现新的数据信息时,提取以上特征判断新数据的分类。
三、webshell检测
webshell:匿名用户(入侵者)通过WEB服务端口,获得对WEB服务器有某种程度上操作的权限。由于其大多是以网页脚本的形式出现,也有人称之为网站后门工具。
数据采用ADFA-LD数据集中webshell相关数据。
3.1、正常样本数据
normal的样本数据包含833个txt文本,每个数据文本独立记录了一段时间内的系统调用顺序,每个系统调用都用数据编号。例如0833的内容如下:
每个系统调用都用数据编号,部分编号含义如下。例如编号0对应系统调用顺序为_NR_io_setup 0 到 sys_io_setup
编号对应的操作3.2、webshell攻击数据
攻击数据的内容依旧是一段时间内的系统调用顺序,每个系统调用都用数据编号。
3.3、特征提取
每个系统调用的编号都作为一个特征,normal和webshell数据合并提取特征的数量。
就整个数据集的统计而言,编号63出现128次,编号42出现122次,···
KNN模型训练
使用cross_val_score检验模型识别准确率稳定性,显然整体准确率在95.9%,分类效果较好。
scores = cross_validation.cross_val_score(clf, X, y, n_jobs=-1, cv=10)
[0.95833333 0.94791667 0.97916667 0.96842105 0.96842105 0.84210526 0.97894737 0.98947368 0.9787234 0.9787234 ]
网友评论