渗透利器Cobalt Strike在野利用情况专题分析
本文将揭秘Cobalt Strike的在野使用情况,对具体所使用的部分APT攻击组织进行披露,同时对在野利用的各种技术如流量伪装和C&C隐藏技术进行分析,并对Cobalt Strike服务器“NanoHTTPD Servers”特征探测的价值进行评估。木马分析部分,我们通过以上情报发现了一起攻击。
一、引言
Cobalt Strike 是一款商业化的渗透测试利器,由著名的攻防专业团队 Strategic Cyber 开发。该工具被广泛应用于渗透测试项目中,在提高政府和企业网络设施安全性上起到了重要的作用。同时,随着网络空间的红蓝对抗不断发展,该框架成为对手模拟和红队行动中最为流行的一款软件。但由于该框架具备团队协作攻击、流量防检测、防安全软件查杀等优势,因而也被大量黑客组织用于真实的高危害性的攻击。目前已知的多个APT组织都曾经使用过 Cobalt Strike 攻击框架,如 FIN6、Cobalt Group组织和“海莲花”等。但是,目前所披露出来的攻击情报只是黑客利用 Cobalt Strike 进行非法攻击的冰山一角。由于该框架集成有丰富的逃避流量监测和沙箱检测技术,且具备优秀的反追踪能力,再结合黑客团体积累的免杀技术和 C&C 隐藏技术,使得业内对 Cobalt Strike 框架的在野利用状况知之甚少,也很难有一个全面的了解和清晰的认知。这种情况直接导致大量依赖于 Cobalt Strike 框架进行的网络攻击行为被忽视或者漏掉,如目前仍然存在许多VT查杀率为0的样本以及因利用C&C隐藏技术而存活至今的控制命令服务器。
因此,本文通过逆向工程的手段提取出深度有效的指纹特征,通过各种渠道和自有样本平台对关联样本进行采集分析,最后我们利用其C&C加密与存放的机制来自动化的提取这些被深度隐藏的 C&C 服务器地址。通过已有数据的分析和追踪我们将对Cobalt Strike框架的在野利用情况进行一次全面分析。最后,我们还溯源到 10 个已知的APT组织在使用该框架进行攻击,并且发现了大量使用流量伪装技术、DNS 隧道技术、CDN 技术、域名前置技术进行流量隐藏的未知APT攻击。当然还收获了大量的使用 Cobalt Strike 框架的仿冒域名。这些数据在我们进一步的威胁分析与情报挖掘中起到了重要的作用。
本文将揭秘 Cobalt Strike 的在野使用情况,对具体所使用的部分 APT 攻击组织进行披露,同时对在野利用的各种技术如流量伪装和 C&C 隐藏技术进行分析,并对 Cobalt Strike 服务器 “NanoHTTPD Servers” 特征探测的价值进行评估。木马分析部分,我们通过以上情报发现了一起攻击案例,通过分析最后确定该攻击是由攻防实战演练的一个红队发起的,文中我们会阐述这次攻击案例的攻击过程及其攻击手法,并进一步的对黑客所采用的一些特种技术包括逃逸管道、DNS 隧道、SMB 隧道技术等进行深入分析。
二、分析简述
2.1 Cobalt Strike 简介
CobaltStrike 是一款基于Java编写的全平台多方协同后渗透攻击框架,也称为 CS。早期版本依赖me tasploit 框架,Cobalt Strike 3.0 之后则是作为单独的平台使用。其支持多种通信协议,包括 http、https、dns、smb 等,同时集成了提权、凭据导出、端口转发、端口扫描、横向移动、Socks 代理、钓鱼攻击等功能,且支持丰富的扩展插件,几乎可以覆盖 APT 攻击链所需的各个技术环节。木马生成方面也涵盖了大多数的平台和攻击场景,包括 PE 木马、ELF 木马、网页木马、Office 宏病毒木马等。不过 Cobalt Strike 是一款商业运营的收费软件,每位使用者一年的许可证费用为 3,500 美元,许可证续签费用为每年 2,500 美元。
2.2 样本采集与处理
为了对 Cobalt Strike 的在野使用情况进行全方位的了解和评估,启明星辰 ADLab 安全研究人员通过长期追踪,采集和分析了大量的关联木马样本,并针对其多种类型和版本的样本提取了指纹特征。CobaltStrike 的木马生成基于其框架下的模版文件如:beacon.dll、artifact32.dll (存放于 Cobalt Strike.jar 文件内的 resources 目录下)。使用者在配置C&C、端口及其他信息时,Cobalt Strike 会将这些信息加密存放于这些模板文件中。通过分析这些信息加密算法和存放规则,便可以大批量地提取Cobalt Strike 样本的C&C服务器地址。目前我们分析了包含有 Beacon、Artifact、Payload、Shellcode 等类的 Cobalt Strike 样本,并实现了批量样本的C&C解密和提取。这种方法相对来说比自动化沙箱更快速有效。有了这些 C&C 我们可以进一步描绘出 CS 使用者的分布情况,以此为线索还可以挖掘出更多情报。通过长期的样本收集,我们共得到了 8,380 个Cobalt Strike 样本,样本文件包含有 EXE、DLL、vb sc ript、PowerShell 等。我们将逆向分析得到的 C&C 定位规则和C&C解密算法脚本化,得到了自动化处理脚本。通过脚本处理后,最终提取到了 973 个 C&C。在分析过程中我们还发现这批样本中有6410个左右使用了相似的C&C地址,通过溯源发现这些样本的主体为一款名为XMRig的挖矿病毒。这批样本背后的黑客不仅在该病毒中嵌入了Cobalt Strike 木马(全部为 beacon.dll 木马,C&C 为ns7.softline.top、ns8.softline.top、 ns9.softline.top) 以获得更为强大的远程控制的功能,而且还在病毒中加入一些可以自动改变HASH的功能(在自我复制过程中变换复制体的数据),在一定程度上达到了自动变异的效果,这也会导致以 HASH 作为病毒检测的方法失效。接下来,我们将对这批 C&C 进行分析处理,并对其中一些有价值的情报进行挖掘,以进一步的掌握CobaltStrike 在野使用者的现实情况。
三、CS攻击方情报分析
在这里我们通过CS回连的C&C数据作为线索,以分析Cobalt Strike木马攻击来源的分布情况,进一步关联出一些已知APT组织并发现一些新的未知黑客组织。同时我们还对Cobalt Strike木马使用者所采用的一些特种技术进行分析和评估。
3.1 分布概况
首先,我们针对 Cobalt Strike 的 C&C 服务器地理位置进行了统计分析,从而评估该框架在全球的分布情况和流行程度。从结果来看,Cobalt Strike 服务器的分布范围非常广泛,包括42个国家和地区,其中分布较为密集的国家为中国、美国、荷兰、俄罗斯和日本,上述国家同样也是黑客组织聚集和遭受网络攻击较多的国家。下图是根据 C&C 数据绘制的 CobaltStrike C&C 全球分布图。
之后,我们对这批 C&C 的所属运营商进行了细分。结果表明,大量服务器归属于规模较小或无法识别的运营商。此类厂商的安全管理工作通常较为松散、混乱,相应的租金也较为低廉,攻击者往往倾向于选择此类厂商架设服务器以降低攻击成本和躲避监管。除此之外,内网IP、阿里云、电信、亚马逊、脸书以及谷歌的 C&C 服务器数量较多。
考虑到 Cobalt Strike 支持多种通信协议,我们进一步提取了样本中的端口特征,从而评估在实际攻击中其端口和通信协议的使用情况。结果显示,443(https)、80(http) 和 8080 端口的使用频率较高,这三种常见端口均具有较强的穿透性和隐蔽性,可以有效避开一些防御方案的网络出站规则限制。虽然Cobalt Strike 也支持攻击者自定义配置端口,但在实际攻击中结合通信协议设置端口显然更具迷惑性。其中,443 端口结合 https 协议加密传输的隐蔽性较高;80 端口结合 http 协议,再配合流量伪装技术也具有不错的隐蔽效果。相关通信端口占比分布如图4所示。
由于样本中存在大量 C&C 指向内网 IP 和域名,我们继续对 C&C 的类型进行了分类整理。973 个 C&C共涵盖了公网 IP 、内网 IP 和域名三类,数量分别为 548 个、227 个和198 个,其中公网 IP 占比超过56%,内网 IP 和域名数量接近,分别占比 23.33% 和 20.35%。
针对 C&C 数据中出现的大量内网 IP 和域名,我们推测连接内网IP的样本可能存在如下情况:
(1)攻击者/渗透测试人员在攻陷某内网主机后,通过横向渗透获取了更多内网机器权限,并进一步借助可连接公网的内网主机作为跳板 C&C 进行流量转发,从而达到其它主机上线的目的。
(2)攻击者/渗透测试人员在内网环境部署 Cobalt Strike 服务器并进行免杀功能测试。
对于连接 C&C 域名的样本,我们在深入分析后发现了更多有价值的线索,也将在下个小节进行详细的介绍。
3.2 隐匿技术
随着网络安全审查制度的不断完善,隐匿技术正越来越受到攻击者的重视。在对 C&C 为域名的样本进行整理分析时,我们发现了大量特殊的域名,例如仿冒的知名网站域名、CDN 域名、DNS 服务器NS记录地址、甚至是合法网站的白域名等等,这也引起了我们的疑问,是否攻击者在利用白域名进行免杀测试,或是采用了一些更高级的隐匿技术?
经过筛选发现,C&C 为域名的样本中 16% 的样本存在 C&C 冗余机制(包含多个备用 C&C 域名),这种机制也给攻击者提供了更加多样和可靠的连接选择,我们将这些备用C&C也列入了统计,去重整理后共计 247 个域名。经过 VirusTotal 扫描分析,超过 61% 的域名并未报毒。在进一步分析后,我们发现攻击者运用了多种 C&C 隐藏技术和通信隐匿技术来对抗监管审查和流量分析,从而确保更稳定的权限维持。
隐匿技术 | 技术说明 |
---|---|
域名仿造技术 | 通过仿造合法域名干扰普通用户或日志分析人员 |
CDN技术 | 借助CDN服务进行流量中转,隐藏真实C&C地址 |
域前置+CDN技术 | 借助合法域名作为前置域,结合CDN隐藏真实C&C地址 |
DNS隧道技术 | 将恶意流量隐藏在DNS协议中对抗流量检测 |
流量伪装技术 | 借助Malleable-C2-Profiles配置文件自定义通信流量规则对抗流量检测 |
我们进一步统计了这批域名样本中各类隐匿技术的使用占比情况,其中,部分样本融合了多项技术,例如同时运用域名仿造和 DNS 隧道技术(归类至 DNS 隧道)、同时使用域名仿造和流量伪装技术(归类至流量伪装)等,由于此类样本数量较少,对分析结果的影响有限,故进行了调整处理,得到隐匿技术占比图。
由上图可知,超过 72% 的攻击者尝试通过隐匿技术来增强自身隐蔽性。其中,约37%的攻击者采用通信隐匿技术(流量伪装、DNS 隧道)来躲避流量检测,且往往会结合域名仿造进一步增强伪装性。约 15% 的攻击者采用 C&C 隐藏技术( CDN 技术、域前置+ CDN 技术)来逃避审查和溯源分析,相关技术将结合样本中的示例进行介绍。
3.2.1 域名仿造技术
通过仿造合法域名干扰普通用户或日志分析人员。攻击者通常采用插入“-”连字符、替换形近字符、颠倒词语顺序、更改顶级域名等方式仿冒合法域名,从而将域名伪装成知名公司、软件、更新服务等网站域名进一步开展恶意活动,包括 Baidu、Chrome、Windows、Office 等都是常常被选择的伪造目标。由于此类伪装方式具有很强的迷惑性和隐蔽性,会对普通用户或日志分析人员产生较大干扰,且技术门槛和成本较低,俨然成为许多攻击组织的标准配置。
C&C | 仿造目标 | 备注 | |
---|---|---|---|
baidu-search.net | Baidu | 仿造知名公司或软件域名 | |
dns-chrome.com | Chrome | ||
ns1.fackbook.gq,ns2.fackbook.gq,ns3.fackbook.gq | |||
update.server.evevnote.com,server.evevnote.com | Evernote | ||
windows-system.host | Windows | 仿造系统或更新服务域名 | |
windwosupdate-beijing2019.com-system2019-micortsoftewindowschina2019.com.glxqn.cn | Windowsupdate | ||
upgrade-services.com | Upgrade | ||
fedex.global | Fedex | 仿造商业公司或社会机构域名 | |
update.safebuikers.com | Safebulkers | ||
thimunsingapore.org | singapore.thimun.org | ||
officewps.net | office、wps | 攻击组织 | APT32 |
helpdesk-oracle.com | Oracle | Cobalt Group | |
mcafee-analyzer.com | Mcafee | CopyKittens | |
update.cisc0.net,developer.cisc0.net,res.cisc0.net | Cisco | Darkhydrus | |
…… |
3.2.2 CDN技术
CDN( ContentDelivery Network 内容分发网络是高效地向用户分发 Web 内容的分布式服务器网络,其在网络访问加速、防御 DDoS 攻击等方面有着重要的作用。例如网站借助 CDN 进行 DDoS 防御时,如果将域名指向 CDN,网站流量就会经过 CDN 中转后再进一步转发至真实IP地址,从而隐藏真实的服务器 IP,防止服务器直接遭到攻击。同理,这种防护思路也被黑客所利用,攻击者通过CDN中转流量可以将真实 C&C 隐藏在 CDN 之后,将攻击溯源复杂化。C&C 中常见的云服务提供商包括亚马逊(cloudfront.net)、谷歌(appspot.com) 、微软(azureedge.net)等。
C&C | Hash |
---|---|
dvvdhxuyj5ec8.cloudfront.net | f1340bcb2b6736f3df874181ff95f198 |
ds1wgtx86lg0f.cloudfront.net | 0f10ec8e18209e7a8e46e428815a3430 |
djo62u1ouhtae.cloudfront.net | d2a67209e2669e48876522472b60a6da |
msedgesecure.appspot.com | ca0dc3e6d9ed03c6ddb7397bfcdf0597 |
update-162303.appspot.com | 0391ba787cc32a40617051561e59902d |
secure-adn.appspot.com, msftncs.appspot.com, trendmicro.appspot.com | 8bc55a7d07cbc663b4afb18c961b6b64 |
endpoint18290.azureedge.net | 2867280baf00ff424418377260dcb5d2 |
365live.azureedge.net | bfc93e18fad9f7bb93163ed70f527e88 |
…… |
3.2.3 域前置+CDN技术
域前置(Domain Fronting)的核心思想是在不同通信层使用不同的域名,在基于 DomainFronting 的HTTP(S) 请求中,DNS查询以及SNI携带一个合法域名(前域),而在 HTTP Host 头中携带另一个域名(隐蔽或被禁止访问的域名C&C),当请求被发送给合法域名后会由相应云服务解析并转发至隐蔽域名,使其不以明文暴露给网络审查者,从而隐藏攻击者的真实 C&C。
起初我们并未能发现这类技术的运用,但是样本 C&C 中出现的大量合法白域名非常可疑。在进一步逆向分析后,我们发现这些样本请求包的Host字段指向了一些与 C&C 不同的域名,即使用了域前置技术。域前置技术在 CDN 等重要的基础设施和各类云服务中尤其适用,虽然部分厂商已停止支持域前置功能,但技术思路可以引伸触类。从统计结果来看,约有 10% 的域名样本采用了域前置技术,其中隐蔽域名使用较多的云服务厂商包括微软(MicrosoftAzure)、亚马逊 (Amazon CloudFront) 和谷歌(Google App Engine) 等,合法域名则通常可以从相关 CDN 子域进行寻找,攻击者常采用一些知名网站或网络安全公司相关的域名来逃避检测。
前域(合法域名) | Host (隐蔽域名) |
---|---|
do.skype.com | fastflowers.azureedge.net |
mscrl.microsoft.com, software-download.office.microsoft.com, ajax.microsoft.com | wsus-update.azureedge.net |
ajax.microsoft.com, cdn.wallet.microsoft.com | ms-cloud.azureedge.net |
crl.paloaltonetworks.com | d1ol1waxbvmde2.cloudfront.net |
status.symantec.com | dul0hrsepuj7q.cloudfront.net |
www.asisupportforums.com | dc5plq2mqf9wk.cloudfront.net |
www.google.ca, mail.google.com, calendar.google.com | assets54721.appspot.com |
www.google.com | translateserviceupdate.appspot.com |
www.google.com,mail.google.com | img371935.appspot.com |
…… |
3.2.4 DNS隧道技术
DNS 隧道是隐蔽信道的一种,通过将其他协议封装在DNS协议中,然后利用DNS查询过程进行数据传输。由于大多数防火墙和入侵检测设备会放行DNS流量,故可以利用放行特点和协议解析流程进行隧道攻击,将恶意流量隐藏在DNS协议中逃避流量检测。
在整理冗余 C&C 样本(包含多个备用 C&C 域名)的过程中,我们发现了一些疑似 DNS 服务器NS(Name Server)记录地址的域名,例如 ns1.microsoftonlines.net、ns1.fackbook.gq、ns5.thepatestid.online 等等。通过更深入的逆向分析和特征提取,确认这些样本使用了 DNS 隧道技术。从统计结果来看,约有 15% 的域名样本采用了DNS隧道技术进行通信,且大多数攻击者会设置多个域名服务器 NS 记录来提高连接的可靠性,同时结合域名仿造技术进行伪装,即使用户查看流量也难以察觉。
C&C | Hash |
---|---|
dns2.loocallhosts.com,dns.loocallhosts.com,dns3.loocallhosts.com | ebd2381b811c38efbb706c2a8ebfb55c |
img.statcontent.co,content.statcontent.co | 4ebe65ad6598d6903253dd4461c46e7d |
hus1.ptps.tk,hus2.ptps.tk,hus3.ptps.tk | e51ed5e2df75c3663eecac61db3493b4 |
ns5.thepatestid.online;ns5.thepatestid.online | 7d816e122b0d07682b222eaadb66aa51 |
ns1.fackbook.gq,ns2.fackbook.gq,ns3.fackbook.gq | fec4bc410bedc904d3967c910a7e92d5 |
ns1.ssz4v.com,ns2.ssz4v.com,ns3.ssz4v.com | 9ea8353ce4c98df601cbb15ac303ea88 |
ns1.aeo22662.xyz,ns2.aeo22662.xyz,ns3.aeo22662.xyz | 1a5c192915669d87942f7f8b1f6cbf3e |
ns1.microsoftonlines.net,ns2.microsoftonlines.net | 85b87c8933a0f8f128467ae34928f97f |
…… |
3.2.5 流量伪装技术
流量伪装技术是指借助 Cobalt Strike 的 Malleable-C2-Profiles 配置文件自定义通信流量规则对抗流量检测的技术。攻击者通过加载定制的配置文件(如 amazon.profile、jquery.profile 等模板)来改变目标主机与 Serve 端的流量特征,将HTTP通信流量伪装成正常 Web 流量或加密混淆流量,从而达到通信隐匿的效果。
在提取域名样本连接请求的 Host 字段特征时,我们除了挖掘到使用 Domain Fronting 技术的样本,还发现了大量使用此类流量伪装技术的样本。其在域名样本中的使用占比超过 21%,也是攻击者运用最多的伪装技术。该类样本的 Host 字段通常会由配置文件设置为指定的Web域名以模拟相关请求,常见的请求包括 Amazon、Jquery、Bing。
C&C | Host |
---|---|
informedia.info | code.jquery.com |
greatdirectmail.com | code.jquery.com |
olosirsch.com | www.amazon.com |
ssl2.blockbitcoin.com | www.amazon.com |
update.microsoft-update-ru.com | www.bing.com |
f.cdn-global.com | www.espn.go.com |
cache.violet-cdn.com | en.*.org |
thedi vineshoppe.com | www.fidelity.com |
iosios1937cn.firedog.ml | www.firedog.com |
http.pc-rekcah.com | www.hulu.com |
...... |
通常来说,如果是针对特定目标的攻击,攻击者还会根据目标机器存在的网络环境、通信软件、常用网站等来伪造流量特征,Host 设置的内容则可能与相应域名有关。从Host统计来看,部分域名指向了fidelity(富达投资-金融服务公司)、ESPN(娱乐与体育节目电视网)、Firedog(小型发动机动力设备制造商)、Hulu(流媒体服务商)在内的多家商业服务公司,黑客的攻击目标也很可能会与相关公司或服务的使用群体有关。此外,黑客还可以借助 Malleable-C2-Profiles 配置文件模仿其它恶意软件的通信协议,从而达到掩盖、伪装自身的行动目的,欺骗流量检测系统。
显然,这些隐匿技术给审查机构和溯源分析者带来了极大的困难,随着攻击者越来越多的使用类似技术,从情报端(威胁情报分析平台)到防御端(IDS、IPS等终端防御系统)都将面临更加严峻的挑战,也迫切需要更加强大的特征指纹、流量分析及关联分析能力。
3.3 版本和特征探测
目前,对于防御方来说,除了通过威胁情报平台的 IOC 特征进行关联分析,还可以借助一种特征探测的手段对 Cobalt Strike 服务器进行识别和追踪。该规则由安全公司 Fox-IT 提出,由于 Cobalt Strike的 “Team Server” 基于开源Web服务器 NanoHTTPD ,可通过 NanoHTTPD Servers 在其 HTTP 响应中返回的多余“空白符”特征识别 Cobalt Strike 服务器,此特征可影响 Cobalt Strike 服务器3.13版本之前的所有旧版本。因此,如果能够获取近期大量样本的对应版本,就能够在一定程度上反映出各版本的使用率,同时推测当前该特征识别对于 Cobalt Strike 服务器的影响程度。进一步收集和分析后,我们发现 CobaltStrike 的版本众多,其中部分版本的母体样本存在编译时间重叠,而其payload的编译时间则相对独立准确,且不会随母体样本生成而改变,故可解密提取样本的 payload 编译时间来归类其所属版本。
我们针对目前传播较广的几类 Cobalt Strike 版本进行了收集,并提取了对应木马的 payload 编译时间,相关数据与图8展示的实际编译时间分布基本相符。值得注意的是,这几类版本均存在破解版,也间接表明 CobaltStrike 的大量用户可能是非商业付费人群。
Cobalt Strike版本 | payload编译时间 | 数量 |
---|---|---|
Cobalt Strike 3.6 | 2016/12/08 | 350 |
Cobalt Strike 3.8 | 2017/05/23 | 281 |
Cobalt Strike 3.12 | 2018/09/06 | 212 |
Cobalt Strike 3.13 | 2018/12/29 | 222 |
Cobalt Strike 3.14 | 2019/04/19、2019/05/04 | 90 |
Cobalt Strike 4.0 | 2019/12/05 | 115 |
为了更好的反映各版本的流行程度,我们将相关版本的捕获数量与时间进行了关联统计(以此批样本为例,仅体现变化趋势)。
从各版本的流行趋势来看,虽然历次的版本更新都会造成前期版本一定程度的用户流失,但旧版本始终保有相对稳定的用户量。参考 2020 年 3 月的数据情况,已有大量攻击者开始采用 Cobalt Strike 4.0实施攻击,但 3.13 之前的旧版本使用量占比仍然有 23%。可见,部分使用者不会及时更新或倾向于使用已有的破解版本,因此未来通过旧版本服务器发动攻击的现象可能长期存在,该特征检测规则对于打击恶意活动方面仍具有一定的价值。
3.4 框架使用者
那么,究竟是哪些人员或组织在使用 Cobalt Strike 框架呢?我们针对这批 Cobalt Strike 样本的 IOC 进行了更加深入的溯源,结合关联样本的出现时间、技术运用、攻击链条以及公开的研究报告等资料,发现了多个著名的攻击团伙和 APT 组织。
Groups | Cobalt Strike C&C | Hash |
---|---|---|
Darkhydrus | update.cisc0.net,developer.cisc0.net,res.cisc0.net | 7a4f8fffb1041bf6b19f76ded41b90b616f733b0 0e7957fbc94c4ea120f1903de999963fc3654937 |
CopyKittens | cloud-analyzer.com,fb-statics.com,mpmicrosoft.com,officeapps-live.org,cachevideo.online,fbstatic-akamaihd.com,mcafee-analyzer.com | af18959b5204853ef347fb05b518fca26a08ae57 |
Leviathan | www.thyssenkrupp-marinesystems.org | 1875db18a7c01ec011b1fe2394dfc49ed8a53956 |
Cobalt Group | 46.21.147.61,helpdesk-oracle.com | 8c6a264d5fd2d9f9d93d5350fccd52046*07d2 |
5.135.237.216 | 1232a214b510a6b306e51a166c19fad5ac63bfc8 | |
86.106.131.207 | ba4d490c97a7ba6a2d7f374919e56bd3f6fd88d9 99210a1bd725ebedb3a0cb5420e466069794300e 8fb192e336f83bf17d6bbb931de97d168e584239 | |
104.144.207.207 | cc794e4a1f7e23008e6e648b1aacb87db446fc98 | |
176.9.99.134 | 1f50d16316c9896e3ea8cb5e8cfee195bc4aa92b 5b2f84580c863d6482d05c79ef7d7169bde2593f | |
52.15.209.133 | fe61c78a331e82d4ed8e8fe975fb0e14384ab2c0 | |
206.189.144.129 | 46742e6096cd417ea6b2803ec4b5d0a5f1dfe4f0 | |
FIN7 | 165.22.71.42 | 009c97361fdc7d912c4154ab7c739b606b5bf79d |
Bokbot | 185.82.202.214 | 343f1e5e072887d7b77375028999d078ac7ccdca |
APT10 | 95.128.168.227 | 5122094dbd6fc8d3da0acfa02234104d927f27c6 |
APT19 | autodiscover.2bunny.com | 7b0d8394b32cb59c59e4ac9471dba676678fd91a |
APT29 | pandorasong.com | 9858d5cb2a6614be3c48e33911bf9f7978b441bf a968c95ee054af28e88edb77c60e8c035de97237 |
APT32 | officewps.net | 5c0ad0af431ca32d0050052c17eb8c72a2ad8a43 |
api.blogdns.com | 3e65b4fefa92cbf3e146a096eaa0aeec5c1be42a | |
load.newappssystems.com | 78c549a7f4119aa876763426e6f76be3d4f43dd3 |
这些组织善于借助域名仿造、多级跳板、DNS隧道、流量伪装等技术手段隐蔽自身。其中,很多组织都热衷于使用DNS隧道攻击,以绕过防火墙或IDS的流量检测,且其域名往往会精心伪装设计,即使用户查看流量也难以辨别。使用 CobaltStrike 频率较高的组织则是 Cobalt Group 和 APT32(海莲花),在它们的多次攻击行动中都能发现相关证据。此外,通过溯源关联和厂商披露,还发现FIN6、BITTER(蔓灵花)、Ordinaff 等组织也曾使用过 Cobalt Strike。
不仅是以上披露的攻击组织,我们在样本溯源过程中同样发现了不少红队攻击的案例,后文也将举例进行详细分析。显而易见的是,当前攻防双方都非常热衷于运用该框架进行安全对抗。目前我们发现与 Cobalt Strike 有关联的攻击组织已经达到 13 个,而基于逐渐成熟的 C&C 隐藏技术和溯源的困难性,这些可能只是未知网络的冰山一角,还有大量隐藏的攻击组织和未知的APT攻击并未得到披露,这也给网络安全秩序的维护提出了更大挑战。
综合以上分析结果,汇总 Cobalt Strike 框架的在野使用情况如下:
分布情况:这批样本的 973 个 C&C 服务器共分布在 42 个国家和地区,Cobalt Strike 使用群体广,分布范围大。
端口使用情况:443(https)、80(http)和 8080 端口的使用率较高。
使用人员:黑客组织、红队人员、安全研究人员等。
关联攻击组织:Darkhydrus、CopyKittens、Leviathan、Cobalt Group、FIN7、Bokbot、APT10、APT19、APT29、APT32、FIN6、BITTER、Ordinaff 等。
C&C域名查杀率:约 61% 的 C&C 域名 VirusTotal 未报毒或无关联记录。
隐匿技术:包括域名仿造技术、CDN 技术、域前置+CDN 技术、DNS 隧道技术、流量伪装技术等。
版本使用情况:Cobalt Strike 自 2012 年发布起共经历 70 余次版本更新,最新版本为 Cobalt Strike 4.0,目前其 3.6 至 3.12 间的版本用户量依旧不少,相关服务器受 NanoHTTPD Servers 影响可被特征探测。
四、攻击案例分析
在基于以上数据的情报分析过程中,我们发现了一起以某金融类公司为幌子的攻击案例,该案例最终确认为攻防实战演练的一个红队的攻击活动。本文选择这样一个案例来阐述 CS 木马的利用手法,并以此为背景,我们来分析和探讨 Cobalt Strike 木马所采用的一些特殊技术如管道逃避检测技术、DNS隧道、SMB 隧道技术等。
在本攻击案例中,国内一个红队在 Github 故意投放一些与某金融类公司相关的信息如公司 VPN 登录网址、账号和密码等敏感信息,以此引诱对该目标感兴趣的对手团队。登录网站为仿冒该金融类公司的钓鱼网站,仿冒网站登录后会诱导对手团队下载页面提供的 VPN 客户端,一旦对手下载并执行该客户端,便会感染 CS 木马,成为受控主机。
下载得到的VPN客户端名称为 “vpnclient.rar”,其中包含有两个文件分别为 “vpnclient.exe” 和 “wwlib.dll”,其中文件 “vpnclient.exe” 为带有微软签名的 word2007 官方程序,“wwlib.dll”文件为 word 程序必加载组件,这里被嵌入了 CS 木马。这是一种利用合法白文件 + DLL 劫持的手段进行攻击的技术,此前多个组织如海莲花等都采用过此种技术进行攻击。
当 vpnclient.exe 运行后,表面上会打开一个名为 “vpnclient..docx” 的 word 文档,而背地里则会解密执行 shellcode 来下载 CS 的远控模块以执行从 C&C 传来的恶意指令。经进一步深入分析,该远控模块由beacon模板生成,其包含有丰富功能,如服务扫描、端口转发、多模式端口监听等功能。CobaltStrike框架的精髓之处是攻击者可以利用不同的通信方式和 C&C 服务器通信,我们这里主要介绍其比较有特色的几个功能,分别是基于 DNS 协议的 DNS 隧道攻击、基于 SMB 协议的命名管道内网攻击和基于 socks 流量代理的内网攻击。同时,Cobalt Strike 框架还可以和 me tasploit 框架相互配合,来进行联合的网络渗透和内网攻击。
4.1借壳启动
该 CS 木马借用微软官方程序来加载自己核心组件执行,通过利用白文件和 DLL 劫持的方法来绕过安全检测,以达到落地攻击目标的目的。其中压缩包文件中的文件 “vpnclient.exe” 可以正常绕过任意安全软件的检查得以执行,但是其运行后会加载同目录下伪装为微软组件“wwlib.dll”的CS木马加载器。当目标运行 “vpnclient.exe” 后,表面上会打开一个名为 “vpnclient..docx” 的 word 文档(该文档是一款名为 “VPN Client” 程序的安装和配置操作说明文件),目的是迷惑受害用户。而背地里,恶意代码则会执行 “wwlib.dll” 并下载执行 CS 远控模块,以达到控制对手主机的目的。
“wwlib.dll” 恶意文件的资源文件包含两部分数据,分别为名为 “CODE” 的 shellcode 和名为 “WORD” 的 word 文档。CS 木马运行时,一方面提取 “WORD” 资源并使用 word 软件打开来迷惑受害用户,另一方面提取 “CODE” 资源来解密执行,下载 CS 远控模块,对受害用户实施网络攻击。
4.2 上线分析
远控模块执行后,首先收集感染设备信息,准备上线。远控模块将感染设备的IP地址、管理员账户、计算机名和本进程id等信息加密后作为上线包发送到C&C服务器。
下图是我们模拟 C&C 服务器,使用 Wireshark 抓到的上线包,从该上线包中,我们可以看到加密后的信息被伪装成 Cookie 字段,隐藏在了 htt p协议里面。
命令加密后使用 tcp 协议发送,部分执行结果则使用 http 协议进行回传。如下是我们模拟木马命令,使用 shell dir 列出感染设备当前目录所抓取到的数据包。从下图可以看到,命令执行后的结果回传使用了 http 协议。
4.3 远程控制
从 CS 木马远控模块的控制命令和相关代码的反汇编结果来看,远控模块包含多种恶意功能。主要包括屏幕截图、键盘记录、socks 代理、网络和主机枚举、端口扫描、文件上传和下载、执行 powershell 命令、提权、注入会话到特定进程以及 DNS 隧道攻击等(详细的的命令和功能介绍见附录部分)。由以上的分析可知,当对手下载并运行该伪造的 “vpn客户端” ,打开 “vpn安装配置指南” 文档研究的同时,红队方的木马已悄悄上线。红队方攻破对手内网后,能够利用该木马窃取对手的作战计划、掌握的工具和利用的漏洞等信息,红队方根据掌握的这些信息,可以有效调整自己的作战策略和应对计划。
五、对抗技术分析
以上攻击案例中我们仅仅对 CS 木马从落地到远程控制的过程做了简要分析,在更多的案例中,CS 木马还具备更加强大而丰富的安全对抗手段,如逃逸管道技术、DNS 隧道、SMB 隧道、Socks 代理技术以及可定制的代码注入技术等等,这些技术手段的使用在很大程度上不但断提高自身的成活率,增强黑客攻击活动隐秘性,极好的保护黑客自身。本节将对 CS 使用到的此类技术的实现原理和机制进行详细的分析和讨论。
5.1 管道逃逸技术
CS 木马使用了管道逃逸技术来躲避安全软件的查杀。该技术利用管道作为恶意代码的暂存通道,在很大程度上避免了安全软件的查杀,通过测试验证,该技术可以绕过很多主流杀毒软件(如 360、ESET Nod32)的安全检查。经我们的安全研究人员多次验证,该技术截至本文撰写时依然有效。CS 木马利用管道逃逸技术执行远控模块的实现过程如下。
首先新起一个线程创建名为 ”.\pipe\MSSE-594-server” 的命名管道(其中 594 为随机值),接着木马将长度为 0×34200 的加密数据写入到该命名管道中,等待后续读取和进一步的解密。
睡眠1024毫秒后,木马从前面创建的命名管道中读取加密数据。
在解密数据之前,木马首先申请一段内存空间,用于存放解密后的 payload。
木马将读取到的加密数据,每 4 个字节为一组,依次和整形数据 0x1aa64991(不同的样本该数值会有不同)异或,异或运算后的值即为解密数据,最终解密出 CS 远控模块文件。
通过解密后的数据可以看出,该 CS 远控模块文件为 Windows 平台的PE文件。
CS 木马在解密完远控模块后,将远控模块所在的内存属性修改为 rx,并使用函数 CreateThread 执行远控模块代码,实现对感染机器的攻击和远程控制。
5.2 DNS隧道
DNS 隧道是将其他的协议内容封装在 DNS 协议中,然后利用 DNS 查询过程来进行数据传输的技术。CS 支持使用 DNS 隧道技术来和 C&C 服务器通信以应对复杂的网络环境。封装后的流量通过 DNS 递归查询,最终到达 C&C 服务器解密。同样,来自 C&C 服务器的指令也可以通过这种方式顺利下发到受控端。使用 DNS 隧道技术可以有效躲避防火墙、IDS、IPS 等传统网络安全设备的检测(因为这些设备很难做到对 DNS 流量的友好规则控制),大大提高了渗透测试或攻击的隐蔽性。
下图是一个使用 DNS 隧道模式进行通信的数据包,从图中我们可以看到,控制端发送的命令和受控端返回的流量都被隐藏在了 DNS 隧道中加密传输。
命令执行完后,受控端将回显信息封装成 DNS 字符串,通过 DNS 隧道回传给 C&C 服务器。
5.3 SMB隧道
C S支持内网主机之间使用基于 SMB 协议的 Beacon 来进行数据交换。这允许让一台受感染的计算机与 C&C 服务器进行正常的 beacon 连接,并使内部网络上的所有其他的服务器通过 SMB 协议与最初受感染的主机进行通信。在攻击者成功攻破内网主机目标1后再进行内网横向移动,将基于 SMB 的 Beacon 木马植入目标2主机。这样目标2上线后,就会通过 SMB 协议的命名管道和目标 1 通信,目标 1 再通过 DNS 或者 HTTP 协议将恶意流量转发出去。通过这样,攻击者可以操纵 Beacon 通信,实现让所有来自受感染主机的流量看起来和普通流量无异。采用这种连接方式,当安全管理人员检测到一个二级系统有问题并进行取证分析时,他们可能会无法识别与实际攻击相关的 C&C 服务器域名。
下图是内网中目标 2 和目标 1 的通信数据包,从图中可以看到,在完成 SMB 协议协商和会话后,目标 2 连接到了目标 1 的 IPC$ 共享,然后利用该命名管道进行基于 SMB 协议的数据通信。
5.4 Socks代理
CobaltStrike 自带 socks 代理功能,在攻破组织内网后,beacon socks 代理功能可以被用来对目标网络做进一步的内网渗透。如下图,web server 是一个位于内网的 web 服务器,其仅为组织内部服务。目标 1 为内网中一台可以访问外网的设备,攻击者在拿到目标 1 的控制权限后,可以在控制端开启 beacon 的 socks 功能,然后利用 proxychains 等本地代理工具访问 webserver 内网服务器,对目标组织进行更加深入的渗透攻击。
下图是目标1通过 beacon 的 socks 代理转发给攻击者的内网服务器流量,从图中可以看到,攻击者成功访问了位于组织内部的 Web Server 服务。
5.5 代码注入技术分析
在分析 CS 远控模块的过程中,我们发现根据不同的上下文条件,远控模块使用了不同的代码注入技术来实现远程代码的注入。
CS 木马的注入方式是非常灵活的,其可以通过配置文件来进行灵活的配置,从官方博客中我们就可以看到 beacon 模块的代码注入配置样例。自从 Cobalt Strike 更新至 3.6 版本后,官方给出了一个Malleable-C2,也就是在启动团队服务器的时候加载一些配置文件,Malleable-C2 配置文件中的进程注入块(process-inject block)决定了进程注入行为的内容并且控制进程注入行为。
进程注入块是围绕进程注入流程的生命周期组织的,分为以下4步:
第一步是隐式的,如果生成一个临时进程,例如后开发工作(post-exploitation job),实际上已经有了对远程进程进行操作的句柄。如果要对现有的远程进程注入代码,恶意 payload 会使用 OpenProcess 函数。
对于第二步和第三步,恶意 payload 有两个选择来分配远程进程中的内存并将数据复制到其中。第一个选择是经典的 VirtualAllocEx->WriteProcessMemory 模式,另一个选择是 CreateFileMapping->MapViewOfFile->NtMapViewOfSection 模式。
第四步,这一步之前,要注入的内容已经复制到了远程进程当中,这一步需要做的就是执行这些内容,这就是 process-inject->execute 块的作用。执行块控制着恶意 payload 注入代码到进程的方法,恶意payload检查执行块中的每个选项,以确定该选项是否可用于当前上下文,在方法可用时尝试该方法,如果没有执行代码,则继续执行下一个选项。可以看到,执行块中的执行选项包括 “CreateThread”、CreateRemoteThread、NtQueueApcThread、NtQueueApcThread‑s、RtlCreateUserThread 等函数。
CreateThread 和 CreateRemoteThread 函数有一些变体,这些变体使用另一个函数的地址生成一个挂起的线程,更新挂起的线程以执行注入的代码,并恢复该线程。使用 [function]”module!function+0x##” 指定要欺骗的起始地址。对于远程进程,多使用 ntdll 和 kernel32 模块。可选的 0x## 部分是添加到起始地址的偏移量。这些变体只适用于 x86 到 x86 和 x64 到 x64 注入。
SetThreadContext 和 NtQueueApcThread-s 函数特定于为恶意 payload 的后开发作业(Post Exploitation Jobs)启动临时进程。这些函数会挂起进程的主线程,并使用它执行被注入的后开发恶意功能。
NtQueueApcThread、RtlCreateUserThread和CreateRemoteThread是向远程进程注入代码的常用函数。RtlCreateUserThread 函数有一个用于 x86 到 x64 注入的实现变体。CreateRemoteThread和RtlCreateUserThread 都处理 x64 到 x86 注入。所有其他函数包括 x86 到 x86 和 x64 到 x64 的注入。
PostExploitation Jobs- 很多 Cobalt Strike 的后开发(post-exploitation)特性(比如屏幕截图、键盘记录、哈希存储等)被实现为 Windows的dll。为了执行这些特性,Cobalt Strike 生成一个临时进程,并将这些功能注入其中,进程控制块(process-inject block)控制这一进程注入步骤。后开发控制块(post-exblock)则控制Cobalt Strike后开发特性的特定内容和行为。
下图是我们的研究人员在搭建的 Cobalt Strike 攻击环境后,执行恶意命令,受害机器进程的监控情况,从图中可以看到,每当执行一个截图命令或者 “spawn” 等“后渗透”相关命令,在受害机器上都会新起一个 rundll32 进程和攻击服务器通信。
六、总结
本文揭秘了 Cobalt Strike 框架的在野使用情况并深入介绍了相关木马的核心技术。 CobaltStrike 使用者遍布全球,不论是 APT 组织还是红队人员,都被该框架出色的易用性、可扩展性以及隐匿性所吸引。我们也观察到几类现象,一是越来越多的攻击者开始选择商业软件作为攻击武器,一方面能够降低代码被溯源的可能性,另一方面也可以有效降低攻击成本;二是攻击者越发重视自身的隐蔽性,大量采用了域名仿造、CDN、域前置、DNS 隧道、流量伪装等技术对抗检测,而 Cobalt Strike 框架本身在通信隐匿方面具有很大的优势,其不仅提供了 http、https、dns、smb 等多种主流上线协议,还支持自定义通信流量特征,这也促成了其在全世界的广泛流行;三是目前主流的威胁情报平台和检测防御系统面临越来越大的压力,在面对 Cobalt Strike 这类隐匿方式多样、对抗手段丰富的攻击武器时,大量未知的 APT 攻击难以被发现和披露,这也需要持续加强深度有效的特征指纹、流量分析和关联分析等能力,以应对越来越复杂的网络攻击活动。
无论怎样,恶意攻击的关键步骤是传播和落地,防重于治,在恶意攻击造成严重损失后再去修补漏洞显然只是无奈的选择,安全管理最重要的还是对人的管理,需要从源头把好关、“治病于未病”。因此,不管是对于企业还是个人,都应该加强安全意识,不要轻易打开未知来源的邮件和附件,不轻易点击未知链接,不打开不可靠的文档,不执行未知的程序,及时更新系统补丁和应用程序,守住我们的系统和数据安全。
七、附录
beacon 命令列表
命令 | 描述 |
---|---|
argue | Spoof arguments for matching processes |
browserpivot | Setup a browser pivot session |
bypassuac | Spawn a session in a high integrity process |
cancel | Cancel a download that’s in-progress |
cd | Change directory |
checkin | Call home and post data |
clear | Clear beacon queue |
connect | Connect to a Beacon peer over TCP |
covertvpn | Deploy Covert VPN client |
cp | Copy a file |
dcsync | Extract a password hash from a DC |
desktop | View and interact with target’s desktop |
dllinject | Inject a Reflective DLL into a process |
dllload | Load DLL into a process with LoadLibrary() |
download | Download a file |
downloads | Lists file downloads in progress |
drives | List drives on target |
elevate | Try to elevate privileges |
execute | Execute a program on target (no output) |
execute-assembly | Execute a local .NET program in-memory on target |
exit | Terminate the beacon session |
getprivs | Enable system privileges on current token |
getsystem | Attempt to get SYSTEM |
getuid | Get User ID |
hashdump | Dump password hashes |
help | Help menu |
inject | Spawn a session in a specific process |
jobkill | Kill a long-running post-exploitation task |
jobs | List long-running post-exploitation tasks |
kerberos_ccache_use | Apply kerberos ticket from cache to this session |
kerberos_ticket_purge | Purge kerberos tickets from this session |
kerberos_ticket_use | Apply kerberos ticket to this session |
keylogger | Inject a keystroke logger into a process |
kill | Kill a process |
link | Connect to a Beacon peer over a named pipe |
logonpasswords | Dump credentials and hashes with mimikatz |
ls | List files |
make_token | Create a token to pass credentials |
mimikatz | Runs a mimikatz command |
mkdir | Make a directory |
mode dns | Use DNS A as data channel (DNS beacon only) |
mode dns-txt | Use DNS TXT as data channel (DNS beacon only) |
mode dns6 | Use DNS AAAA as data channel (DNS beacon only) |
mode http | Use HTTP as data channel |
mv | Move a file |
net | Network and host enumeration tool |
note | Assign a note to this Beacon |
portscan | Scan a network for open services |
powerpick | Execute a command via Unmanaged PowerShell |
powershell | Execute a command via powershell.exe |
powershell-import | Import a powershell sc ript |
ppid | Set parent PID for spawned post-ex jobs |
ps | Show process list |
psexec | Use a service to spawn a session on a host |
psexec_psh | Use PowerShell to spawn a session on a host |
psinject | Execute PowerShell command in specific process |
pth | Pass-the-hash using Mimikatz |
pwd | Print current directory |
reg | Query the registry |
rev2self | Revert to original token |
rm | Remove a file or folder |
rportfwd | Setup a reverse port forward |
run | Execute a program on target (returns output) |
runas | Execute a program as another user |
runasadmin | Execute a program in a high-integrity context |
runu | Execute a program under another PID |
screenshot | Take a screenshot |
setenv | Set an environment variable |
shell | Execute a command via cmd.exe |
shinject | Inject shellcode into a process |
shspawn | Spawn process and inject shellcode into it |
sleep | Set beacon sleep tim |
socks | Start SOCKS4a server to relay traffic |
socks stop | Stop SOCKS4a server |
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 | Use SSH to spawn an SSH session on a host |
ssh-key | Use SSH to spawn an SSH session on a host |
steal_token | Steal access token from a process |
timestomp | Apply timestamps from one file to another |
unlink | Disconnect from parent Beacon |
upload | Upload a file |
wdigest | Dump plaintext credentials with mimikatz |
winrm | Use WinRM to spawn a session on a host |
wmi | Use WMI to spawn a session on a host |
参考
https://blog.fox-it.com/2019/02/26/identifying-cobalt-strike-team-servers-in-the-wild/
◆来源:渗透利器Cobalt Strike在野利用情况专题分析
◆本文版权归原作者所有,如有侵权请联系我们及时删除
最新评论