网络钓鱼攻防演练系统是一套基于开源工具链构建的本地化安全培训平台,旨在帮助组织以可控、合规的方式开展钓鱼攻击模拟演练与防御检测训练,提升全员安全意识与应急响应能力。
面向全体员工或特定部门(财务、HR、IT)开展定期钓鱼演练
网络安全专业课程实验、CTF竞赛训练、红蓝对抗演练
工作组成员单位间的安全能力互评、行业标准符合性测试
以下以在 Ubuntu 22.04 LTS 上部署全套工具链为基准给出建议配置。若仅部署 Gophish 进行邮件钓鱼入门演练,最低配置即可流畅运行。
| 配置项 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
操作系统 |
Ubuntu 20.04 LTS | Ubuntu 22.04 LTS | Debian 11+/Kali 亦可,命令包管理器略有差异 |
处理器 |
2 核 | 4 核 | EvilnoVNC 的虚拟桌面较吃 CPU |
内存 |
4 GB | 8 GB | Docker 多容器并行时建议 8GB 以上 |
磁盘 |
40 GB | 100 GB SSD | 镜像、日志与演练数据占用 |
网络 |
内网互通 | 固定内网 IP | 纯内网演练无需公网;出站需放通 587/465 邮件端口 |
基础软件 |
Docker 20.10+ | Docker 24+ / Compose v2 | 另需 Go 1.21+(编译 Evilginx2)、Python 3.10+(蓝队工具) |
网络规划建议:将演练服务器部署在独立网段或 VLAN,与生产环境隔离;如需员工从办公网访问钓鱼页面,放通服务器 80/8080/3333 端口即可,无需开放入站 25 端口。云服务器注意:主流云厂商默认封禁 25 端口出站,请改用 587/465 或内网 MailHog(见 ③ 部署指南)。
本系统采用红蓝双视角设计理念,不仅提供攻击模拟工具(红队),同时提供检测防御工具(蓝队),实现"以攻促防、攻防兼备"的演练效果。
根据演练需求、技术难度及安全合规要求,我们从GitHub开源社区中筛选出以下工具,形成完整的钓鱼攻防演练工具链。工具按红队攻击、蓝队检测、扩展工具三个维度分类呈现。
| 工具名称 | 演练类型 | 难度等级 | 推荐场景 | 建议 |
|---|---|---|---|---|
|
Gophish
|
邮件钓鱼 + 数据收集 + Web管理 | ★★☆☆☆ | 企业培训、批量演练 | 核心推荐 |
|
Evilginx2
|
反向代理 + 2FA绕过 + 会话劫持 | ★★★★☆ | 高级演练、红队测试 | 核心推荐 |
|
EvilnoVNC
|
实时浏览器劫持 + 2FA绕过 | ★★★★★ | 深度会话劫持演练 | 进阶推荐 |
|
Modlishka
|
透明代理 + 会话劫持 | ★★★★☆ | 2FA绕过教学演示 | 可选 |
|
King-Phisher
|
邮件钓鱼 + 社工工程 | ★★★☆☆ | 社工工程演练 | 已停更 |
|
FiercePhish
|
批量邮件自动化 + 活动管理 | ★★☆☆☆ | 大规模演练 | 已停更 |
|
OhMyQR
|
二维码钓鱼 + QR劫持 | ★☆☆☆☆ | 二维码攻击演示 | 可选 |
|
BlackEye
|
登录页克隆(30+模板) | ★★☆☆☆ | 快速搭建演示环境 | 可选 |
|
SocialFish
|
社交媒体钓鱼 + 信息收集 | ★★☆☆☆ | 社交平台钓鱼演练 | 可选 |
|
Malleable-C2
|
Cobalt Strike C2配置 | ★★★★★ | APT级攻击模拟 | 不推荐 |
维护状态提示:King-Phisher 与 FiercePhish 项目仓库均已多年停止更新(存在依赖失效、安全补丁缺失等风险),仅建议在隔离环境学习参考,不作为生产演练首选;Gophish 官方仓库自 v0.12.1(2022年9月)后更新放缓,但仍是目前生态最成熟、文档最完善的开源钓鱼演练框架,可放心作为核心平台。
| 工具名称 | 检测类型 | 难度等级 | 推荐场景 | 建议 |
|---|---|---|---|---|
|
Phishing Catcher
|
TLS证书透明度实时监测 | ★★☆☆☆ | 钓鱼域名早期预警 | 核心推荐 |
|
DNSTwist
|
域名变体生成 + 钓鱼检测 | ★★☆☆☆ | 品牌仿冒域名发现 | 核心推荐 |
|
SpiderFoot
|
OSINT自动化侦察(200+模块) | ★★★☆☆ | 攻击面梳理、情报收集 | 推荐 |
|
Pafish
|
虚拟机/沙箱检测测试 | ★★☆☆☆ | 沙箱环境Hardening验证 | 可选 |
选型建议:对于初次搭建演练环境的组织,推荐以 Gophish 为核心开展邮件钓鱼演练,配合 Evilginx2 进行高级场景(2FA绕过)演练。EvilnoVNC 可作为进阶的实时浏览器劫持演示工具,展示"即使开了2FA也能被绕过"的震撼效果。Modlishka 适合2FA绕过技术的教学演示。Phishing Catcher 和 DNSTwist 则可用于蓝队侧的钓鱼域名监测与预警演练,实现"以攻促防"的闭环。
以下工具可根据特定演练需求选用,涵盖更多攻击面和检测维度:
根据演练复杂度与团队技术能力,提供三套工具组合方案:
适合首次开展钓鱼演练的组织,快速搭建邮件钓鱼环境,收集点击率数据,配合蓝队检测工具验证防御效果。
在基础方案上增加反向代理能力,演示如何捕获真实凭证并绕过双因素认证,同时部署域名监测发现仿冒。
模拟完整攻击链,从钓鱼邮件到会话劫持,配合OSINT侦察和实时浏览器劫持,适合红队演练和安全竞赛。
以下部署指南以 Ubuntu 22.04 LTS 为例,其他 Linux 发行版可参照调整包管理命令。所有操作须在授权测试环境中进行。工具按红队核心、红队进阶、蓝队检测三个维度分别部署说明。
无论选择哪套工具组合,请先完成以下基础环境配置。每一行命令均可直接复制执行。
# 更新软件源
$ sudo apt update && sudo apt upgrade -y
# 安装 Docker(Ubuntu 官方仓库版本即可满足需求)
$ sudo apt install -y docker.io docker-compose-v2
# 启动 Docker 并设置开机自启
$ sudo systemctl enable --now docker
# 验证安装(应输出类似 Docker version 24.0.x)
$ docker --version
$ sudo usermod -aG docker $USER
# 重新登录终端后生效,验证:
$ docker ps
# Go 语言(编译 Evilginx2 / Modlishka 需要,Ubuntu 22.04 仓库提供 Go 1.18+)
$ sudo apt install -y golang-go git make
# Python3 与 pip(蓝队工具需要)
$ sudo apt install -y python3-pip python3-venv
# 验证版本
$ go version && python3 --version
Gophish 是一款开源的钓鱼模拟框架,提供 Web 管理界面,支持邮件模板编辑、目标分组、活动调度及数据报表生成,是目前生态最成熟的开源钓鱼演练平台。官方提供 Docker 镜像,安装门槛极低。
# 拉取官方镜像
$ docker pull gophish/gophish:latest
# 启动容器:
# 3333 = 管理后台(HTTPS)
# 8080:80 = 钓鱼页面(容器内 80 端口映射到宿主机 8080)
$ docker run -d --name gophish \
-p 3333:3333 \
-p 8080:80 \
-v gophish_data:/opt/gophish \
gophish/gophish:latest
Gophish 首次启动会随机生成管理员密码并打印在容器日志中:
$ docker logs gophish 2>&1 | grep -i password
# 输出示例:
# Please login with the username admin and the password 4f0c8f2b6a1d...
https://服务器IP:3333(使用 HTTPS,浏览器会提示证书不受信任,属正常现象,点"高级 → 继续访问"即可)admin,密码用上一步日志中的随机密码无法访问排查:① 确认防火墙放通 3333 端口;② 若使用旧版本镜像,其默认监听 127.0.0.1:3333,仅容器内部可访问,需进入容器把 config.json 中 admin_server 的 listen_url 改为 0.0.0.0:3333 后重启容器;③ 确认容器在运行:docker ps | grep gophish。
在 Gophish 左侧菜单 Sending Profiles → New Profile 中配置 SMTP。内网演练推荐用 MailHog 作为本地测试邮件服务器,零配置、可视化查看邮件:
# 启动 MailHog(SMTP 端口 1025,Web 查看端口 8025)
$ docker run -d --name mailhog \
-p 1025:1025 -p 8025:8025 \
mailhog/mailhog:latest
# 浏览器访问 http://服务器IP:8025 即可查看 Gophish 发出的所有邮件
Gophish 中对应填写:
IT运维中心 <it-notice@your-lab.local>服务器IP:1025(与 MailHog 同机部署时填本机 IP 即可)使用企业邮箱/真实 SMTP 时的三个投递基础:① SPF——声明哪些服务器有权代域名发信,防止伪造;② DKIM——对邮件内容加数字签名,防篡改;③ DMARC——告诉收件方如何处理未通过 SPF/DKIM 校验的邮件。三项记录未配置正确,邮件大概率进垃圾箱。此外,主流云厂商默认封禁 25 端口,请使用 587(STARTTLS)或 465(SSL)端口,企业邮箱通常需在后台开启"客户端授权码"。
在 Campaigns → New Campaign 创建活动前,需先准备好四项资源:
{{.FirstName}}、{{.LastName}} 插入收件人姓名实现个性化,使用 {{.URL}} 插入钓鱼链接(必须,否则无法统计点击)First Name, Last Name, Email, Positionhttp://服务器IP:8080 或配合内网 DNS 使用自定义域名最佳实践:设置 Send Emails By 让邮件在一段时间内分批随机发送,避免短时间内海量邮件触发邮件网关告警;先向自己的小范围测试组发送一轮,确认打开、点击、提交全链路数据正常后,再面向正式人群开展演练。
将 Gophish 与 MailHog 编排在一起,一条命令完成整套邮件演练环境:
# docker-compose.yml
version: "3.8"
services:
gophish:
image: gophish/gophish:latest
container_name: gophish
restart: unless-stopped
ports:
- "3333:3333" # 管理后台(HTTPS)
- "8080:80" # 钓鱼页面
volumes:
- gophish_data:/opt/gophish
mailhog:
image: mailhog/mailhog:latest
container_name: mailhog
restart: unless-stopped
ports:
- "1025:1025" # SMTP 服务端口
- "8025:8025" # Web 邮件查看
volumes:
gophish_data:
$ docker compose up -d
# Gophish 的 Sending Profile 中 Host 填:mailhog:1025
# (同一 Compose 网络内可直接用服务名解析,无需 IP)
Evilginx2(现版本即 Evilginx 3.x,仓库名仍为 evilginx2)是一款开源的中间人攻击框架,通过反向代理目标网站的真实登录页面,捕获用户凭据、2FA令牌及会话Cookie,实现双因素认证绕过。它内置 HTTP 与 DNS 服务器,无需额外安装 nginx。
安全警示:Evilginx2 具有极强的攻击能力,仅限在完全隔离的测试环境中使用。部署前须确保已获得组织书面授权,且演练范围明确限定。作者 Kuba Gretzky 在官方文档中明确要求:仅用于获得被钓鱼方书面许可的合法渗透测试。
# 安装编译依赖(Ubuntu 22.04 仓库提供的 golang-go 为 Go 1.18+,满足要求)
$ sudo apt update
$ sudo apt install -y golang-go git make
# 克隆仓库并编译
$ git clone https://github.com/kgretzky/evilginx2.git
$ cd evilginx2
$ make
# 安装到系统路径(可选):二进制复制到 /usr/local/bin,phishlets 复制到 /usr/share/evilginx/
$ sudo make install
版本命名说明:不同版本编译产物文件名可能为 evilginx 或 evilginx2,请以 build/ 目录下的实际文件名为准。phishlets 模板的查找顺序为:当前目录 ./phishlets/ → /usr/share/evilginx/phishlets/,也可用启动参数 -p <路径> 显式指定。
Evilginx 内置 HTTP/DNS 服务器,TCP 80、TCP 443、UDP 53 必须空闲,否则启动报错:
$ sudo ss -tulnp | grep -E ':80 |:443 |:53 '
# 如有占用进程(如 apache2、nginx、named、systemd-resolved),先停止:
# $ sudo systemctl stop apache2 nginx named
# $ sudo systemctl stop systemd-resolved # 占用 UDP 53 时
Evilginx 需要接管一个域名的解析权,官方推荐做法是:在域名注册商处把域名的 NS 记录(ns1、ns2)指向演练服务器的公网 IP,由 Evilginx 内置 DNS 服务器完成解析(这也是要求 UDP 53 空闲的原因)。常见替代做法:为主机名添加 A 记录指向服务器 IP,并为子域添加 NS 记录委派给主域。
# 启动(若未执行 make install,则运行 ./build/ 下的可执行文件)
$ sudo evilginx2
# ===== 以下为交互式控制台命令 =====
# 设置域名与服务器 IP
: config domain your-lab-domain.com
: config ip 192.168.1.100
# 设置未命中 lure 时的重定向地址(可选,建议设为无害站点)
: config redirect_url https://www.example.com
# 绑定 phishlet 主机名(先绑定,后启用)
: phishlets hostname o365 login.your-lab-domain.com
# 启用 phishlet(自动向 Let's Encrypt 申请证书)
: phishlets enable o365
# 创建诱饵(lure)并生成钓鱼链接
: lures create o365
: lures get-url 0
内网/无公网环境:Let's Encrypt 签发要求域名公网可达(80/443 通)。纯内网演练请使用 -developer 启动参数生成自签名证书,并用 phishlets get-hosts <phishlet名> 生成需要写入测试机 hosts 文件的解析记录,然后在参与演练的终端上配置 hosts 指向演练服务器。
当目标访问钓鱼链接并登录后,凭据与授权令牌实时回显在控制台;查看历史会话:
# 会话列表(含用户名、密码、令牌捕获状态、来源 IP、时间)
: sessions
# 查看指定会话详情(含凭据与完整 Cookie)
: sessions 0
会话数据保存在用户主目录 ~/.evilginx/ 下。关于 phishlet 的语法与进阶用法,可查阅官方帮助站点 help.evilginx.com 及仓库 Wiki。
EvilnoVNC 是 JoelGMSec 开发的开源钓鱼平台,通过 Docker 内置的 noVNC 虚拟桌面运行真实 Chromium 浏览器。受害者"登录"的页面实际运行在攻击者控制的浏览器中,攻击者可实时观看并操控整个登录过程,捕获凭据、2FA验证码、下载文件及完整浏览器 Profile(Cookie、已存密码、历史记录),实现更隐蔽的 2FA 绕过。
安全警示:EvilnoVNC 代表了最新的 2FA 绕过技术方向,攻击隐蔽性极高。仅限在完全隔离的测试环境中使用,且须获得组织最高级别书面授权。项目许可证明确声明:仅供教育环境和/或获得客户同意的安全审计使用。
前置要求:Docker(必需)与宿主机安装 Chromium 相关依赖。构建过程会自动拉取基础镜像并安装容器内的浏览器环境:
# 克隆仓库
$ git clone https://github.com/JoelGMSec/EvilnoVNC
$ cd EvilnoVNC
# 将 Downloads 目录属主改为容器内用户(UID 103),保证下载文件可保存到宿主机
$ sudo chown -R 103 Downloads
# 构建镜像
$ sudo docker build -t joelgmsec/evilnovnc .
# 验证镜像
$ docker images | grep evilnovnc
当前版本通过 start.sh 脚本启动(脚本内部自动完成容器运行与端口映射),参数为"分辨率"与"目标网址":
# 固定分辨率 1280x720(16 位色,省资源)
$ ./start.sh 1280x720x16 https://login.example.com
# 或 1920x1080 24 位色(演示效果最佳)
$ ./start.sh 1920x1080x24 https://login.example.com
# 动态分辨率(受害者进入时按其屏幕自适应)
$ ./start.sh dynamic https://login.example.com
Downloads/ 目录(即步骤 1 中 chown 的目录)与 Evilginx2 的对比选择:Evilginx2 是"反向代理"思路,拿到的是会话 Cookie;EvilnoVNC 是"远程桌面"思路,拿到的是整个浏览器会话且能实时交互。演示震撼力 EvilnoVNC 更强、资源消耗更高;稳定性与易维护性 Evilginx2 更好。两者可结合:邮件入口用 Gophish,高价值目标演示用 EvilnoVNC。
Phishing Catcher(x0rz 开源)基于 CT Log(证书透明度日志)实时监测新签发的 TLS 证书,用机器学习模型与关键词打分识别疑似钓鱼域名,可在钓鱼网站上线后数分钟内发出预警——是蓝队"看见"钓鱼基础设施的核心工具。
$ git clone https://github.com/x0rz/phishing_catcher.git
$ cd phishing_catcher
# 安装依赖(含 certstream 客户端库)
$ pip3 install -r requirements.txt
# 启动监测(注意:脚本名为 catch_phishing.py)
$ python3 catch_phishing.py
数据源说明:工具默认连接公共 CertStream 服务(wss://certstream.calidog.io)接收全量证书日志。该公共服务偶尔不稳定,断线后脚本会尝试重连;对持续性要求高的单位,建议参考社区方案自建 certstream-server 数据源,并用 tmux/systemd 守护进程常驻运行。
仓库内置 suspicious.yaml(通用可疑词表)。监控本组织品牌时,新建 external.yaml 追加自有词条即可(无需改动原文件):
# external.yaml 示例:分值越高越可疑,权重自行调整
keywords:
'yourbrand': 70
'yourbrand-login': 80
'yourbrand-verify': 90
输出按分值分级:≥65 为 Potential(潜在)、≥80 为 Likely(高度疑似)、≥90 为 Suspicious(高度可疑)。建议将 ≥80 的告警对接企业微信/钉钉 Webhook 或 SIEM 实现自动通知。
$ sudo apt install -y tmux
$ tmux new -s catcher
$ cd phishing_catcher && python3 catch_phishing.py
# 按 Ctrl+B 再按 D 挂起会话,随时 tmux attach -t catcher 回到监控画面
DNSTwist 是一款域名变体生成与钓鱼检测工具,通过多种模糊算法(同形异义字、比特翻转、连字符插入等)生成目标域名的变体,检测已注册的仿冒域名,支持模糊哈希与感知哈希进行页面内容相似度比对。
$ sudo apt update
$ sudo apt install -y python3-pip
# 安装完整版([full] 包含 ssdeep/whois 等可选依赖)
$ pip3 install dnstwist[full]
# 验证安装
$ dnstwist --version
# 基础域名变体扫描
$ dnstwist example.com
# 仅显示已注册的域名
$ dnstwist --registered example.com
# 模糊哈希:抓取各变体站点页面,与目标站点做 ssdeep 相似度比对(默认 ssdeep,可指定 --lsh tlsh)
$ dnstwist --lsh example.com
# 感知哈希:渲染页面截图做视觉相似度比对(需系统安装 Chromium)
$ dnstwist --phash example.com
# 只运行指定的模糊算法(逗号分隔,可用 dnstwist --fuzzers 帮助查看全部)
$ dnstwist --fuzzers "homoglyph,hyphenation" example.com
# 结果导出为 JSON 文件(配合 -o 指定输出文件)
$ dnstwist --registered --format json -o report.json example.com
# 创建监控脚本
$ sudo tee /opt/dnstwist-monitor.sh > /dev/null << 'EOF'
#!/bin/bash
DOMAIN="your-company.com"
OUTDIR="/var/log/dnstwist"
mkdir -p "$OUTDIR"
$HOME/.local/bin/dnstwist --registered --format json \
-o "$OUTDIR/$(date +%Y%m%d).json" "$DOMAIN" 2>/dev/null
# 如需邮件告警,请先安装 mailutils,并配置好本地 MTA 或 SMTP 中继
if [ -s "$OUTDIR/$(date +%Y%m%d).json" ]; then
echo "发现已注册的可疑域名变体,请查看 $OUTDIR" | \
mail -s "[DNSTwist] 仿冒域名告警" security@your-company.com
fi
EOF
$ sudo chmod +x /opt/dnstwist-monitor.sh
# 加入 crontab:每日凌晨 2 点执行
$ (crontab -l 2>/dev/null; echo "0 2 * * * /opt/dnstwist-monitor.sh") | crontab -
使用提示:① pip3 install 安装的命令通常位于 ~/.local/bin/dnstwist,脚本中注意使用绝对路径;② 告警邮件功能需先 sudo apt install mailutils 并配置好邮件发送环境,内网环境可直接改为写入告警文件或由监控 Agent 采集;③ 每日基线扫描结果建议保留,便于发现"今日新增"的注册变体。
SpiderFoot 是一款开源 OSINT 自动化侦察框架,集成 200+ 数据模块,支持从 Shodan、VirusTotal、Have I Been Pwned 等数据源收集情报,用于攻击面梳理、威胁情报富化和品牌监控。当前维护版本为 SpiderFoot 5.x(注意:其 hx 分支的 SpiderFoot HX 为商业版,功能与开源版不同)。
$ sudo apt update
$ sudo apt install -y python3-pip python3-venv git
$ git clone https://github.com/smicallef/spiderfoot.git
$ cd spiderfoot
# 使用虚拟环境安装依赖(避免污染系统 Python)
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install -r requirements.txt
# 监听所有网卡,默认端口 5001
(venv) $ python3 ./sf.py -l 0.0.0.0:5001
# 如需后台常驻
(venv) $ nohup python3 ./sf.py -l 0.0.0.0:5001 > /var/log/spiderfoot.log 2>&1 &
https://服务器IP:5001(自签名证书警告属正常;部分版本为 http,以启动日志提示为准)passwd 文件启用 Basic Auth(格式:用户名:密码,每行一条)在 Web 界面 Settings 中配置各数据源的 API 密钥,密钥越全,侦察结果越丰富。推荐优先配置:
Web 界面 New Scan 输入目标(域名/IP/邮箱/用户名均可),按需选择扫描模式("All" 最全但慢,建议按用途选模块子集)。命令行方式:
# CLI 直接扫描(-s 目标,-m 逗号分隔的模块名)
(venv) $ python3 ./sf.py -s your-company.com \
-m sfp_dnsresolve,sfp_shodan,sfp_virustotal
# 更多参数请查看
(venv) $ python3 ./sf.py --help
扫描结果在 Web 界面 Browse Data 中查看,并支持导出 CSV / GEXF(GEXF 可用 Gephi 打开做关联图谱可视化)。发现的高危暴露(如未授权管理后台、测试环境泄露、员工凭据出现在泄露库中)应形成整改清单闭环。
Modlishka(波兰语"螳螂")是 drk1wi 开发的高级反向代理钓鱼工具,全站 TLS 透明转发,内置插件支持凭证捕获、2FA 令牌拦截。适合作为 Evilginx2 的替代/对照教学工具。项目更新较慢,建议仅在隔离环境教学使用。
$ sudo apt install -y golang-go git make
$ git clone https://github.com/drk1wi/Modlishka.git
$ cd Modlishka
$ make
# 编译产物位于 dist/proxy,通过 -config 指定 JSON 配置运行
# templates/ 目录提供了参考配置模板(含 target、redirect、proxyDomain 等字段)
$ ./dist/proxy -config templates/<示例配置>.json
字段速览:proxyDomain 为钓鱼域名、target 为被仿冒的真实站点、redirect 为未命中时的跳转地址、listeningPort/listeningAddress 控制监听、plugins 配置凭证捕获等插件。各字段含义请以仓库 templates 下的示例文件与 README 为准。
工具就绪只是第一步。一次合规、有效的钓鱼演练需要经过筹备、执行、收尾复盘三个阶段,每个阶段都有明确的动作清单与责任要求。以下为可直接照做的标准流程。
复盘质量取决于指标口径是否统一。以下六项为行业标准度量,Gophish 报表均可直接或间接得出:
成功送达 ÷ 计划发送。过低说明被网关拦截或地址库质量差
打开邮件(加载追踪元素)÷ 送达。反映邮件标题与发件人的欺骗性
点击钓鱼链接 ÷ 送达。反映员工对链接/二维码的警惕性
在钓鱼页提交凭据 ÷ 送达。高危人群须一周内完成专项培训
主动向安全团队上报可疑邮件 ÷ 送达。这是最值得奖励的行为指标
未点击 ÷ 送达(或以问卷实测)。用于培训前后对比,验证培训成效
口径约定:所有指标以"送达"为分母口径(而非"发送"),避免把无效邮箱计入分母造成指标虚高。首次演练的点击率行业常见区间在 10%–30%,不要以"越低越好"为由压制正常上报,报告率才是安全文化成熟度的第一指标。
结合红蓝双视角工具链,可开展以下典型攻防演练场景。每个场景均包含红队攻击路径和蓝队检测响应路径。
使用 Gophish 发送伪造的办公邮件,链接指向 Evilginx2 代理的仿冒登录页,捕获凭据。演练目标:测试员工对钓鱼邮件的识别能力和邮件网关的拦截效果。
利用 Evilginx2 的 phishlet 功能,劫持 OAuth 登录流程,获取用户授权令牌。演练目标:演示 OAuth 钓鱼的隐蔽性和危害性。
使用 EvilnoVNC 搭建虚拟浏览器环境,受害者通过 noVNC 访问真实登录页面,攻击者实时捕获凭据和2FA验证码。演练目标:展示即使启用2FA也可能被绕过的现实风险。
使用 OhMyQR 生成恶意二维码,扫码后跳转至钓鱼页面,适合线下演练场景。演练目标:测试员工对二维码来源的警惕性。
使用 SocialFish 克隆社交媒体登录页面,结合社工信息构造个性化钓鱼链接。演练目标:测试员工对社交平台钓鱼的识别能力。
使用 Phishing Catcher 监控 TLS 证书透明度日志,实时发现针对本组织的仿冒域名注册。演练目标:验证蓝队从证书层面提前发现钓鱼基础设施的能力。
使用 DNSTwist 生成组织域名的所有可能变体,检测已注册的仿冒域名并进行内容相似度比对。演练目标:发现攻击者针对本组织的域名抢注和钓鱼页面克隆。
使用 SpiderFoot 对组织域名、IP、邮箱进行全面的 OSINT 侦察,发现公开暴露的服务、子域名、员工信息泄露等安全隐患。演练目标:在攻击者发现之前,主动消除暴露面。
配合红队的钓鱼邮件发送,验证邮件网关对各类钓鱼邮件(含附件、链接、个性化内容)的拦截率和误报率,优化安全策略。
红队使用完整工具链发起多向量钓鱼攻击,蓝队使用检测工具实时发现攻击并应急响应。演练结束后双方复盘,共同优化防御策略。
先通过蓝队工具发现仿冒域名,再由红队模拟利用该域名发起攻击,最后蓝队验证检测告警和响应流程的完整性。
各部门组成红蓝两队,红队设计钓鱼方案,蓝队设计检测方案,通过竞赛形式提升全员安全意识和协作能力。
演练报告模板:每次演练结束后,建议生成包含以下内容的报告:演练目标与范围、参与人员统计、红队攻击成功率/蓝队检测率数据、识别准确率分析、防御薄弱环节、改进建议。报告模板可在下方资源下载区获取。
钓鱼演练涉及模拟攻击行为,必须严格遵守法律法规和组织内部规范。以下是关键合规要求,覆盖红队攻击侧和蓝队检测侧。
以下清理脚本覆盖本手册涉及的全部工具,演练结束后务必逐项执行并确认:
# ===== 红队工具清理 =====
# Gophish / MailHog 容器与数据卷
$ docker stop gophish mailhog 2>/dev/null
$ docker rm gophish mailhog 2>/dev/null
$ docker volume rm gophish_data 2>/dev/null
# Evilginx2 数据清理(会话、黑名单、配置)
$ sudo pkill -f evilginx 2>/dev/null
$ rm -rf ~/.evilginx
$ sudo rm -rf /usr/share/evilginx
$ sudo rm -f /usr/local/bin/evilginx*
# EvilnoVNC 容器、镜像与下载目录残留
$ docker stop $(docker ps -q --filter ancestor=joelgmsec/evilnovnc) 2>/dev/null
$ docker rm $(docker ps -aq --filter ancestor=joelgmsec/evilnovnc) 2>/dev/null
$ docker rmi joelgmsec/evilnovnc 2>/dev/null
$ rm -rf ~/EvilnoVNC/Downloads/*
# Modlishka 数据清理
$ rm -rf ~/Modlishka
# ===== 蓝队工具清理 =====
# Phishing Catcher(含自定义词表)
$ pkill -f catch_phishing.py 2>/dev/null
$ rm -rf ~/phishing_catcher
# DNSTwist 扫描结果
$ sudo rm -f /var/log/dnstwist/*.json
# SpiderFoot 扫描数据(含停用后的 crontab)
$ rm -rf ~/spiderfoot /tmp/spiderfoot*
$ crontab -l 2>/dev/null | grep -v dnstwist-monitor | crontab -
# ===== 系统日志与邮件测试残留 =====
$ sudo rm -f /var/log/spiderfoot.log
$ sudo rm -rf /var/log/mailhog 2>/dev/null
重要提醒:若演练涉及真实员工邮箱,须在演练结束后发送澄清通知,说明演练目的、结果及后续培训安排,避免造成恐慌或信任危机。对于演练中"中招"的员工,应提供针对性的安全培训而非惩罚。蓝队发现的仿冒域名应及时通报相关机构和域名注册商。
可以。Gophish 提供 Windows 二进制发行版,可直接下载运行。Evilginx2 和 EvilnoVNC 基于 Go/Docker 开发,在 Windows 上可通过 WSL2(Windows Subsystem for Linux)运行,建议使用 Ubuntu 22.04 发行版。DNSTwist 和 SpiderFoot 基于 Python,Windows 上可直接通过 pip 安装。总体而言,仍推荐 WSL2 或虚拟机安装 Ubuntu 以获得最佳兼容性(本手册命令均以 Ubuntu 为例)。
这往往说明邮件网关正在发挥作用。分两种情况处理:① 若目标是测试员工识别能力,可将演练发件域名/发件地址加入邮件网关白名单,或使用内部 SMTP(如 MailHog)发送;② 若目标是测试防御能力,则保留拦截状态,把"拦截率"本身作为蓝队的战绩数据。注意不要为了让邮件到达而过度降低仿真度——真实攻击者同样要绕过网关,这正是演练价值所在。
纯内网演练无需公网资源。Gophish 的钓鱼页面可通过内网 IP 访问(如 http://192.168.x.x:8080),配合内网 DNS 自定义域名效果更佳。Evilginx2 的 Let's Encrypt 证书功能需要公网可达,内网请用 -developer 自签名模式配合 hosts 文件解析;EvilnoVNC 纯内网可直接使用。蓝队工具中,DNSTwist 扫描的是公网域名数据,需要 DNS 出站查询;SpiderFoot 需要访问外部数据源,同样需要出站网络。
建议采取以下措施:① 部署在物理隔离的测试网络中,与生产环境完全分离;② 限制工具访问权限,仅授权安全团队成员使用;③ 建立使用审计日志,记录每次操作;④ 定期审查演练环境,确保无遗留配置;⑤ 在组织内部明确演练工具的使用规范与问责机制;⑥ 演练结束后严格执行第 ⑥ 章的数据清理脚本。
DNSTwist 和 SpiderFoot 主要使用公开数据源(DNS记录、WHOIS、证书透明度日志、搜索引擎等),属于被动信息收集,在仅针对本组织自有资产的前提下通常不违反法律。但需注意:① 优先扫描本组织自有域名或已获得授权的域名;② 遵守各数据源服务条款;③ 不将收集的数据用于商业目的或对外泄露;④ 扫描频率应合理,避免对目标服务造成负担。
官网的演练场景(drill.html)提供前端交互式模拟体验,适合公众快速了解钓鱼手法。本地部署的演练系统(本页面所述工具)则提供真实的邮件发送、页面代理、数据捕获、域名监测能力,适合企业内部深度演练。两者互补:可先通过官网场景进行科普教育,再通过本地系统开展实战演练,最后用蓝队工具验证防御效果。
两者实现2FA绕过的技术路径不同:Evilginx2 采用反向代理方式,拦截并转发用户的登录请求和2FA验证码,攻击者获得的是用户的会话Cookie;EvilnoVNC 采用实时浏览器劫持方式,受害者在攻击者控制的虚拟浏览器中操作,攻击者可以实时看到并操控整个登录过程,包括输入2FA验证码,获得的是完整的浏览器会话。EvilnoVNC 更加隐蔽、演示效果更强,但部署复杂度与资源消耗更高。
这是国内云厂商的普遍策略(防垃圾邮件),三种解决方案:① 内网演练用 MailHog 本地收发,完全绕过该限制(推荐入门首选);② 使用企业邮箱 SMTP 中继,端口选 587(STARTTLS)或 465(SSL),多数企业邮箱需在后台为账号开启"客户端授权码",填授权码而非登录密码;③ 向云厂商提交工单申请解封 25 端口(审核严格,演练用途通常不被批准,不建议依赖)。
按顺序检查:① DNS 是否已生效——用 nslookup login.yourdomain.com 8.8.8.8 确认公网解析到服务器 IP;② 80/443 端口是否公网可达且未被其他服务占用;③ UDP 53 是否被 systemd-resolved 等占用(sudo systemctl stop systemd-resolved);④ Let's Encrypt 对同一域名有签发频率限制,反复调试触发限流只能等待;⑤ 纯内网环境无需折腾公网证书,直接用 -developer 参数自签名 + hosts 解析。
完全正常,且恰好是绝佳的教学点:真实钓鱼网站也常因证书问题被浏览器标记。自签名证书在内网无法被浏览器信任,会出现红色警告。进阶做法是用 mkcert 工具生成内网受信任的本地 CA 证书并分发给演练终端,或在内网 DNS/AD 域环境中部署企业 CA。教学场景中,"看到证书警告仍继续访问"的行为本身就可以作为统计指标。
Gophish 批量导入标准格式为四列:First Name, Last Name, Email, Position(首行必须是英文列名)。示例:Zhang,San,zhangsan@your-company.com,财务部。在 Groups → New Group → Bulk Import Users 中上传即可。Position 列可留空但逗号占位不能省略;中文姓名建议填在 First Name 一列,模板中的 {{.FirstName}} 变量即可取到。
常见原因:① 未配置 API 密钥——大部分高质量数据源(Shodan、VirusTotal 等)需要免费注册获取 API Key,在 Settings 中填入后效果明显不同;② 模块选择不当——先跑 sfp_dnsresolve、sfp_whois 等被动模块验证链路,再逐步启用更多模块;③ 出站网络受限——容器/防火墙需放通对外的 443 端口;④ Python 版本过低——SpiderFoot 5.x 要求 Python 3.8+,用虚拟环境可避免依赖冲突;⑤ 查看 /var/log/spiderfoot.log 中的具体报错。
工具默认连接公共 CertStream 服务,该服务负载极高、偶尔不稳定。建议:① 用 tmux/systemd 守护进程常驻,断线后重新拉起;② 确认 external.yaml 关键词无误——匹配不到自有品牌词条时输出自然很少(这是正常现象,说明暂未发现仿冒);③ 对监测连续性要求高的单位,可参考社区方案自建 certstream-server 数据源,替换默认连接地址。
以下资源文件可辅助您快速搭建演练环境,点击下载即可获取。资源按红队工具、蓝队工具、通用资源分类。
包含 config.json 模板、邮件模板示例、钓鱼页面示例
常用 phishlet 配置文件(Office365、Google、GitHub等)
Word 格式报告模板,包含数据图表、分析框架、改进建议
一键安装 Docker、Gophish、Evilginx2 的 Bash 脚本
自动化品牌域名监控脚本,含定时任务配置示例
预配置的扫描模块组合和 API 密钥配置模板
以下资源与本手册内容配套,均为可复制即用的完整代码,无需额外下载: