《机器学习与安全》读书笔记


我看的是《Machine Learning and Security》的翻译版,原书应该是安全数据科学领域一本比较不错的而且较为基础的书,奈何翻译的太差而且本人水平有限,对书中的许多内容了解的不多,而且书中的代码部分并没有自己亲自实现,只是选取了安全领域的异常检测、恶意软件分析和网络流量分析三个部分做了笔记。希望在学习一段时间之后,能够对之前不了解的内容有所掌握,并且实现一下书中的实战部分。另外如果再读此书的话,一定要读英文版。

1 异常检测

(1)AI for security分为两类:模式识别和异常检测

  • 模式识别:发现数据中的特性,将其提炼成特征集
  • 异常检测:建立一个描述正常状态的特征,所有偏离该状态的情况都被视为异常

(2)shell命令可以形成一个时间序列,因此可以从时间序列分析的角度进行异常检测

(3)主机入侵检测

  • 工具框架:osquery(收集低层级OS Metics,可以使用基于SQL的接口进行查询)、Linux auditd
  • 可以利用第三方工具将上述两种工具集成到自动化业务流程框架中,如:Chef、Puppet、 Ansible、SaltStack、Kolide、doorman
  • Indicator Of Compromise

(4)网络入侵检测

  • 流量分析工具:tcpdump、Bro、Snort
  • 检测单位是流量
  • 提取网络流量元数据
    • 基于状态数据包检测(stateful packet inspection,SPI)
    • 工作在3、4层
    • 检查数据包的头尾而不触及数据包上下文
    • 保持先前收到的数据包的状态、从而能够将新接收到的数据包与先前的相关联
  • 检查网络流量内容
    • 深度包检测(Deep packet inspection、DPI)
    • 工作在应用层
    • Bro(可以检测HTTP请求POST的字符串,从而可以检测SQL注入和XSS)
    • 如果要在使用了TLS/SSL加密的环境中进行检测,只能在监测点取消加密

(5)Web应用程序入侵检测

  • 标准Web服务器以NCSA通用日志格式来生成日志

(6)异常检测方法——预测(监督学习)

  • 适用于一维实值度量序列
  • 思想:将预测与观测之间的偏差视为异常
  • ARIMA (autoregressive integrated moving average,自回归积分移动平均模型),通过使用正常的数据集,由序列与以前时间点自身之间的相关性(autocorrelation,自相关),来预测接下来的时间段内的状态。在预测相对准确的情况下(预测结果与实际观测到的非异常状态拟合度较高),如果观测值与预测结果之间的差值超过了某个threshold,则认为发生了异常。
  • 人工神经网络(Particularly,长短期记忆网络(long short-term memory,LSTM))
  • 注意:预测适合novelty detection(训练集中不包含异常数据),而不适合outlier detection(离群点检测,训练集中包含异常数据)。即适合训练集中没有异常数据,如果训练集包含异常数据的话,容易造成在训练过程中对预测数据的过拟合,从而使观测到的异常状态与预测值之间的差值变小,异常检测效果下降。

(7)统计度量

  • 绝对中位差(median absolute deviation,MAD):去查找一群数据中的离群值,表示为数列中位数的绝对偏差的中位数
    import numpy as np
import numpy as np
# Input data series
x = [1, 2, 3, 4, 5, 6]
# Calculate median absolute deviation
mad = np.median(np.abs(x - np.median(x)))
# MAD of x is 1.5
  • Grubbs的离群值检测
  • Goodness-of-fit——椭圆包络拟合(Elliptic envelope itting (covariance estimate itting))

(8)异常检测方法——无监督学习

  • 单类支持向量机
  • 孤立森林
    • 随机森林非常适合高维数据的异常检测,适合时间序列数据的实时异常检测
    • 思想:异常数据和正常数据相比,可以用较少的次数将其与正常数据分隔开
  • K均值

(9)异常检测方法——基于密度的方法

  • KNN
  • 局部离群因子(Local outlier factor,LOF)

(10)入侵检测面临的问题

  • 错误代价高
  • 语义鸿沟
  • 可解释性

2 恶意软件分析

(1)恶意软件类别划分依据:family

(2)可以用静态签名匹配来判断是否是恶意软件

(3)使用机器学习进行恶意软件分类的优势

  • 模糊匹配:给出了两个实体之间的相似程度,而不是简单的yes or no
  • 自动特征加权和选择
  • 适应性:适应不断变化的输入,跟踪恶意软件的进化

(4)使用机器学习进行恶意软件分类的挑战:特征工程

(5)二进制可执行文件的特征生成:

  • 静态方法:
    • 结构分析:查看程序的文件构成
    • 静态分析:查看程序的代码
  • 动态分析:运行程序分析(沙箱)
    • 调试
    • 动态插桩:通过挂钩正在运行的进程,并将自定义逻辑注入到应用程序中,从而修改应用程序或环境的运行时行为
      可用做特征的指标:

(6)程序请求权限

  • 系统调用
  • 操作码n-gram(一个包含其它特征的序列)
  • 网络行为
  • logcat

(7)特征选择:

  • 单变量分析:迭代地对每个单独特征进行分析,在只考虑该特征的情况下,模型执行会有多好;从而可以得到对特征好坏的评估
  • 递归特征消除:从完整的特征集开始,分析特征的排除对模型情况的影响
  • 潜在特征值表示:奇异值分解(SVD)、主成分分析(PCA)
  • 特定模型中通过特征权重减小或消除某些特征对模型的影响

3 网络流量分析

(1)无监督特征学习:指的是从原始数据自动生成特征,不同于无监督学习

(2)TSL/SSL数据包可以被解密

(3)攻击分为被动攻击和主动攻击

  • 被动攻击:不会启动与网络中节点的通信,也不会与网络数据交互或修- 改网络数据;而是进行信息收集和侦察活动。
  • 主动攻击
    • 漏洞:用过远程服务器发送的命令,可以使用基于机器学习模糊匹配来检测
    • 欺骗:DNS欺骗、ARP欺骗
    • 横向移动
    • 拒绝服务

(4)C&C服务器控制僵尸网络,C&C服务器的体系结构如下:

  • 星形/集中式网络
  • 多重网络:解决了a中的单点故障、可以缓和物理距离带来的问题
  • 分层网络:为了解决指令必须集中发布的问题
  • 随机P2P网络:僵尸网络管理员可以向僵尸网络中的任何一个节点发布指令,然后指令在网络中以多点传送的方式进行传播

(4)使用NSLKDD数据金构建网络攻击分类预测模型

  • 数据由TCPDump产生有标记的数据集,包含38种攻击类型,只有24种在训练集中出现,攻击属于下面四大类:
    • dos:拒绝服务
    • r2l:来自远程服务器的未授权的访问
    • u2r:提权尝试
    • probe:探测性暴力破解攻击
  • 我们的任务是设计一个通用的分类器,将数据分为五类:4类攻击+良性
  • 类不平衡问题:训练集中属于r2l和u2l的数据占比非常少,因此在测试集中对这两类数据的分类效果极差,由于训练集中benign数据占比最大,因此这两类数据大部分都被预测为benign数据。
  • 处理类不平衡的方法:
    • 欠采样:在占比较大的数据中进行采样,选取一部分进行使用,而不是用全部的数据集
    • 过采样:为占比较少的数据类智能合成数据点
    • 流行的做法是先过采样,再欠采样
发布了38 篇原创文章 · 获赞 18 · 访问量 6066

猜你喜欢

转载自blog.csdn.net/Sc0fie1d/article/details/104150511