首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 木馬程式原理與實作分析:網路通訊、註冊表操作、隱藏技術與防禦對策

     編輯:關於C語言

⚠️ 法律與道德聲明: 本文僅供**資安教育、防禦研究、惡意程式碼分析**目的。未經授權製作、散播、植入木馬程式屬違法行為 (刑法第359條、第360條、資通安全管理法等)。請嚴格遵守法律,僅在授權環境進行滲透測試與防禦驗證。


木馬架構三大核心模組

  1. 控制端:攻擊者操作介面,發送指令碼。
  2. 服務端/木馬本體:潛伏受害主機,接收指令、執行惡意行為、回傳結果。
  3. 建置/配置器:設定連接埠、觸發條件、偽裝名稱、加密殼、反分析技術。

核心技術剖析 (以原文 C# 範例為基礎)

1. C/S 架構通訊:TcpClient / TcpListener


// 控制端連線
var client = new TcpClient("victim-ip", 6678);
var stream = client.GetStream();
// 發送指令碼 (ASCII/Unicode 編碼)
byte[] cmd = Encoding.ASCII.GetBytes("CMD_CODE");
stream.Write(cmd, 0, cmd.Length);
stream.Flush();

// 服務端偵聽 (背景執行緒)
var listener = new TcpListener(6678);
listener.Start();
while (true)
{
    using var socket = listener.AcceptSocket();
    byte[] buffer = new byte[6];
    int len = socket.Receive(buffer);
    string cmd = Encoding.ASCII.GetString(buffer, 0, len);
    // Dispatch cmd...
}

弱點: 明文傳輸、固定埠、無認證、易被 IDS/IPS 特徵碼偵測。

2. 註冊表操作達到持久化/破壞


using Microsoft.Win32;
// 開機自啟
var runKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
runKey.SetValue("WindowsUpdate", @"C:\Windows\System32\malware.exe");

// 禁用登出/關機/工作管理員/登錄編輯器...
var policies = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System");
policies.SetValue("DisableTaskMgr", 1, RegistryValueKind.DWord);
policies.SetValue("DisableRegistryTools", 1, RegistryValueKind.DWord);

防禦: 監控 `Run`、`RunOnce`、`Policies` 等關鍵路徑變更 (Sysmon Event ID 12/13/14、EDR 註冊表回呼)。

3. 隱藏技術

  • 視窗隱藏: `Form.ShowInTaskbar = false; Form.WindowState = FormWindowState.Minimized;`
  • 偽裝檔名/路徑: `msdos.exe`, `svchost.exe`, `explorer.exe` 放置於 `System32`、`Temp`、`AppData`。
  • 自我複製/移動: `File.Move(source, dest)` 結合註冊表寫入啟動項。
  • 進程注入/無檔案: 進階木馬不落地,透過 `CreateRemoteThread`、`Process Hollowing`、`.NET Assembly.Load(byte[])` 記憶體執行。
  • Rootkit/驅動級隱藏: 核心層攔截 API (NtQueryDirectoryFile, NtQuerySystemInformation) 過濾自身。

4. 反分析/反沙箱

  • 檢查偵錯器:`Debugger.IsAttached`, `CheckRemoteDebuggerPresent`, `NtGlobalFlag`。
  • 檢查虛擬機:MAC 地址前綴、CPUID、磁碟大小、缺少使用者互動。
  • 延遲執行:`Thread.Sleep(隨機)`、等待滑鼠移動/鍵盤輸入。
  • 加密殼/混淆:ConfuserEx、Themida、VMProtect、自訂加密載入器。

現代木馬演進趨勢

傳統木馬 (原文範例)現代 APT/惡意代碼
C# .NET Framework 編譯,易反編譯 (dnSpy/ILSpy)Go/Rust/Nim 編譯原生碼、無符號表、靜態連結
固定 TCP 埠、明文協定DNS Tunneling、HTTPS/HTTP2/QUIC、Domain Fronting、C2 框架
註冊表持久化、檔案落地無檔案、WMI/排程任務/COM 劫持/啟動資料夾/登錄鍵值多樣化
單一二進位檔模組化:Loader + Payload + Plugin,動態下載、記憶體執行
基本隱藏視窗PPID 偽裝、Token 竊取、進程注入、PPL 繞過、EDR 繞過

防禦與偵測策略 (藍軍視角)

  1. 網路層: 流量基線分析、異常連接埠/協定/流量大小、威脅情報 IP/域名封鎖、TLS 檢測 (JA3 指紋)。
  2. 主機層 (EDR/EPP):
    • 行為偵測:註冊表關鍵路徑寫入、排程任務建立、服務安裝、進程注入 (OpenProcess+WriteProcessMemory+CreateRemoteThread)、PowerShell 惡意指令碼 (AMSI 整合)。
    • 記憶體掃描:掃描 `Assembly.Load`、`.NET` 記憶體載入模組、異常 RWX 記憶體區域。
    • 啟動項審計:定期枚舉 `Run`、`RunOnce`、`Winlogon`、`Services`、`Drivers`、`WMI` 訂閱。
  3. 使用者層: 最小權限原則 (非 Admin 日常)、應用程式白名單 (AppLocker/WDAC)、禁用不必要的 .NET Framework 版本、定期修補漏洞。
  4. 事件日誌與 SIEM: 收集 Sysmon (Event ID 1,3,7,8,10,11,12,13,14,15,22,23,24,25)、PowerShell Operational Log、Windows Security Log (4688, 4698, 4702, 5156),關聯分析。
  5. 蜜罐/欺騙防禦: 部署偽裝服務/檔案/帳號,誘捕攻擊者觸發告警。

資安人員授權測試清單

  • [ ] 取得書面授權範圍、規則、聯繫窗口。
  • [ ] 隔離測試環境 (獨立 VLAN、無生產資料)。
  • [ ] 使用已知樣本驗證偵測規則 (ATT&CK T1059, T1547, T1055...)。
  • [ ] 測試 EDR/防毒/防火牆阻斷效果。
  • [ ] 完整記錄攻擊鏈、時間軸、IOC (IP、Hash、域名、註冊表鍵值、檔案路徑)。
  • [ ] 撰寫報告:風險等級、影響範圍、修補建議 (補丁、規則調整、架構改善)。

結語

理解木馬原理不是為了製造武器,而是為了**建立更堅固的盾**。從早期 `TcpListener` + 註冊表的腳本小子作品,到現代無檔案、模組化、對抗 EDR 的 APT 武器,攻防本質皆是**利用系統機制 (網路、檔案、註冊表、記憶體、進程) 達成未授權控制**。資安防禦者需掌握完整 ATT&CK 技術矩陣,佈建纖深防禦,才能在非對稱戰場立於不敗之地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved