作者:啟明星辰ADLab
原文鏈接:https://mp.weixin.qq.com/s/Agr3doBvYMK6Bs0tH6urcw
引言
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簡介
Cobalt Strike是一款基于Java編寫的全平臺多方協同后滲透攻擊框架,也稱為CS。早期版本依賴Metasploit框架,Cobalt Strike 3.0之后則是作為單獨的平臺使用。其支持多種通信協議,包括http、https、dns、smb等,同時集成了提權、憑據導出、端口轉發、端口掃描、橫向移動、Socks代理、釣魚攻擊等功能,且支持豐富的擴展插件,幾乎可以覆蓋APT攻擊鏈所需的各個技術環節。木馬生成方面也涵蓋了大多數的平臺和攻擊場景,包括 PE木馬、ELF木馬、網頁木馬、Office宏病毒木馬等。不過Cobalt Strike是一款商業運營的收費軟件,每位使用者一年的許可證費用為3500美元,許可證續簽費用為每年2500美元。

2.2 樣本采集與處理
為了對Cobalt Strike的在野使用情況進行全方位的了解和評估,啟明星辰ADLab安全研究人員通過長期追蹤,采集和分析了大量的關聯木馬樣本,并針對其多種類型和版本的樣本提取了指紋特征。
Cobalt Strike的木馬生成基于其框架下的模版文件如: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作為病毒檢測的方法失效。
接下來,我們將對這批C&C進行分析處理,并對其中一些有價值的情報進行挖掘,以進一步的掌握Cobalt Strike在野使用者的現實情況。
CS攻擊方情報分析
在這里我們通過CS回連的C&C數據作為線索,以分析Cobalt Strike木馬攻擊來源的分布情況,進一步關聯出一些已知APT組織并發現一些新的未知黑客組織。同時我們還對Cobalt Strike木馬使用者所采用的一些特種技術進行分析和評估。
3.1 分布概況
首先,我們針對Cobalt Strike的C&C服務器地理位置進行了統計分析,從而評估該框架在全球的分布情況和流行程度。從結果來看,Cobalt Strike服務器的分布范圍非常廣泛,包括42個國家和地區,其中分布較為密集的國家為中國、美國、荷蘭、俄羅斯和日本,上述國家同樣也是黑客組織聚集和遭受網絡攻擊較多的國家。圖2是根據C&C數據繪制的Cobalt Strike C&C全球分布圖。

之后,我們對這批C&C的所屬運營商進行了細分。結果表明,大量服務器歸屬于規模較小或無法識別的運營商(圖3中以XX表示)。此類廠商的安全管理工作通常較為松散、混亂,相應的租金也較為低廉,攻擊者往往傾向于選擇此類廠商架設服務器以降低攻擊成本和躲避監管。除此之外,內網IP、阿里云、電信、亞馬遜、臉書以及谷歌的C&C服務器數量較多。相關占比分布如圖3所示。

考慮到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類型占比如圖5所示。

針對C&C數據中出現的大量內網IP和域名,我們推測連接內網IP的樣本可能存在如下情況:
-
攻擊者/滲透測試人員在攻陷某內網主機后,通過橫向滲透獲取了更多內網機器權限,并進一步借助可連接公網的內網主機作為跳板C&C進行流量轉發,從而達到其它主機上線的目的。
-
攻擊者/滲透測試人員在內網環境部署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隱藏技術和通信隱匿技術來對抗監管審查和流量分析,從而確保更穩定的權限維持,相關技術說明如表1所示。
| 隱匿技術 | 技術說明 |
|---|---|
| 域名仿造技術 | 通過仿造合法域名干擾普通用戶或日志分析人員 |
| CDN技術 | 借助CDN服務進行流量中轉,隱藏真實C&C地址 |
| 域前置+CDN技術 | 借助合法域名作為前置域,結合CDN隱藏真實C&C地址 |
| DNS隧道技術 | 將惡意流量隱藏在DNS協議中對抗流量檢測 |
| 流量偽裝技術 | 借助Malleable-C2-Profiles配置文件自定義通信流量規則對抗流量檢測 |
我們進一步統計了這批域名樣本中各類隱匿技術的使用占比情況,其中,部分樣本融合了多項技術,例如同時運用域名仿造和DNS隧道技術(歸類至DNS隧道)、同時使用域名仿造和流量偽裝技術(歸類至流量偽裝)等,由于此類樣本數量較少,對分析結果的影響有限,故進行了調整處理,得到隱匿技術占比圖。

由圖6可知,超過72%的攻擊者嘗試通過隱匿技術來增強自身隱蔽性。其中,約37%的攻擊者采用通信隱匿技術(流量偽裝、DNS隧道)來躲避流量檢測,且往往會結合域名仿造進一步增強偽裝性。約15%的攻擊者采用C&C隱藏技術(CDN技術、域前置+CDN技術)來逃避審查和溯源分析,相關技術將結合樣本中的示例進行介紹。
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(Content Delivery 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)的核心思想是在不同通信層使用不同的域名,在基于Domain Fronting的HTTP(S)請求中,DNS查詢以及SNI攜帶一個合法域名(前域),而在HTTP Host頭中攜帶另一個域名(隱蔽或被禁止訪問的域名C&C),當請求被發送給合法域名后會由相應云服務解析并轉發至隱蔽域名,使其不以明文暴露給網絡審查者,從而隱藏攻擊者的真實C&C。技術說明如圖7所示。

起初我們并未能發現這類技術的運用,但是樣本C&C中出現的大量合法白域名非常可疑。在進一步逆向分析后,我們發現這些樣本請求包的Host字段指向了一些與C&C不同的域名,即使用了域前置技術。域前置技術在CDN等重要的基礎設施和各類云服務中尤其適用,雖然部分廠商已停止支持域前置功能,但技術思路可以引伸觸類。從統計結果來看,約有10%的域名樣本采用了域前置技術,其中隱蔽域名使用較多的云服務廠商包括微軟(Microsoft Azure)、亞馬遜(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 |
| …… |
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記錄來提高連接的可靠性,同時結合域名仿造技術進行偽裝,即使用戶查看流量也難以察覺。相關樣例如表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 |
| …… |
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 |
| …… |
通常來說,如果是針對特定目標的攻擊,攻擊者還會根據目標機器存在的網絡環境、通信軟件、常用網站等來偽造流量特征,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服務器的影響程度。進一步收集和分析后,我們發現Cobalt Strike的版本眾多,其中部分版本的母體樣本存在編譯時間重疊,而其payload的編譯時間則相對獨立準確,且不會隨母體樣本生成而改變,故可解密提取樣本的payload編譯時間來歸類其所屬版本,編譯時間軸如圖8所示。

我們針對目前傳播較廣的幾類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 |
為了更好的反映各版本的流行程度,我們將相關版本的捕獲數量與時間進行了關聯統計(以此批樣本為例,僅體現變化趨勢),如圖9。

從各版本的流行趨勢來看,雖然歷次的版本更新都會造成前期版本一定程度的用戶流失,但舊版本始終保有相對穩定的用戶量。參考2020年3月的數據情況,已有大量攻擊者開始采用Cobalt Strike 4.0實施攻擊,但3.13之前的舊版本使用量占比仍然有23%。可見,部分使用者不會及時更新或傾向于使用已有的破解版本,因此未來通過舊版本服務器發動攻擊的現象可能長期存在,該特征檢測規則對于打擊惡意活動方面仍具有一定的價值。
3.4 框架使用者
那么,究竟是哪些人員或組織在使用Cobalt Strike框架呢?我們針對這批Cobalt Strike樣本的IOC進行了更加深入的溯源,結合關聯樣本的出現時間、技術運用、攻擊鏈條以及公開的研究報告等資料,發現了多個著名的攻擊團伙和APT組織,關聯信息如表8所示。
| Groups | Cobalt Strike C&C | Hash |
|---|---|---|
| Darkhydrus | update.cisc0.net, developer.cisc0.net, res.cisc0.net | 7a4f8fffb1041bf6b19f76ded41b90b616f733b00e7957fbc94c4ea120f1903de999963fc3654937 |
| 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 | 8c6a264d5fd2d9f9d93d5350fccd52046b5007d2 |
| 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 | 9858d5cb2a6614be3c48e33911bf9f7978b441bfa968c95ee054af28e88edb77c60e8c035de97237 |
| APT32 | officewps.net | 5c0ad0af431ca32d0050052c17eb8c72a2ad8a43 |
| api.blogdns.com | 3e65b4fefa92cbf3e146a096eaa0aeec5c1be42a | |
| load.newappssystems.com | 78c549a7f4119aa876763426e6f76be3d4f43dd3 |
這些組織善于借助域名仿造、多級跳板、DNS隧道、流量偽裝等技術手段隱蔽自身。其中,很多組織都熱衷于使用DNS隧道攻擊,以繞過防火墻或IDS的流量檢測,且其域名往往會精心偽裝設計,即使用戶查看流量也難以辨別。使用Cobalt Strike頻率較高的組織則是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木馬,成為受控主機。仿冒網站見圖10。

下載得到的VPN客戶端名稱為“vpnclient.rar”,其中包含有兩個文件分別為“vpnclient.exe”和“wwlib.dll”,其中文件“vpnclient.exe”為帶有微軟簽名的word2007官方程序,“wwlib.dll”文件為word程序必加載組件,這里被嵌入了CS木馬。這是一種利用合法白文件+DLL劫持的手段進行攻擊的技術,此前多個組織如海蓮花等都采用過此種技術進行攻擊。

當vpnclient.exe運行后,表面上會打開一個名為“vpnclient..docx”的word文檔,而背地里則會解密執行shellcode來下載CS的遠控模塊以執行從C&C傳來的惡意指令(整個木馬的發現和執行見圖11)。經進一步深入分析,該遠控模塊由beacon模板生成,其包含有豐富功能,如服務掃描、端口轉發、多模式端口監聽等功能。Cobalt Strike框架的精髓之處是攻擊者可以利用不同的通信方式和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遠控模塊,以達到控制對手主機的目的。

“wwlib.dll”惡意文件的資源文件包含兩部分數據,分別為名為“CODE”的shellcode和名為“WORD”的word文檔(見圖13)。CS木馬運行時,一方面提取“WORD”資源并使用word軟件打開來迷惑受害用戶,另一方面提取“CODE”資源來解密執行,下載CS遠控模塊,對受害用戶實施網絡攻擊。

4.2 上線分析
遠控模塊執行后,首先收集感染設備信息,準備上線。遠控模塊將感染設備的IP地址、管理員賬戶、計算機名和本進程id等信息(見圖14)加密后作為上線包發送到C&C服務器。

圖15是我們模擬C&C服務器,使用Wireshark抓到的上線包,從該上線包中,我們可以看到加密后的信息被偽裝成Cookie字段,隱藏在了http協議里面。

命令加密后使用tcp協議發送,部分執行結果則使用http協議進行回傳。如下是我們模擬木馬命令,使用shell dir 列出感染設備當前目錄所抓取到的數據包。從圖16中可以看到,命令執行后的結果回傳使用了http協議。

4.3 遠程控制
從CS木馬遠控模塊的控制命令和相關代碼的反匯編結果來看(見圖17),遠控模塊包含多種惡意功能。主要包括屏幕截圖、鍵盤記錄、socks代理、網絡和主機枚舉、端口掃描、文件上傳和下載、執行powershell命令、提權、注入會話到特定進程以及DNS隧道攻擊等(詳細的的命令和功能介紹見附錄部分)。由以上的分析可知,當對手下載并運行該偽造的“vpn客戶端”,打開“vpn安裝配置指南”文檔研究的同時,紅隊方的木馬已悄悄上線。紅隊方攻破對手內網后,能夠利用該木馬竊取對手的作戰計劃、掌握的工具和利用的漏洞等信息,紅隊方根據掌握的這些信息,可以有效調整自己的作戰策略和應對計劃。

對抗技術分析
以上攻擊案例中我們僅僅對CS木馬從落地到遠程控制的過程做了簡要分析,在更多的案例中,CS木馬還具備更加強大而豐富的安全對抗手段,如逃逸管道技術、DNS隧道、SMB隧道、Socks代理技術以及可定制的代碼注入技術等等,這些技術手段的使用在很大程度上不但斷提高自身的成活率,增強黑客攻擊活動隱秘性,極好的保護黑客自身。本節將對CS使用到的此類技術的實現原理和機制進行詳細的分析和討論。
5.1 管道逃逸技術
CS木馬使用了管道逃逸技術來躲避安全軟件的查殺。該技術利用管道作為惡意代碼的暫存通道,在很大程度上避免了安全軟件的查殺,通過測試驗證,該技術可以繞過很多主流殺毒軟件(如360、ESET Nod32)的安全檢查。經我們的安全研究人員多次驗證,該技術截至本文撰寫時依然有效。CS木馬利用管道逃逸技術執行遠控模塊的實現過程如下。
首先新起一個線程創建名為"\.\pipe\MSSE-594-server"的命名管道(其中594為隨機值)如圖18,接著木馬將長度為0x34200的加密數據寫入到該命名管道中,等待后續讀取和進一步的解密,寫入的加密數據見圖19。


睡眠1024毫秒后,木馬從前面創建的命名管道中讀取加密數據,見圖20。

在解密數據之前,木馬首先申請一段內存空間,用于存放解密后的payload,見圖21。

木馬將讀取到的加密數據,每4個字節為一組,依次和整形數據0x1aa64991(不同的樣本該數值會有不同)異或,異或運算后的值即為解密數據,最終解密出CS遠控模塊文件。

通過解密后的數據可以看出,該CS遠控模塊文件為Windows平臺的PE文件,如圖23。

CS木馬在解密完遠控模塊后,將遠控模塊所在的內存屬性修改為rx,并使用函數CreateThread執行遠控模塊代碼,實現對感染機器的攻擊和遠程控制,如圖24:

5.2 DNS隧道
DNS隧道是將其他的協議內容封裝在DNS協議中,然后利用DNS查詢過程來進行數據傳輸的技術。CS支持使用DNS隧道技術來和C&C服務器通信以應對復雜的網絡環境。如圖25,封裝后的流量通過DNS遞歸查詢,最終到達C&C服務器解密。同樣,來自C&C服務器的指令也可以通過這種方式順利下發到受控端。使用DNS隧道技術可以有效躲避防火墻、IDS、IPS等傳統網絡安全設備的檢測(因為這些設備很難做到對DNS流量的友好規則控制),大大提高了滲透測試或攻擊的隱蔽性。

圖26是一個使用DNS隧道模式進行通信的數據包,從圖中我們可以看到,控制端發送的命令和受控端返回的流量都被隱藏在了DNS隧道中加密傳輸。

如圖27,命令執行完后,受控端將回顯信息封裝成DNS字符串,通過DNS隧道回傳給C&C服務器。

5.3 SMB隧道
CS支持內網主機之間使用基于SMB協議的 Beacon 來進行數據交換。這允許讓一臺受感染的計算機與 C&C 服務器進行正常的 beacon 連接,并使內部網絡上的所有其他的服務器通過 SMB 協議與最初受感染的主機進行通信。如圖28,在攻擊者成功攻破內網主機目標1后再進行內網橫向移動,將基于SMB的Beacon木馬植入目標2主機。這樣目標2上線后,就會通過SMB協議的命名管道和目標1通信,目標1再通過DNS或者HTTP協議將惡意流量轉發出去。通過這樣,攻擊者可以操縱 Beacon 通信,實現讓所有來自受感染主機的流量看起來和普通流量無異。采用這種連接方式,當安全管理人員檢測到一個二級系統有問題并進行取證分析時,他們可能會無法識別與實際攻擊相關的 C&C 服務器域名。

圖29是內網中目標2和目標1的通信數據包,從圖中可以看到,在完成SMB協議協商和會話后,目標2連接到了目標1的IPC$共享,然后利用該命名管道進行基于SMB協議的數據通信。

5.4 Socks代理
Cobalt Strike自帶socks代理功能,在攻破組織內網后,beacon socks代理功能可以被用來對目標網絡做進一步的內網滲透。如圖30,web server是一個位于內網的web服務器,其僅為組織內部服務。目標1為內網中一臺可以訪問外網的設備,攻擊者在拿到目標1的控制權限后,可以在控制端開啟beacon的socks功能,然后利用proxychains等本地代理工具訪問webserver內網服務器,對目標組織進行更加深入的滲透攻擊。

如圖31,是目標1通過beacon的socks代理轉發給攻擊者的內網服務器流量,從圖中可以看到,攻擊者成功訪問了位于組織內部的Web Server服務。

5.5 代碼注入技術分析
在分析CS遠控模塊的過程中,我們發現根據不同的上下文條件,遠控模塊使用了不同的代碼注入技術來實現遠程代碼的注入(圖32為使用了遠程線程及APC注入技術)。

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、NtQueueApcThreads、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的注入。
Post Exploitation Jobs-很多Cobalt Strike的后開發(post-exploitation)特性(比如屏幕截圖、鍵盤記錄、哈希存儲等)被實現為Windows的dll。為了執行這些特性,Cobalt Strike生成一個臨時進程,并將這些功能注入其中,進程控制塊(process-inject block)控制這一進程注入步驟。后開發控制塊(post-ex block)(見圖35)則控制Cobalt Strike后開發特性的特定內容和行為。

下圖是我們的研究人員在搭建的Cobalt Strike攻擊環境后,執行惡意命令,受害機器進程的監控情況,從圖中可以看到,每當執行一個截圖命令或者“spawn”等“后滲透”相關命令,在受害機器上都會新起一個rundll32進程和攻擊服務器通信。

總結
本文揭秘了Cobalt Strike框架的在野使用情況并深入介紹了相關木馬的核心技術。Cobalt Strike使用者遍布全球,不論是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 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 |
參考
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.jmbmsq.com/1190/
暫無評論