0x01 钓鱼陷阱的布置

在一次红队评估中,我们接到了一个有趣的任务:目标是一家具有全球业务的金融科技公司。我们的任务是通过社工铓鱼攻击获取其内网访问权限。我们的第一步,是通过社工攻击制造一个看似合法的邮件,以此引诱目标点击。

黑客示意图

攻击原理揭秘

社工铓鱼攻击的核心在于利用人类心理学的弱点,例如信任、恐惧、好奇心。通过伪装成值得信赖的来源,诱导受害者执行某些操作,例如点击链接或下载附件。在这个案例中,我们选择了发送一封伪装成公司内部邮件的消息,声称里面包含有关公司财务状况的重要报告。

环境搭建

  1. 域名准备:注册一个与目标公司域名相似的域名,例如,目标是fintechglobal.com,我们注册fintechg1obal.com(注意"1"与"l"的替换)。
  1. 邮件服务器搭建:使用Mailgun或SendGrid搭建邮件发送服务,确保我们能够发送伪造的邮件。
  1. C2服务器设置:搭建C2(Command and Control)服务器,用于接收被钓鱼的客户端的连接。这里我们使用的是Cobalt Strike。
  1. Payload生成:在Cobalt Strike中生成恶意Payload,选择使用内存加载技术以避免被常规AV检测到。

伪造邮件示例

我们设计了一封如下的邮件:

<pre><code class="language-python">import smtplib from email.mime.text import MIMEText

msg = MIMEText(&#039;尊敬的财务团队,请查收最新的财务报告:\n&lt;a href=&quot;http://fintechg1obal.com/report&quot;&gt;点击查看报告&lt;/a&gt;&#039;, &#039;html&#039;) msg[&#039;Subject&#039;] = &#039;重要:最新财务报告&#039; msg[&#039;From&#039;] = &#039;[email protected]&#039; msg[&#039;To&#039;] = &#039;[email protected]&#039;

with smtplib.SMTP(&#039;smtp.mailgun.org&#039;, 587) as server: server.login(&#039;user&#039;, &#039;password&#039;) server.sendmail(msg[&#039;From&#039;], [msg[&#039;To&#039;]], msg.as_string())</code></pre>

代码解读:简单的Python脚本,通过SMTP发送一封HTML格式的邮件,邮件内容包含一个看似合法的链接,实际指向我们控制的域名。

黑客示意图

0x02 流量捕获实战

接下来,我们需要确保一旦目标点击链接并下载Payload,能够顺利建立到我们的C2服务器的连接。

制作Payload

使用Cobalt Strike生成Payload,选择内存加载方式,避免写入硬盘。

<pre><code class="language-bash"># 在Cobalt Strike中生成Payload ./cobaltstrike -profiles http-profile -generate payload.exe</code></pre>

内存加载解释:通过内存加载技术,Payload不写入硬盘,而是在内存中直接执行,极大地降低了被检测的风险。

监控流量

使用Wireshark和tcpdump监控网络流量,确保我们能够捕获到从目标机器到C2服务器的连接。

<pre><code class="language-bash"># 使用tcpdump监控流量 sudo tcpdump -i eth0 host my.c2.server</code></pre>

流量捕获:通过监控流量,我们可以实时观察到目标是否连接到了我们的C2服务器,一旦连接成功,便可进一步进行内网横向移动和数据渗透。

0x03 Payload构造的艺术

在这个阶段,我们将深入探讨如何构造一个高效的Payload,以躲避常规安全软件的检测。

黑客示意图

绕过AV技术

  1. 多态编码:通过使用不同的编码技术,使Payload每次生成的二进制文件都不同。
  1. 混淆和加壳:使用工具如Veil-Evasion进行Payload混淆,并将其加壳以增加复杂度。
  1. 内存加载:如前所述,避免在硬盘上留下任何痕迹。

示例代码

以下是一个使用Python构造简单多态Payload的示例:

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

黑客示意图

def generate_payload(): shellcode = b&quot;\x90\x90\x90...&quot; # 假设这是我们的Shellcode encoded_shellcode = bytearray()

for byte in shellcode: encoded_shellcode.append(byte ^ random.randint(1, 255))

return bytes(encoded_shellcode)

payload = generate_payload() with open(&quot;payload.bin&quot;, &quot;wb&quot;) as f: f.write(payload)</code></pre>

代码解读:通过随机化XOR编码,每次生成的Payload都不同,从而增加了绕过AV的能力。

0x04 防御者的反击

没有完美的攻击,只有更强的防御。在本文的最后一部分,我们讨论如何检测和防御此类社工铓鱼攻击。

检测思路

  1. 邮件筛查:使用SPF、DKIM、DMARC等技术来验证邮件的真实性。
  1. 行为分析:对于内存中的可疑行为进行监控,识别未经授权的内存操作。
  1. 网络流量分析:对企业网络的流量进行全面监控,识别异常的连接模式。

防御策略

  • 员工培训:对员工进行安全培训,提高防范钓鱼攻击的意识。
  • 多因素认证:即使攻击者获取了凭据,没有第二因素的认证也无法进行系统访问。
  • 零信任架构:在网络中实施零信任策略,确保每个访问请求都需要重新验证。

0x05 个人经验分享

在多年的实战中,我发现社工铓鱼攻击的成功率不仅取决于技术,更依赖于对目标的了解和细致的准备。了解目标的组织结构、文化习惯,甚至是个别员工的兴趣爱好,都可以为攻击的成功提供额外的保障。记住,最强的攻击往往是最简单的那个,真正理解攻击者的思维,才能从根本上提升安全防护水平。

合法声明:本文所述方法仅限于授权的安全测试,学习目的在于提高对社工攻击的防御能力。未经授权进行攻击是违法行为。