【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)

HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows

S&P-2019
伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校、石溪大学
Milajerdi S M, Gjomemo R, Eshete B, et al. Holmes: real-time apt detection through correlation of suspicious information flows[C]//2019 IEEE Symposium on Security and Privacy (SP). IEEE, 2019: 1137-1152.


目录

  • 0. 摘要
  • 1. 引言
  • 2. 一个实例
  • 3. 方法概述
  • 4. 系统设计
    • A. 数据收集和表示
    • B. TTP规范
    • C. HSG构造
    • D. 伪依赖避免
    • E. 减少噪声
    • F. 信号关联与检测


0. 摘要

  在本文中,我们介绍了 HOLMES,这是一种实现高级和持续性威胁 (APT) 检测新方法的系统。HOLMES 旨在产生一个检测信号,表明存在一组协调的活动,这些活动是 APT 活动的一部分。

  • 一套使检测信号稳健可靠的技术
  • 有效地利用了攻击者活动期间出现的可疑信息流之间的相关性
  • 生成一个高级图表,实时总结攻击者的行为



1. 引言

  典型的 APT 攻击包括成功渗透(例如,驱动式下载或鱼叉式网络钓鱼攻击)、侦察、命令和控制 (C&C) 通信(有时使用远程访问木马 (RAT))、特权升级(通过利用漏洞),通过网络横向移动,泄露机密信息等。简而言之,杀伤链为理解和映射 APT 参与者的动机、目标和行动提供了参考。

APT生命周期
现有的 IDS/IPS 系统缺乏低级警报的组合能力,不能揭示APT活动的高级场景。

现有的警报关联系统如 Splunk、LogRhythm 和 IBM QRadar等:

  • 缺乏对警报和入侵实例之间复杂关系的理解
  • 不具备关联长时间发生在不同主机上的攻击步骤所需的精度

问题陈述:
  本文基于来自企业的主机日志和 IPS 警报,实时检测正在进行的 APT 活动(包括长时间跨多个主机的许多不同步骤),并向分析师提供攻击场景的高级解释。主要有三个方面:

  • 警报生成:从主机的低级事件中搞笑地生成低噪声的警报
  • 警报关联:将多个警报组合成一个代表APT活动的信号(signal)
  • 高级场景:直观、高层次地总结攻击便于分析师快速掌握攻击信息

方法和贡献:
  HOLMES 根据主机审计数据(例如,Linux auditd 或 Windows ETW 数据),生成一个检测信号,该信号描绘了正在进行的 APT 活动的各个阶段。在较高层面上,HOLMES 新颖地使用 APT 杀伤链作为关键参考,解决了 APT 检测的上述三个方面所涉及的技术挑战。

  • 首先,HOLMES从日志中生成语义上接近APT步骤(TTPs)的警报,然后映射到杀伤链模型。
  • 第二,利用低级实体(进程、文件)之间的信息流作为警报关联的基础,因为APT活动的初始妥协点一般是文件和进程
  • 第三,开发了高级场景图(HSG),图的节点代表TTPs,边代表实体之间的信息流。通过祖先覆盖、降噪技术和优先级排名来精简高级场景图和减少误报。
  • 最后,HSG 提供了非常紧凑直观的活动摘要。10M的审计日志中得到一个仅有16个节点的HSG

评估:
  使用DRAPA-TC作为数据集,对九种真实场景进行评估,实现高精度和召回率。




2. 一个实例

溯源图攻击实例
  图中的节点表示系统实体,例如进程(表示为矩形)、文件(椭圆形)、网络连接(菱形)、内存对象(五边形)和用户(星形)。边对应于系统调用,并以信息流和/或因果关系的方向为导向。

我们的溯源图已使用参考文献 [23] 中描述的(优化的)节点版本控制技术呈现为无环的。
[23] Md Nahid Hossain, Junao Wang, R. Sekar, and Scott Stoller. Dependence preserving data compaction for scalable forensic analysis. In
USENIX Security Symposium. USENIX Association, 2018.

  • 初步妥协:攻击者通过80端口套接字(S1)上载了恶意载荷(playload),利用Nginx使内存区域(M1)变得可执行。接下来,攻击者通过使用反射自加载漏洞获得对 Nginx 进程的控制
  • C&C通信:受损的 Nginx 进程与 C&C 服务器建立连接 (S2) 以接收来自攻击者的命令
  • 提权。攻击者利用现有漏洞将 Nginx 的权限提升至root(U1)
  • 内部发现:攻击者发出 whoami (P5) 和 hostname (P6) 等命令(红队使用这些命令来模拟对机密/专有数据的访问)。攻击者还读取用户名和密码哈希值(F2、F3、F4)并将所有这些信息写入一个临时文件
  • 外泄:攻击者将包含收集到的信息的文件传输到他的的机器 (S3)
  • 清扫:攻击者删除临时文件 (F5) 以清除所有攻击残余

这个实例揭示了面临的挑战:

  • 隐形攻击:攻击者利用内存和合法进程实施攻击,整个活动与系统行为重合且不会留下可见痕迹如文件。
  • 大海捞针:检测罕见攻击需要高误报为代价,从大量虚警中过滤出真正的攻击具有挑战性
  • 实时检测:几秒钟内

尽管攻击无缝融入良性后台活动,但其有两个明显的攻击表征:

  • 攻击步骤与部分APT阶段对应
  • 攻击活动通过信息流连接

因此,利用信息流串联步骤,再与APT行为做对比,使得检测这种隐蔽攻击成为可能。




3. 方法概述

  我们的方法背后的核心见解是,尽管具体的攻击步骤在不同的 APT 之间可能有很大差异,但高级 APT 行为通常符合杀伤链。大多数 APT 都包含这些步骤的一个子集,且这些步骤存在信息流或因果关系。例如,数据外泄依赖于内部侦察来收集敏感数据。
  因此,关键在于检测工作是否可以基于APT最重要的高级行为步骤和步骤间的依赖性。然而这么做的难题在于:低级审计日志和高级杀伤链视图(攻击者意图、目标、能力)之间的语义鸿沟。

弥补语义鸿沟:
  构建了一个中间层,如图 3 所示。到该中间层的映射基于 MITRE 的 ATT&CK 框架,该框架描述了近 200 种定义为在公开环境(wild)观察到的战术、技术和程序 (TTP) 的行为模式。每个 TTP 都定义了一种实现特定APT步骤的可能方式。这些较低级别的操作更接近审计日志的抽象级别,因此可以根据溯源图中的节点和边来描述 TTP。

技术挑战:

  为了实现上述方法,主要挑战是:低级事件流与TTP的有效匹配、检测攻击步骤之间的相关性、减少误报

  • 为了进行高效匹配:溯源图放内存中、编码了实体之间的额信息流依赖关系
  • 为了检测步骤间相关性:高级场景图作为中间件
  • 为了减少误报:学习可能产生误报的良性模式、为节点和路径分配权重用以对进行HSG排名



4. 系统设计

  对操作系统内核、审计系统及其产生的日志的攻击不在我们的威胁模型的范围内。假设系统一开始是良性的,即最初的攻击必须来自企业外部,使用远程网络访问、可移动存储等方式。
在这里插入图片描述

A. 数据收集和表示

  对于Linux,数据来源是auditd;对于BSD,数据来源是dtrace;对于Windows,数据来源是ETW。这些原始审计数据被收集并处理成与操作系统无关的格式,用作 HOLMES 的输入。
  数据表示为溯源图,但是经过版本化处理。如果该边更改了节点的现有依赖项(即祖先节点集),则在添加传入边之前创建节点的新版本。这样可以在不更改分析结果的情况下删除审计日志中的大部分事件,而且,这个版本图是无环的,可以简化很多图算法。

大概是指:如果出现环(即一个进程的子孙反过来影响了自己,那自己既是自己的祖先又是自己的子孙),此时就为这个节点创建一个新的版本,既方便删除子树不影响别的部分,无环又可以简化图搜索。

此外,溯源图存于内存,根据之前的工作进行了优化存储,每个事件仅需要不到五个字节。

B. TTP规范

  TTP 规范提供了低级审计事件和高级 APT 步骤之间的映射。依靠两种主要技术将审计日志数据提升到这个中间层:(a) 以溯源图的形式对安全相关事件进行操作系统无关的表示,以及 (b) 在涉及的实体之间使用信息流依赖关联TTP。 使用信息流依赖性对于检测通过使用良性系统进程来实现其目标来隐藏其活动的隐秘 APT 至关重要。

  除了指定 TTP 的步骤之外,我们还需要捕获其先决条件(prerequisites)。先决条件采用因果关系和 APT 阶段之间的信息流的形式,不仅有助于减少误报,还有助于理解 TTP 在更大范围的 APT 活动中的作用。

  TTP 规则规范的示例如表 4 所示,

  • 第一列表示 APT 阶段
  • 第二列表示关联的 TTP 名称和 TTP 中涉及的实体
  • 第三列指定与 TTP 关联的事件系列
  • 第四列中显示了该系列中包含的一些特定事件(不是规则的一部分,只定义一次,在规则中重复使用)
  • 第五列表示与每个 TTP 关联的严重性级别,用于警报排名。根据常见攻击枚举分类而得到,支持定制。还支持权重定制机制。
  • 最后一列指定了 TTP 规则匹配的先决条件。先决条件可以捕获两个 TTP 中涉及的实体之间的关系,例如进程上的父子关系,或文件之间的信息流。使用先决条件,我们能够修剪许多误报,即类似于 TTP 的良性活动。

  先决条件可以指定匹配TTP的参数,例如第一行 U n t r u s t e d R e a d T T P Untrusted Read TTP UntrustedReadTTP 的套接字参数S。先决条件还可以包含先前匹配的 TTP 及其参数的条件。例如, M a k e M e m E x e c ( P , M ) T T P Make Mem Exec(P,M) TTP MakeMemExec(P,M)TTP 的先决条件列包含一个条件 ∃ U n t r u s t e d R e a d ( ? , P ′ ) ∃ Untrusted Read(?, P' ) UntrustedRead(?,P)。仅当不可信读取 TTP 已与进程 P ′ P' P 早先匹配,并且两个 TTP 中涉及的进程的 p a t h _ f a c t o r path\_factor path_factor 小于指定阈值时,才满足此先决条件。

C. HSG构造

  图 5 说明了运行示例的 HSG,其中椭圆表示匹配的TTP,椭圆内的是溯源图实体,图的边代表不同TTP之间的先决条件。HSG 的构造主要由先决条件驱动:如果满足所有先决条件,则匹配 TTP 并将其添加到 HSG。这使得HSG总能保持一个较少数量的TTP,进一步使实时进行复杂分析成为可能。
在这里插入图片描述

D. 伪依赖避免

  伪依赖指的是对攻击者活动的无趣和/或不相关的依赖。例如,在图 2 中,进程 nginx (P2) 写入文件 /usr/log/nginx-error.log,随后 cat 进程读取该文件。然而,即使 cat 和日志文件之间存在依赖关系,但 cat 与攻击无关,而是通过 ssh 独立调用的。更一般地说,考虑与攻击活动带来的进程有关系的良性行为。例如,一个日志轮换系统,它复制一个日志文件,其中包含攻击者进程产生的部分条目。此类进程虽然代表良性后台活动,但会在来源图中被标记为依赖于攻击者的进程。如果不及时删除这些虚假的依赖关系,可能会出现依赖爆炸,从而极大地增加 HSG 的规模。

  考虑两个实体和它们之间的路径,在溯源图中指示它们之间的信息。确定此流代表强信息流还是弱信息流等同于确定流中的实体是否共享受损的祖先。如果它们共享受感染的祖先,则它们是攻击者活动的一部分,并且它们之间存在很强的依赖性,必须对其进行优先级排序。否则,我们认为依赖性很弱,并在我们的分析中不再强调它。

  为了将这个方法推广到多个进程的情况,我们引入以下信息流路径 f f f 上所有进程的祖先覆盖 A C ( f ) AC(f) AC(f) 的概念:
∀ p ∈ f ∃ a ∈ A C ( f ) a = p or  a is an ancestor of  p \forall p\in f\exists a\in AC(f)\;a=p\;\text{or }a\text{ is an ancestor of }p pfaAC(f)a=por a is an ancestor of p
A C m i n ( f ) AC_{min}(f) ACmin(f) 表示攻击者完全控制信息流路径 f f f 必须妥协的最少祖先数量。例如,再次考虑从攻击者控制的 nginx 进程到 cat 进程的流程。由于这两个进程没有共同的祖先,它们之间路径的最小祖先覆盖大小等于 2。
定义路径因子 p a t h f a c t o r ( N 1 , N 2 ) path f actor(N1, N2) pathfactor(N1,N2),描述了攻击者对N1到N2流的控制程度,为所以路径的最小祖先覆盖的最小值。

E. 减少噪声

良性事件会与TTP匹配引起噪声,利用两个概念来消除。

良性先决条件:对于每个进程,学习系统在良性环境中运行时频繁触发的先决条件。在运行时,当触发的 TTP 的先决条件与训练期间遇到的先决条件匹配时,忽略该匹配

良性数据流量:为了解决白名单会漏报的问题,同时监控传输的数据量,如果超过阈值,视为攻击行为。

F. 信号关联与检测

定义威胁元组为一个七元组,分别对应七个比价重要的阶段,每个阶段具有不同的TTP选项,每个选项对应不同的严重等级。用HSG去匹配这个七元组,部分阶段可以缺省。
在这里插入图片描述
在这里插入图片描述
为了对HSG进行排名,首先利用通用漏洞评分系统(CVSS)将元组转换为数值
在这里插入图片描述
然后算一个总体评分
∏ i = 1 n ( S i ) w i ≥ τ \displaystyle\prod_{i=1}^n(S_i)^{w_i}\geq\tau i=1n(Si)wiτ缺省的阶段权重设为1

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞天使-kubeadm安装一主一从集群

文章目录 安装前准备安装前准备配置yum源等安装前准备docker安装 安装kubeadm配置kubeadm验证集群 参考链接 安装前准备 cat >> /etc/hosts <<EOF 192.168.100.30 k8s-01 192.168.100.31 k8s-02 EOF hostnamectl set-hostname k8s-01 #所有机器按照要求修改 ho…

IDEA创建Mybatis格式XML文件

设置位置&#xff1a;File | Settings | Editor | File and Code Templates 选择Files&#xff0c;点击号 Name中输入xml模板名&#xff08;名称自行决定&#xff09;&#xff0c;后缀名extension输入xml&#xff08;固定&#xff09; 内容处输入Mybatis的xml文件模板内容&…

【Python爬虫案例】爬取大麦网任意城市的近期演出!

老规矩&#xff0c;先上结果&#xff1a; 含10个字段&#xff1a; 页码&#xff0c;演出标题&#xff0c;链接地址&#xff0c;演出时间&#xff0c;演出城市&#xff0c;演出地点&#xff0c;售价&#xff0c;演出类别&#xff0c;演出子类别&#xff0c;售票状态。 代码演示…

稳定扩散ControlNet v1.1 权威指南

ControlNet 是一种稳定扩散模型&#xff0c;可让你从参考图像中复制构图或人体姿势。 经验丰富的稳定扩散用户知道生成想要的确切成分有多难。图像有点随机。你所能做的就是玩数字游戏&#xff1a;生成大量图像并选择你喜欢的图片。 借助 ControlNet&#xff0c;稳定扩散用户…

Android Studio 接入OpenCV最简单的例子 : 实现灰度图效果

1. 前言 上文 我们在Windows电脑上实现了人脸功能&#xff0c;接下来我们要把人脸识别的功能移植到Android上。 那么首先第一步&#xff0c;就是要创建一个Native的Android项目&#xff0c;并且配置好OpenGL&#xff0c;并能够调用成功。 这里我们使用的是openCV-4.8.0&#x…

(三)Linux中卸载docker(非常详细)

docker 卸载 使用yum安装docker 如需卸载docker可以按下面步骤操作&#xff1a; 1、停止docker服务 systemctl stop docker 2、查看yum安装的docker文件包 yum list installed |grep docker 3、查看docker相关的rpm源文件 rpm -qa |grep docker 4、删除所有安装的docke…

redis 哨兵模式

目录 一、什么是哨兵模式 二、配置哨兵 三、启动哨兵 四、验证哨兵 五、复制延时 六、选举策略 一、什么是哨兵模式 哨兵也叫 sentinel&#xff0c;它的作用是能够在后台监控主机是否故障&#xff0c;如果故障了根据投票数自动将从库转换为主库。 二、配置哨兵 首先停止…

【后端速成 Vue】第一个 Vue 程序

1、为什么要学习 Vue&#xff1f; 为什么使用 Vue? 回想之前&#xff0c;前后端交互的时候&#xff0c;前端收到后端响应的数据&#xff0c;接着将数据渲染到页面上&#xff0c;之前使用的是 JavaScript 或者 基于 JavaScript 的 Jquery&#xff0c;但是这两个用起来还是不太…

使用在 Web 浏览器中运行的 VSCode 实现 ROS2 测程法

一、说明 Hadabot是软件工程师学习ROS2和机器人技术的机器人套件。我们距离Hadabot套件的测试版还有一周左右的时间。我们将在本文末尾披露有关如何注册的更多信息。 新的Hadabot套件完全支持ROS2。除了硬件套件外&#xff0c;Hadabot软件环境将主要基于Web浏览器&#xff0c;以…

基于JJWT理解JWT,JWS,JWE

JWT &#xff0c; 全写JSON Web Token, 是开放的行业标准RFC7591&#xff0c;用来实现端到端安全验证. 从开发者理解的角度来说&#xff1a; JWT 是一个定义传递信息的标准JWT 的Token是一个Base64编码的字符串&#xff0c; 类似 eyJhbGciOiJIUzI1NyJ9.eyJzdWIiOiJvc2NhciJ9.…

HTTP和HTTPS的区别及通信原理

文章目录 HTTP特性http解决无状态的问题&#x1f36a;cookiesessiontoken 常见状态码报文和字段方法 HTTPS补充知识常见的加密方式数字摘要 &#xff08;数字指纹&#xff09; && 数字签名 加密过程 HTTP 何为http&#xff1f; http是超文本传输协议&#xff0c;Hyper…

linux的http服务

Web通信基本概念 基于B/S&#xff08;Browser/Server&#xff09;架构的网页服务 服务端提供网页 浏览器下载并显示网页 Hyper Text Markup Lanuage,超文本标记语言 Hyper Text Transfer Protocol&#xff0c;超文本传输协议 虚拟机A&#xff1a;构建基本的Web服务 [root…

Anaconda, Python, Jupyter和PyCharm介绍

目录 1 Anaconda, Python, Jupyter和PyCharm介绍 2 macOS通过Anaconda安装Python, Jupyter和PyCharm 3 使用终端创建虚拟环境并安装PyTorch 4 安装PyCharm并导入Anaconda虚拟环境 5 Windows操作系统下Anaconda与PyCharm安装 6 通过 Anaconda Navigator 创建 TensorFlow 虚…

Kafka 学习笔记

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 Kafka 学习笔记1、消息队列 MQ2、Kafka 下载安装2.1、Zookeeper 方式启动2.2、KRaft 协议启动2.3、Kafka 集群搭建 3、Kafka 之生产者3.1、Java 生产者 API3.2、Kafka 生产者生产分区3…

【jsthreeJS】入门three,并实现3D汽车展示厅,附带全码

首先放个最终效果图&#xff1a; 三维&#xff08;3D&#xff09;概念&#xff1a; 三维&#xff08;3D&#xff09;是一个描述物体在三个空间坐标轴上的位置和形态的概念。相比于二维&#xff08;2D&#xff09;只有长度和宽度的平面&#xff0c;三维增加了高度或深度这一维度…

软件开发中常用数据结构介绍:C语言队列

工作之余来写写C语言相关知识&#xff0c;以免忘记。今天就来聊聊C语言实现循环队列&#xff0c;我是分享人M哥&#xff0c;目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问&#xff0c;可底下评论&#xff01; 如果觉得文章内容在工作学习中有帮助到你&…

【Alibaba中间件技术系列】「RocketMQ技术专题」小白专区之领略一下RocketMQ基础之最!

应一些小伙伴们的私信&#xff0c;希望可以介绍一下RocketMQ的基础&#xff0c;那么我们现在就从0开始&#xff0c;进入RocketMQ的基础学习及概念介绍&#xff0c;为学习和使用RocketMQ打好基础&#xff01; RocketMQ是一款快速地、可靠地、分布式、容易使用的消息中间件&#…

【Linux】cpolar+JuiceSSH实现手机端远程连接Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Github的使用指南

首次创建仓库 1.官网创建仓库 打开giuhub官网&#xff0c;右上角点击你的头像&#xff0c;随后点击your repositories 点击New开始创建仓库 如下图为创建仓库的选项解释 出现如下界面就可以进行后续的git指令操作了 2.git上传项目 进入需上传项目的所在目录&#xff0c;打开…

WPS中的表格错乱少行

用Office word编辑的文档里面包含表格是正常的&#xff0c;但用WPS打开里面的表格就是错乱的&#xff0c;比如表格位置不对&#xff0c;或者是表格的前几行无法显示、丢失了。 有一种可能的原因是&#xff1a; 表格属性里面的文字环绕选成了“环绕”而非“无”&#xff0c;改…