社会工程学 + 钓鱼演练:GoPhish 部署 + 邮件模板 + 反垃圾邮件绕过

前言

社会工程学 = 让人"主动"给你想要的信息。本文聚焦 钓鱼演练——最常见也最有效的社会工程手段,附完整 GoPhish 部署流程和实战经验。


一、社会工程学基础

1.1 为什么社会工程有效

原因:
1. 人是系统里最薄弱的环节
2. 忙碌时容易忽略细节
3. 权威(老板 / IT / HR)更容易让人顺从
4. 恐惧("你的账号快被封了")和贪欲("中奖了")驱动决策
5. 大多数人分不清正常邮件和钓鱼邮件

常见技术:
- 权威冒充(自称 IT / 安全部 / 老板)
- 紧急性("马上处理,1 小时后锁定")
- 好奇心("看看这个机密文件")
- 贪欲("点击领取你的奖品 / 报销发票")
- 恐惧("你的密码已泄露,请立即修改")
- 求助("我是新员工,帮我查个东西")

1.2 常见钓鱼场景

场景 1: 密码重置钓鱼(最常见)
- 邮件标题:"Action Required: Password Expiring Soon"
- 链接指向伪造的 Office 365 登录页
- 输入账号密码 -> 被截获

场景 2: HR 钓鱼
- 邮件标题:"请报销这张发票"
- 附件是恶意宏 Excel
- 打开 -> 执行宏 -> 下载木马

场景 3: IT 钓鱼
- 邮件标题:"新的 VPN 客户端下载"
- 附件 / 链接 -> 下载 EXE -> 安装 -> 木马

场景 4: 内部通知钓鱼
- 假装是公司 CEO 发的紧急邮件
- "立刻把 W2 表发我"(金融行业最常见)

场景 5: 二维码钓鱼(新兴)
- 海报上贴二维码 -> 扫码 -> 钓鱼页面
- 适合线下场景

二、GoPhish 完整部署

2.1 Docker 部署

# GoPhish: 开源钓鱼模拟框架
# GitHub: https://github.com/gophish/gophish

# Docker 部署(最简单)
docker pull gophish/gophish
docker run -d --name gophish   -p 3333:3333 \    # 管理面板端口
  -p 8080:8080 \    # 钓鱼页面端口
  -p 25:25 \        # SMTP 端口(可选)
  gophish/gophish

# 或者自己编译
git clone https://github.com/gophish/gophish
cd gophish
docker-compose up -d

2.2 配置邮件服务器

# 方案 1: 使用免费/付费 SMTP 服务(最简单)
# 推荐:
# - Resend.com(有免费额度,易用)
# - Mailgun(有免费额度)
# - SendGrid(有免费额度)
# - Amazon SES(按用量计费)

# Resend 示例(Gmail 发件最稳)
# 去 https://resend.com/ 注册
# 在 GoPhish 里:
#   SMTP From: security@yourdomain.com
#   SMTP Host: smtp.resend.com
#   SMTP Port: 587
#   Username: resend
#   Password: [Resend API Key]

# 方案 2: 自建 SMTP(Postfix + Dovecot)
apt install postfix dovecot-core
# 配置 SPF / DKIM / DMARC 记录
# 这样邮件不会进垃圾箱

# 配置 SPF 记录(DNS TXT):
v=spf1 include:spf.protection.outlook.com include:_spf.google.com ~all

# 配置 DKIM(需要生成密钥对):
opendkim-genkey -d example.com -s default
# 把生成的公钥加到 DNS TXT 记录

# 配置 DMARC:
_dmarc TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

2.3 完整 GoPhish 配置步骤

1. 启动后访问 https://你的IP:3333
   默认密码: admin/gophish(立刻改!)

2. 添加目标(Groups)
   创建新 Group,输入员工名单:
   - 邮箱地址
   - 姓、名、职位(用于个性化邮件)

3. 创建邮件模板(Email Templates)
   - HTML 正文 + 纯文本正文
   - 使用模板变量:{{.FirstName}} {{.LastName}} {{.Email}}
   - 主题行要短、有紧迫感
   - 避免敏感词(password, alert, urgent)

4. 创建钓鱼页面(Landing Pages)
   - 最简单:复制真实 Office 365 登录页 HTML
   - GoPhish 会自动记录提交的用户名/密码
   - 可以加上"提交后跳转到真实页面"增加真实感

5. 配置发件服务器(SMTP)
   - From 地址看起来要真实(IT部门、HR、CEO)
   - 使用合法 SMTP 服务(避免进垃圾箱)

6. 发送邮件(Sending Profiles + Campaigns)
   - 创建发件 Profile(发件人、SMTP)
   - 创建 Campaign(目标组 + 邮件模板 + 钓鱼页面 + 发件 Profile)
   - 设置发送时间(工作日早上 9-10 点人最忙)
   - 设并发(每秒发多少封,避免被限流)

7. 监控 Campaign 进度
   - 谁打开了邮件
   - 谁点击了链接
   - 谁提交了密码

8. 生成报告
   - GoPhish 自带报告功能
   - 导出 PDF / CSV
   - 给客户/管理层汇报

三、邮件模板实战

3.1 Office 365 密码重置(高命中)

<!-- 邮件主题: "IMPORTANT: Office 365 Password Reset Required" -->
<!-- 发件人: "Microsoft 365 Security" <no-reply@microsoft-verify.com> -->

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Password Reset Notice</title>
</head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; margin: 20px;">

<div style="max-width: 600px; margin: 0 auto; border: 1px solid #ddd;">

    <!-- 伪装的 Office 365 Header -->
    <div style="background: #0078d4; color: white; padding: 15px; text-align: center;">
        <h2>Microsoft 365 Security</h2>
    </div>

    <div style="padding: 25px;">
        <p>Hi {{.FirstName}},</p>

        <p>We noticed <strong>unusual sign-in activity</strong> on your Microsoft 365
        account from a new device or location.</p>

        <p>For your security, please <strong>verify your account</strong> within
        the next 24 hours. Failure to do so will result in temporary suspension
        of your account access.</p>

        <div style="text-align: center; margin: 30px 0;">
            <a href="{{.URL}}" style="background: #0078d4; color: white;
               padding: 12px 30px; text-decoration: none; border-radius: 4px;
               font-size: 16px; display: inline-block;">
                Verify Account Now
            </a>
        </div>

        <p style="color: #666; font-size: 12px;">
            This link is personal to you and will expire in 24 hours.<br>
            If you did not recognize this activity, please contact IT immediately.
        </p>

        <hr style="border: none; border-top: 1px solid #eee; margin: 25px 0;">

        <p style="color: #999; font-size: 11px;">
            Microsoft Corporation | One Microsoft Way | Redmond, WA 98052<br>
            This is an automated security notice. Please do not reply to this email.
        </p>
    </div>
</div>

</body>
</html>

3.2 IT 部门 VPN 通知

<!-- 邮件主题: "New VPN Portal Activation - Action Required" -->

<div style="font-family: Arial;">
    <h3 style="color: #e74c3c;">[URGENT] IT Department</h3>

    <p>Hello {{.FirstName}},</p>

    <p>Our new VPN portal has been deployed. All remote employees must
    <strong>complete activation</strong> by <strong>end of day today</strong>.</p>

    <p>Without activation, you will lose access to internal resources
    (email, file server, SharePoint).</p>

    <div style="background: #fff3cd; padding: 15px; border-radius: 4px;
                margin: 20px 0; border-left: 4px solid #ffc107;">
        <strong>Deadline:</strong> Today at 5:00 PM<br>
        <strong>Action:</strong> Click the link below to activate
    </div>

    <a href="{{.URL}}" style="background: #28a745; color: white; padding: 10px 25px;
       text-decoration: none; border-radius: 4px;">Activate VPN Access</a>

    <p style="margin-top: 30px; color: #999; font-size: 11px;">
        If you are no longer an employee, please ignore this message.<br>
        IT Support: <a href="mailto:it@company.com">it@company.com</a>
    </p>
</div>

四、反垃圾邮件绕过

垃圾邮件过滤器主要检查:
1. 发件域名信誉
2. IP 地址信誉
3. SPF / DKIM / DMARC 记录
4. 邮件正文关键词
5. HTML 内容相似度(跟已知钓鱼模板对比)
6. 链接指向的域名(有没有在黑名单里)

绕过技巧:

1. 发件域名
   - 使用信誉好的域名(新域名直接进垃圾箱)
   - 可以用客户自己的域名(CNAME 到你的服务器)
   - 不要用免费邮箱(Gmail / Yahoo 直接 100% 进垃圾箱)

2. SMTP 服务
   - 用付费 SMTP(Resend / SendGrid / Mailgun)
   - 配置好 SPF + DKIM + DMARC
   - IP 用住宅 IP(比数据中心 IP 信誉高)

3. 邮件正文
   - 敏感词替换:
     "password" -> "security credentials"
     "urgent" -> "time-sensitive"
     "verify your account" -> "complete your review"
     "click here" -> "please visit this page"
   - 不要用全大写字母
   - 加正常的 HTML 结构(Office 365 logo、footer)
   - 邮件内容放图片里(OCR 扫描不到)

4. 链接域名
   - 不要用明显的钓鱼域名(microsoft-verification.com)
   - 用相似的、信誉好的域名(合法的,比如客户的二级域名)
   - URL 重定向:bit.ly / tinyurl / cloudflare workers
   - 多一层跳转(正常域名 -> 你的钓鱼页)

5. Office 365 绕过
   - 加 MX 记录和 SPF/DKIM/DMARC
   - 用 Office 365 "高风险用户"组绕过
   - 在租户配置里添加自定义反钓鱼策略

五、实战演练步骤

一次完整的钓鱼演练:

Phase 1: 准备(1-2 天)
[ ] 获取授权书(Signed Scope Document)
[ ] 确定测试范围(哪些部门 / 所有员工?)
[ ] 准备目标邮件列表(HR / Admin / CEO 邮箱)
[ ] 购买域名 + 配置 DNS + 配置 SMTP
[ ] GoPhish 部署 + 配置 SPF/DKIM/DMARC

Phase 2: 预测试(半天)
[ ] 用 Gmail / Outlook / QQ 邮箱测试
[ ] 看邮件进哪个文件夹(收件箱 / 重点 / 垃圾)
[ ] 调整邮件模板(关键词、内容、HTML)
[ ] 调整 SMTP 配置(换服务器、换发件域名)

Phase 3: 正式发送(1 小时)
[ ] 选择工作日早上 9-10 点发
[ ] 先给 5-10 个"自己人"测试
[ ] 确认没问题后全量发送
[ ] 监控打开率 / 点击率 / 提交率

Phase 4: 数据分析(2-3 天)
[ ] 谁打开了?多少人?
[ ] 谁点了链接?点击率多少?
[ ] 谁提交了密码?提交率多少?
[ ] 分部门统计(IT vs HR vs Finance vs ...)
[ ] 什么职位的人最容易中招?

Phase 5: 报告 + 培训(1-2 天)
[ ] 生成钓鱼演练报告
[ ] 给管理层汇报(Executive Summary)
[ ] 给中招的员工做安全培训
[ ] 给全公司发安全意识邮件
[ ] 制定后续改进计划

六、法律 + 道德

⚠️ 社会工程学演练必须:

1. 获得书面授权
   - 客户/公司签字的 Scope Document
   - 明确测试范围、禁止动作、保密义务
   - 未经授权 = 违法(哪怕只是发邮件)

2. 保护员工隐私
   - 不要在公共场合讨论谁中招了
   - 报告里用职位/部门代替具体姓名
   - 敏感信息脱敏处理

3. 只收集必要信息
   - 不要复制/下载员工数据
   - 测试完成后删除所有采集到的凭证
   - 用专门的测试账号(不是生产环境)

4. 明确演练边界
   - 不要冒充真实的 CEO 做非法请求
   - 不要测试财务转账 / 真实交易
   - 不要利用收集到的凭证访问真实系统

5. 演练后要培训
   - 演练不是为了"坑"员工
   - 而是为了发现薄弱环节
   - 中招的员工应该收到培训,不是处罚

七、推荐资源