CALDERA是一个网络安全平台,旨在轻松自动化模拟攻击,协助红队,自动化事件响应
Github仓库:GitHub - mitre/caldera: Automated Adversary Emulation Platform
Linux or MacOS
Python 3.7+ (with pip3)、GoLang 1.13+
1.我们到GitHub上的MITER官方CALDERA主页,在Kali上使用GitHub的克隆命令去下载
git clone https://github.com/mitre/caldera.git --recursive --branch
2.源码下载好后进入目录,安装框架所需模块
cd caldera pip3 install -r requirements.txt
3.启动CALDERA攻击模块
python3 server.py --insecure
对于mac,还需要安装upx
brew install upx
4.当出现了如图的All systems ready
说明可以访问了
4.1.然后用chrome访问ip:8888
即可看到登录页面,默认账号为admin/admin
、red/admin
、blue/admin
4.2.如果不想用8888端口,可以修改conf/default.yml
或者登录进去之后,在CONFIGURATION
->configuration
下修改
本次攻击演示会涉及到agents、abilities、adversaries、operations模块的利用
·agents连接到caldera的简单的客户端程序,用以接收指令,执行指令并将结果回传给服务端。目前默认的agent是使用go语言进行编写的,方便跨平台。
·abilities是描述ATT&CK矩阵内特定的某一项具体攻击技术(过程),用yml格式保存。
·adversaries配置文件是ATT&CK TTP
的集合,旨在主机或网络上创建特定效果。配置文件可用于攻击性或防御性用例,还允许上传自定义payload来作为战术的一部分进行使用
·operations可以使用许多可选配置启动操作,启动操作后,用户可以通过单击操作GUI模式中的"下载报告"按钮,以JSON格式导出操作报告。
·具体详情参考 '概念'
初级教程:靶机桌面会先弹出记事本,等记事本消失后再弹出计算器,其次弹出powershell,后台会执行whoami、ipconfig、创建注册表删除注册表、创建a.txt,a写入a.txt,删除a.txt和删除powershell操作
1.选择agents模块,打开模块后,先点击” deploy an agent”(建立一个代理)
2.然后根据我们的需求选择payload类型和靶机的操作系统,我选择的54ndc47(sandcat)
3.在这里我选择windows系统的payload
4.app.contact.http这一栏输入CALDERA服务端的IP和端口号(默认8888)。
5.复制其中任意一个payload,在靶机上(win+x)打开powershell,去执行生成的payload
6.回到caldera的agents界面,可以看到靶机已上线
·以上为靶机上线caldera操作
这里初级用法我是自己内置的手法去攻击,方便内部演示。大家可直接学习中级用法,和高级用法
7.初级用法
7.1用内置好的手法去攻击,这个方式更有利于初学者,上手方便
·选择adversaries,选择攻击
7.2.这里是攻击流程及方式
7.3.选择operations,创建一个操作
7.4.定义这次攻击的名称,选择一个组,选择一个攻击方式,Auto-close策略是否开启。其它几项大家需根据实际情况进行配置,我这里选择默认,点击start即可开始
7.5.开始之后会自动执行如图这样操作流程
7.6.可以去View Command去查看执行的操作,View Output查看返回的结果,success代表执行成功,failed代表执行失败
7.7.受害主机桌面上会先弹出记事本,等记事本消失后再弹出计算器,最后弹出powershell
8.中级用法
8.1.自己内置手法去攻击,
8.2.选择abilities,去创建一个abilities( 能力)
8.3.这里可以选择系统内置的payload,也可不选,我是添加的payload,command是需要执行的命令,其他选项自行描述即可
8.4.如何上传自己所需payload
把自己载好的payload直接上传到安装caldera对应的payloads文件夹,然后回到caldera页面刷新即可
cd caldera/plugins/atomic/payloads
8.5.选择adversaries,+New新建攻击方式,填好名称,以及描述后create(创建)
8.6.添加一个ability(能力)
8.7.选择刚刚新建的ability,最后保存并添加
8.8.就会发现多了一条adversaries,点击Save Profile(保存)
8.9.选择operations去攻击,新建operations,自定义本次攻击名称,选择好对应命名的adversary,最后 start即可
9.高级用法
9.1.编写yam去进行攻击
--- - id: a69794b0-ff99-4e8c-9c9c-1ac96b4fabf5 name: 内容输出 description: whoami内容输出到whoami.txt tactic: collection technique: attack_id: T1999 name: Data from Local System Too platforms: windows: cmd: command: | whoami > whoami.txt parsers: plugins.stockpile.app.parsers.ssh: - source: remote.ssh.cmd
9.2.保存为gongji.yml,上传到.yml文件指定目录/root/caldera/plugins/stockpile/data/abilities,这里我上传到了指定目录下的collection目录(其他目录都可)
/root/caldera/plugins/stockpile/data/abilities/collection
9.3.使用python3生成,首先倒入uuid包,然后输入命令uuid.uuid4(),生成id
uuid.uuid4()
9.4.获得uuid后,再替换掉之前的gongji名称
mv gongji.yml 56a4c7e4-a624-484b-93da-df85d637800a.yml
9.5.去caldera主页刷新即可看到新增的ability
9.6.点击Adversaries,再点击ADD按钮,然后添加自己的yml。输入名称后点击保存。add ability,选择collection,就可以看到我们新增的Technique和ability
9.7.后面操作同上(8.8)
9.8.输出结果
·能力(ability)是描述ATT&CK矩阵内特定的某一项具体攻击技术(过程),用yml格式保存。 · command(必需) 所需要执行的代码
·payload(可选) 该ability运行所需要的文件
·cleanup(可选) 将计算机还原到运行该ability之前的状态
·parser(可选) 将command的结果解析成一个新的facts
·adversaries配置文件是ATT&CK TTP
的集合,旨在主机或网络上创建特定效果。配置文件可用于攻击性或防御性用例,还允许上传自定义payload来作为战术的一部分进行使用
·可以选择一个配置,右侧会列出当前配置的一些功能
·如果需要添加ATT&CK
里的某种策略和技术,可以点击add ability添加
·选择某个ability之后会弹出描述和相应的这个ability所执行的命令
·配置好以上策略之后,即可在operations发起攻击
·定义这次攻击的名称,选择一个组,选择一个配置,Auto-close策略是否开启。其它几项大家需根据实际情况进行配置,我这里选择默认,点击start即可开始
·绿色表示成功,红色表示失败,蓝色表示超时,点击每个时间轴右边的view output可查看运行结果
·在这里,你可以用数据库中的ability给任何agent分配任务--在操作的范围之外。这对于进行初始访问攻击特别有用。要做到这一点,在本地部署一个agent,下发 pre-ATT&CK或初始访问战术任务,指向任何目标。你甚至可以远程部署一个agent,把它作为代理来进行初始访问攻击。在右边,你会看到直接分配给agent的每项ability。
·Atomic 插件从其开源 GitHub 存储库导入所有 Red Canary Atomic 测试
·创建可视化效果以浏览 TTP
·1点击"生成图层"
·2单击"+"以在导航器中打开新选项卡
·3选择"打开现有图层"
·4选择"从本地上传"并上传生成的图层文件
·提供了整体活动信息图,并对选定的一组操作进行分析。它提供操作元数据的集中视图和操作、所使用的技术和策略以及操作发现的事实以图形方式显示。
·该插件还支持以PDF格式导出
·PLUGINS
中的manx
终端插件,它通过一个原始的TCP
套接字与服务器通信。除了作为一个正常的agent运行之外,Manx
还可以作为一个反向shell。当您部署它时,您将看到会话在下面弹出,允许您手动与受影响的主机进行交互。
·Sandcat插件,也称为54ndc47,是CALDERA附带的默认代理。54ndc47 是用 GoLang 编写的,以实现跨平台兼容性。
·54ndc47 代理需要在端口 8888 上连接到 CALDERA。
PLUGINS
中的stockpile
为能力数据库,库中包含一组TTP
(abilities),adversary配置,数据源(data sources)和规划器(planners)。这些可用于针对目标主机构建动态操作(operations)。
我们以后写的yml,都是要放在这里面的。plugins/stockpile/data/*
·里面包含一些使用教程
·Fact是关于给定计算机的可识别信息(如主机名,用户名,文件扩展名等),fact可在能力(ability)中的command使用变量来引用。
·fact由三部分组成:
·name:一个具有3个属性的描述符,例如 host.user.name,代表主机用户名
·value:任意的字符串,例如“administrator”
·source:重要性得分,默认为1
·blacklist:0或者1,如果为1则表示该fact不可用,例如将(host.ip.address,"192.168.1.5")设置为1,则在横向移动的时候不会尝试该地址
*Advanced*` *->* `*Fact Sources*` -> `+ add fact
·rule是对CALDERA进行限制或设置界限的一种方式。rule与fact直接相关,应包括在fact表中。
·rule的作用类似于防火墙规则,有三个关键部分:fact、action和match。
·fact指定了rule将适用的fact的名称。
·Action(ALLOW,DENY)将允许或拒绝使用该fact,如果它与规则匹配的话。
·在多个rule匹配同一fact分配的情况下,以最后的为主。
举例:
- action: DENY fact: my.host.ip match: .* - action: ALLOW fact: my.host.ip match: 10.245.112.0/24
·规则将允许 CALDERA 仅在 10.245.112.1 到 10.245.112.254 范围内运行
·可以在app/objects/c_objective.py中检查 Objective 对象
·目标对象利用四个属性,如下所述
·id:目标的id
·name:目标的名称
·description:目标的描述
·goals:目标对象的列表
目前,可以通过创建objective YAML文件或通过objectives web UI模式将目标添加到caldera
id: 7ac9ef07-defa-4d09-87c0-2719868efbb5 name: testing description: This is a test objective that is satisfied if it finds a user with a username of 'test' goals: - count: 1 operator: '=' target: host.user.name value: 'test'
·目标可以通过对手web UI绑定到对手,也可以通过向对手的yaml文件添加类似于以下内容的行来绑定到对手
objective: 7ac9ef07-defa-4d09-87c0-2719868efbb5
·策略器(planner)是caldera中的一个模块(单独的py文件),其中包含运行操作(operation)应如何使用哪种能力(ability)以及以什么顺序执行的决策逻辑
·Advanced
中的sources
为red
收集的数据片段,事实是可识别的数据片段,由代理收集或在服务器启动时加载。来源是事实的集合。规则是确保不能使用特定特性的边界。
·Caldera的配置文件,示例如下所示
·其中memory表示使用内存中的数据库,每次关闭caldera不保存本次运行的数据。
Exfil_dir表示agent将收集到的文件发送给caldera时的目录。
·记录caldera
通过所有协议发出的命令
·Advanced
中的obfuscators
为红队行动前混淆模式的介绍,方便红队使用该功能,用于逃避检测。
·目前提供的混淆模式:
·plain-text:明文
·base64:base64编码混淆
·base64jumble:混淆base64中的命令,然后添加字符以逃避base64检测。这可能会导致重复连接运行。
·caesar cipher:凯撒加密混淆
·base64noPadding:base64编码混淆,然后删除填充
·Steganography:图像隐写
·对通讯地址及插件进行配置
·将文件上传到caldera服务器上,路径为配置文件中的exfil_dir
·curl -F 'data=@path/to/file' http://localhost:8888/file/upload
·下载指定文件到本地中
·curl -X POST -H "file:wifi.sh" http://localhost:8888/file/download > wifi.sh
--- - id: 300157e5-f4ad-4569-b533-9d1fa0e74d74 name: Compress staged directory description: Compress a directory on the file system tactic: exfiltration technique: attack_id: T1002 name: Data Compressed platforms: darwin: sh: command: | tar -P -zcf #{host.dir.staged.private}.tar.gz #{host.dir.staged.private} && echo #{host.dir.staged.private}.tar.gz cleanup: | rm #{host.dir.staged.private}.tar.gz parser: name: line property: host.dir.compress.private script: '' linux: sh: command: | tar -P -zcf #{host.dir.staged.private}.tar.gz #{host.dir.staged.private} && echo #{host.dir.staged.private}.tar.gz cleanup: | rm #{host.dir.staged.private}.tar.gz parser: name: line property: host.dir.compress.private script: '' windows: psh,pwsh: command: | Compress-Archive -Path #{host.dir.staged.private} -DestinationPath #{host.dir.staged.private}.zip -Force; ls #{host.dir.staged.private}.zip | foreach {$_.FullName} | select cleanup: | rm #{host.dir.staged.private}.zip parser: name: line property: host.dir.compress.private script: ''
本教程仅供自己闲暇学习交流使用,请勿用于非法用途。否则,本人不承担任何法律责任!!