Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863558440

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

隨著網絡防御者對Cobalt Strike的關注度上升,攻擊者一直在尋找替代的命令與控制(CC)框架,DeimosC2就是一個替代工具。

CC系統對於滲透測試人員和安全人員來說是非常有用的協作工具。它們為所有受害設備提供了一個公共的位置,以便與之聯繫、進行控制,並允許多個用戶與相同的受害設備進行交互。當執行授權測試時,這是非常重要的,因為日誌保存在一個單獨的地方,以幫助報告。然而,越來越多的這些工具被攻擊者利用,包括開源工具和商業工具。它們的易用性和穩定性讓它們能夠長時間運行而沒有任何問題,這也是為什麼攻擊者也開始轉向這些CC平台而不是建立自己的平台的原因之一。

由於大多數注意力都集中在像Cobalt Strike這樣的成熟的商業工具上,攻擊者一直在尋找能夠提供許多相同功能的其他替代品。對於防御者來說,這意味著隨著攻擊者轉向開源CC軟件,個人和組織都更難抵禦網絡攻擊了。

開源CC軟件與其他一些開源CC框架(如Ares C2、PoshC2和TrevorC2)一樣,DeimosC2提供了經典的CC框架特性,但也提供了一個感覺和行為非常像Cobalt Strike或Metasploit Pro等商業工具的用戶界面。

到目前為止,在地下犯罪組織中,將DeimosC2作為替代方案的討論還不多,但攻擊者可能會在不久的將來將DeimosC2作為首選工具。雖然DeimosC2不是攻擊者目前尋找其他CC平台使用的最受歡迎的選擇,但研究DeimosC2,可以更好地了解是什麼原因使攻擊者想要使用這個平台作為CC框架?

什麼是DeimosC2? DeimosC2是一個開源的CC框架,於2020年6月發布。它是一個功能齊全的框架,允許多個攻擊者訪問受害計算機,為其創建有效負載並與之交互。作為一個利用後的CC框架,DeimosC2將生成需要在計算機服務器上手動執行的有效負載,這些有效負載已經通過其他手段(如社會工程、利用或暴力攻擊)被破壞。一旦部署有效負載,攻擊者將獲得與執行有效負載的用戶帳戶(管理員或普通用戶)相同的系統訪問權。注意,DeimosC2不執行任何類型的活動升級或特權升級。

利用後CC服務器很受安全人員歡迎,因為它們提供了一種方便的方法,可以與多個受害設備交互,收集記錄,並存儲對每台設備所做的事情的證據。

DeimosC2的特點DeimosC2有兩種在系統上安裝的選項:一種是不依賴於安裝Go的預構建二進製文件,另一種是可以在任何安裝了Go的系統上編譯和運行的源代碼。在這項研究中,使用了Debian虛擬機(VM)中預先構建的二進製文件,因此與使用直接從GitHub項目下載的源代碼相比,某些行為可能有所不同。

3.png

GitHub上的DeimosC2服務器二進製文件

DeimosC2結合了許多與其他cc軟件平台相同的特性。像DeimosC2這樣的CC系統的主要目的之一是幫助安全人員和滲透測試人員整合他們的基礎設施,在研究期間通過共享被破壞的主機與他人協作。考慮到這一點,DeimosC2具有多個用戶支持,為用戶提供兩種角色:管理員和用戶。下圖顯示了DeimosC2測試中的兩個用戶設置。

4.png

DeimosC2中的用戶配置截圖

因為DeimosC2也是針對安全研究人員的,所以它支持多因素身份驗證(MFA)、API、備份和恢復特性,以及將系統標記為開發系統或生產系統的能力。

設置了用戶之後,下一步是設置偵聽器,偵聽器是受害設備將接觸到的套接字和協議。 DeimosC2有五種類型的偵聽器,用戶可以為其有效負載配置這些偵聽器,到目前為止我們看到的最常見的是HTTPS和TCP。我們預計,隨著這些工具的普及,我們很可能會看到攻擊者使用DNS over HTTPS DNS over HTTPS (DoH)選項。

5.png

顯示偵聽器設置類型的截圖

一旦做出選擇(在本例中是HTTPS),就會通過輸入強制設置和某些可選設置所需的數據來配置偵聽器。用戶需要設置域名和IP地址,而密鑰和大多數高級設置是可選的。

6.png

顯示HTTPS偵聽器設置的截圖

在高級設置中,有一些CC服務器工作方式的可配置選項。在這裡,你可以找到更改受害者將通過HTTP POST使用到CC服務器的默認路徑的設置。默認情況下,這些路徑是/login、/index、/settings和/profile,但可以在創建偵聽器期間更改這些路徑。它們也可以在以後更改。然而,需要創建新的二進製文件。

配置完所有設置後,將根據設置的“編譯選項”部分中的選項創建二進製文件。這些設置決定了要創建哪些二進製文件以及是否應該對它們進行模糊處理。

創建二進製文件後,通過從偵聽器選項中選擇“interactive”,即可通過界面下載它們。

7.png

為HTTPS偵聽器創建的偵聽器的截圖

一旦下載,這些軟件就可以部署到通過其他方式(如網絡釣魚或漏洞攻擊)受到威脅的設備上。易於使用,為CC通信創建開發後二進製文件。

DeimosC2代理分析雖然許多DeimosC2示例都使用了gobfuscate(一種用於混淆Go語言編寫的程序的開源工具),但我們也發現了未混淆的示例。這使我們能夠識別出DeimosC2包的名稱,我們發現這是一個開源的後開發C2框架。也可以手動消除gobfuscate等工具實現的更改的模糊化,但這太耗時。

在DeimosC2術語中,用於感染受害者的客戶機二進製文件稱為代理。 DeimosC2利用Go語言的多平台特性為不同的體系結構(如Windows、Linux、macOS和Android)編譯代理。

代理很簡單:當執行時,它會立即嘗試聯繫硬編碼CC域或IP地址中的偵聽器,除非設置了執行時間範圍。

DeimosC2代理使用三個不同的秘鑰與偵聽器交換消息。

代理秘鑰這是標識代理的唯一秘鑰。秘鑰最初被設置為'000000000000000000000000000000000000',但是來自偵聽器的第一個響應將它更新為一個新版本,4 UUID。

AES密鑰這個256位AES密鑰是每次代理與CC偵聽器對話時隨機生成的,這用於加密與CC偵聽器交換的消息。

RSA密鑰除了AES加密之外,DeimosC2還使用RSA-2048對代理和前面解釋的AES密鑰進行加密。代理使用硬編碼的公鑰加密其他密鑰,而CC偵聽器使用其私鑰解密數據。

下圖從代理的角度說明了加密過程。

8.png

DeimosC2代理加密方案

發送到CC偵聽器的第一條消息以JSON格式包含有關受感染設備的信息,如下圖所示。

9.png

首次發送到CC偵聽器的JSON數據示例

發送的數據包括有關操作系統、已安裝的防病毒產品、主機名、登錄的用戶名、內部IP地址、文件系統上的代理路徑、可用的shell程序、進程ID (PID)和用戶特權的信息。

命令C2偵聽器響應可以包括一個或多個命令(在DeimosC2術語中稱為“jobs”)。

DeimosC2命令及其描述如下:

Shell:執行shell命令;

下載:將文件下載到CC服務器;

上傳:將文件上傳到受感染的計算機;

選項:抖動和延遲選項設置CC通信的休眠時間。 eol(我們假設它意味著生命結束)選項設置代理退出的日期,而hours選項配置通信的時間範圍;

文件瀏覽器:要求代理列出給定路徑上的所有文件和目錄;

shellInject:在代理進程中註入並運行自定義shell代碼;

模塊:執行一個模塊;

Reinit:重新連接代理,這會使代理獲得一個新的代理密鑰;

pivotTCP:啟動受感染設備中的TCP服務器,以便其他代理可以將其用作偵聽器,用於感染無法訪問互聯網的設備;

pivotJob:處理數據透視作業;

pivotKill:重置透視偵聽器列表;

Kill:卸載代理;

模塊DeimosC2通過可以在受害者的設備中執行的模塊擴展其功能, DeimosC2信息如下:

Screengrab:在受感染的設備上截屏;

Minidump:生成給定進程的用戶模式小型轉儲;

Lsadump:下載SECURITY和SYSTEM註冊表配置單元以竊取憑據;

Ntdsdump:下載Ntds.dit並且SYSTEM文件用於憑證竊取;

Samdump;下載SECURITY、SYSTEM和SAM註冊表配置單元以竊取憑據;

Shadowdump:從Linux設備下載/etc/shadow文件;

DeimosC2的模塊接口允許CC偵聽器推送新模塊並從磁盤或內存(使用代碼注入)執行它們。

網絡分析正如我們前面提到的,在使用DeimosC2時,用戶可以選擇幾種偵聽器類型,包括HTTPS、TCP和DoH。這些可能是最常見的選項,因為它們在其他CC平台上很受歡迎。由於DeimosC2的開源特性,我們能夠詳細研究這些偵聽器是如何工作的。

HTTPS偵聽器當監聽器運行HTTPS時,我們發現有一個默認的網頁被配置。通過查看GitHub頁面,我們確認它是Apache的默認Ubuntu頁面。

11.png

顯示標題的默認Apache Ubuntu頁面的Nmap結果

根據安裝過程中偵聽器的配置,我們知道該工具使用了一些路徑。查看代理源代碼的.go版本,我們可以看到已經設置並正在使用的進程。

12.png

代理使用的路徑的Go變量

變量“firsttime”用於與服務器的初始通信。從那時起,變量“checkin”將被使用。

基於此,我們可以對CC服務器是否為默認配置以及是否啟用了HTTPS檢測進行指紋識別。代理將向/login發送HTTP POST,然後定期向/index發送。 HTTPS偵聽器使用的默認端口為4443。但是,在任何其他端口上創建偵聽器時,都可以輕鬆更改此端口。在/profile上,變量“moduleloc”用於將數據從代理髮送回服務器。最後,使用“piviotloc”變量通過當前受害者傳遞數據,作為前面描述的代理piviotloc功能的一部分。

13.png

HTTPS_agent中的sendMsg函數

下圖顯示了由配置為使用HTTPS偵聽器的代理髮送的加密POST請求。默認情況下,它使用/login發送第一條消息,之後,代理默認情況下向/checkin發送請求。

14.png

由配置為使用HTTPS偵聽器的代理髮送的加密POST請求

TCP偵聽器TCP偵聽器利用Go語言函數創建數據包並將其發送到已創建的套接字。加密流程的工作原理與HTTPS加密相同。在這種情況下,唯一的區別是,整個消息的長度有助於數據的解密。為了實現這一點,它在加密數據的前面加上已加密和要發送的數據的長度。這將發送到套接字,然後發送到CC服務器。

15.png

來自TCP偵聽器Go代碼的sendMsg函數

根據我們對從TCP代理髮送到偵聽器的數據包的分析,這部分具有可預測的行為。由於uint64調用,創建的長度將是64位或8字節長的無符號整數。分組的數據部分的開始將有8個字節,用於隨後的分組長度。我們在與CC服務器的通信中觀察到的大多數信息都是這樣。每個數據包總共350字節,包含296字節的數據。

16.png

與CC服務器通信的TCP代理的數據包的數據部分(突出顯示部分)

由於我們知道數據包的數據部分前面有數據包大小,並且它是一個8字節的無符號整數,因此我們可以得出結論,數據的前8字節是處理數據包時將遵循的大小。

在本例中,有一個296字節的數據字段,如果我們去掉長度字段的8個字節,就會為來自CC服務器的命令留下288個字節。如果我們取288字節並將其轉換為十六進制系統,這很容易計算出來,結果是0x120或01 20,這就是我們在所看到的示例中0的前6個字節後發現的結果。

17.png

DeimosC2 TCP數據包結構

檢測這種行為的一種可能方法是使用snort規則來查找通信流量。下面是一個Snort規則的示例,它將檢測我們的示例數據包:

18.png

基於Snort中僅啟用此規則的測試,我們確認它將檢測來自TCP代理的通信。請注意,此規則可能需要基於特定設置進行調整,以消除誤報並提高傳感器性能。

19.png

來自Snort規則的示例警報的截圖

DoH偵聽器DoH或DNS over HTTPS偵聽器使用DNS查詢與CC服務器通信。使用DoH的優點之一是不需要與CC服務器直接通信。但是,通信會出現延遲。因此,如果需要秘密進行,通常使用DoH。 DeimosC2使用谷歌的HTTPS JSON API進行DNS。這與穀歌也支持的符合RFC 8484的DoH請求不同。這是一種更容易編程的解決方案,攻擊者很容易使用。

20.png

顯示dns.google.com/resolve用法的Go代碼截圖

在偵聽器配置中,有兩個名稱可以更改:第一次變量和簽入變量。在設置偵聽器時,它們的默認名稱分別是getname和checkin。當代理第一次接觸到偵聽器時,它將首先使用firsttime變量,之後將使用checkin變量進行心跳通信。與HTTPS和TCP不同,代理不會直接與偵聽器通信,但它將與前面提到的DNS谷歌服務通信。

21.png

用於與DoH偵聽器的初始通信的變量

在初始設置中,可以觀察到的一個查詢如下所示:

https://dns.google.com/resolve?name=0000000000.6765746e616d65.ftr.trendmicro.com

當你查看這個查詢時,有一些東西非常突出,其中一個是6765746e616d65子域,它是在簽入過程中從代碼生成的。在本例中,該值第一次接受變量,並根據其ASCII值(在我們的例子中為getname)將其內容轉換為十六進制系統。然後將其用作發送到dns.google.com的第一個子域。要對此進行解碼,需要來自代理或CC服務器本身的AES密鑰。

22.png

初始簽入過程的DoH代理代碼

我們討論過的所有這些方法都基於配置中設置為默認值的路徑和變量,在構建監聽器時很容易更改。更改默認設置有利於安全研究人員使用,幫助在網絡日誌中查找流量。然而,當攻擊者更改這些設置時,在未來的活動中發現他們將變得更加困難,因為他們會改變他們的變量來改變他們的TTP,以避免被發現或根據活動修改配置。我們提供這些信息是為了幫助防御者了解在攻擊中遇到非默認行為時DeimosC2的幕後情況。

更改默認偵聽器設置在DeimosC2用戶界面中很容易實現路徑的更改,以/login、/index、/settings和/profile的HTTPS偵聽器的默認路徑為例。要改變這一點,攻擊者只需在構建偵聽器時展開“高級選項”。

23.png

構建HTTPS偵聽器時高級選項的屏幕截圖

改變路徑很可能是攻擊者要做的事情,這將導致我們之前討論的二進製文件和通信模式中的一些內容髮生改變。例如,如果DOH代理中的getname被更改,它將不再轉到6765746e616d65,而是重定向到它被更改為的子域,轉換為十六進制系統(例如“trendmicroftr”,它在DOH查詢中看起來像7472656e646d6963726f667472)。這也是尋找這些工具變得越來越困難的原因之一,因為規避技術是內置在選項中。

每個偵聽器都可以更新特定的信息,這些信息將更改所使用的一些路徑和子域。 TCP偵聽器具有最少的選項,在編寫本文時,它可能是最容易通過網絡監控方法檢測到的偵聽器之一。

針對DeimosC2防禦網絡的建議探測CC流量對於全球的網絡防御者來說都是一個頭疼的話題。幸運的是,在對DeimosC2進行研究期間,我們發現了一些可以用於檢測與服務器通信的代理的存在的技術。

雖然有些網絡活動是動態的,例如對URL路徑的檢查(因為在設置偵聽器時,攻擊者可以更改這些路徑),但其他活動是可預測的。例如,TCP偵聽器通信的前8個字節可以用於在入侵檢測系統(IDS)中使用提供的Snort規則進行檢測。

在DoH示例中,如果防御者在正常業務操作中沒有使用利用DoH的JSON版本的服務,建議阻止或至少記錄HTTPS到dns[.]google。目前大多數利用DoH的DeimosC2示例都使用Google提供的DoH的JSON版本,這將使該代理無法完全工作。

然而,重要的是要記住DeimosC2是一個利用後的CC框架,如果你在你的網絡上看到它的流量,那麼你已經被攻擊了,這只是攻擊者設置持久性。如果你在系統中檢測到DeimosC2,你應該意識到可能還部署了其他你可能不知道的攻擊工具。假設你已經被攻擊了,這也提供了額外的防禦選擇:

防御者應該定期監測出站通信,特別是,它們應該標記任何發送的數據量比正常監控