赞
踩
Gtihub主页:microsoft/CyberBattleSim
微软尝试利用AI和机器学习来解决安全挑战,研究智能体是如何在模拟的企业网络内进行交互和强化学习技术如何帮助提高安全性。
CyberBattleSim是用于研究网络攻防模拟的套件,这个实验研究项目探索在抽象模拟的企业环境中智能体是如何运作的。该模拟环境提供了对计算机网络和网络安全概念高层次抽象。使用基于python的OpenAI Gym接口来使用强化学习训练智能体。
模拟环境是一种参数化的固定的网络拓扑和一组代理可以用来横向移动的漏洞集合。攻击者的目标是通过利用植入计算机结点的漏洞获得部分网络的控制权。当攻击者试图在网络中进行横向移动时,防御者观察网络活动并尝试检测任何正在发生的攻击,并通过驱逐攻击者减轻对系统的影响。
CyberBattleSim提供了一个基于随机的防御者,通过预先定义的成功概率来检测和缓解正在进行的攻击。通过重新镜像受感染的结点来实施缓解措施,一个抽象的建模为跨越多个模拟步骤的操作的过程。
鼓励研究社区探索在这种网络环境中,网络空间代理的相互作用和进化。
模拟环境性能要求低,更轻量,速度快,抽象,并且可控性更强,适用于强化学习实验
CyberBattleSim的仿真固然简单,但是简单是具有优势的。高度抽象的性质使得无法直接应用于现实系统,从而防止了潜在的恶意训练的自动化代理使用。同时,这种简单可以使我们更专注于特定的安全性方面,例如研究和快速试验最新的机器学习和AI算法。
例如当前的实现方式侧重于横向移动,希望理解网络拓扑和配置并施加影响。基于这一目标,没有必要对实际的网络流量进行建模。这只是未来系统中可能要解决的一个重要局限性的例子。
在算法方面提供了一些基础的代理作为出发点,但是我们很想知道如何将最新的强化学习算法和他们进行比较。我们发现与其他应用程序(视频游戏或机器人)相比,计算机系统具有的大型动作空间是强化学习的一个特殊挑战。在面对代理通常不具有内部记忆的强化学习技术时,训练可以存储和检索凭证的代理是另外一个挑战。
还有一些可以用于研究的问题:
专注于所有post-breach攻击固有的横向移动技术。
强化学习建模:
每个结点都有一组分配的命名属性,先决条件可以表示为基于可能结点属性集合的布尔表达式
每个漏洞都有预定义的结果,可能包括:
远程漏洞举例:
本地漏洞举例:
漏洞可以在结点级别使用时定义,也可以由全局定义,并由先决条件布尔表达式激活
主要关注了用户角色与凭证(有凭证才可以登录其他机器),连接性(发现其他机器以及到其他机器的连接),漏洞(漏洞的前提条件及漏洞利用效果)
重点:建议使用docker构建运行,自己安装可能会出现各种问题
toyctf环境由cyberbattle/samples/toyctf/toy_ctf.py
文件定义.
为了简单起见,这个环境中没有防御者,且是完全静态的(攻击者的两次行动之间没有外部事件)
打开上述notebook,运行命令:
env.plot_environment_graph() plot() c2.run_attack('client', 'SearchEdgeHistory') plot() c2.run_remote_attack('client', 'Website', 'ScanPageContent') plot() c2.run_remote_attack('client', 'Website', 'ScanPageSource') plot() c2.run_remote_attack('client', 'Website.Directory', 'NavigateWebDirectoryFurther') plot() c2.connect_and_infect('client', 'Website', 'SSH', 'ReusedMySqlCred-web') plot()
效果:
按照可以从与节点关联的属性中学习的特殊模式定义的一组网络。
模式为:Start ---> (Linux ---> Windows ---> ... Linux ---> Windows)* ---> Linux[Flag]
对每一个XXX ---> Windows/Linux
,XXX结点将RDP密码或SSH凭据暴露给Windows/Linux的本地漏洞,同时暴露一些成本高昂但是没有结果的陷阱漏洞
该链式网络由一个带flag的reward结点终止
该环境由cyberbattle/samples/chainpattern/chainpattern.py
文件定义
随机代理由cyberbattle.agents.random_agent
文件定义
链式网络中的随机代理基准测试notebook:notebooks/chainnetwork-random.ipynb
上图显示了应用不同攻击者代理时,轮数和获取整个网络控制权的迭代次数之间的关系。迭代次数越少越好,说明攻击者可以更快的获得网络的控制权,这个模拟被设置为在攻击者获取整个网络后终止。可以看到效果最好的是Deep Q-Learning
应用了四种攻击者代理:
上图展示了不同攻击者代理的累计奖励。一旦所有网络结点都被攻击者拥有后,利用获得结点上的漏洞扔可能获得其他奖励,但是在该实验中,一旦攻击者拥有了所有结点,便终止游戏忙着解释了为什么为网络所有权优化的DQL代理虽然击败了其他的代理,但是却无法获得最大的回报。
Gym的Done函数可以针对特定的奖励被重新配置,在这种情况下DQL仍然打败了其他代理。
对比 | Size agnostic features | Size-dependant features |
---|---|---|
Tabular Q vs Random |
衡量从一种环境中学习的策略并将其应用于不同规模的类似环境的能力。在x大小的环境中训练,在y>x的环境中进行评估。
使用与环境大小成比例的特征(如节点数,凭据数)无法提供最佳结果。但是当使用最近发现的端口和节点属性的滑动窗口时,代理的性能会更好。(翻译不太对可能)
对比 | Train on size 4 , evaluated on size 10 | Train on size 10, evaluated on size 4 |
---|---|---|
Tabular Q vs Random |
目前的版本提供了两个防御者代理,定义于文件cyberbattle/_env/defender.py
,分别是
添加了防御者代理的示例:cyberbattle/agents/baseline/notebooks/notebook_withdefender.py
定义于`cyberbattle/simulation/actions.py``文件
|-- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。