準備來撰寫 C2 程式囉,但在寫程式之前,要建置合適的開發與除錯環境,方便一邊複刻 C2 程式,一邊驗證與除錯。接下來,會分享 3 個複刻 Command and Control Server 的程式開發環境的設定建議。
文章目錄
使用虛擬機器軟體建置測試主機與作業系統
建議使用虛擬機器軟體(Virtual Machine Manager),例如 Oracle VM VirtualBox、VMWare Workstation等。分別建置一台模擬 C2 伺服器端與客戶端 (運行惡意程式) 的虛擬機器(VM)。
VM 自成一個虛擬內網,僅讓 C2 伺服器與客戶端 VM能夠互連,虛擬內網禁止連線至 Internet,例如 VirtualBox 的網卡類型選擇 「Internal Network 」,就能達成虛擬內網效果。
而C2 伺服器作業系統建議使用 Ubuntu Linux,而客戶端主機,視惡意程式運行所需環境,安裝 Windows 或 Linux 作業系統。
使用 VM 建置測試主機有許多好處。除了僅需調整虛擬機器的網卡設定,就能輕鬆隔出虛擬內網。另外,虛擬機器也有快照功能,能拍下主機的運行狀態。依開發需求,建立多個快照點後,可使用還原快照功能,快速回到先前主機未受影響狀態。
此外,也能依照開發需求,利用 clone 功能,快速大量複製測試主機。
使用輕量級 DNS 軟體 (dnsmasq) 架設 Fake DNS 服務
有時惡意程式會連線至指定特定 C2 網域名稱 (Domain Name),但我們不希望連線至 Internet 上駭客掌控的 C2 伺服器。此時,可以架設 Fake DNS 服務,去欺騙惡意程式,讓它轉連接至我們指定的VM 虛擬內網 IP。
Fake DNS 服務用途就是對應 C2 網域名稱與 VM 虛擬內網IP。舉例來說,惡意程式會連線到 c2.domain.com。
在 Fake DNS 服務加上一筆 c2.domain.com 的對應設定,如下。表示這個 domain 是對應到 VM 虛擬內網IP (192.168.100.1)。
c2.domain.com 192.168.100.1
安裝輕量級的 DNS 伺服器軟體,例如 dnsmasq,架設 Fake DNS 服務。使用以下指令,可運行 dnsmasq 在 UDP Port 53 上,並設定將c2.domain.com 對應到 192.168.100.1 的 IP。
# 停止 Ubuntu 預設啟用的 DNS 服務 $ sudo systemctl stop systemd-resolved.service
設定本機使用的 DNS 伺服器 IP,編輯 /etc/resolv.conf 檔案。
nameserver 127.0.0.1
啟動 dnsmasq。
$ sudo dnsmasq --no-daemon -q -p 53 --log-queries --no-hosts --no-resolv --address=/c2.domain.com/192.168.100.1 dnsmasq: started, version 2.75 cachesize 150 dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dnsmasq: cleared cache dnsmasq: query[A] c2.domain.com from 127.0.0.1 dnsmasq: config c2.domain.com is 192.168.100.1
架設完畢,使用 dig 或 nslookup 指令進行測試。
$ nslookup c2.domain.com Server: 127.0.1.1 Address: 127.0.1.1#53 Non-authoritative answer: Name: c2.domain.com Address: 192.168.100.1
驗證結束,完成 Fake DNS 服務架設。
自建根憑證 (Root Certificate) 簽發 C2 網域 SSL 憑證
在 SSL 憑證機制中,根憑證(Root Certificate,簡稱 Root CA) 就像是第三方公證人角色,負責驗證拜訪的 SSL 網域憑證的有效性。不管是 Windows 或是 Linux 系統已有內建許多張根憑證。
在複刻 C2 程式過程中,若確認惡意程式網路連線,是使用 HTTP 與 SSL 通訊協定。會需要進一步模擬 HTTPS 伺服器,並匯入自簽章(Self-Signed)的 SSL 憑證至網頁伺服器。
此時,為了避免自簽章 SSL 憑證,造成連線失敗。可利用 openssl 指令創建一個根憑證,並利用自建根憑證,來簽發 C2 網域的 SSL憑證。
步驟摘要如下:
- 透過 openssl 指令創建 Root CA (Self-signed Root CA)
- 使用此 Root CA 的私鑰去簽發 C2 網域的憑證,
- 將此 Root CA 的憑證, 匯入做為客戶端的分析電腦中。
如此一來,自簽的 C2 網域憑證,就會被分析電腦認定是有效 SSL 憑證。openssl 指令可參考 https://gist.github.com/fntlnz/cf14feb5a46b2eda428e000157447309。
Root CA 憑證匯入電腦步驟,可參考: https://success.outsystems.com/Support/Enterprise_Customers/Installation/Install_a_trusted_root_CA__or_self-signed_certificate。
總結
快速複習文章提到的重點。
- 你可以使用虛擬機器軟體建置測試環境,方便建立 VM 虛擬內網與測試環境快照。
- 使用輕量級的 DNS 服務軟體 (dnsmasq) 來架設 Fake DNS 服務,欺騙惡意程式,讓所有向 C2 網域的DNS 查詢,都改對應到 VM 的虛擬內網 IP。
- 使用 openssl 創建根憑證 (Root CA) 來簽發 C2 網域的 SSL 憑證,來避免惡意程式透過 HTTPS 協定連線至 所複刻的C2 程式失敗。
希望這篇文章能幫助到你,有任何問題,請在下方留言告訴我,並將文章分享給你的好朋友。
複刻 C2 系列文章
- C2 複刻 01 – 為何投入複刻 C2 工作?
- C2 複刻 02 – Command and Control Server 定義
- C2 複刻 03 | Command and Control Server (C&C、C2) 通訊協定類型
- C2 複刻 04 | Command and Control Server (C&C、C2) 觀察
- C2 複刻 05 | 判斷Command and Control Server (C&C、C2)發起連線端
- C2 複刻 06 | Command and Control Server 握手 (Handshake) 與認證 (Authentication)
- C2 複刻 07 | 分析惡意程式呼叫的作業系統網路 API
- C2 複刻 08 | 找出所有 Command and Control Server 指令列表與功能函式
- C2 複刻 09 | Command and Control 資料傳輸格式
- C2 複刻 10 | 惡意程式加解密函式定位
- C2 複刻 11 | 判定惡意程式加解密演算法種類
- C2 複刻 12 | 推薦 20 個複刻 Command and Control Server 的 Python 3 擴充模組
- C2 複刻 13 | 分享 3 個複刻 Command and Control Server 程式測試環境的設定建議
- C2 複刻 14 | 3 個複刻 Command and Control Server 程式的開發原則建議