社会工程学 + 钓鱼演练: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. 演练后要培训
- 演练不是为了"坑"员工
- 而是为了发现薄弱环节
- 中招的员工应该收到培训,不是处罚
七、推荐资源
- GoPhish: https://github.com/gophish/gophish
- Evilginx2: https://github.com/kgretzky/evilginx2(更高级,能绕过 MFA)
- Gophish 完整指南: https://www.secjuice.com/phishing-with-gophish/
- SANS 安全意识课程
- 《社会工程学》(Kevin Mitnick 著)
- 国际钓鱼意识日(每年 10 月)
- Office 365 Attack Simulator(微软官方钓鱼工具)
- KnowBe4(商业安全意识培训平台)