C2简介
C2简介
学习命令与控制的基本知识,帮助您成为更好的红队队员并简化您的下一次红队评估!
thm:https://tryhackme.com/room/introtoc2
介绍
命令与控制 ( C2 ) 框架是红队队员和高级对手战术手册的重要组成部分。它们使在交战期间管理受损设备变得容易,并且通常有助于横向移动。
目标
- 命令和控制框架如何运作
- 您可能使用的各种组件。
- 如何建立一个基本的命令和控制框架
- 使用 Armitage或 Metasploit 来熟悉命令和控制框架
- 如何管理命令和控制框架
- 管理命令和控制框架时的OPSEC考虑因素
- 以及更多!
命令和控制框架
什么是命令和控制框架
在尝试消化C2框架的各种组件时,它可能会令人生畏。然而,他们不必如此。为了更好地理解什么是最基本的 C2 框架,请考虑一个 Netcat 侦听器(C2 服务器),它能够一次处理许多反向 shell 回调(C2 代理)。它是一个服务器,但用于反向 shell。与 Netcat 不同,几乎所有 C2 框架都需要一个特殊的有效负载生成器。这通常是框架本身内置的功能。例如,Metasploit 是一个 C2 框架,它有自己的有效负载生成器 MSFVenom。
上图描绘了三个受感染的客户端回调C2服务器。
命令和控制结构
C2服务器
为了理解命令和控制框架,我们必须首先了解C2服务器的各种组件。让我们从最重要的组件开始——C2 服务器本身。C2服务器充当代理回拨的中心。代理将定期与 C2 服务器联系并等待操作员的命令。
Agents / Payloads
代理是由C2框架生成的程序,它回调 C2 服务器上的侦听器。大多数时候,与标准反向 shell 相比,此代理启用特殊功能。大多数 C2 框架都实施伪命令,以使 C2 操作员的工作更轻松。这方面的一些示例可能是将文件下载或上传到系统的伪命令。重要的是要知道代理可以是高度可配置的,可以调整 C2 代理向 C2 服务器上的侦听器发送信标的时间等等。
Listeners
在最基本的层面上,侦听器是在C2服务器上运行的应用程序,它等待通过特定端口或协议的回调。这方面的一些示例是 DNS、HTTP 和/或 HTTPS。
信标
Beacon 是C2 Agent 回调运行在 C2 Server 上的监听器的过程。
混淆代理回调
Sleep Timers
一些安全分析师、防病毒软件和下一代防火墙在尝试识别命令和控制流量时寻找的一个关键因素是信标和设备向C2服务器发出信标的速率。假设防火墙观察到的流量看起来像这样
- TCP/443 - 会话持续时间 3 秒,发送 55 个数据包,10:00:05.000
- TCP/443 - 会话持续时间 2 秒,发送 33 个数据包,10:00:10.000
- TCP/443 - 会话持续时间 3 秒,发送 55 个数据包,10:00:15.000
- TCP/443 - 会话持续时间 1 秒,发送 33 个数据包,10:00:20.000
- TCP/443 - 会话持续时间 3 秒,发送 55 个数据包,10:00:25.000
一种模式开始形成。代理每 5 秒发出一次信标;这意味着它有一个 5 秒的睡眠定时器。
Jitter
抖动采用睡眠定时器并为其添加一些变化;我们的C2信标现在可能会表现出一种奇怪的模式,该模式可能显示更接近普通用户的活动:
- TCP/443 - 会话持续时间 3 秒,发送 55 个数据包,10:00:03.580
- TCP/443 - 会话持续时间 2 秒,发送 33 个数据包,10:00:13.213
- TCP/443 - 会话持续时间 3 秒,发送 55 个数据包,10:00:14.912
- TCP/443 - 会话持续时间 1 秒,发送 33 个数据包,10:00:23.444
- TCP/443 - 会话持续时间 3 秒,发送 55 个数据包,10:00:27.182
信标现在设置为半不规则模式,这使得在常规用户流量中识别起来稍微困难一些。在更高级的C2框架中,可能会改变各种其他参数,例如“文件”抖动或将垃圾数据添加到有效载荷或正在传输的文件中,使其看起来比实际更大。
有效载荷类型
与常规的反向 Shell 非常相似,您可以在C2框架中使用两种主要类型的有效载荷;分阶段和无阶段有效载荷。
无阶段有效载荷
Stageless Payloads 是两者中最简单的;它们包含完整的C2代理并将回调到 C2 服务器并立即开始发送信标。您可以参考下图以更好地了解 Stageless 有效负载的运行方式。
使用 Stageless 有效载荷建立C2信标的步骤如下:
- 1.受害者下载并执行Dropper
- 2.开始 向C2服务器发送信标
分阶段有效载荷
分阶段有效载荷需要回调到C2服务器以下载 C2 代理的其他部分。这通常被称为“Dropper”,因为它被“Dropped”到受害机器上以下载我们暂存的 payload 的第二阶段。这是优于无阶段负载的首选方法,因为需要编写少量代码来从 C2 服务器检索 C2 代理的其他部分。它还可以更轻松地混淆代码以绕过防病毒程序。
使用分阶段有效载荷建立C2信标的步骤如下:
- 1.受害者下载并执行Dropper
- 2.Dropper回调C2 Server进行Stage 2
- 3.C2服务器将阶段 2 发送回受害者工作站
- 4.阶段 2 被加载到受害者工作站的内存中
- 5.C2信标初始化,红队/威胁行为者可以与 C2 服务器上的受害者交战。
有效载荷格式
您可能知道,Windows PE 文件(可执行文件)并不是在系统上执行代码的唯一方式。一些C2框架支持各种其他格式的有效负载,例如:
PowerShell脚本
其中可能包含 C# 代码,并且可以使用 Add-Type commandlet 进行编译和执行
HTA Files
JScript Files
Visual Basic 应用程序/脚本
微软办公文件
参考:https://www.cnblogs.com/-Lucky-/p/17411865.html
模块
模块是任何C2框架的核心组件,它们增加了使代理和C2服务器更加灵活的能力。根据C2框架,脚本必须用不同的语言编写。Cobalt Strike有“Aggressor Scripts”,它们是用“Aggressor Scripting Language”编写的。PowerShell Empire支持多种语言,Metasploit的模块是用Ruby编写的,许多其他模块则用许多其他语言编写。
后期开发模块
Post Exploitation 模块只是在初始妥协点之后处理任何事情的模块,这可能像运行 SharpHound.ps1 一样简单以查找横向移动路径,也可能像转储 LSASS 和解析内存中的凭据一样复杂。
旋转模块
C2框架的最后一个主要组件之一是其枢轴模块,这使得访问 C2 框架内的受限网络段变得更加容易。如果您在系统上具有管理权限,则可以打开“SMB 信标”,它可以使机器通过 SMB 协议充当代理。这可能允许受限网段中的机器与您的 C2 服务器通信。
该图描述了多个受害者,他们使用 SMB 枢轴回调C2服务器。
上图显示了受限网段内的主机如何回调C2 Server:
- Victims 回调到非受限网段中另一个 Victim 上的 SMB 命名管道。
- 非受限网段的Victim通过标准beacon回调C2 Server。
- C2 服务器然后将命令发回非受限网段中的受害者。
- 非受限网段的Victim再将C2指令转发给受限网段的主机。
面向世界
所有红队队员必须克服的一个重要障碍是将基础设施置于清晰可见的位置。有许多不同的方法可以做到这一点;最流行的方法之一称为“域前端”。
域名前端
Domain Fronting 使用已知的好主机(例如)Cloudflare。Cloudflare 经营的业务提供有关HTTP连接详细信息的增强指标以及缓存 HTTP 连接请求以节省带宽。红队队员可以滥用这一点,使工作站或服务器看起来正在与已知的、可信的 IP 地址进行通信。地理位置结果将显示最近的 Cloudflare 服务器所在的位置,IP 地址将显示为 Cloudflare 的所有权。
上图描述了域前端的工作原理:
- C2 Operator有一个通过 Cloudflare 代理所有请求的域。
- 受害者向C2域发送信标。
- Cloudflare 代理请求,然后查看主机标头并将流量中继到正确的服务器。
- C2服务器随后使用 C2 命令响应 Cloudflare。
- 受害者随后收到来自 Cloudflare 的命令。
由于 HTTPS 请求已加密,因此可能无法提取特定标头(例如:X- C2 -Server 或主机)。通过使用 C2 配置文件,我们可以隐藏我们的 C2 服务器以防安全分析师窥探。有关 C2 配置文件如何强大的更多信息,请参阅这篇关于了解 Cobalt Strike 的可延展 C2 配置文件的博文。
通用 C2 框架
通用C2框架
在整个旅程中,您可能会遇到许多不同的C2框架;我们将讨论一些被红队和对手广泛使用的流行 C2 框架。我们将把它分成两部分:
- 自由的
- 付费
您可能会问一些问题,例如“我为什么要使用高级或付费C2框架?”,这是一个很好的问题。高级/付费 C2 框架通常不太可能被反病毒供应商检测到。这并不是说不可能被检测到,只是开源的C2项目一般都很好理解,并且可以很容易地开发签名。
通常,高级C2框架通常具有更高级的后开发模块、枢轴功能,甚至是开源软件开发人员有时可能无法满足的功能请求。例如,Cobalt Strike 提供的一项功能是大多数其他 C2 框架所不具备的,即能够从信标打开 VPN 隧道。如果代理在您的特定情况下不能很好地工作,这可能是一个很棒的功能。您必须进行研究以找出最适合您的团队的方法。
免费的c2框架
Metasploit
由 Rapid7 开发和维护的Metasploit Framework是最流行的利用和利用后利用框架 ( C2 ) 之一,它是公开可用的,并且安装在大多数渗透测试发行版上。
root@kali$ msfconsole
Armitage
Armitage 是 Metasploit 框架的扩展——它添加了一个图形用户界面并用 Java 编写,与 Cobalt Strike 非常相似。这是因为它们都是由 Raphael Mudge 开发的。Armitage 提供了一种简单的方法来枚举和可视化您的所有目标。除了看起来很像 Cobalt Strike,它甚至提供了一些独特的功能。最受欢迎的一种可以在“攻击”菜单中找到;此功能称为 Hail Mary 攻击,它会尝试对特定工作站上运行的服务运行所有攻击。Armitage 真的是“快速而简单的黑客”。
Powershell Empire/Starkiller
Powershell Empire和Starkiller是另一个非常受欢迎的C2,最初由 Veris Group 的 Harmjoy、Sixdub 和 Enigma0x3 创建。目前,该项目已经停止并被 BC 安全团队(Cx01N、Hubbl3 和 _Vinnybod)接管。Empire 的特点是使用多种语言编写的代理,与多种平台兼容,使其成为一个用途广泛的 C2。
Covenant
Ryan Cobb 的Covenant是我们将要介绍的最后一个免费C2框架——到目前为止,它是用 C# 编写的最独特的 C2 框架之一。与 Metasploit/Armitage 不同,它主要用于具有高度可定制代理的 HTTP、HTTPS 和 SMB 侦听器的后期开发和横向移动 。
Sliver
Bishop Fox的Sliver是一个高级的、高度可定制的多用户、基于 CLI 的C2框架。Sliver 是用 Go 语言编写的,这使得 C2“植入物”的逆向工程变得异常困难。它支持用于 C2 通信的各种协议,例如 WireGuard、mTLS、HTTP(S)、DNS 等等。此外,它还支持用于附加功能的 BOF 文件、用于屏蔽 C2 通信的 DNS 金丝雀域、用于 HTTPS 信标的自动 Let's Encrypt 证书生成等等。
付费C2框架
Cobalt Strike
Help Systems 的Cobalt Strike(以前由 Raphael Mudge 创建)可以说是仅次于 Metasploit 的最著名的命令和控制框架之一。与 Artimage 非常相似,它是用 Java 编写的,并且设计得尽可能灵活。
Brute Ratel
Chetan Nayak 或 Paranoid Ninja 的Brute Ratel是一个命令和控制框架,作为“可定制的命令和控制中心”或“C4”框架销售,它作为一个独特的 C2 框架提供真正的模拟对手体验。有
C2的操作基础
访问在本地侦听的远程C2服务器
通过 SSH 端口转发安全地访问您的C2服务器;如果您之前使用 SSH 进行端口转发,请随意跳过本节,您可能不会学到任何新东西。对于那些不熟悉的人,SSH 端口转发允许我们通过将本地端口转发到远程服务器来托管远程机器上的资源,或者允许我们访问我们正在连接的远程机器上的本地资源。在某些情况下,这可能是为了绕过防火墙。
或者,在我们的例子中,出于操作安全原因,可以这样做。
现在我们已经更好地理解了为什么我们想要 SSH 端口转发,让我们来看看如何做。
C2简介的更多相关文章
- jquery简介和实例
一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. 参考:http://www.php100 ...
- JavaWeb:Web与HTTP协议简介
JavaWeb:Web与HTTP协议简介 Web的概念 什么是Web: Web是网络上使用最广泛的分布式应用架构. 旨在共享分布在网络上的各个Web服务器中的所有互相连接的信息. 三个特征: 用HTM ...
- 恶意软件/BOT/C2隐蔽上线方式研究
catalogue . 传统木马上线方式 . 新型木马上线方式 . QQ昵称上线 . QQ空间资料上线 . 第三方域名上线 . UDP/TCP二阶段混合上线 . Gmail CNC . NetBot两 ...
- git rebase简介(基本篇)
原文: http://gitbook.liuhui998.com/4_2.html 一.基本 git rebase用于把一个分支的修改合并到当前分支. 假设你现在基于远程分支"origin& ...
- [python] 线程简介
参考:http://www.cnblogs.com/aylin/p/5601969.html 我是搬运工,特别感谢张岩林老师! python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件 ...
- 支持向量机(SVM)简介
主要内容 一:SVM简介 二:线性分类 三:分类间隔 四:核函数 五:松弛变量 SVM简介 支持向量机(support vector Machine)是由Cortes和Vapnik于1995年首先提出 ...
- 【c++】标准模板库STL入门简介与常见用法
一.STL简介 1.什么是STL STL(Standard Template Library)标准模板库,主要由容器.迭代器.算法.函数对象.内存分配器和适配器六大部分组成.STL已是标准C++的一部 ...
- EL表达式简介
EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据. ...
- [lua]lua简介
在这篇文章中,我想向大家介绍如何进行Lua程序设计.我假设大家都学过至少一门编程语言,比如Basic或C,特别是C.因为Lua的最大用途是在宿主程序中作为脚本使用的. Lua 的语法比较简单,学习起来 ...
- MySQL · 引擎特性 · InnoDB 事务锁简介
https://yq.aliyun.com/articles/4270# zhaiwx_yinfeng 2016-02-02 19:00:43 浏览2194 评论0 mysql innodb lock ...
随机推荐
- aspnetcore中aop的实现
aaspnetcore开发框架中实现aop不仅仅在业务上,在代码的优雅简洁和架构的稳定上都有着至关重要. 下面介绍三种用过的. 第一种通过System.Reflection的DispatchProxy ...
- 解决el-checked-group中v-medel绑定的是一个数组对象方法(不用修改源码)
思路:弃用el-checked-group使用el-checked模拟 <!DOCTYPE html> <html> <head> <meta charset ...
- fastjson很好,但不适合我
记者:大爷您有什么特长呀? fastjson:我很快. 记者:23423乘以4534等于多少? fastjson:等于2343. 记者:?? fastjson:你就说快不快吧! 这个略显马丽苏的标题, ...
- Windows服务器高物理内存占用问题排察
我经常在手中拿着一个内存条手链,以彰显我是计算机深入挖掘专家,它就是一个象征,类似摸金符,有它代表你有资格可以探墓了. 同事找到我说:"我们有一台服务器,内存资源持续高位运行,经常浮动在80 ...
- IO流中「线程」模型总结
目录 一.基础简介 二.同步阻塞 1.模型图解 2.参考案例 三.同步非阻塞 1.模型图解 2.参考案例 四.异步非阻塞 1.模型图解 2.参考案例 五.Reactor模型 1.模型图解 1.1 Re ...
- 开源Apinto网关-流量策略
背景介绍 Apinto是一款高性能.可扩展.易维护的API网关. Apinto网关基于GO语言模块化开发,5分钟极速部署,配置简单.易于维护,支持集群与动态扩容,企业级开箱即用.Apinto除了提供丰 ...
- 从ajax到跨域引发的相关面试题总结
转载请注明出处: 1.ajax异步和同步的区别 Ajax是一种基于JavaScript语言和XMLHttpRequest对象的异步数据传输技术,通过它可以使不用刷新整个页面的情况下,对页面进行部分更新 ...
- 【MyBatis】分页插件
分页插件 分页插件配置 a 添加依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artif ...
- 链式描述线性表(C++实现)
在链式描述中,线性表的元素在内存中的存储位置是随机的,每个元素都有一个明确的指针或链指向下一个元素的位置 chain类 在此使用单向链表实现了线性表,其中最后一个节点的指针域为NULL,即它用单向链接 ...
- SRAM 测试总结
SoC随着工艺进步设计复杂度增加,embeded sram也越来越多.在40nm SoC产品Sram一般在20Mbits左右,当工艺发展到28nm时Sram就增加到100Mbits.如果考虑AI产品, ...