启明星辰ADLab:渗透利器Cobalt Strike在野利用情况专题分析
更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)
1
引 言
Cobalt Strike是一款商业化的渗透测试利器,由著名的攻防专业团队StrategicCyber开发。该工具被广泛应用于渗透测试项目中,在提高政府和企业网络设施安全性上起到了重要的作用。同时,随着网络空间的红蓝对抗不断发展,该框架成为对手模拟和红队行动中最为流行的一款软件。但由于该框架具备团队协作攻击、流量防检测、防安全软件查杀等优势,因而也被大量黑客组织用于真实的高危害性的攻击。目前已知的多个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框架的仿冒域名。这些数据在我们进一步的威胁分析与情报挖掘中起到了重要的作用。
2
分析简述
2.1 Cobalt Strike简介
图1 Cobalt Strike软件界面
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使用者的分布情况,以此为线索还可以挖掘出更多情报。
通过长期的样本收集,我们共得到了8380个Cobalt Strike样本,样本文件包含有EXE、DLL、VBScript、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作为病毒检测的方法失效。
3
CS攻击方情报分析
3.1 分布概况
(2)攻击者/渗透测试人员在内网环境部署Cobalt Strike服务器并进行免杀功能测试。
对于连接C&C域名的样本,我们在深入分析后发现了更多有价值的线索,也将在下个小节进行详细的介绍。
3.2 隐匿技术
隐匿技术 | 技术说明 |
域名仿造技术 | 通过仿造合法域名干扰普通用户或日志分析人员 |
CDN技术 | 借助CDN服务进行流量中转,隐藏真实C&C地址 |
域前置+CDN技术 | 借助合法域名作为前置域,结合CDN隐藏真实C&C地址 |
DNS隧道技术 | 将恶意流量隐藏在DNS协议中对抗流量检测 |
流量伪装技术 | 借助Malleable-C2-Profiles配置文件自定义通信流量规则对抗流量检测 |
我们进一步统计了这批域名样本中各类隐匿技术的使用占比情况,其中,部分样本融合了多项技术,例如同时运用域名仿造和DNS隧道技术(归类至DNS隧道)、同时使用域名仿造和流量伪装技术(归类至流量伪装)等,由于此类样本数量较少,对分析结果的影响有限,故进行了调整处理,得到隐匿技术占比图。
图6 隐匿技术占比图
3.2.1 域名仿造技术
通过仿造合法域名干扰普通用户或日志分析人员。攻击者通常采用插入“-”连字符、替换形近字符、颠倒词语顺序、更改顶级域名等方式仿冒合法域名,从而将域名伪装成知名公司、软件、更新服务等网站域名进一步开展恶意活动,包括Baidu、Chrome、Windows、Office等都是常常被选择的伪造目标。由于此类伪装方式具有很强的迷惑性和隐蔽性,会对普通用户或日志分析人员产生较大干扰,且技术门槛和成本较低,俨然成为许多攻击组织的标准配置。一些仿造示例如表2所示。
C&C | 仿造目标 | 备注 | |
baidu-search.net | Baidu | 仿造知名公司或软件域名 | |
dns-chrome.com | Chrome | ||
ns1.fackbook.gq,ns2.fackbook.gq,ns3.fackbook.gq | Fackbook | ||
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)等。一些示例见表3。
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。技术说明如图7所示。
图7 Domain Fronting技术
起初我们并未能发现这类技术的运用,但是样本C&C中出现的大量合法白域名非常可疑。在进一步逆向分析后,我们发现这些样本请求包的Host字段指向了一些与C&C不同的域名,即使用了域前置技术。域前置技术在CDN等重要的基础设施和各类云服务中尤其适用,虽然部分厂商已停止支持域前置功能,但技术思路可以引伸触类。从统计结果来看,约有10%的域名样本采用了域前置技术,其中隐蔽域名使用较多的云服务厂商包括微软(MicrosoftAzure)、亚马逊(Amazon CloudFront)和谷歌(Google App Engine)等,合法域名则通常可以从相关CDN子域进行寻找,攻击者常采用一些知名网站或网络安全公司相关的域名来逃避检测,部分示例如表4所示。
前域(合法域名) | 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 |
…… |
表4 Domain Fronting技术示例
3.2.4 DNS隧道技术
在整理冗余C&C样本(包含多个备用C&C域名)的过程中,我们发现了一些疑似DNS服务器NS(Name Server)记录地址的域名,例如ns1.microsoftonlines.net、ns1.fackbook.gq、ns5.thepatestid.online等等。通过更深入的逆向分析和特征提取,确认这些样本使用了DNS隧道技术。从统计结果来看,约有15%的域名样本采用了DNS隧道技术进行通信,且大多数攻击者会设置多个域名服务器NS记录来提高连接的可靠性,同时结合域名仿造技术进行伪装,即使用户查看流量也难以察觉。相关样例如表5所示(更加详细的DNS隧道分析可参考技术分析章节内容)。
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 |
…… |
表5 DNS隧道技术示例
3.2.5 流量伪装技术
流量伪装技术是指借助Cobalt Strike的Malleable-C2-Profiles配置文件自定义通信流量规则对抗流量检测的技术。攻击者通过加载定制的配置文件(如amazon.profile、jquery.profile等模板)来改变目标主机与Server端的流量特征,将HTTP通信流量伪装成正常Web流量或加密混淆流量,从而达到通信隐匿的效果。
在提取域名样本连接请求的Host字段特征时,我们除了挖掘到使用Domain Fronting技术的样本,还发现了大量使用此类流量伪装技术的样本。其在域名样本中的使用占比超过21%,也是攻击者运用最多的伪装技术。该类样本的Host字段通常会由配置文件设置为指定的Web域名以模拟相关请求,常见的请求包括Amazon、Jquery、Bing等,更多的样例如表6所示。
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.wikipedia.org |
thedivineshoppe.com | www.fidelity.com |
iosios1937cn.firedog.ml | www.firedog.com |
http.pc-rekcah.com | www.hulu.com |
…… |
表6 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编译时间来归类其所属版本,编译时间轴如图8所示。
图8 payload编译时间轴-样本数
我们针对目前传播较广的几类Cobalt Strike版本进行了收集,并提取了对应木马的payload编译时间,相关数据与图8展示的实际编译时间分布基本相符。值得注意的是,这几类版本均存在破解版,也间接表明Cobalt Strike的大量用户可能是非商业付费人群。
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 |
表7 Cobalt Strike版本及对应信息
为了更好的反映各版本的流行程度,我们将相关版本的捕获数量与时间进行了关联统计(以此批样本为例,仅体现变化趋势),如图9。
图9 Cobalt Strike各版本样本捕获时间折线图-样本数
3.4 框架使用者
那么,究竟是哪些人员或组织在使用Cobalt Strike框架呢?我们针对这批Cobalt Strike样本的IOC进行了更加深入的溯源,结合关联样本的出现时间、技术运用、攻击链条以及公开的研究报告等资料,发现了多个著名的攻击团伙和APT组织,关联信息如表8所示。
Groups | Cobalt Strike C&C | Hash |
Darkhydrus | update.cisc0.net, | 7a4f8fffb1041bf6b19f76ded41b90b616f733b0 0e7957fbc94c4ea120f1903de999963fc3654937 |
CopyKittens | cloud-analyzer.com, | af18959b5204853ef347fb05b518fca26a08ae57 |
Leviathan | www.thyssenkrupp-marinesystems.org | 1875db18a7c01ec011b1fe2394dfc49ed8a53956 |
Cobalt Group | 46.21.147.61, | 8c6a264d5fd2d9f9d93d5350fccd52046b5007d2 |
5.135.237.216 | 1232a214b510a6b306e51a166c19fad5ac63bfc8 | |
86.106.131.207 | ba4d490c97a7ba6a2d7f374919e56bd3f6fd88d9 | |
104.144.207.207 | cc794e4a1f7e23008e6e648b1aacb87db446fc98 | |
176.9.99.134 | 1f50d16316c9896e3ea8cb5e8cfee195bc4aa92b | |
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 |
不仅是以上披露的攻击组织,我们在样本溯源过程中同样发现了不少红队攻击的案例,后文也将举例进行详细分析。显而易见的是,当前攻防双方都非常热衷于运用该框架进行安全对抗。目前我们发现与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影响可被特征探测。
4
攻击案例分析
在本攻击案例中,国内一个红队在Github故意投放一些与某金融类公司相关的信息如公司VPN登录网址、账号和密码等敏感信息,以此引诱对该目标感兴趣的对手团队。登录网站为仿冒该金融类公司的钓鱼网站,仿冒网站登录后会诱导对手团队下载页面提供的VPN客户端,一旦对手下载并执行该客户端,便会感染CS木马,成为受控主机。仿冒网站见图10。
图10 木马下载页面
下载得到的VPN客户端名称为“vpnclient.rar”,其中包含有两个文件分别为“vpnclient.exe”和“wwlib.dll”,其中文件“vpnclient.exe”为带有微软签名的word2007官方程序,“wwlib.dll”文件为word程序必加载组件,这里被嵌入了CS木马。这是一种利用合法白文件+DLL劫持的手段进行攻击的技术,此前多个组织如海莲花等都采用过此种技术进行攻击。
图11 木马传播和执行图
当vpnclient.exe运行后,表面上会打开一个名为“vpnclient..docx”的word文档,而背地里则会解密执行shellcode来下载CS的远控模块以执行从C&C传来的恶意指令(整个木马的发现和执行见图11)。经进一步深入分析,该远控模块由beacon模板生成,其包含有丰富功能,如服务扫描、端口转发、多模式端口监听等功能。CobaltStrike框架的精髓之处是攻击者可以利用不同的通信方式和C&C服务器通信,我们这里主要介绍其比较有特色的几个功能,分别是基于DNS协议的DNS隧道攻击、基于SMB协议的命名管道内网攻击和基于socks流量代理的内网攻击。同时,Cobalt Strike框架还可以和Metasploit框架相互配合,来进行联合的网络渗透和内网攻击。
4.1借壳启动
该CS木马借用微软官方程序来加载自己核心组件执行,通过利用白文件和DLL劫持的方法来绕过安全检测,以达到落地攻击目标的目的。其中压缩包文件中的文件“vpnclient.exe”可以正常绕过任意安全软件的检查得以执行,但是其运行后会加载同目录下伪装为微软组件“wwlib.dll”的CS木马加载器。当目标运行“vpnclient.exe”后,表面上会打开一个名为“vpnclient..docx”的word文档(该文档是一款名为“VPN Client”程序的安装和配置操作说明文件,见图12),目的是迷惑受害用户。而背地里,恶意代码则会执行“wwlib.dll”并下载执行CS远控模块,以达到控制对手主机的目的。
图12 用于迷惑受害用户的文档
“wwlib.dll”恶意文件的资源文件包含两部分数据,分别为名为“CODE”的shellcode和名为“WORD”的word文档(见图13)。CS木马运行时,一方面提取“WORD”资源并使用word软件打开来迷惑受害用户,另一方面提取“CODE”资源来解密执行,下载CS远控模块,对受害用户实施网络攻击。
4.2 上线分析
远控模块执行后,首先收集感染设备信息,准备上线。远控模块将感染设备的IP地址、管理员账户、计算机名和本进程id等信息(见图14)加密后作为上线包发送到C&C服务器。
图14 收集设备信息
图15是我们模拟C&C服务器,使用Wireshark抓到的上线包,从该上线包中,我们可以看到加密后的信息被伪装成Cookie字段,隐藏在了http协议里面。
命令加密后使用tcp协议发送,部分执行结果则使用http协议进行回传。如下是我们模拟木马命令,使用shell dir 列出感染设备当前目录所抓取到的数据包。从图16中可以看到,命令执行后的结果回传使用了http协议。
4.3 远程控制
从CS木马远控模块的控制命令和相关代码的反汇编结果来看(见图17),远控模块包含多种恶意功能。主要包括屏幕截图、键盘记录、socks代理、网络和主机枚举、端口扫描、文件上传和下载、执行powershell命令、提权、注入会话到特定进程以及DNS隧道攻击等(详细的的命令和功能介绍见附录部分)。由以上的分析可知,当对手下载并运行该伪造的“vpn客户端”,打开“vpn安装配置指南”文档研究的同时,红队方的木马已悄悄上线。红队方攻破对手内网后,能够利用该木马窃取对手的作战计划、掌握的工具和利用的漏洞等信息,红队方根据掌握的这些信息,可以有效调整自己的作战策略和应对计划。
5
对抗技术分析
5.1 管道逃逸技术
首先新起一个线程创建名为"\\.\pipe\MSSE-594-server"的命名管道(其中594为随机值)如图18,接着木马将长度为0x34200的加密数据写入到该命名管道中,等待后续读取和进一步的解密,写入的加密数据见图19。
图19 加密数据
睡眠1024毫秒后,木马从前面创建的命名管道中读取加密数据,见图20。
图20 从命名管道读取数据
在解密数据之前,木马首先申请一段内存空间,用于存放解密后的payload,见图21。
图21 申请内存空间
木马将读取到的加密数据,每4个字节为一组,依次和整形数据0x1aa64991(不同的样本该数值会有不同)异或,异或运算后的值即为解密数据,最终解密出CS远控模块文件。
图22 解密数据
通过解密后的数据可以看出,该CS远控模块文件为Windows平台的PE文件,如图23。
图23 CS远控模块文件
CS木马在解密完远控模块后,将远控模块所在的内存属性修改为rx,并使用函数CreateThread执行远控模块代码,实现对感染机器的攻击和远程控制,如图24。
5.2 DNS隧道
DNS隧道是将其他的协议内容封装在DNS协议中,然后利用DNS查询过程来进行数据传输的技术。CS支持使用DNS隧道技术来和C&C服务器通信以应对复杂的网络环境。如图25,封装后的流量通过DNS递归查询,最终到达C&C服务器解密。同样,来自C&C服务器的指令也可以通过这种方式顺利下发到受控端。使用DNS隧道技术可以有效躲避防火墙、IDS、IPS等传统网络安全设备的检测(因为这些设备很难做到对DNS流量的友好规则控制),大大提高了渗透测试或攻击的隐蔽性。
图25 DNS隧道攻击
图26是一个使用DNS隧道模式进行通信的数据包,从图中我们可以看到,控制端发送的命令和受控端返回的流量都被隐藏在了DNS隧道中加密传输。
图26 DNS隧道模式通信的数据包
如图27,命令执行完后,受控端将回显信息封装成DNS字符串,通过DNS隧道回传给C&C服务器。
图27 回显信息加密传输
5.3 SMB隧道
CS支持内网主机之间使用基于SMB协议的 Beacon 来进行数据交换。这允许让一台受感染的计算机与 C&C 服务器进行正常的 beacon 连接,并使内部网络上的所有其他的服务器通过 SMB 协议与最初受感染的主机进行通信。如图28,在攻击者成功攻破内网主机目标1后再进行内网横向移动,将基于SMB的Beacon木马植入目标2主机。这样目标2上线后,就会通过SMB协议的命名管道和目标1通信,目标1再通过DNS或者HTTP协议将恶意流量转发出去。通过这样,攻击者可以操纵 Beacon 通信,实现让所有来自受感染主机的流量看起来和普通流量无异。采用这种连接方式,当安全管理人员检测到一个二级系统有问题并进行取证分析时,他们可能会无法识别与实际攻击相关的 C&C 服务器域名。
图28 SMB内网渗透
图29是内网中目标2和目标1的通信数据包,从图中可以看到,在完成SMB协议协商和会话后,目标2连接到了目标1的IPC$共享,然后利用该命名管道进行基于SMB协议的数据通信。
5.4 Socks代理
CobaltStrike自带socks代理功能,在攻破组织内网后,beacon socks代理功能可以被用来对目标网络做进一步的内网渗透。如图30,web server是一个位于内网的web服务器,其仅为组织内部服务。目标1为内网中一台可以访问外网的设备,攻击者在拿到目标1的控制权限后,可以在控制端开启beacon的socks功能,然后利用proxychains等本地代理工具访问webserver内网服务器,对目标组织进行更加深入的渗透攻击。
图30 Socks代理功能
如图31,是目标1通过beacon的socks代理转发给攻击者的内网服务器流量,从图中可以看到,攻击者成功访问了位于组织内部的Web Server服务。
图31 Beacon转发的流量
5.5 代码注入技术分析
在分析CS远控模块的过程中,我们发现根据不同的上下文条件,远控模块使用了不同的代码注入技术来实现远程代码的注入(图32为使用了远程线程及APC注入技术)。
图32 恶意代码的注入和执行
CS木马的注入方式是非常灵活的,其可以通过配置文件来进行灵活的配置,从官方博客中我们就可以看到beacon模块的代码注入配置样例。自从Cobalt Strike更新至3.6版本后,官方给出了一个Malleable-C2,也就是在启动团队服务器的时候加载一些配置文件,Malleable-C2配置文件中的进程注入块(process-inject block)决定了进程注入行为的内容并且控制进程注入行为。
图33 process-inject block
进程注入块是围绕进程注入流程的生命周期组织的,分为以下4步:
图34 进程注入流程
PostExploitation Jobs-很多Cobalt Strike的后开发(post-exploitation)特性(比如屏幕截图、键盘记录、哈希存储等)被实现为Windows的dll。为了执行这些特性,Cobalt Strike生成一个临时进程,并将这些功能注入其中,进程控制块(process-inject block)控制这一进程注入步骤。后开发控制块(post-exblock)(见图35)则控制Cobalt Strike后开发特性的特定内容和行为。
图35 post-ex block
图36是我们的研究人员在搭建的Cobalt Strike攻击环境后,执行恶意命令,受害机器进程的监控情况,从图中可以看到,每当执行一个截图命令或者“spawn”等“后渗透”相关命令,在受害机器上都会新起一个rundll32进程和攻击服务器通信。
6
总 结
无论怎样,恶意攻击的关键步骤是传播和落地,防重于治,在恶意攻击造成严重损失后再去修补漏洞显然只是无奈的选择,安全管理最重要的还是对人的管理,需要从源头把好关、“治病于未病”。因此,不管是对于企业还是个人,都应该加强安全意识,不要轻易打开未知来源的邮件和附件,不轻易点击未知链接,不打开不可靠的文档,不执行未知的程序,及时更新系统补丁和应用程序,守住我们的系统和数据安全。
附录:
命令 | 描述 |
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 script |
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 time |
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/
https://blog.cobaltstrike.com/category/cobalt-strike-2/
启明星辰积极防御实验室(ADLab)
ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞1000余个,通过 CNVD/CNNVD累计发布安全漏洞700余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。