真实较量 | 红队视角下的Cobalt_Strike猎杀
2024-1-11 10:17:24 Author: www.freebuf.com(查看原文) 阅读量:24 收藏

一、背景

远控工具在黑客攻击、渗透测试、红蓝对抗、攻防演练等场景中被广泛应用,针对远控类攻击的研究及检测刻不容缓,常见远程管理控制工具包括MSF、CobaltStrike、Armitage等。

随着攻防对抗的升级,攻击者的攻击姿势也在不断提升,常规普通木马直接利用到免杀处理,导致本地查杀更加困难。

二、CobaltStrike介绍

CobaltStrike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS。CobaltStrike分为客户端与服务端,服务端只有一个,客户端可以有多个,这样就可以通过团队进行分布式协团操作。CobaltStrike集成了端口转发、服务扫描、自动化溢出、多模式端口监听、Windows exe木马生成、Windows dll木马生成、Java木马生成、Office 宏病毒生成、木马捆绑浏览器自动攻击等强大的功能。同时,Cobalt Strike还可以调用Mimikatz等其他知名工具,因此广受黑客喜爱。

这次分享仅介绍其中最常用的功能生成恶意程序,监听上线受害者终端。

1704937299_659f4753375becacc0645.png!small?1704937299501

这个工具的社区版是Armitage(一个MSF的图形化界面工具),而Cobaltstrike可以理解其为Armitage的商业版。早期版本CobaltSrtike依赖Metasploit框架,而现在Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端(Client)与服务端(Teamserver),服务端是一个,客户端可以有多个,团队可进行分布式协团操作。

项目官网:https://www.cobaltstrike.com

下图所示,多个客户端可以方便团队多人协作完成项目攻击渗透。其中:

Client:攻击者A、攻击者B…….

TeamServer:运行Cobalt Strike工具的服务端,一般为虚拟专用服务器。

Server:受害者终端及运行了恶意程序的主机。

1704937329_659f477147b4d775a1412.png!small?1704937329455

下图为CobaltStrike工作界面及运行环境简单拓扑,其中前面客户端为攻击者,中间为攻击者的服务端一般是互联网虚拟专用服务器,后面为被攻击者终端,三者之间关系为攻击者通过启动客户端+服务端对被攻击者进行数据获取达到攻击目标。

1704937411_659f47c363ba34a199e91.png!small?1704937411559

1.服务端运行

服务端启动(基于Java环境需要安装jdk)本次运行环境为Linux。切换到程序目录,运行程序+真实IP+密码

./teamserver 103.234.72.90 tianmu

注意:这里IP为虚拟专用服务器地址,密码为客户连接输入使用,可以自定义。

1704937510_659f48268ccb6ed61d019.png!small?1704937510788

2.客户端启动

切换到程序目录,以Windows环境启动为例,运行bat文件或者vbs文件打开客户端。

1704937564_659f485ce26e44300037e.png!small?1704937565162

根据服务端信息依次填写,这里用户名可以随意填写,完成后连接即可使用客户端对服务端进行操作。

1704937583_659f486fefd5ff79c5791.png!small?1704937584143

3.连接成功到服务端这里需要注意服务端防火墙策略允许,否则无法成功连接。

1704937618_659f4892d2b9e54a3d6dc.png!small?1704937619105

在控制台所有操作指令都会被记录保留在Cobalt Strike目录logs下。

(上述操作行为是攻击者准备阶段,未对被攻击端做控制)

3.参数详情

以下为攻击者客户端成功连接服务端程序功能介绍。

程序功能1

1704937710_659f48ee5e4a2449dbbba.png!small?1704937710650

New Connection #新的连接(支持连接多个服务端)

Preferences #偏好设置(设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录等)

Visualization #窗口视图模式(展示输出结果的形式)

Listenrs #监听器(创建Listener)

Script Manager #脚本管理

Close #关闭

程序功能2

1704937741_659f490d4cda844952e81.png!small?1704937741564

Applications #应用(显示受害者机器的应用信息)

Credentials #凭证(通过hashdump或Mimikatz抓取过的密码都会储存在这里)

Downloads #下载文件

Event Log #事件日志(主机上线记录以及团队协作聊天记录)

Keystrokes #键盘记录

Proxy Pivots #代理模块

Screenshots #截图

Script Console #脚本控制台(可以加载各种脚本,增强功能https://github.com/rsmudge/cortana-scripts)

Targets #显示目标主机

Web Log #Web日志

程序功能3

1704937773_659f492d5ae2b6577f9b1.png!small?1704937773632

HTML Application #生成恶意的HTA木马文件

MS Office Macro #生成office宏病毒文件

Payload Generator #生成各种语言版本的payload

USB/CD AutoPlay #生成利用自动播放运行的木马文件

Windows Dropper #捆绑器,能够对文档类进行捆绑

Windows Executable #生成可执行Payload

Windows Executable(S) #把包含payload,Stageless生成可执行文件(包含多数功能)

程序功能4

1704937809_659f49511350cb5ccb686.png!small?1704937809311

Activity report #活动报告

Hosts report #主机报告

Indicators of Compromise #威胁报告

Sessions report #会话报告

Social engineering report #社会工程学报告

Tactics, Techniques, and Procedures #策略、技巧和程序

Reset Data #重置数据

Export Data #导出数据

程序功能5

Homepage #官方主页

Support #技术支持

Arsenal #开发者

System information #版本信息

About #关于

1704937892_659f49a47f99ec396c339.png!small?1704937892757

4.免杀

在介绍免杀之前,需要先了解什么啥查杀。杀毒软件基本由扫描器、病毒特征库和虚拟机组成,它会把文件放在虚拟机内运行,扫描该文件的特征,包括静态特征、内存特征、行为特征等,通过和病毒特征库对比来判断一个文件是否为恶意文件。常见的杀毒软件查杀主要包括以下几个方面:

静态查杀:查杀静态的文件,一个病毒文件在编译生成之后,该文件本身就会有特征,比如文件的某个部分是由特定字符组成,杀软匹配到特定字符则判断该文件为恶意文件。

内存查杀:病毒文件在运行后会将自身释放到内存中,释放后的文件在内存中也会存在特定字符,根据这些特定字符也可查杀。

行为查杀:程序的一些特定行为也会被杀软判定为恶意程序,如自删除、加入启动项、释放文件到特定目录、调用敏感的dll或程序、获取主机杀软运行状态等。

云查杀:相当于所有用户的机器为Agent,然后有一个服务端,杀软会把文件自动传到云沙想使用各种杀毒引擎查杀并同步病毒特征到所有Agent。

三、红队视角CobaltStrike猎杀

接下来将从红队的视角进行实战攻击演示。这里只做样本层面的对抗,至于流量层面的对抗后续可以介绍。

攻击拓扑

1704938065_659f4a51a4314156b5780.png!small?1704938065908

以下为客户端已经成功登录到服务端,此时在客户端登录页面配置远程恶意程序的相关参数,并生成回连的恶意远程控制程序。

1.服务端配置

1.配置监听地址(这里以https为例)

1704938110_659f4a7ee43a2e03f5656.png!small?1704938111262

1704938119_659f4a8729a5c3a176848.png!small?1704938119488

2.生成上线程序(这里生成C语言的shellcode)

这样方便进行免杀处理。

1704938144_659f4aa0bb3db8e2127b1.png!small?1704938145016

以下为生成的shellcode

1704938228_659f4af414b14a0a9a2ac.png!small?1704938228623

2.免杀处理

1.使用红队专用免杀工具掩日

1704938254_659f4b0ec821235e808fd.png!small?1704938255189

可以看到有5种免杀方式,这直接选择直接执行(工具自动生成exe程序,编译过程中加载恶意shellcode代码)就会生成可执行程序。

1704938272_659f4b20ca4446a3a3d21.png!small?1704938273148

2.使用火绒进行查杀测试(完成免杀)

1704938295_659f4b37bc5a9e4190dae.png!small?1704938296027

3.通过社工、钓鱼邮件投递受害者

进行二次伪装,修改程序日期和图标,将程序发送受害者,当受害者运行该恶意程序就很CS成功上线。

1704938314_659f4b4a2b3cc8e1fe97e.png!small?1704938314447

3.上线提示

配置飞书上线功能,飞书上线拓扑图(钉钉、微信都可以,这里以飞书为例。)

1704938343_659f4b673a5f06024bc44.png!small?1704938343554

上图中当受害者运行攻击恶意程序,就会触发攻击者服务器上线监听插件,并将信息发送到对应飞书机器人,可以是客户端或移动端,这样就会收到上线提示。

1.在CS运行服务端(虚拟专用服务器)配置运行飞书API插件。

1704938371_659f4b83dd4572e4e858f.png!small?1704938372136

2.当受害者运行攻击恶意程序,飞书机器人就好在群里进行上线提示。

1704938444_659f4bcc42974f01163a7.png!small?1704938444600

3.受害者成功上线。

1704938475_659f4bebc0af9177a8b83.png!small?1704938476066

4.内网漫游

对上线主机进行攻击获取信息,内网横向渗透拿下更多服务器。

会话功能1

1704938509_659f4c0d67332e9f58646.png!small?1704938509605

Dump Hashes #获取hash

Elevate #提权

Golden Ticket #生成黄金票据注入当前会话

Make token #凭证转换

Run Mimikatz #运行 Mimikatz

Spawn As #用其他用户生成Cobalt Strike侦听器

会话功能2

Browser Pivot #劫持目标浏览器进程

Desktop(VNC) #桌面交互

File Browser #文件浏览器

Net View #命令Net View

Port Scan #端口扫描

Process List #进程列表

Screenshot #截图

1704938540_659f4c2c49274beef3f30.png!small?1704938540686

会话功能3

SOCKS Server #代理服务

Listener #反向端口转发

1704938558_659f4c3e5c93526774db5.png!small?1704938558678

会话功能4

红队的研究人员基于此,开发了很多高效实用的功能插件,可以快速的进行攻击渗透,从而快速的获取相关信息。

1704938574_659f4c4e9f84334b40baa.png!small?1704938575090

这里举例演示一个(获取受害者浏览器登录cookie用户名及密码)

1704938595_659f4c63e6c3ec9ba2340.png!small?1704938596243

会话功能5

常见命令

1704938809_659f4d397782305b74370.png!small?1704938809910

beacon> help
Beacon Commands
===============
Command                   Description
-------                   -----------
argue                     进程参数欺骗
blockdlls                 阻止子进程加载非Microsoft DLL
browserpivot              注入受害者浏览器进程
bypassuac                 绕过UAC提升权限
cancel                    取消正在进行的下载
cd                        切换目录
checkin                   强制让被控端回连一次
clear                     清除beacon内部的任务队列
connect                   Connect to a Beacon peer over TCP
covert                    部署Covert 客户端
cp                        复制文件
dcsync                    从DC中提取密码哈希
desktop                   远程桌面(VNC)
dllinject                 反射DLL注入进程
dllload                   使用LoadLibrary将DLL加载到进程中
download                  下载文件
downloads                 列出正在进行的文件下载
drives                    列出目标盘符
elevate                   使用exp
execute                   在目标上执行程序(无输出)
execute-assembly          在目标上内存中执行本地.NET程序
exit                      终止beacon会话
getprivs                  Enable system privileges on current token
getsystem                 尝试获取SYSTEM权限
getuid                    获取用户ID
hashdump                  转储密码哈希值
help                      帮助
inject                    在注入进程生成会话
jobkill                   结束一个后台任务
jobs                      列出后台任务
kerberos_ccache_use       从ccache文件中导入票据应用于此会话
kerberos_ticket_purge     清除当前会话的票据
kerberos_ticket_use       Apply 从ticket文件中导入票据应用于此会话
keylogger                 键盘记录
kill                      结束进程
link                      Connect to a Beacon peer over a named pipe
logonpasswords            使用mimikatz转储凭据和哈希值
ls                        列出文件
make_token                创建令牌以传递凭据
mimikatz                  运行mimikatz
mkdir                     创建一个目录
mode dns                  使用DNS A作为通信通道(仅限DNS beacon)
mode dns-txt              使用DNS TXT作为通信通道(仅限D beacon)
mode dns6                 使用DNS AAAA作为通信通道(仅限DNS beacon)
mode http                 使用HTTP作为通信通道
mv                        移动文件
net                       net命令
note                      备注       
portscan                  进行端口扫描
powerpick                 通过Unmanaged PowerShell执行命令
powershell                通过powershell.exe执行命令
powershell-import         导入powershell脚本
ppid                      Set parent PID for spawned post-ex jobs
ps                        显示进程列表
psexec                    Use a service to spawn a session on a host
psexec_psh                Use PowerShell to spawn a session on a host
psinject                  在特定进程中执行PowerShell命令
pth                       使用Mimikatz进行传递哈希
pwd                       当前目录位置
reg                       Query the registry
rev2self                  恢复原始令牌
rm                        删除文件或文件夹
rportfwd                  端口转发
run                       在目标上执行程序(返回输出)
runas                     以其他用户权限执行程序
runasadmin                在高权限下执行程序
runu                      Execute a program under another PID
screenshot                屏幕截图
setenv                    设置环境变量
shell                     执行cmd命令
shinject                  将shellcode注入进程
shspawn                   启动一个进程并将shellcode注入其中
sleep                     设置睡眠延迟时间
socks                     启动SOCKS4代理
socks stop                停止SOCKS4
spawn                     Spawn a session 
spawnas                   Spawn a session as another user
spawnto                   Set executable to spawn processes into
spawnu                    Spawn a session under another PID
ssh                       使用ssh连接远程主机
ssh-key                   使用密钥连接远程主机
steal_token               从进程中窃取令牌
timestomp                 将一个文件的时间戳应用到另一个文件
unlink                    Disconnect from parent Beacon
upload                    上传文件
wdigest                   使用mimikatz转储明文凭据
winrm                     使用WinRM横向渗透
wmi                       使用WMI横向渗透

未知攻焉知防!CobaltStrike是一款优秀的红队攻击工具,可以高效的进行团队合作完成项目。攻击者可以基于此进行二次开发即魔改,从而绕过安全检测产品,另一方面让安全研究人员从攻击的角度进行思考怎么检测防御,同时该工具还支持https流量,目前对于加密流量可以通过机器学习方式进行检测,从而也更好的说明了安全本质就是不断对抗较量.......

对抗是一个动态变化的过程,随着攻击的变化,工具的更新,需要我们不断跟踪对每一种工具做持续的迭代分析与防护。这里只是简单描CobaltStrike的用法,其中还有很多功能的使用,需要实际操作中去发现。更核心的地方在于理解CobaltStrike的Beacon在内网中的通信过程,这对于渗透者能否更进一步深入内网起到重要作用,也是神器的价值所在。

https://www.likecs.com/show-204300747.html

https://www.freebuf.com/articles/web/250764.html


文章来源: https://www.freebuf.com/sectool/389399.html
如有侵权请联系:admin#unsafe.sh