CyberBattleSim samples
模块详细分析
samples
模块包含了 CyberBattleSim 的各种网络环境示例,用于创建不同类型的网络拓扑和漏洞场景。下面我将详细分析每个文件和类,以及它们之间的关联。
1. active_directory 目录
1.1 generate_ad.py
这个文件用于生成随机的 Active Directory 网络环境。
主要函数
create_network_from_smb_traffic
- 参数:
n_clients
:客户端工作站数量n_servers
:服务器数量n_users
:用户数量
- 处理逻辑:
- 创建一个有向图表示网络
- 添加工作站、共享和域控制器节点
- 配置防火墙规则
- 为节点添加漏洞和属性
- 主要作用:生成一个模拟 Active Directory 网络的图结构
default_vulnerabilities
- 参数:无
- 处理逻辑:创建默认漏洞库,包括:
FindDomainControllers
:查找域控制器EnumerateFileShares
:枚举文件共享ProbeAdmin
:探测管理员权限ScanForCreds
:扫描凭证
- 主要作用:定义 AD 环境中的基本漏洞
breach_vulnerabilities
- 参数:
lib
:现有漏洞库 - 处理逻辑:添加入侵漏洞,如
AuthorizationSpoofAndCrack
- 主要作用:定义初始入侵点的漏洞
admin_vulnerabilities
- 参数:
lib
:现有漏洞库 - 处理逻辑:添加管理员相关漏洞
- 主要作用:定义管理员节点的漏洞
dc_vulnerabilities
- 参数:
lib
:现有漏洞库 - 处理逻辑:添加域控制器相关漏洞,如
DumpNTDS
- 主要作用:定义域控制器节点的漏洞
new_random_environment
- 参数:
seed
:随机种子 - 处理逻辑:
- 设置随机种子
- 生成随机网络
- 创建环境对象
- 主要作用:生成随机 AD 环境
1.2 tiny_ad.py
这个文件定义了一个小型的 Active Directory 网络环境。
主要函数和变量
default_vulnerabilities
- 处理逻辑:创建默认漏洞库
- 主要作用:与 generate_ad.py 类似,但更简化
breach_vulnerabilities
- 处理逻辑:添加入侵漏洞
- 主要作用:定义初始入侵点的漏洞
admin_vulnerabilities
- 处理逻辑:添加管理员相关漏洞
- 主要作用:定义管理员节点的漏洞
dc_vulnerabilities
- 处理逻辑:添加域控制器相关漏洞
- 主要作用:定义域控制器节点的漏洞
nodes
- 类型:字典
- 内容:定义网络中的节点,包括域控制器和工作站
- 主要作用:构建小型 AD 网络的节点集合
new_environment
- 处理逻辑:创建环境对象
- 主要作用:生成小型 AD 环境
2. chainpattern 目录
2.1 chainpattern.py
这个文件定义了一个链式网络模式,节点按照特定模式连接。
主要函数
prefix
- 参数:
x
:索引name
:名称
- 处理逻辑:将索引和名称组合成节点 ID
- 主要作用:生成唯一的节点标识符
rdp_password 和 ssh_password
- 参数:
index
:链接索引 - 处理逻辑:生成特定格式的密码
- 主要作用:为链中的节点生成密码
current 和 next
- 参数:
name
:节点名称 - 处理逻辑:生成当前或下一个链接的节点 ID
- 主要作用:简化链式节点的引用
create_network_chain_link
- 参数:
n
:链接索引 - 处理逻辑:创建一对 Linux 和 Windows 节点,形成链的一环
- 主要作用:生成链式网络的一个环节
create_chain_network
- 参数:
size
:链的大小 - 处理逻辑:
- 创建起始节点和终止节点
- 添加中间链接
- 主要作用:生成完整的链式网络
new_environment
- 参数:
size
:链的大小 - 处理逻辑:创建环境对象
- 主要作用:生成链式网络环境
3. toyctf 目录
3.1 toy_ctf.py
这个文件定义了一个玩具 CTF(Capture The Flag)环境。
主要变量
nodes
- 类型:字典
- 内容:定义网络中的节点,包括网站、GitHub 项目、Azure 存储等
- 主要作用:构建 CTF 环境的节点集合
global_vulnerability_library
- 类型:字典
- 内容:全局漏洞库
- 主要作用:存储环境中的漏洞
new_environment
- 处理逻辑:创建环境对象
- 主要作用:生成 CTF 环境
3.2 tinytoy.py
这个文件定义了一个更小的玩具环境。
主要变量
nodes
- 类型:字典
- 内容:定义网络中的节点,包括网站和客户端
- 主要作用:构建微型环境的节点集合
new_environment
- 处理逻辑:创建环境对象
- 主要作用:生成微型环境
4. simple 目录
4.1 simpleenv.py
这个文件提供了一个简单的环境创建示例。
主要函数
main
- 处理逻辑:
- 创建简单图或随机图
- 分配随机标签
- 创建环境对象
- 序列化和保存环境
- 主要作用:演示如何创建和保存环境
文件之间的关联
1. 环境创建模式
所有 sample 文件都遵循相似的模式:
- 定义节点和漏洞
- 创建网络结构
- 提供
new_environment()
函数返回环境对象
这种一致性使得不同环境可以通过相同的接口创建和使用。
2. 环境复杂度层次
文件之间形成了复杂度递增的层次:
tinytoy.py
:最简单的环境,只有几个节点tiny_ad.py
:小型 Active Directory 环境toy_ctf.py
:更复杂的 CTF 环境generate_ad.py
:可配置的随机 AD 环境chainpattern.py
:可扩展的链式网络环境
3. 模块化设计
每个文件都是模块化设计的:
- 漏洞定义函数可以组合使用
- 节点创建逻辑可以被参数化
- 环境创建与网络定义分离
类之间的关联
虽然 samples
模块主要使用函数而非类,但我们可以分析其中的数据结构关联:
1. 节点与漏洞关联
- 节点(
NodeInfo
)包含漏洞字典 - 漏洞(
VulnerabilityInfo
)可能引用其他节点或凭证
2. 网络与环境关联
- 网络(由节点字典表示)是环境(
Environment
)的一部分 - 环境还包含漏洞库和标识符
3. 凭证与服务关联
- 服务(
ListeningService
)定义允许的凭证 - 漏洞可能泄露这些凭证
具体例子:攻击路径分析
以 tiny_ad.py
为例,我们可以分析一个完整的攻击路径:
- 攻击者从
workstation_0
开始(入侵点) - 利用
AuthorizationSpoofAndCrack
漏洞获取workstation_1
的凭证 - 连接到
workstation_1
,该节点具有管理员权限 - 利用
ProbeAdmin
漏洞确认管理员权限 - 利用
ScanForCreds
漏洞获取域控制器凭证 - 连接到
domain_controller_1
- 利用
DumpNTDS
漏洞获取所有用户凭证
这个攻击路径展示了如何通过一系列漏洞利用和横向移动来完成网络渗透。
另一个例子:链式网络攻击
以 chainpattern.py
为例:
- 攻击者从
start
节点开始 - 利用
ScanExplorerRecentFiles
获取第一个 Linux 节点的 SSH 密码 - 连接到 Linux 节点
- 利用
ScanBashHistory
发现下一个 Windows 节点 - 利用
CrackKeepPassX
获取 Windows 节点的 RDP 密码 - 连接到 Windows 节点
- 利用
ScanExplorerRecentFiles
发现下一个 Linux 节点 - 利用
CrackKeepPass
获取下一个 Linux 节点的 SSH 密码 - 重复这个过程,直到到达最终节点获取 FLAG
这个例子展示了如何通过链式网络进行渗透,每个节点都提供了到下一个节点的线索和凭证。
总结来说,samples
模块提供了多种网络环境模板,从简单到复杂,用于测试和评估不同的攻击策略和防御机制。这些环境模拟了现实世界中的网络结构和漏洞,为 CyberBattleSim 提供了丰富的测试场景。