CyberBattleSim-(内网自动化渗透)研究分析

news2024/12/23 0:54:48

**01 **背景知识介绍

CyberBattleSim介绍

CyberBattleSim是一款微软365
Defender团队开源的人工智能攻防对抗模拟工具,来源于微软的一个实验性研究项目。该项目专注于对网络攻击入侵后横向移动阶段进行威胁建模,用于研究在模拟抽象企业网络环境中运行的自动化代理的交互。其基于Python的Open
AI Gym接口使用强化学习算法训练自动化agent。

该项目下的模拟环境参数化定义了固定网络拓扑和相应的漏洞,agent可以利用这些漏洞在网络中横向移动。攻击者的目标是通过利用计算机节点中植入的参数化漏洞来获取网络的所有权,整个过程被抽象建模为跨越多个模拟步骤的操作。

为了比较agent的性能,主要查看了两个指标:为实现其目标而采取的模拟步骤数,以及跨训练时期模拟步骤的累积奖励。通过步骤梳理与累计的分数,评估最先进的强化算法,以研究自主代理如何与它们交互并从中学习。

强化学习算法介绍

强化学习是机器学习领域的一类学习问题,它与常见的有监督学习、无监督学习等的最大不同之处在于,它是通过与环境之间的交互和反馈来学习的。正如一个新生的婴儿一样,它通过哭闹、吮吸、爬走等来对环境进行探索,并且慢慢地积累起对于环境的感知,从而一步步学习到环境的特性使得自己的行动能够尽快达成自己的愿望。

强化学习的基本模型就是个体-
环境的交互(如图1)。个体/智能体(agent)就是能够采取一系列行动并且期望获得较高收益或者达到某一目标的部分,比如我们前面例子中的新生婴儿。而与此相关的另外的部分都统一称作环境(environment),比如前面例子中的婴儿的环境(比如包括其周围的房间以及婴儿的父母等)。整个过程将其离散化为不同的步骤(step),在每个步骤环境和个体都会产生相应的交互。个体可以采取一定的行动(action),这样的行动是施加在环境中的。环境在接受到个体的行动之后,会反馈给个体环境目前的状态(state)以及由于上一个行动而产生的奖励(reward)(奖励有好的也有坏的)。

强化学习的目标是希望个体从环境中获得的总奖励最大,即我们的目标不是短期的某一步行动之后获得最大的奖励,而是希望长期地获得更多的奖励。比如一个婴儿可能短期的偷吃了零食,获得了身体上的愉悦(即获取了较大的短期奖励),但是这一行为可能在某一段时间之后会导致父母的批评,从而降低了长期来的总奖励。

1655348146_62aa9bb21b2f8e949f7ed.png!small?1655348146729

图1 个体与环境相互作用

**02 **CyberBattleSim框架介绍

CyberBattleSim框架中使用的是参数化的虚拟环境,模拟环境性能要求低,更轻量,速度快,抽象,并且可控性更强,适用于强化学习实验。优点如下:

  • 抽象级别高,只需要建模系统重要的方面;例如应用层网络通信相比于包级别的网络模拟,忽略了低层的信息。

  • 灵活性:定义一个新的机器是很容易的,不需要考虑底层的驱动等,可以限制动作空间为可以管理且相关的子集。

  • 全局的状态可以有效地捕获,从而简化调试与诊断。

  • 轻量:运行在一台机器/进程的内存中。

CyberBattleSim的仿真固然简单,但是简单是具有优势的。高度抽象的性质使得无法直接应用于现实系统,从而防止了潜在的恶意训练的自动化代理使用。同时,可以使我们更专注于特定的安全性方面,例如研究和快速实验最新的机器学习和AI算法。

当前的内网渗透实现方式侧重于横向移动,希望理解网络拓扑和配置并施加影响。基于这一目标,没有必要对实际的网络流量进行建模。

该项目主要采用了免模型学习(Model-Free),虽然在效率上不如有模型学习(Model-
Based)(缺点是如果模型跟实际场景不一致,那么在实际使用场景下会表现的不好),但是这种方式更加容易实现,也容易在真实场景下调整到很好的状态。所以免模型学习方法更受欢迎,得到更加广泛的开发和测试。

CyberBattleSim中的强化学习建模:

  • 有向图,结点表示计算机,边表示其他结点的知识或节点间通信。

  • 环境:状态就是网络,单个代理,部分可观测(代理无法观测到所有的结点和边),静态的,确定性的,离散的,post-breach

  • 行动空间(代理可以逐步探索网络):本地攻击,远程攻击,认证连接

  • 观测空间:发现结点,获取结点,发现凭证,特权提升,可用攻击

  • 奖励:基于结点的内在价值,如SQL server比测试机器重要

1655348179_62aa9bd3332801f9529ac.png!small?1655348179875

图2 强化学习建模

该项目中的环境(environment)定义:

  • 网络中结点的属性:如Windows,Linux,ApacheWebSite,MySql,nginx/1.10.3,SQLServer等。

  • 开放的ports:如HTTPS,SSH,RDP,PING,GIT等。

  • 本地漏洞包括:CredScanBashHistory,CredScan-HomeDirectory,CredScan-HomeDirectory等。

  • 远程漏洞包括:ScanPageContent,ScanPageSource,NavigateWebDirectoryFurther,NavigateWebDirectory等。

  • 防火墙配置为:允许进出的服务为RDP,SSH,HTTPS,HTTP,其他服务默认不允许。

  • 定义了部分奖励与惩罚:发现新结点奖励,发现结点属性奖励,发现新凭证奖励,试图连接未打开端口的处罚,重复使用相同漏洞的惩罚等。

本地agent如下,定义了其包含的漏洞,漏洞类型,漏洞描述,端口,价值,花费,服务等。

1655348203_62aa9bebd66448d44aca7.png!small?1655348204492

图3 agent定义

防御agent主要通过预测攻击成功的可能性的基础之上实现了识别、减缓攻击的行为。主要通过重装镜像(re-
image)的方式抵御攻击,通过计算攻击者的步骤数和持续性的奖励分数来衡量当前攻击策略的优劣性。通过返回的数据字段内容来确认各种攻击的成功性。(防御遍历所有节点,如果发现该节点可能存在漏洞(定义了一个概率函数计算可能性),先使该节点不可用,再通过重装镜像的方式抵御攻击)。

攻击者通过初始化的攻击节点开始,由于无法获取到当前整个环境当中的网络拓扑图与链接方式,攻击者agent只有三种能力进行横向扩散:本地攻击、远程攻击、链接到其他节点。通过不同的结点的权限和不同的动作典型的比如数据泄露、泄露、权限失陷等行为,分别给不同的分数。

每一个step中,都会执行下图中的action(行动),observation(观察状态),wrapper(通过当前状态反馈做出改变)。

在强化学习训练的时候,一开始会让Agent更偏向于探索Explore,并不是哪一个Action带来的reward最大就执行该Action,选择Action时具有一定的随机性,目的是为了覆盖更多的Action,尝试每一种可能性。等训练很多轮以后各种状态下的各种Action基本尝试完以后,这时候会大幅降低探索的比例,尽量让Agent更偏向于利用Exploit,哪一个Action返回的reward最大,就选择哪一个Action。

1655348221_62aa9bfd4e90478604ef3.png!small?1655348222023

图4 强化学习步骤

**03 **一个CyberBattleSim实例过程

该实例通过强化学习算法查找结点及其漏洞,由初始节点通过本地漏洞探测到一个Website节点,step=6,当前reward=6,其中的step如图5上所示,左下图横坐标为step,纵坐标为reward,右下图为网络拓扑图。此时结点client为红色已拥有,结点Website为绿色未拥有。

1655348251_62aa9c1ba5bcbe7dd666d.png!small?1655348252338

图5 强化学习过程1

再经过6个step后如图6,通过WEBSITE的漏洞ScanPageContent发现了结点GitHubProject,获得reward=6,当前总reward=12。(注意,这部分重复了三次step发现结点Website,说明该算法也有弊端)

1655348262_62aa9c2631f868afa1671.png!small?1655348262832

图6 强化学习过程2

最终从agent节点通过各种本地攻击,远程攻击和连接其他节点,获取到网络中存在漏洞的节点如图7,当前step=5600,reward=431。

1655348284_62aa9c3c2c2ea69873b98.png!small?1655348284874

图7 强化学习过程3

**04 **项目中强化学习算法比较

该项目使用了一些强化学习算法比较其优劣性,分别为Tabular Q-learning, Credential lookups, DQL(deep
Q-learning), Exploiting DQL。

如图8所示,其中Y轴是在多个episode(X轴)中为获得网络的完全所有权而采取的迭代数量(越低越好)。某些算法(如Exploiting
DQL)随着episode增加可以逐渐改进并达很高水平,而有些算法在50 episode后仍在苦苦挣扎!

1655348323_62aa9c63a3086e0d08a6a.png!small?1655348324373

图8 不同算法获取网络所有权的迭代次数

如图9提供了另一种比较方法,即跨训练时期模拟步骤的累积奖励。实线显示中位数,而阴影表示一个标准差。这再次显示了某些算法(红色Exploiting
DQL、蓝色Tabular Q-learning和绿色DQL)的表现明显优于其他算法(橙色Credential lookups)。

1655348338_62aa9c7273f7925e3e00c.png!small?1655348339332

图9 不同算法经过训练后的奖励

**05 **CyberBattleSim评估

项目存在的问题

1.CyberBattleSim除了提供Agent之外还可以通过Gym的基础提供参数化构建的虚拟网络环境、漏洞类型、漏洞出现的节点等。所以该项目其实只是一个强化学习的自动化攻击框架,并没有进行实际的攻击,网络中的所有节点,漏洞,漏洞类型等都是使用各种参数自定义的。

2.该项目的攻击方式包括本地攻击,远程攻击和连接其他节点,每种攻击只举了几个例子,然而实际过程中远远不止于此,需要学习训练就会是一个很耗时的过程。且该项目采用免模型学习(虽然该方法会更适用于当前网络环境),实际渗透中因为攻击方式众多,需要训练的时间也会更长,具体学习渗透的时间犹未可知。

3.CyberBattleSim项目提供的只是自动化攻击内网渗透项目当中必不可少的沙盒,只是一个用户产生虚拟攻防场景数据的工具,距离真实的项目还有很长的路要走,现有的强化学习最好的例子只存在于游戏(2016年:AlphaGo
Master 击败李世石,使用强化学习的 AlphaGo Zero 仅花了40天时间;2019年4月13日:OpenAI
在《Dota2》的比赛中战胜了人类世界冠军),对于复杂的自动化攻击并不一定能胜任。

项目的优势

1.借助OpenAI工具包,可以为复杂的计算机系统构建高度抽象的模拟,可视化的图像表达,使用户可以容易看到这些代理Agent的进化行为,通过步骤梳理与累计的分数,可以对当前的场景有个较好的展示,并评估出最合适的强化学习算法(其中经过实验得到的结果为Exploiting
DQL算法最优)。

2.CyberBattleSim的仿真固然简单,但是简单是具有优势的。高度抽象的性质使得无法直接应用于现实系统,从而防止了潜在的恶意训练的自动化代理使用。同时,这种简单可以更专注于特定的安全性方面,例如研究和快速试验最新的机器学习和AI算法。项目目前专注于横向移动技术,目的是了解网络拓扑和配置如何影响这些技术。考虑到这样的目标,微软认为没有必要对实际的网络流量进行建模,但这是该项目实际应用的重大限制。

3.该项目相比于其他强化学习自动化渗透项目:如DEEPEXPLOIT框架,AutoPentest-
DRL框架,这两个框架都使用了强化学习,nmap扫描,Metasploit攻击,但是他们并没有有效利用强化学习,主要原因在于他们的action只是根据各种漏洞对应相应的payload获取shell,该模式更像是监督学习,因为没有环境观察与反馈。CyberBattleSim项目有它自己的优势,虽然该项目并没有实现真实攻击,但是该项目完整地诠释了强化学习的步骤(包含观察环境与反馈),如果能开发出合适的工具使用,那么就可以实现更高效,准确度更高的渗透。

项目的发展

该项目更适合比较强化学习算法在内网渗透的优劣,因为该项目高度虚拟化,不考虑底层网络的信息,要使该项目成为一个真实的内网渗透工具是一个极大挑战。

如下列出可能对该项目有所贡献的改进:

1.实现一个类似端口扫描操作(非确定性)的nmap,用来收集信息,而且该步骤不仅仅是渗透的开始工作,在渗透过程中也需要更新信息。

2.与现有的攻击工具结合或者开发更适合强化学习模型的攻击工具,用来真实的攻击。

3.奖励的定义也是强化学习中重要的一项内容,可以通过通用漏洞评分系统(CVSS)的组成部分所确定的漏洞得分来定义。

**06 **总结

本文针对自动化内网渗透这一方向对微软的开源项目CyberBattleSim做了介绍,通过对其内部原理和源码的分析,笔者指出了该项目的优势,存在的问题及其发展前景。该项目只是自动化攻击内网渗透项目中必不可少的沙盒,自动化渗透还有很长的路要走。

评分系统(CVSS)的组成部分所确定的漏洞得分来定义。

**06 **总结

本文针对自动化内网渗透这一方向对微软的开源项目CyberBattleSim做了介绍,通过对其内部原理和源码的分析,笔者指出了该项目的优势,存在的问题及其发展前景。该项目只是自动化攻击内网渗透项目中必不可少的沙盒,自动化渗透还有很长的路要走。

##最后
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于蜣螂算法优化的核极限学习机(KELM)分类算法-附代码

基于蜣螂算法优化的核极限学习机(KELM)分类算法 文章目录基于蜣螂算法优化的核极限学习机(KELM)分类算法1.KELM理论基础2.分类问题3.基于蜣螂算法优化的KELM4.测试结果5.Matlab代码摘要:本文利用蜣螂算法对核极限学习机(KELM)进行优化,并用于分类1.KELM理…

R语言贝叶斯方法在生态环境领域中的应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域,其火爆程度已经跨越了学术圈,如促使其自成统计江湖一派的贝叶斯定理在热播美剧《The Big Bang Theory》中都要秀一把。贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于…

STM32CubeMx使用FreeRTOS搭建printf输出串口打印-----基于正点原子开发板阿波罗

文章目录STM32CubeMx使用FreeRTOS搭建printf输出串口打印-----基于正点原子开发板阿波罗1.输入目标芯片2.选择RCC时钟3.配置调试模式4.USART的配置5.配置中断6.printf的重定向功能7.代码添加8.修改中断函数9.添加全局变量10.增加FreeRTOS支持11.在FreeRTOS中添加源码STM32CubeM…

【数学建模】数学建模中的常用工具推荐

前言 整理了几款我在建模比赛中需要准备的小工具,后续会随时不定期更新,以及完善内容,需要的小伙伴建议收藏一波~ [1] 公式编译器 Axmath(建议购买正版)mathtypeWord内置的公式编辑器 Axmath是国产的软件&#xff0…

pytorch安装(模式识别与图像处理课程实验)

pytorch安装(模式识别与图像处理课程实验)1、 打开cmd,创建torch虚拟环境。2、 激活创建的torch虚拟环境2.1、 进入pytorch官网,复制如下的命令,进行pytorch的安装2.2、测试安装是否成功3、 通过pip命令安装pytorch&am…

基于WPS实现Excel表的二级下拉选择框

基于WPS实现Excel表的二级下拉选择框第一步:先在sheet2上创建源数据第二步:创建一级下拉框第三步:创建二级下拉框报错记录: “列表源”XXXXXX第一步:先在sheet2上创建源数据 第二步:创建一级下拉框 一级下…

难受啊,备战字节跳动132天,因为一个疏忽让我前功尽弃...

📌 博客主页: 程序员二黑 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 如果你也想学习软件测试,文末卡片有我的交流群,加入我们,一…

Kibana报错:Kibana server is not ready yet

背景 网页中访问kinaba http://localhost:5601 ,一直提示“Kibana server is not ready yet”。 执行如下命令查看kibana日志, docker logs kibana 发现有提示: 正文 怀疑是不是容器重启后,各容器内部ip变化了导致。 1、故执行如下命令查看…

Android框架源码分析——从设计模式角度看 RxJava 核心源码

从设计模式角度来看 RxJava 核心源码 从订阅者模式和装饰器模式的角度来看 RxJava 源码。 1. 普通订阅者模式与 RxJava 中的订阅者模式 订阅者模式又叫做观察者模式,主要用于实现响应式编程。其本质,就是接口回调。 普通订阅者模式:多个对…

来啦,华东师范大学2024年入学MBA提前面试流程及时间

项目简介华东师范大学系国家教育部和国务院学位办【2007(36)号】批准的工商管理硕士(MBA)培养单位。华东师范大学MBA项目,依托学校深厚的人文底蕴和育人文化,利用多学科支撑的优势、利用多元化的办学资源&a…

CUAD学习笔记

目录一、头文件**1、mex.h****2、matrix.h****3、string****4、iostream****5、omp.h**6、cuda_runtime.h7、stdlib.h8、sys/time.h9、stdio.h10、string.h11、time.h12、math.h13、device_launch_parameters.h二、一些声明语句1、using namespace std**2、typedef unsigned ch…

pytorch数据读取深入理解

来源:投稿 作者:小灰灰 编辑:学姐 了解数据 Q:我现在什么基础也没有,我要学习深度学习,学习cv,学习nlp。 A:首先我们知道,深度学习是建立在数据集的基础上。现在呢&…

【C++】C++11 ~ 右值引用和移动语义

🌈欢迎来到C专栏~~右值引用和移动语义 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一…

mongodb 使用密钥文件身份验证部署副本集

一 副本集介绍 集群中每个节点有心跳检测 如果由于资源限制,可以部署一主一从一仲裁 副本集集群可以实现主从的自动切换 Read Preference 在客户端连接中,可以实现读取优先,就是连接器会自动判断,把读取请求发送到副本集中的…

whois命令常见用法

whois命令常见用法whois命令简介安装whoisWindows使用whoisLinux安装whoiswhois常见用法Linux下whois查询域名注册信息whois命令简介 whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。…

分析第一个安卓项目

整体分析 .gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一些文件,我们无须关心,也不要去手动编辑。 app 项目中的代码、资源等内容几乎都是放置在这个目录下的。 gradle 这个目录下包含了gradle wrapper的配置文件,使…

flowable流程设计器的几个bug修改记录

今天根据客户反馈开源项目宁波阿成 (nbacheng) - Gitee.com 有一些bug,主要是前端的,所以今天修正一下 1、对于第一个节点是发起人,后面是多人选择的时候,approval数据被清空了 就是上面的流程,发现有问题 对这种情…

实例13:体育竞技分析

高手过招,胜负只在毫厘之间 计算思维:抽象自动化 模拟:抽象比赛过程自动化执行N场比赛 当N越大时,比赛结果分析会越科学 自顶向下:解决复杂问题的有效方法,将总问题拆分为小问题,分而治之自底向…

【微服务】分布式搜索引擎elasticsearch(3)

分布式搜索引擎elasticsearch(3)1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现2.自动补全2.1.拼音分…

微信小程序 java php校园快递物流取件及上门服务

系统分为用户和管理员两个角色 用户的主要功能有: 1.用户注册和登陆系统 2.用户查看系统的公告信息 3.用户在线快递下单,支付订单,在线订购快递取件 4.用户在线预约快递,填写快递预约信息 5.用户个人中心在线充值 6.用户个人中心修…