【读书笔记】网空态势感知理论与模型(七)

通过网络级对象依赖关系揭示0Day攻击路径

1. 研究动机

       0Day攻击是攻击者和防御者之间信息不对称的结果。赛门铁克研究人员认为,典型的0Day攻击平均隐藏312天才会被觉察。

受到SKRM模型启发,Patrol系统以全局视野来调查在某一个路径上的0Day攻击行为。从攻击者到最终攻击目标的路径,也就是被攻击受控的主机上的一个漏洞攻击利用的序列。这个序列中包含至少一个0Day漏洞攻击利用时,就是一个0Day攻击路径。

        一个0Day攻击路径通常包含对应于已知漏洞攻击利用的部分,而普通的IDS设备可以发现非0Day漏洞利用并告警,顺着攻击路径对被检测到的组成部分进行前向或者后向的追踪,则会发现0Day攻击。基于这种思路,识别0Day攻击路径比单独检测0Day攻击利用要切实有效的多。

        由于0Day具有未知的特质,因此0Day攻击路径问题实际上是一个网空态势感知问题的实例,本质上是为了打破攻击者和防御者直接的“信息不对称”,即揭示出包含路径上0Day攻击利用上下文环境。

2.方法和模型

AG通过将已发现的漏洞攻击利用关联至通向特定目标对象的攻击序列以生成攻击路径。所得到的攻击路径本质上是相邻漏洞之间因果依赖关系的模型。但是AG无法描述未知漏洞,也就不包含0Day攻击路径。

0Day攻击路径问题的另一个候选方案是告警关联方法。将孤立的告警关联起来,形成潜在的攻击路径。是否能够暴漏0Day攻击路径,取决于是否能够发出告警以指出对0Day漏洞的攻击利用。这种分析方法在很大程度上依赖告警,会在基因上继续此类检测技术的高误报率。

Patrol采用不同的策略:首先尝试构建一个超集的图,识别出隐藏在其中的可疑入侵传播路劲作为候选的0Day攻击路径,然后再在这些路径中识别高度可疑的候选路径。而不是先收集漏洞或者告警信息,然后将它们关联到路径中。

这种思路基于4个关键认知:

(1)作为程序与OS的交互的唯一方式,系统调用被发现是难以避免且攻击中立的。

(2)从系统调用可疑生成网络级的超集图,这个图也是攻击中立的。

(3)超集图本质是一个路径的集合,必然包含0Day攻击利用路径。该集合与AG中的逻辑关联不同。通过合适的方法取出它的子集作为候选的0Day攻击路径。(关键在合适的方法!!!)

(4)候选的0Day攻击路径显露出这些路径上的未知漏洞攻击利用,为识别0Day漏洞攻击利用指明了方向。

Patrol提出从系统调用跟踪数据来构建超集图,即网络级SODG依赖关系图(System Object Dependency Graph,SODG)。

为了构建网络级SODG,首先为每个主机构建SODG,系统调用被解析以生成OS对象及其之间的依赖关系。

主机系统对象依赖关系图

如果第i个主机的系统调用跟踪数据用Σi表示,则该主机的每主机SODG为有向图G(Vi,Ei)。

其中,

Vi为节点的集合,初始化为空集Φ。

Ei为有向边的集合,初试为空集Φ。

如果一个系统调用syscall∈Σi,dep是根据依赖规则从syscall解析出来的依赖关系。

其中dep∈{(src->sink),(src<-sink),(src<->sink)},src和sink是OS对象(主要是一个进程、文件或socket),那么Vi=Vi∪{src,sink},Ei=Ei∪{dep}。dep的开始时间和结束时间继承制syscall的时间戳。

若(a->b)∈Ei且(b->c)∈Ei,那么c的传递依赖于a。

网络级系统对象依赖关系图

如果第i个主机的每个主机SODG表示为G(Vi,Ei),则网络级SODG可以表示为∪G(Vi,Ei)。

Patrol系统将网络级SODG中的可疑入侵传播路径(Suspecious Intrusion Propagation Path,SIPP)识别为候选的零日攻击路径。

虽然SIPP的规模较SODG小,但它描述了几乎所有的0Day攻击路径。0Day攻击路径脱离SIPP的唯一可能是攻击者只对路径上的0Day漏洞进行攻击利用,这是非常罕见的。所以,只要有SIPP存在,其中就会有一个0Day攻击路径。

SIPP是SODG的子图,该子图中所有的对象要么具有来自出发节点的有向边,要么具有指向触发节点的有向边,其中这些触发节点是由于涉及告警而被管理员发现的OS对象,而这些告警是有诸如Snort、tripWire等系统值守已部署的探针所产生的。

Patrol系统提出了一种名为阴影指示器检查的方法来识别SIPP中高度可疑的候选零日攻击路径。

3. 系统设计

Patrol采用模块化设计,第一个组件“系统调用审计和过滤”是动态工作,后续的3个组件(SODG图像生成、SIPP识别、阴影指示检查)均为离线,避免对个别主机造成影响。

3.1 系统调用审计和过滤

系统调用的审计应满足一下要求:

(1)审计的对象是所有存活进程,避免遗漏;

(2)为了识别跨主机的可疑路径,网络范围内的系统调用审计必不可少。在待审计的列表中包含所有主机,并且审计主机之间的socket通信。

(3)经根据进程ID或文件描述符来表示对象并不准确,这些信息可能被系统重用。应当保留所有OS相关的信息,以充分准确地标识操作对象。

(4)Patrol还关注被调用或返回的系统调用时间信息的记录。因为后续需要利用时间关系来确定系统调用是否涉及入侵传播。

        然后,系统调用跟踪函数从各个主机被送至中心分析系统。在此之前,需要对系统调用进行过滤,以避免在数据传输和分析时产生任何额外的带宽和成本。通过应用一些过滤规则,削减高度冗余或可能是无恶意的系统调用。通过消减可以加快生成图的速度,降低所生成图的复杂度。

目前的过滤规则主要包括:

(1)动态链接库文件,比如libc.so.*和libm.so.*.

(2)虚拟对象,如stdin/stdout和/dev/null

(3)关于伪终端主从逻辑设备的对象(/dev/ptmx  /dev/pts)

(4)与日志相关的对象,如syslod和 /var/log/*等

也允许用户指定更多的过滤规则,但也存在过滤掉恶意对象的更大风险。

此外,Patrol使用一个成为时间窗口的调优参数,对经过滤的系统调用日志发送到分析系统的频率进行调整。

3.2 SODG的生成和串接。

每个主机SODG被串接在一起就构成了网络级SODG。研究发现,作为黏合剂的边通常是基于Socket的通信。因此识别和消减系统调用中涉及的相应套接字对象,可以将两个分离的主机SODG串接在一起。

3.3 可疑入侵传播路径SIPP识别

为了识别SIPP,Patrol系统可能首先使用触发节点作为种子进行后向追踪,因为出发节点可能不是入侵的开始。在很多情况下,IDS存在检测延迟的问题,即告警是入侵起始点的延迟表现。

后向跟踪可以帮助找到起始点,然后就可以使用起始点作为种子进行前向跟踪。

具体说来,后向的依赖关系跟踪被用于识别所有具有直接或传递的有向边指向触发节点的SODG对象,而前向的依赖关系跟踪是找到所有具有来自触发节点的直接或传递的有向边的SODG对象。

Patrol将后向和前向的依赖关系跟踪都实现为广度优先搜索(BFS)算法。

3.4 阴影指示器检查

阴影指示器检查是基于漏洞阴影和阴影指示器的概念。这些概念是基于一个关键的观察:多个漏洞会拥有一些共同的特征。

CWE---列举了693个通用弱点。

CAPE---分类出了400个通用的攻击模式。

漏洞阴影与上述类,但不同之处在于商户共有通用特征的情况之外,还会发现:对一些漏洞的攻击利用往往在SODG图中有相似的特点。

-----------------------------

 注1:CWE---常见缺陷列表(Common Weakness Enumeration)是MITRE公司(一个非盈利机构)继CVE(Common Vulnerabilities and Exposures)之后的又一个安全漏洞词典。

注2:CAPEC(Common Attack Pattern Enumeration and Classification)是一种用于攻击预防和检测的语言。

通过对攻击模式的分类与描述,它为安全从业人员提供了一种有用的方式来识别和理解网络威胁。CAPEC使用一种基于面向对象编程的方法来描述攻击方法和技术。该方法使用“攻击模式”的概念,类似于软件设计中的“设计模式”,将常见的安全漏洞分类并描述其技术实现和攻击流程。

CAPEC将攻击模式分为四个不同的级别:

  • 攻击模式:用于描述单一攻击方法或技术的基本操作步骤。
  • 攻击链:描述由多个攻击模式组成的攻击序列,形成完整的攻击流程。
  • 攻击生态系统:描述针对同一目标的多个攻击链。
  • 攻击预测:描述可能的未来攻击,以帮助安全团队做出准备。

-----------------------------

4. Patrol 的实现

4.1 在线的系统调用审计

通过一个可加载内核模块实现,监视所有运行中进程的39个系统调用。监视通过Hooking机制完成:模块对所关注的系统调用设置hook,如封装在系统调用socketcall中的套接字相关调用(sys_accept\ sys_sendto)。附加代码放置在挂钩中,用于记录系统调用的参数和返回值,或者保存在系统调用期间访问的操作系统内核数据结构的描述符信息中,如进程对象的任务机构和文件对象的文件结构。

可从描述符中获取OS相关信息,包括进程ID、进程名称、绝对文件路径和inode编号。这些被用于精确的OS对象标识,同时还记录每个系统调用的时间信息,如调用和返回时间。

4.2 离线数据分析

数据分析代码用gawk编写,能够产生dot,兼容格式的出书以用于表示图。在Patrol中图用邻接矩阵表示,需要快速查找判定两个节点之间是否存在边,只用O(1),否则可能需要O(|v|)或O(|e|)。其中v代表节点数,e代表边的数量。

5. 0Day攻击路径的概率识别

5.1 研究动机

Patrol的局限性:候选0Day攻击路径的激增数量和规模。考虑到从入侵告警汇总提取的入侵检测点数量较多,可能导致出现过多的后续0Day攻击路径。

5.2 方法概述

针对数量激增问题,提出一种基于0Day攻击路径识别的概率方法。基本思想是通过结合从各个信息源收集的入侵证据,减少候选0Day攻击路径的数量和大小。

方法分为两个步骤:

(1)建立一个系统层依赖关系图来描述入侵传播。该依赖关系图为系统对象实例依赖关系(SOIDG)。

(2)在SOIDG的基础上建立一个利用入侵证据的贝叶斯网络。基于SOIDG的BN能够计算出系统对象实例被感染的概率。通过依赖关系将高感染率的实例连接起来,可形成一条路径。

SOIDG的依赖关系意味着一种因果关系--- 一个对象的已感染实例可能导致另一个对象的正常实例被感染。BN能够使用概率图建立因果关系模型。因此,可以直接在SOIDG上构造一个BN来对感染因果关系进行建模。

5.3 基于SODG的BN构建问题

(1)如果移除SODG边上的时间标签,SODG就不能表现正确的信息流。

(2)SODG图有可能包含循环,而BN是一种非循环图。

(3)SODG中,一个节点的父节点数目是不受限制的。如果一个系统对象依赖于许多其余对象,那么这个对象将在SODG中得到大量父对象。使用BN时为具有大量父节点的节点指定CPT表是非常困难且不切实际的。

5.4 系统对象实例依赖关系图(SOIDG)

在SOIDG中,每个节点都是一个对象的实例。每个实例都是对象在特定时间点的“版本”。

SOIDG的生成规则:

给定一个依赖关系 src-> sink,其中src是源对象,sink是接收对象,且只有当src是SOIDG中不存在实例的新对象时,才会创建src对象的新实例。与src对象相比,每当出现依赖关系 src-> sink时,应该在SOIDG中添加sink对象的新实例。src与sink对象的处理方式不同,src的感染状态不受依赖关系src-> sink的影响,而可能会影响sink的感染状态,应该为sink创建一个新的实例来反映这种影响。

SOIDG规避了SODG存在的3个问题。

5.5 基于SOIDG的BN和0Day攻击路径识别

BN中直接继承SOIDG的图拓扑结构。必须为每个节点分配CPT表。

经过概率推理,每个节点都得到一个概率。这也就意味着BN能够定量计算每个对象实例被感染的概率。每当加入新的证据时,基于SOIDG的BN将生成一组新的推断概率。

当收集到的证据越多,推断结果就更接近真实情况。

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

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

相关文章

16_线程池

文章目录 完整的线程状态转换图理论层面代码层面 线程池3种线程池线程池的使用 多线程的实现方式三:实现Callable接口单例设计模式&#xff08;线程安全&#xff09; 完整的线程状态转换图 理论层面 代码层面 线程池 提高效率 3种线程池 Executors&#xff1a; 线程工具类,…

统一网关 Gateway【微服务】

文章目录 1. 前言2. 搭建网关服务3. 路由断言工厂4. 路由过滤器4.1 普通过滤器4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 前言 通过前面的学习我们知道&#xff0c;通过 Feign 就可以向指定的微服务发起 http 请求&#xff0c;完成远程调用。但是这里有一个问题&am…

【JAVA】线程的run()和start()有什么区别?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 run() 方法&#xff1a; start() 方法&#xff1a; 区别总结&#xff1a; 结语 我的其他博客 前言 多线程编程是Java中一个重要…

生成式 AI 如何重塑软件开发流程和开发工具?

生成式AI正在重塑开发流程和开发工具&#xff0c;通过自动化和优化软件开发过程&#xff0c;提高开发效率和质量。它可以帮助开发人员快速生成代码、测试和部署应用程序&#xff0c;同时减少错误和缺陷。此外&#xff0c;生成式AI还可以帮助开发人员快速理解和解决复杂的技术问…

Vulnhub靶机:Corrosion1

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;corrosion:1&#xff08;10.0.2.12&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/c…

Vue3-46-Pinia-获取全局状态变量的方式

使用说明 在 Pinia 中&#xff0c;获取状态变量的方式非常的简单 &#xff1a; 就和使用对象一样。 使用思路 &#xff1a; 1、导入Store&#xff1b;2、声明Store对象&#xff1b;3、使用对象。 在逻辑代码中使用 但是 Option Store 和 Setup Store 两种方式定义的全局状态变量…

0109作业

1> 思维导图 2> 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin&quo…

设计与实现基于Java+MySQL的模拟银行ATM操作系统

课题背景 随着现代经济的发展&#xff0c;电子支付和自动化银行服务已成为人们生活中不可或缺的一部分。自动取款机&#xff08;ATM&#xff09;作为一种常见的自助服务设备&#xff0c;使用户能够方便地进行资金的存取、查询余额、转账等操作&#xff0c;而无需到银行柜台。 …

浅淡A100-4090-性价比

大模型的训练用 4090 是不行的&#xff0c;但推理&#xff08;inference/serving&#xff09;用 4090 不仅可行&#xff0c;在性价比上还能比 H100 稍高。4090 如果极致优化&#xff0c;性价比甚至可以达到 H100 的 2 倍。 -------------------- FP64&#xff08;双精度浮点&a…

pycharm社区版配置flask开发环境

新建配置文件&#xff0c;类型选择Shell Script 设置Execute中flask.exe的路径 设置options &#xff1a;--appflask_app.py run --port5000 --debug 设置working 路径 设置环境变量FLASK_APPflask_app.py;FLASK_ENVdevelopment 注意&#xff1a;FLASK_APPflask_app.py和上…

automa插件使用的一些经验

automa&#xff0c;我承认我写不出来这样的代码&#xff0c;早年的时候公司想过做一个爬虫的工具&#xff0c;那个时候RPA还没有火&#xff0c;虽然下载也没怎么火.RPA再牛&#xff0c;还是需要工程师&#xff0c;想一点经验都没有人来做&#xff0c;还是理解不了。能够简化数据…

Java接口的解析

在 Java 中&#xff0c;接口&#xff08;Interface&#xff09;是一种抽象类型&#xff0c;用于定义一组相关方法的契约。接口只包含方法的签名&#xff0c;而没有方法的实现。实现接口的类必须提供接口中定义的方法的具体实现。 以下是对 Java 接口的解析&#xff1a; 这只是…

【uniapp】遇到的一些问题

一、小程序中textarea ios样式不生效的方法 默认有内边距&#xff0c;加个disable-default-padding"true" 二、uni-data-picker循环使用&#xff0c;一个改了全局的值 换成了uni自带的picker&#xff0c;下面括号里必须有默认值&#xff0c;为空字符串的时候&…

国产AI工具钉钉AI助理:开启个性化助手服务的新篇章

钉钉AI助理是钉钉平台的一项功能&#xff0c;它可以根据用户的需求提供个性化的AI助手服务。用户可以在AI助理页面一键创建个性化的AI助理&#xff0c;如个人的工作AI助理、旅游AI助理、资讯AI助理等。企业也可以充分使用企业所沉淀的知识库和业务数据&#xff0c;在获得授权后…

Python实现PDF—>Excel的自动批量转换(附完整代码)

Python实现PDF—>Excel的自动批量转换&#xff08;附完整代码&#xff09; 话不多说&#xff0c;先看效果&#xff01; 需要转换的PDF&#xff1a; 转换后的Excel&#xff1a; 01、底层原理 PDF 到 Excel 的转换涉及不同文件格式之间的数据提取和重构。底层原理可以简…

【GDAL】Windows下VS+GDAL开发环境搭建

Step.0 环境说明&#xff08;vs版本&#xff0c;CMake版本&#xff09; 本地的IDE环境是vs2022&#xff0c;安装的CMake版本是3.25.1。 Step.1 下载GDAL和依赖的组件 编译gdal之前需要安装gdal依赖的组件&#xff0c;gdal所依赖的组件可以在官网文档找到&#xff0c;可以根据…

白嫖aws创建Joplin server服务器

网上有很多的Joplin服务器的搭建教程&#xff0c;但是基本都是抄来抄去&#xff0c;对初学者实在是太不友好了。 话不多说&#xff0c;说干就干&#xff0c;自己从头找资料搭了一个&#xff0c;这可能是全网最好的Joplin服务器搭建教程了。 aws服务器 aws的服务器还是很香的&…

idea git回滚之前提交记录

提交代码时&#xff0c;如果不小心提交了不需要提交的内容&#xff0c;在本地仓库中&#xff0c;此时需要回滚版本&#xff0c;如何回滚 1.打开git控制台&#xff0c;左下角git,选择要处理的分支&#xff0c;选择刷新获取最新git提交记录 2&#xff09;选中自己commit需要回滚…

Fluids —— Minimal fluid setups

目录 Waterline FLIP Boundary Boundary flow 创建流体设置的三个基本方法&#xff1b; Waterline 由FLIP Container SOP与FLIP Solver SOP组成的基本network&#xff0c;可不需要任何外部源&#xff1b; FLIP Container SOP&#xff0c;能使用不同的容器形状&#xff1b;F…

PiflowX-MysqlCdc组件

MysqlCdc组件 组件说明 MySQL CDC连接器允许从MySQL数据库读取快照数据和增量数据。 计算引擎 flink 组件分组 cdc 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子hostnameHostname“”无是MySQL…