初识CyberBattleSim

现在许多企业都在使用AD域服务进行管理,我们现在通俗理解里面蕴含着许多重要资产。

对于这个东西有下列的描述:

1、攻击他能够获得用户权限

2、里面存在许多的计算机资产,当攻击者攻击其中的一台机器,可以通过某种手段在域中的环境横向移动。

3、这玩意存在于内网中。

大概的描述就是上面的了,网上的解释我看不懂,我现在觉得他是一个类似管理资源的应用,存放在域控主机上,然后这个攻击者需要通过横向移动来控制到这个主机。

所以微软的365 Defender团队就发布了这个开源的人工智能攻防对抗模拟工具。项目专注于对网络攻击后横向移动阶段进行威胁建模,用于模拟抽象企业网路环境中运行的自动化代理的交互。(自动化代理可以模拟一些人工行为,自动化执行一些行为。)

项目调用了基于python的Open AI Gym接口使用强化学习训练自动化Agent。

技术使用了DQN模拟攻击方和防御方,部署了一些经典的漏洞、脆弱性的资产。不同的服务器资产被攻取可以获得到不同的分数。跟强化学习的思想结合起来,可以获得到一个最佳的攻击路径、攻击手法和防御策略。在这个过程中通过变换不同的防守策略、网络拓扑,可以得到很多的副本,从而进一步的训练攻击者和防守方的策略。(我们知道强化学习需要给智能体的行为给定一个评分,然后让这个智能体最后得到高分。那么我是说,当然他会向着得分最高的目标,这里当然是域控主机。我的意思是,,如何设置智能体的行为是需要细致考虑的,比方说,选取了什么漏洞,这个漏洞是否可行,使用过后是否会被系统检测出来。在这里是有一套复杂的设置)

再者,作为防御方,我们想要对系统进行威胁建模,但是就我所知道的,威胁建模对于建模的人来说,建模是挖掘威胁的工具,我们在进行建模前是不知道威胁是什么的,那么强化学习需要设置对智能体设置行为规范,让他去学习,从而去发现潜在的威胁。看上去是不是有点冲突,不过仔细想想是我搞混了威胁建模的概念(写的比较绕了,其实需要区别的是威胁建模不是挖创新型的0day,而是去根据已经有的资料去查询系统,在这个层面其实看起来是可以使用强化学习的。但是我总觉得在这个层面上,需要对智能体的行为不要设置需要多样性一点,要是设置的太具体,宏观,我觉得就简化了攻击方式,也就是量化智能体行为细度需要做一些研究)

---10.2更新

在对程序进行运行和解读后,对项目有了一些新的理解:

首先是项目文件,这里附上主要项目文件结构

|-- Dockerfile
|-- ...
|-- cyberbattle
|   |-- ...
|   |-- _env	//环境相关定义
|   |-- agents	//代理
|   |   |-- baseline	//基准代理
|   |   |   |-- agent_dql.py
|   |   |   |-- agent_randomcredlookup.py
|   |   |   |-- agent_tabularqlearning.py
|   |   |   |-- agent_wrapper.py
|   |   |   |-- baseline_test.py
|   |   |   |-- learner.py
|   |   |   |-- notebooks	//基准代理对应的notebook
|   |   |   |   |-- notebook_all_agents_benchmark.py
|   |   |   |   |-- notebook_ctf_dql.py
|   |   |   |   |-- notebook_dql.py
|   |   |   |   |-- notebook_randlookups.py
|   |   |   |   |-- notebook_tabularq.py
|   |   |-- random_agent.py
|   |-- samples		//网络环境定义
|   |   |-- chainpattern	//链式网络
|   |   |-- simple		//随机生成网络
|   |   |-- toyctf		//toyctf网络
|   |-- simulation		//模型定义
|-- notebooks
|   |-- c2_interactive_interface.ipynb  //介绍创建节点网络
|   |-- chainnetwork-optionwrapper.ipynb
|   |-- chainnetwork-random.ipynb
|   |-- random_plot.png
|   |-- randomnetwork.ipynb		//随机网络环境生成
|   |-- toyctf-blank.ipynb
|   |-- toyctf-random.ipynb
|   |-- toyctf-solved.ipynb

需要快速了解项目的可以尝试使用jupyter noterbook,当然在调试的过程中还是遇到各种各样的bug,(烦死了(猴子 

据说使用docker可以流畅构建,但是项目原来的注册表的登陆密码不共享,需要自行重新拉取构建,我doker水平不太好,拉了半天没搞定。(一定要去学精点

轻度观察项目后,感觉这个项目是个沙盘模拟哇,和上面之前写的理解有点相关,这个模拟的精细度怎么说呢,比较宏观,到流量那种肯定是没有的,根据一些特点,比方说什么样的机器存在什么样子的漏洞,通过控制机器达到横向移动。

CyberBattleSim中建模:

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

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

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

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

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

可以在这两个教学文件当中看到项目对应网络和节点的定义

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

防御agent预测节点被攻击后会采用一种re-image的方式防御,似乎是重装镜像??

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

对于漏洞的定义:

漏洞建模

  • 先决条件漏洞是否在给定的节点上被激活
  • 漏洞被攻击者成功利用的概率
  • 漏洞成功利用的side-effects

每个结点都有一组分配的命名属性,先决条件可表示为基于可能结点属性集合的布尔表达式

漏洞结果
每个漏洞都有预定义的结果,可能包括:

泄露凭证集合
泄露引用网络中的另一个结点
泄露结点信息/属性
对结点拥有所有权
节点上的特权提升


远程漏洞例子:

一个SharePoint站点泄露了ssh凭证
一个ssh漏洞可以获取计算机的访问权限
一个github项目泄露了commit历史
一个SharePoint站点的文件包含到存储用户的SAS token


本地漏洞例子:

从系统缓存中提取token或凭据
提升到system权限
提升到管理员权限
漏洞可以在结点级别使用时定义,也可以由全局定义,并由先决条件布尔表达式激活

建模主要是关注了用户角色与凭证(根据凭证登录其他机器),连接性(发现其他机器以及到其他机器的连接),漏洞(漏洞的前提条件及漏洞利用效果)

目前看到的agent感觉不太涉及到多智能体联合协作,目前跑到的像是单智能体。比方说多个智能体如何协同攻击或者协同防御,项目给我的感觉就是将我最一开始学习强化学习的小车走网格的PLUS版本。

该项目的攻击方式包括本地攻击,远程攻击和连接其他节点,每种攻击只举了几个例子,然而实际过程中应该远远不止于此(虽然我攻防学习的不是很好,但是看同学打过,像是这种攻防可能需要结合类似知识图谱??要是能够跟漏洞库结合起来感觉还不错,但是带来的实际计算开销目前我无法估计。

TODO

1、emmm尝试diy下节点和agent试一下

2、将剩下的代码跑通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亚里士多没有德775

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值