【论文阅读】NoDoze:使用自动来源分类对抗威胁警报疲劳(NDSS-2019)

NODOZE: Combatting Threat Alert Fatigue with Automated Provenance Triage

伊利诺伊大学芝加哥分校
Hassan W U, Guo S, Li D, et al. Nodoze: Combatting threat alert fatigue with automated provenance triage[C]//network and distributed systems security symposium. 2019.

目录

  • 0. 摘要
  • 1. 引言
  • 2. 背景和动机
    • A. 攻击实例
    • B. 现有工具的局限性
    • C. 目标
  • 3. NODOZE 概述和方法
  • 4. 威胁模型和假设
  • 5. 问题定义
    • A. 定义
    • B. 问题描述
  • 6. 算法
    • A. 道路地图
    • B. 异常分数传播
    • C. IN 和 OUT 分数计算
    • D. 异常评分归一化
    • E. 路径融合
    • F. 决策
    • G. 时间复杂度
  • 7. 实现
    • A. 事件频率库
    • B. 警报分类和图构建
    • C. 可视化模块
  • 8. 评估


0. 摘要

  威胁警报疲劳”或信息过载问题:网络分析师会在大量错误警报的噪音中错过真正的攻击警报。

  NODOZE 首先生成警报事件的因果关系图。然后,它根据相关事件在企业中之前发生的频率,为依赖图中的每条边分配一个异常分数。然后使用一种新颖的网络扩散算法沿着图的相邻边缘传播这些分数,并生成用于分类的聚合异常分数。

  在美国 NEC 实验室部署并评估了 NODOZE,根据聚合异常分数始终将真实警报排名高于虚假警报,过引入异常分数的截止阈值,我们估计我们的系统将误报数量减少了 84%,每周为分析师节省 90 多个小时的调查时间。

  生成的警报依赖关系图比传统工具生成的警报依赖关系图小两个数量级,而不会牺牲调查所需的重要信息。系统平均运行时开销较低,可以与任何威胁检测软件一起部署。

1. 引言

  在许多情况下,如果调查人员只检查单个事件,则错误警报可能看起来与真实警报非常相似。例如,由于勒索软件和 ZIP 程序都在短时间内读写许多文件,因此仅检查单个进程行为的简单勒索软件检测器可以轻松地将 ZIP 归类为勒索软件。现有的 TDS 通常不会提供足够的有关警报的上下文信息。

  数据来源分析是威胁警报疲劳问题的一种可能补救措施。数据来源可以通过重建导致警报的事件(向后跟踪)和警报事件的后果(前向跟踪)链来提供有关生成的警报的上下文信息,以更好地将良性系统事件与恶意事件区分开来。但利用数据来源对警报进行分类有两个关键限制:1) 劳动密集——使用现有技术仍然需要网络分析师手动评估每个警报的来源数据,以消除误报,以及2) 依赖爆炸问题——由于现代系统的复杂性,当前的来源跟踪技术将包括错误的依赖,因为输出事件被假定为因果依赖于所有先前的输入事件。

  NODOZE 利用历史背景自动降低现有 TDS 的误报率。 NODOZE 通过解决上述现有起源分析技术的两个局限性来实现这一点:它是完全自动化的,并且可以在保持真实攻击场景的同时大大减少依赖图的大小。

  起源图中每个事件的可疑性应根据图中相邻事件的可疑性进行调整。由另一个可疑进程创建的进程比由良性进程创建的进程更可疑。

  我们的异常分数分配算法是一种没有训练阶段的无监督算法。为了给事件分配异常分数,NODOZE 构建了一个事件频率数据库,其中存储了企业中之前发生的所有事件的频率。在分配异常分数后,NODOZE 使用一种新颖的网络扩散算法来有效地传播和聚合警报依赖图的相邻边(事件)上的分数。最后,它为用于分类的候选警报生成一个聚合异常分数。

  为了解决警报调查过程中的依赖爆炸问题,我们提出了行为执行分区的概念。这个想法是根据正常和异常行为对程序执行进行分区,并生成真实警报的最异常依赖图。

  我们分别在 9K 和 4K 行 Java 代码中实现了 NODOZE 和事件频率数据库。在美国 NEC 实验室部署并评估了我们的系统。跨越 5 天的 10 亿个系统事件,生成了 364 个警报,包括 10 个 APT 攻击案例和 40 个最近的恶意软件模拟。NODOZE 通过将误报减少 84% 来提高现有 TDS 的准确性。

2. 背景和动机

  使用一个攻击示例来说明 NODOZE 作为警报分类系统的有效性和实用性,包括两个方面:1)过滤掉误报以减少警报疲劳,以及 2)使用依赖图简明地解释真实警报加快警报调查过程。

A. 攻击实例

  无知的工作人员下载了恶意软件,网络分析师下载诊断工具。二者皆产生了警报且无法区分。

  略……,作者旨在说明单从警报来看,真实恶意行为的警报和误报没有区别。

网络分析师为什么要从网上下载诊断工具?不都是跑现场吗?

B. 现有工具的局限性

  现有的来源追踪器与 TDS 结合用于警报分类和调查过程时会受到以下限制:

  • 警报爆炸和依赖人工:
  • 依赖爆炸:依赖性不准确主要是由长时间运行的进程引起的,这些进程在其生命周期内与许多主体/对象进行交互。现有方法将整个进程执行视为单个节点,以便所有输入/输出交互成为流程节点的边。这会导致相当大且不准确的图。

  考虑我们示例依赖图中的 Internet Explorer IExplorer.exe 顶点,如图 2a 所示。当网络分析师试图找到下载的恶意软件文件 (springs.7zip) 和诊断工具文件 (collect-info.ps1) 的祖先时,他们将无法确定哪个传入 IP/套接字连接顶点与恶意软件文件相关,以及哪个属于诊断工具文件。
  依赖爆炸问题的先前解决方案建议将长时间运行的流程的执行划分为自治“单元”,以便在输入和输出事件之间提供更精确的因果依赖关系。但是,这些系统需要最终用户参与和通过源代码检测、使用典型工作负载训练应用程序运行以及修改内核来更改系统。由于专有软件和许可协议,代码检测在企业中通常是不可能的。此外,这些系统仅针对 Linux 实现,它们的设计不适用于像 Microsoft Windows 这样的商用现成操作系统。最后,获取异构大型企业中的典型应用程序工作负载实际上是不可行的。

C. 目标

  • 警报减少:减少误报、漏报和不可操作的项目。
  • 简洁的上下文警报:生成的威胁警报依赖图应该简洁完整。
  • 通用性:应该独立于底层平台(例如 OS、VM 等)、应用程序和 TDS。
  • 实用性:应该不需要任何终端系统更改,并且应该可以部署在任何现有的 TDS 上。

3. NODOZE 概述和方法


  NODOZE 充当现有 TDS 的附加组件,以减少误报并提供生成的威胁警报的上下文解释。为了对警报进行分类,NODOZE 首先为生成的警报来源图中的每个事件分配一个异常分数。然后使用一种新颖的网络扩散算法来传播和聚合沿相邻事件的异常分数。最后,它为生成的警报生成一个聚合异常分数,用于分类。

  在图 2a 中,有两个威胁警报事件由 E1 和 E2 注释,并用虚线箭头显示。单独查看这些警报事件,它们看起来很相似(都与重要的内部主机建立套接字连接)。然而,当我们使用后向和前向追踪来考虑每个警报事件的祖先和后代时,我们可以看到每个警报事件的行为都明显不同。

  为了确定威胁警报是真正的攻击还是误报,NODOZE 使用异常分数来量化过去发生的相关事件的“罕见性”或转移概率。例如,警报事件 E1 的后代,即 dropper.exe → y.y.y.y:445 由几个更罕见的事件组成,即具有较低的转换概率。警报事件 E2 的祖先包含诊断事件,例如定期执行的 Tasklist 和 Ipconfig,以检查企业中计算机的健康状况。因此,E2 的总异常分数将大大低于 E2 的异常分数。

  一旦 NODOZE 为警报事件分配了威胁分数,它从具有最高异常分数的依赖图中提取子图,真实警报 E1 的依赖图如图 2b 所示。虽然 IExplorer.exe 收到了多个套接字连接,但 NODOZE 只选择了罕见的 IP 地址 a.a.a.a(从中下载恶意软件的恶意网站)和 b.b.b.b,因为它们的异常分数高于其他正常套接字连接。

4. 威胁模型和假设

  • 假设攻击者无法操纵或删除出处记录,即始终保持日志完整性
  • 不考虑使用不通过系统调用接口的隐式流(侧通道)执行的攻击
  • 不跟踪利用内核漏洞的攻击
  • 假设底层 TDS 的检测率是完整的
  • 假设至少有一个事件在 alert 的祖先或后代中是异常的,将其归类为真正的攻击
  • 不考虑模仿攻击

5. 问题定义

A. 定义

  • 依赖事件:经典三元组,主体客体和关系
  • 依赖路径:依赖事件 Ea 的依赖路径 P 表示导致 Ea 的事件链和由 Ea 引发的事件链(即事件本身及其前后因果事件)。分为数据依赖和控制依赖
    在这里插入图片描述在这里插入图片描述
  • 依赖图:
  • 真正的警报依赖关系图:进行执行分区划分后的图,剔除掉了错误依赖。

B. 问题描述

  给定 n 个警报事件列表 E 1 , E 2 , . . . , E n {E_1, E_2, ..., E_n} E1,E2,...,En 和用户指定的阈值参数 τ l τ_l τl τ d τ_d τd,我们的目标是根据它们的异常分数对这些警报进行排名,并过滤掉所有异常分数小于 τ d τ_d τd 的警报作为误报。

6. 算法

A. 道路地图

  分配异常分数的一种简单方法是使用过去发生的系统事件的频率,这样组织中罕见的事件被认为更异常。然而,有时这种假设可能不成立,因为攻击可能涉及经常发生的事件。因此,我们的目标是定义异常分数,而不是仅基于依赖路径中的单个事件,而是基于整个路径。

B. 异常分数传播

  给定警报事件 E α E_α Eα 的完整依赖图 G,我们找到 E α E_α Eα 的所有长度为 τ l τ_l τl 的依赖路径。为此,我们从警报事件开始以前后方式运行深度优先遍历,然后将这些后向和前向路径组合起来生成统一路径,以便每个统一路径都包含警报的祖先和后代因果事件。
  为了计算异常分数,我们首先为给定的警报事件依赖图 G 构造一个 N × N 转移概率矩阵 M,其中 N 是 G 中的顶点总数。每个矩阵条目 Mε 由以下等式计算: M ε = p r o b a b i l i t y ( ε ) = ∣ F r e q ( ε ) ∣ ∣ F r e q s r c r e l ( ε ) ∣ M_{\varepsilon}=probability(\varepsilon)=\frac{|Freq(\varepsilon)|}{|Freqsrc_rel(\varepsilon)|} Mε=probability(ε)=Freqsrcrel(ε)Freq(ε),其中 F r e q Freq Freq 为发生次数。为了统计过去发生的事件的频率,我们建立了一个事件频率数据库,定期存储和更新整个企业的事件频率。

  给定事件的转移概率告诉我们特定来源流向特定目的地的概率;然而,我们最终将通过图传播这个值,但是当我们这样做时,我们想要考虑从源流出的数据总量,以及流入目的地的数据总量。我们计算依赖图 G 中每个实体的 IN 和 OUT 分数向量。

最后,正则性得分 R S ( P ) RS(P) RS(P) 计算如下: R S ( P ) = ∏ i = 1 l I N ( S R C i ) × M ( ε i ) × O U T ( D S T i ) RS(P)=\prod\limits_{i=1}^{l}IN(SRC_i)\times M(\varepsilon_i)\times OUT(DST_i) RS(P)=i=1lIN(SRCi)×M(εi)×OUT(DSTi)异常分数为: A S ( P ) = 1 − R S ( P ) AS(P)=1-RS(P) AS(P)=1RS(P)

在这里插入图片描述

C. IN 和 OUT 分数计算

  我们根据每个实体的类型为每个实体填充 IN 和 OUT 分数。

  • 进程实体:划分很多个时间窗口,如果时间窗口内没有新边加入,则视为稳定窗口,一个实体的IN分数和OUT分数均为稳定窗口与窗口总数之比。
    I N ( v ) = ∣ T t o ′ ∣ ∣ T ∣ O U T ( v ) = ∣ T f r o m ′ ∣ ∣ T ∣ IN(v)=\frac{|T_{to}^{\prime}|}{|T|}\quad\quad OUT(v)=\frac{|T_{from}^{\prime}|}{|T|}\quad IN(v)=TTtoOUT(v)=TTfrom
  • 数据实体:数据实体主要是文件和网络链接。进一步细分为三类:临时文件、可执行文件和已知的恶意扩展。临时文件给很高的分,用先验知识给可执行文件、恶意扩展、恶意ip低分,其余实体0.5分

D. 异常评分归一化

由于单纯的叠加会导致长路径的分数高于短路径,所以引入一个衰减因子用以归一化。
R S ( P ) = ∏ i = 1 l I N ( S R C i ) × M ( ε i ) × O U T ( D S T i ) × α RS(P)=\prod\limits_{i=1}^lIN(SRC_i)\times M(\varepsilon_i)\times OUT(DST_i)\times\alpha RS(P)=i=1lIN(SRCi)×M(εi)×OUT(DSTi)×α

E. 路径融合

该步骤试图通过只包含具有高异常分数的依赖路径来构建一个准确的真正警报依赖图,通过合并,尽量减少路径的数量,进一步保证靠前的路径构建出来的子图包含大部分恶意行为。
在这里插入图片描述

F. 决策

NODOZE的主要目标是对给定时间线中的所有警报进行排序。然而,我们也可以计算一个决策或截断阈值τd,它可以用来确定候选威胁警报是真攻击还是高置信度的假警报。

G. 时间复杂度

每次根据给定警报进行两次固定深度的DFS,一次向前一次向后。时间复杂度为 O ( ∣ b D ∣ \mathcal{O}(|b^{D}| O(bD,取决于节点的分支数和搜索的深度。

7. 实现

Windows ETW + Linux Auditd、PostgreSQL database
a)事件频率数据库生成器,b)警报分类和图形生成器,以及c)可视化模块

A. 事件频率库

  • 进程实体:进程路径、命令行参数、组标识gid
  • 文件实体:抽象文件路径(删除特定用户信息)
  • socket实体:保留外部地址,抽象内部地址

B. 警报分类和图构建

  • 合并瞬时进程:有些进程的存在意义仅为唤起另一进程,这种情况将二者合并
  • 合并相同套接字:由同一进程发起的相同地址的套接字合并

C. 可视化模块

使用GraphViz生成点格式的因果图,然后将点文件转换为html格式

8. 评估

准确率:设定当设置阈值使得决策为100%检测真阳性时,假阳性为16%。换句话说,误报减少84%。
在这里插入图片描述
在这里插入图片描述

依赖图减少程度:减少两个数量级
在这里插入图片描述

节省多少人工时间:假设每个假警报花20分钟,过滤掉84%,约90个小时。
运行开销:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/69822.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023/8/11题解

时间限制: 1000MS 内存限制: 65536KB 解题思路 建树 模拟 &#xff0c;复杂在于建树&#xff0c;此处从题目需求可知需要按层建树&#xff0c;所以需要队列模拟&#xff0c;查找比较容易就是普通的深搜 参考代码 #include<bits/stdc.h> using namespace std; vector<…

Windows 环境下 Python3 离线安装 cryptography 失败

发布Flask Web项目时&#xff0c;报错缺少Cryptography&#xff0c;于是尝试重新安装该库&#xff0c;但本机没有网络&#xff0c;只支持手动离线安装&#xff0c;尝试了pip、setup.py两种方式安装&#xff0c;结果都报错。。最后使用将安装包拷贝至本机(在其他电脑上安装的sit…

【算法挨揍日记】day01——双指针算法_移动零、 复写零

283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 …

gitee分支合并

合并dev分支到master&#xff08;合并到主分支&#xff09; git checkout master git merge dev //这里的dev表示你的分支名称 git push //推送到远程仓库 效果如下图 不报错就表示推送成功了&#xff0c;希望能帮助各位小伙伴

DevOps最佳实践和工具在本地环境中的概述

引言 最近&#xff0c;我进行了一次网上搜索&#xff0c;以寻找DevOps的概述&#xff0c;尽管有大量的DevOps工具和实践&#xff0c;但我无法找到一个综合的概述。因此&#xff0c;我开始了对DevOps生态系统和最佳实践的梳理&#xff0c;以创建一个整体视图,方便后续研究实践 C…

5.1 web浏览安全

数据参考&#xff1a;CISP官方 目录 Web应用基础浏览器所面临的安全威胁养成良好的Web浏览安全意识如何安全使用浏览器 一、Web应用基础 1、Web应用的基本概念 Web ( World wide Web) 也称为万维网 脱离单机Web应用在互联网上占据了及其重要的地位Web应用的发展&#xf…

K8s环境下监控告警平台搭建及配置

Promethues是可以单机搭建的&#xff0c;参考prometheus入门[1] 本文是就PromethuesGrafana在K8s环境下的搭建及配置 Prometheus度量指标监控平台简介 启动minikube minikube start 安装helm 使用Helm Chart 安装 Prometheus Operator: helm install prometheus-operator stabl…

AI:01-基于机器学习的深度学习的玫瑰花种类的识别

文章目录 一、数据集介绍二、数据预处理三、模型构建四、模型训练五、模型评估六、模型训练七、模型评估八、总结深度学习技术在图像识别领域有着广泛的应用,其中一种应用就是玫瑰花种类的识别。在本文中,我们将介绍如何使用机器学习和深度学习技术来实现玫瑰花种类的识别,并…

备忘录模式(C++)

定义 在不破坏封装性的前提下&#xff0c;捕获一-个对象的内部状态&#xff0c;并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 应用场景 ➢在软件构建过程中&#xff0c;某些对象的状态在转换过程中&#xff0c;可能由于某种需要&#xff0c;要…

c++遍历当前windows目录

前言 设置vs的高级属性为使用多字节字符集&#xff0c;不然会报char类型的实参与LPCWSTR类型的形参类型不兼容的错误 代码 #include <iostream> #include <cstring> #include <windows.h>void listFiles(const char* dir);int main() {using namespace st…

【服务平台】Rancher运行和管理Docker和Kubernetes,提供管理生产中的容器所需的整个软件堆栈

Rancher是一个开源软件平台&#xff0c;使组织能够在生产中运行和管理Docker和Kubernetes。使用Rancher&#xff0c;组织不再需要使用一套独特的开源技术从头开始构建容器服务平台。Rancher提供了管理生产中的容器所需的整个软件堆栈。  完整软件堆栈 Rancher是供采用容器的团…

SpringBoot案例-部门管理-删除

目录 查看页面原型&#xff0c;明确需求 页面原型 需求 阅读接口文档 思路分析 功能接口开发 控制层&#xff08;Controllre类&#xff09; 业务层&#xff08;Service类&#xff09; 持久层&#xff08;Mapper类&#xff09; 接口测试 前后端联调 查看页面原型&a…

NIDS网络威胁检测系统-Golang

使用技术&#xff1a; Golang Gin框架 前端三件套 演示画面&#xff1a; 可以部署在linux和window上 目前已在Kali2021和Window10上进行测试成功

【瑞吉外卖】Linux学习

Linux常用命令 Linux命令初体验 Linux的命令都是由一个或几个单词的缩写构成的 命令对应英文作用lslist查看当前目录下的内容pwdprint work directory查看当前所在目录cd [目录名]change directory切换目录touch [文件名]touch如果文件不存在&#xff0c;新建文件mkdir [目录…

Redis_哨兵模式

9. 哨兵模式 9.1 简介 当主库宕机&#xff0c;在从库中选择一个&#xff0c;切换为主库。 问题: 主库是否真正宕机?哪一个从库可以作为主库使用?如何实现将新的主库的信息通过给从库和客户端&#xff1f; 9.2 基本流程 哨兵主要任务&#xff1a; 监控选择主库通知 会有…

JavaWeb-Servlet服务连接器(一)

目录 1.Servlet生命周期 2.Servlet的配置 3.Servlet的常用方法 4.Servlet体系结构 5.HTTP请求报文 6.HTTP响应报文 1.Servlet生命周期 Servlet&#xff08;Server Applet&#xff09;是Java Servlet的简称。其主要的功能是交互式地浏览和修改数据&#xff0c;生成一些动态…

python爬虫——爬虫伪装和反“反爬”

前言 爬虫伪装和反“反爬”是在爬虫领域中非常重要的话题。伪装可以让你的爬虫看起来更像普通的浏览器或者应用程序&#xff0c;从而减少被服务器封禁的风险&#xff1b;反“反爬”则是应对服务器加强的反爬虫机制。下面将详细介绍一些常见的伪装和反反爬技巧&#xff0c;并提…

92. 反转链表 II

92. 反转链表 II 题目-中等难度示例1. 获取头 反转中间 获取尾 -> 拼接2. 链表转换列表 -> 计算 -> 转换回链表 题目-中等难度 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点…

【Hilog】鸿蒙系统日志源码分析

【Hilog】鸿蒙系统日志源码分析 Hilog采用C/S结构&#xff0c;Hilogd作为服务端提供日志功能。Client端通过API调用&#xff08;最终通过socket通讯&#xff09;与HiLogd打交道。简易Block图如下。 这里主要分析一下。Hilog的读、写、压缩落盘&#xff0c;以及higlog与android…

图像处理技巧形态学滤波之腐蚀操作

1. 引言 欢迎回来&#xff0c;我的图像处理爱好者们&#xff01;今天&#xff0c;让我们深入研究图像处理领域中的形态学计算。这些非线性的图像处理技术允许我们操纵图像中对象的形状和结构。在本系列中&#xff0c;我们将依次介绍四种基本的形态学操作&#xff1a;腐蚀、膨胀…