初识CyberBattleSim

news2024/10/2 23:49:39

现在许多企业都在使用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、将剩下的代码跑通

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

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

相关文章

golang rpc

RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务,对应rpc的是本地过程调用,函数调用是最常用的本地过程调用,将本地过程调用变成远程调用会面临着各种问题。 以两数…

第 21 章 一条记录的多幅面孔——事务的隔离级别与 MVCC

21.1 事前准备 CREATE TABLE hero ( number INT, NAME VARCHAR ( 100 ), country VARCHAR ( 100 ), PRIMARY KEY ( number ) ) ENGINE INNODB CHARSET utf8;INSERT INTO hero VALUES ( 1, 刘备, 蜀 );21.2 事务隔离级别 在保证事务隔离性的前提下,使用不同的隔…

【Burp入门第三十三篇】IP Rotate 插件实现IP轮换爆破

Burp Suite是一款功能强大的渗透测试工具,被广泛应用于Web应用程序的安全测试和漏洞挖掘中。 本专栏将结合实操及具体案例,带领读者入门、掌握这款漏洞挖掘利器 读者可订阅专栏:【Burp由入门到精通 |CSDN秋说】 文章目录 正文安装步骤使用步骤应用场景实战文章正文 在 Burp…

基于SpringBoot+Vue+MySQL的智能垃圾分类系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着城市化进程的加速,垃圾问题日益凸显,不仅对环境造成污染,也给城市管理带来了巨大挑战。传统的垃圾分类方式不仅费时费力,而且手工操作容易出现错误,导致垃圾分类效…

探索未来工业自动化的钥匙:OPC UA与AI的融合

文章目录 探索未来工业自动化的钥匙:OPC UA与AI的融合背景:为什么选择OPC UA?OPC UA库简介安装OPC UA库简单的库函数使用方法连接到服务器获取节点读取节点值设置节点值订阅数据变更 库的使用场景工业自动化监控能源管理系统预测性维护 常见问…

L8910 【哈工大_操作系统】CPU管理的直观想法多进程图像用户级线程

L2.1 CPU管理的直观想法 管理CPU -> 引出多进程视图 设置 PC 指针初值为程序在内存中开始的地址,自动取指执行多个程序同时放在内存中,让CPU交替执行(并发:程序在读I/O时太慢,CPU空闲,则会去执行其他程序…

Jupyterhub 多用户分析平台在线和离线部署(自定义用户认证)

Jupyterhub 文章目录 Jupyterhub1、简介2、安装配置(在线)2.1 安装准备2.2 安装jupyterhub2.2 自定义身份验证器2.3 自定义单用户jupyter服务生成器2.4 配置 jupyterhub_config.py2.4 启动服务2.5 登录测试2.5.1 用户登录 http://da.db.com2.5.2 管理界面…

synchronized底层是怎么通过monitor进行加锁的?

一、monitor是什么 monitor叫做对象监视器、也叫作监视器锁,JVM规定了每一个java对象都有一个monitor对象与之对应,这monitor是JVM帮我们创建的,在底层使用C实现的。 ObjectMonitor() {_header;_count ; // 非常重要,表示锁计数…

3 个简单的微分段项目

与许多大型网络安全项目一样,微分段似乎很复杂、耗时且成本高昂。 它涉及管理有关设备间服务连接的复杂细节。 一台 Web 服务器应连接到特定数据库,但不连接到其他数据库,或者负载平衡器应连接到某些 Web 服务器,同时限制与其他…

图解大模型计算加速系列:vLLM源码解析1,整体架构

整个vLLM代码读下来,给我最深的感觉就是:代码呈现上非常干净历练,但是逻辑比较复杂,环环嵌套,毕竟它是一个耦合了工程调度和模型架构改进的巨大工程。 所以在源码解读的第一篇,我想先写一下对整个代码架构…

Golang | Leetcode Golang题解之第449题序列化和反序列化二叉搜索树

题目: 题解: type Codec struct{}func Constructor() (_ Codec) { return }func (Codec) serialize(root *TreeNode) string {arr : []string{}var postOrder func(*TreeNode)postOrder func(node *TreeNode) {if node nil {return}postOrder(node.Le…

java基础 day1

学习视频链接 人机交互的小故事 微软和乔布斯借鉴了施乐实现了如今的图形化界面 图形化界面对于用户来说,操作更加容易上手,但是也存在一些问题。使用图形化界面需要加载许多图片,所以消耗内存;此外运行的速度没有命令行快 Wi…

针对考研的C语言学习(2019链表大题)

题目解析: 【考】双指针算法,逆置法,归并法。 解析:因为题目要求空间复杂度为O(1),即不能再开辟一条链表,因此我们只能用变量来整体挪动原链表。 第一步先找出中间节点 typedef NODE* Node; Node find_m…

latex有哪些颜色中文叫什么,Python绘制出来

latex有哪些颜色中文叫什么,Python绘制出来 为了展示xcolor包预定义的颜色及其对应的中文名称,并使用Python打印出来,我们可以先列出常见的预定义颜色名称,然后将它们翻译成中文,并最后用Python打印出来。 步骤 列出…

家庭记账本的设计与实现+ssm(lw+演示+源码+运行)

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,家庭记账本小程序被用户普遍使用,为方便用户能…

MySQL高阶2066-账户余额

目录 题目 准备数据 分析数据 总结 题目 请写出能够返回用户每次交易完成后的账户余额. 我们约定所有用户在进行交易前的账户余额都为0, 并且保证所有交易行为后的余额不为负数。 返回的结果请依次按照 账户(account_id), 日期( day ) 进行升序排序…

leetcode_238:除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂…

Conditional Generative Adversarial Nets

条件生成对抗网络 1.生成对抗网络 生成对网络由两个“对抗性”模型组成:一个生成模型 G,用于捕获数据分布,另一个判别模型 D,用于估计样本来自训练数据而不是 G 的概率。G 和 D 都可以是非线性映射函数。 为了学习数据 x 上的生…

设计模式-生成器模式/建造者模式Builder

构建起模式:将一个复杂类的表示与其构造分离,使得相同的构建过程能够得出不同的表示。(建造者其实和工厂模式差不多) 详细的UML类图 图文说明:距离相同的构建过程 得出不同的展示。此时就用两个类(文本生成…

探索未来:hbmqtt,Python中的AI驱动MQTT

文章目录 **探索未来:hbmqtt,Python中的AI驱动MQTT**1. 背景介绍2. hbmqtt是什么?3. 安装hbmqtt4. 简单的库函数使用方法4.1 连接到MQTT服务器4.2 发布消息4.3 订阅主题4.4 接收消息4.5 断开连接 5. 应用场景示例5.1 智能家居控制5.2 环境监测…