一、引言
网络钓鱼攻击现状分析
CNNIC公共互联网反网络钓鱼工作组简介
“网络钓鱼攻防演练”的目标与意义
dnstwist工具介绍及其在网络钓鱼防御中的作用
二、准备工作
安装环境准备
操作系统要求
Python版本需求
必要的Python库安装
获取dnstwist-master源码
GitHub仓库地址
下载方法介绍
三、dnstwist源码部署
解压与配置
源码目录结构说明
配置文件修改要点
依赖项安装
使用pip安装必要库
处理安装过程中可能出现的问题
启动服务
基本命令行参数解释
如何设置为后台服务运行
四、功能详解与应用实例
主要功能模块解析
域名生成算法
调查与监控模块
实战案例分析
结合具体案例讲解如何识别钓鱼网站
利用dnstwist进行大规模域名扫描的方法
整合进现有安全体系
与其他安全工具的联动
自动化响应机制设计
五、参与“网络钓鱼攻防演练”
演练背景与规则
如何使用dnstwist提升演练效果
数据收集与分析报告撰写技巧
六、维护与更新
定期检查与更新
社区贡献与反馈
错误排查与解决方案
七、总结
对比其他类似工具的优势
未来发展趋势展望

——面向 CNNIC 公共互联网反网络钓鱼工作组“攻防演练”项目的部署与应用
一、引言
1.1 网络钓鱼攻击现状分析
近年来,随着数字经济的迅猛发展,网络空间已成为国家关键信息基础设施的重要组成部分。然而,网络钓鱼(Phishing)作为最古老却最有效的社会工程攻击手段之一,持续对政府机构、金融系统、企业平台及普通网民构成严重威胁。根据中国互联网络信息中心(CNNIC)发布的《第54次中国互联网络发展状况统计报告》(2024年),我国网民规模已达10.89亿,其中超过60%的用户曾遭遇过疑似钓鱼网站或欺诈链接。更令人担忧的是,攻击者正利用人工智能生成内容(AIGC)、国际化域名(IDN)混淆、同形异义字符(Homograph)等高级技术,使钓鱼域名愈发难以识别。
典型攻击模式包括:
仿冒银行/政务/电商平台域名:如将 icbc.com.cn 仿冒为 icbc0.com.cn 或 icbc.com.cnn;
使用视觉混淆字符:如用西里尔字母 “а”(U+0430)替代拉丁字母 “a”(U+0061);
批量注册相似域名:通过自动化工具在短时间内注册数百个变体域名,用于短期钓鱼活动后迅速更换。
此类攻击不仅造成直接经济损失,还可能引发数据泄露、身份盗用甚至国家级APT攻击的跳板。因此,构建主动式、智能化的钓鱼域名发现与阻断机制,已成为我国网络安全防御体系的关键环节。
1.2 CNNIC 公共互联网反网络钓鱼工作组简介
为应对日益严峻的网络钓鱼威胁,中国互联网络信息中心(CNNIC)于2024年牵头成立“公共互联网反网络钓鱼工作组”(以下简称“反钓鱼工作组”)。该工作组由CNNIC主导,联合国内主要域名注册管理机构、顶级域名注册商、网络安全企业、高校科研单位及重点行业用户共同组成,旨在建立跨部门、跨行业的协同治理机制。
其核心职能包括:
制定钓鱼域名识别与处置的技术标准;
建立钓鱼域名共享数据库与快速通报机制;
组织年度“网络钓鱼攻防演练”项目,检验各单位防御能力;
推动国际协作,参与APWG(Anti-Phishing Working Group)等全球反钓鱼联盟。
该工作组强调“以攻促防、以练促改”的理念,通过模拟真实攻击场景,提升成员单位对新型钓鱼手段的感知、研判与响应能力。
1.3 “网络钓鱼攻防演练”项目的目标与意义
“网络钓鱼攻防演练”是反钓鱼工作组每年组织的核心实战化项目。该项目通常分为两个阶段:
红队(攻击方):由授权安全团队模拟高级钓鱼攻击者,利用合法工具生成大量潜在钓鱼域名,并尝试绕过现有防护体系;
蓝队(防守方):各参演单位需在限定时间内识别、上报并阻断这些钓鱼域名,同时提交技术分析报告。
演练目标包括:
检验现有域名监控系统的覆盖广度与响应速度;
发现防御盲区与流程漏洞;
提升技术人员对钓鱼变体域名的识别能力;
推动自动化、智能化防御工具的应用落地。
在此背景下,开源工具 dnstwist 因其强大的域名变体生成与风险评估能力,成为蓝队单位开展主动监测的重要技术支撑。
1.4 dnstwist 工具介绍及其在网络钓鱼防御中的作用
dnstwist 是由知名安全研究员 Marcin Ulikowski 开发的一款开源工具,主要用于生成与目标域名高度相似的潜在钓鱼域名(也称为“typosquatting domains”),并通过多种技术手段评估其风险等级。其核心功能包括:
基于规则的变体生成:支持替换、插入、删除、交换、双写、添加后缀/前缀等多种变形策略;
国际化域名(IDN)同形异义检测:自动识别使用非ASCII字符构造的视觉混淆域名;
WHOIS 查询与注册状态检查:判断变体域名是否已被注册;
DNS 解析与网页相似度比对:通过截图、HTML结构、favicon 等特征判断是否为钓鱼站点;
API 与 Web 界面支持:便于集成到自动化监控系统中。
在“网络钓鱼攻防演练”中,dnstwist 可用于:
事前防御:为主管单位或重点企业生成其品牌域名的所有潜在变体,提前向注册局申请保护性注册或加入黑名单;
事中监测:实时扫描新注册域名,匹配已知品牌关键词,发现可疑注册行为;
事后分析:对演练中出现的钓鱼域名进行逆向分析,追溯攻击手法与TTPs(战术、技术与过程)。
因此,掌握 dnstwist 的部署与深度应用,对于参与 CNNIC 攻防演练的单位具有重要实战价值。
二、准备工作
在正式部署 dnstwist-master 源代码之前,必须完成一系列环境与资源的准备工作。本节将从操作系统、Python 环境、依赖库、源码获取等方面进行详细说明,确保后续部署过程顺利进行。
2.1 安装环境准备
2.1.1 操作系统要求
dnstwist 主要基于 Python 开发,兼容主流 Linux 发行版。推荐使用以下操作系统:
Ubuntu 20.04 LTS / 22.04 LTS(社区支持最完善,依赖安装便捷)
CentOS Stream 8 / 9(适用于企业级服务器环境)
Debian 11 / 12
macOS(仅限开发测试,不建议生产部署)
⚠️ 注意:Windows 系统虽可通过 WSL2(Windows Subsystem for Linux)运行,但因图形库(如 PyQt5)兼容性问题,Web 界面可能无法正常启动,故不推荐作为主力部署平台。
建议服务器配置:
CPU:2 核以上
内存:4 GB RAM(若启用网页截图功能,建议 8 GB)
存储:至少 20 GB 可用空间(用于缓存截图、WHOIS 数据等)
网络:具备公网访问权限(用于 DNS 查询、WHOIS 服务、网页抓取)
2.1.2 Python 版本需求
dnstwist 要求 Python 3.7 或更高版本。建议使用 Python 3.9–3.11,以获得最佳兼容性与性能。
验证当前 Python 版本:
python3 --version
若系统未安装 Python 3.9+,可按以下方式安装(以 Ubuntu 22.04 为例):
sudo apt update
sudo apt install python3.10 python3.10-venv python3.10-dev -y
💡 强烈建议使用虚拟环境(virtual environment)隔离依赖,避免与系统 Python 包冲突。
创建虚拟环境示例:
python3.10 -m venv dnstwist-env
source dnstwist-env/bin/activate
激活后,命令行提示符前将出现 (dnstwist-env),表示已进入隔离环境。
2.1.3 必要的系统依赖
除 Python 外,dnstwist 还依赖若干系统级库,主要用于图像处理、Web 渲染等:
| 功能模块 | 所需系统包 | 安装命令(Ubuntu/Debian) |
|---|---|---|
| 图像处理(Pillow) | libjpeg-dev, zlib1g-dev | sudo apt install libjpeg-dev zlib1g-dev -y |
| WHOIS 查询 | whois | sudo apt install whois -y |
| Web 界面(PyQt5) | libxcb-xinerama0 | sudo apt install libxcb-xinerama0 -y |
| 浏览器自动化(可选) | chromium-browser, xvfb | sudo apt install chromium-browser xvfb -y |
若仅使用命令行模式(无 GUI),可跳过 PyQt5 相关依赖。
2.2 获取 dnstwist-master 源码
2.2.1 GitHub 仓库地址
dnstwist 官方开源仓库托管于 GitHub,地址为:
👉 https://github.com/elceef/dnstwist
截至 2025 年,最新稳定版本为 v2.10+,支持 Python 3.7+ 与现代浏览器自动化框架。
2.2.2 下载方法
有三种常用方式获取源码:
方法一:使用 git 克隆(推荐)
git clone https://github.com/elceef/dnstwist.git
cd dnstwist
方法二:下载 ZIP 压缩包
访问 GitHub 仓库页面;
点击绿色 “Code” 按钮 → “Download ZIP”;
解压至本地目录,例如:
unzip dnstwist-master.zip
cd dnstwist-master
方法三:使用 wget + tar(适用于无图形界面服务器)
wget https://github.com/elceef/dnstwist/archive/refs/heads/master.zip
unzip master.zip
mv dnstwist-master dnstwist
cd dnstwist
✅ 建议保留 .git 目录,便于后续通过 git pull 更新至最新版本。
2.2.3 源码目录结构说明(简要)
进入 dnstwist 目录后,主要文件与子目录如下:
dnstwist/
├── dnstwist.py # 主程序入口(命令行)
├── web.py # Web 界面启动脚本
├── requirements.txt # Python 依赖清单
├── requirements-gui.txt # GUI 额外依赖
├── Dockerfile # Docker 部署支持
├── docs/ # 文档(含示例)
├── screenshots/ # 默认截图存储目录
├── templates/ # Web 界面 HTML 模板
└── ...
在后续部署中,我们将重点使用 dnstwist.py 和 web.py。
三、dnstwist 源码部署
完成准备工作后,即可进入 dnstwist 的正式部署阶段。本节将分步骤指导用户如何在 Linux 系统中完成从依赖安装到服务启动的全过程,并提供生产环境下的优化建议。
3.1 解压与配置
3.1.1 源码目录结构说明(补充)
在进入部署前,有必要对 dnstwist 的核心目录结构做更深入的理解:
dnstwist/
├── dnstwist.py # 命令行主程序
├── web.py # Web 界面入口(基于 Flask + PyQt5)
├── requirements.txt # 基础 Python 依赖(命令行所需)
├── requirements-gui.txt # GUI/Web 额外依赖(含 PyQt5、selenium 等)
├── Dockerfile # 容器化部署支持
├── config/ # 配置文件目录(部分版本包含)
│ └── settings.json (示例) # 可自定义 WHOIS 超时、截图分辨率等
├── screenshots/ # 默认存储生成的网页截图
├── static/ # Web 界面静态资源(CSS/JS)
├── templates/ # Jinja2 模板文件
└── utils/ # 工具模块(如 IDN 处理、相似度计算)
💡 注意:官方仓库默认不包含 config/settings.json,但用户可自行创建以覆盖默认行为(见 3.1.2 节)。
3.1.2 配置文件修改要点
虽然 dnstwist 默认无需配置即可运行,但在攻防演练或生产监控场景中,建议通过以下方式优化行为:
自定义超时参数:避免因网络延迟导致任务卡死
可在启动命令中通过参数指定,例如:
python3 dnstwist.py --whois-timeout 10 --dns-timeout 5 example.com
启用/禁用特定检测模块:
若仅需生成域名列表而不进行网页比对,可关闭耗时功能:
python3 dnstwist.py --format csv --no-screenshot --no-whois bankofchina.com
设置代理(应对 GFW 限制):
在中国大陆,部分 WHOIS 服务器(如 whois.verisign-grs.com)或目标网站可能被干扰。若需访问境外资源,建议配置 HTTP/HTTPS 代理:
export http_proxy=http://your-proxy:port
export https_proxy=http://your-proxy:port
或在代码中临时设置(不推荐长期使用):
import os
os.environ['http_proxy'] = 'http://127.0.0.1:7890'
os.environ['https_proxy'] = 'http://127.0.0.1:7890'
日志输出控制:
默认输出至终端,可通过重定向保存:
python3 dnstwist.py icbc.com.cn > results.log 2>&1
3.2 依赖项安装
3.2.1 使用 pip 安装必要库
进入已激活的虚拟环境后,执行以下命令安装基础依赖:
# 安装命令行所需依赖
pip install -r requirements.txt
若计划使用 Web 界面或自动截图功能,还需安装 GUI 相关依赖:
# 安装 Web 界面与浏览器自动化依赖
pip install -r requirements-gui.txt
⚠️ 国内用户注意:由于 PyPI 官方源访问不稳定,建议使用国内镜像加速安装,例如阿里云、清华源:
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
pip install -r requirements-gui.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
3.2.2 关键依赖说明
| 依赖包 | 作用 | 版本要求 |
|---|---|---|
tldextract | 域名解析(分离主域、子域、后缀) | ≥3.0 |
requests | HTTP 请求(用于网页抓取) | ≥2.25 |
Pillow | 图像处理(截图比对) | ≥8.0 |
selenium | 浏览器自动化(截图、JS 渲染) | ≥4.0 |
PyQt5 | Web 界面图形框架 | ≥5.15 |
dnspython | DNS 查询 | ≥2.0 |
3.2.3 处理安装过程中可能出现的问题
问题1:PyQt5 安装失败(常见于 CentOS)
错误信息可能包含 No matching distribution found for PyQt5。
解决方案:
确保系统已安装 libxcb-xinerama0(见 2.1.3 节);
尝试使用 wheel 包安装:
pip install --only-binary=all PyQt5 -i https://mirrors.aliyun.com/pypi/simple/
问题2:selenium 找不到浏览器驱动
dnstwist 默认使用 Chrome/Chromium 进行截图,需确保 chromedriver 与浏览器版本匹配。
解决方案:
安装 Chromium:
sudo apt install chromium-browser -y
自动管理驱动(推荐):
pip install webdriver-manager
然后修改 dnstwist.py 中的 selenium 初始化部分(高级用户操作),或使用无头模式+系统自带 Chromium。
问题3:IDN 编码异常(UnicodeError)
在处理中文域名或国际化域名时可能出现编码错误。
解决方案:
确保系统 locale 支持 UTF-8:
locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
在 Python 脚本开头显式声明编码(通常已内置,无需修改)。
3.3 启动服务
3.3.1 命令行模式(推荐用于批量扫描与脚本集成)
基本语法:
python3 dnstwist.py [选项] <目标域名>
常用选项示例:
| 场景 | 命令 |
|---|---|
| 生成所有变体并导出 CSV | python3 dnstwist.py --format csv bankcomm.com > bankcomm_phish.csv |
| 仅检查已注册域名 | python3 dnstwist.py --registered-only ccb.com.cn |
| 启用网页截图(需 GUI 依赖) | python3 dnstwist.py --ss --threads 4 alipay.com |
| 限制生成数量(防爆内存) | python3 dnstwist.py --limit 500 wechat.com |
✅ 攻防演练建议:在演练初期,可先使用 --format list 快速生成候选域名列表,再交由内部威胁情报平台进行二次研判。
3.3.2 Web 界面模式(适用于交互式分析)
启动 Web 服务:
python3 web.py
默认监听地址:http://127.0.0.1:8000
若需远程访问,修改 web.py 中的 Flask 启动参数:
app.run(host='0.0.0.0', port=8000, debug=False)
🔒 安全警告:Web 界面默认无身份认证,切勿直接暴露于公网!建议通过 Nginx 反向代理 + Basic Auth 或部署在内网 VLAN 中。
Web 界面功能:
输入目标域名,实时生成变体列表;
显示每个变体的 WHOIS 状态、DNS 解析结果;
展示原始站与疑似钓鱼站的截图对比;
支持导出 JSON/CSV 报告。
3.3.3 设置为后台服务运行(生产环境必备)
为确保 dnstwist 在服务器重启后自动运行,可创建 systemd 服务(以 Ubuntu 为例):
创建服务文件:
sudo nano /etc/systemd/system/dnstwist-web.service
写入以下内容(路径请根据实际调整):
[Unit]
Description=dnstwist Web Interface
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/dnstwist
ExecStart=/opt/dnstwist/dnstwist-env/bin/python3 /opt/dnstwist/web.py
Restart=on-failure
Environment=PATH=/opt/dnstwist/dnstwist-env/bin
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable dnstwist-web
sudo systemctl start dnstwist-web
查看状态:
sudo systemctl status dnstwist-web
📌 提示:若仅需定时执行命令行扫描,可结合 cron 实现自动化任务,例如每日凌晨扫描重点品牌域名。
四、功能详解与应用实例
dnstwist 不仅是一个域名变体生成工具,更是一个集主动探测、风险评估、可视化分析于一体的综合型反钓鱼平台。在 CNNIC “网络钓鱼攻防演练”中,其价值不仅体现在“发现”,更在于“研判”与“联动”。本节将从功能原理到实战案例逐层展开。
4.1 主要功能模块解析
4.1.1 域名生成算法(Typosquatting Engine)
dnstwist 内置十余种变体生成策略,覆盖绝大多数钓鱼者常用手法。其核心算法位于 fuzz.py 模块,主要包括以下类别:
| 变体类型 | 说明 | 示例(以 icbc.com.cn 为例) |
|---|---|---|
| 替换(Bitsquatting) | 单比特翻转导致字符变化 | icdc.com.cn, icbc.c0m.cn |
| 插入(Insertion) | 在任意位置插入常见字符 | iicbc.com.cn, icbca.com.cn |
| 删除(Omission) | 删除单个字符 | cbc.com.cn, icb.com.cn |
| 交换(Transposition) | 相邻字符互换 | cibc.com.cn, iccb.com.cn |
| 双写(Repetition) | 重复某个字符 | iicbc.com.cn, icbcc.com.cn |
| 同形异义(Homograph) | 使用视觉相似的 Unicode 字符 | іcbc.com.cn(西里尔字母 і) |
| 后缀/前缀添加 | 添加常见词如 www, mail, secure | secure-icbc.com.cn, mailicbc.com.cn |
| TLD 替换 | 更换顶级域 | icbc.net.cn, icbc.org |
| 子域混淆 | 将主域移至子域 | com.cn.icbc.fake-site.com |
✅ 攻防演练重点:红队常利用“同形异义 + TLD 替换”组合构造高仿真域名(如 аliраy.com),蓝队需特别关注此类变体。
dnstwist 默认启用全部策略,但可通过 --fuzzers 参数指定特定类型,例如:
python3 dnstwist.py --fuzzers homograph,insertion alipay.com
4.1.2 调查与监控模块
生成变体只是第一步,真正的价值在于风险判定。dnstwist 通过多维度数据交叉验证,评估每个变体的威胁等级:
WHOIS 查询
判断域名是否已注册;
获取注册人、注册商、创建时间等信息;
若为近期注册(<7天)且隐私保护开启,风险较高。
DNS 解析
检查 A/AAAA 记录是否存在;
若解析到云服务商 IP(如 AWS、阿里云弹性 IP),需警惕。
网页内容比对(关键功能)
dnstwist 使用 Selenium 启动无头浏览器访问目标站点,并执行以下比对:
Favicon 相似度:提取 favicon 并计算哈希值(Perceptual Hash),与原站比对;
HTML 结构相似度:基于 DOM 树的编辑距离算法;
文本关键词匹配:检测是否包含“登录”“验证码”“银行”等敏感词;
SSL 证书信息:检查证书是否由可信 CA 签发,是否包含原品牌名称。
黑名单交叉验证(可选)
若配置 VirusTotal API 密钥,可自动查询该域名是否已被标记为恶意。
💡 提示:在演练环境中,建议关闭外部 API 调用(如 VirusTotal),以聚焦本地分析能力。
4.2 实战案例分析
4.2.1 案例一:识别仿冒“中国工商银行”钓鱼网站
背景:
在某次攻防演练中,红队注册了 icbc0.com.cn 并部署高仿登录页。
蓝队响应流程:
主动扫描:
使用 dnstwist 对 icbc.com.cn 进行全量变体生成:
python3 dnstwist.py --ss --threads 8 --format json icbc.com.cn > icbc_scan.json
结果筛选:
分析输出 JSON,发现 icbc0.com.cn:
已注册(WHOIS 显示注册于 2 天前);
DNS 解析成功;
Favicon 与原站相似度达 92%;
HTML 包含“用户名”“密码”“安全控件”等关键词。
人工复核:
通过截图确认页面布局、LOGO、表单字段与官网高度一致。
上报处置:
将该域名提交至 CNNIC 反钓鱼工作组共享平台,并通知注册局(CNNIC)启动快速处置流程。
成效:
该域名在演练开始后 3 小时内被阻断,未造成模拟用户信息泄露。
4.2.2 案例二:大规模品牌域名监控(适用于金融行业)
需求:
某大型银行需对其旗下 50+ 品牌域名(如 ccb.com.cn, ccblife.com, ccbmall.cn 等)进行每日自动监控。
解决方案:
编写 Shell 脚本批量调用 dnstwist:
#!/bin/bash
DOMAINS=("ccb.com.cn" "ccblife.com" "ccbmall.cn")
DATE=$(date +%Y%m%d)
for domain in "${DOMAINS[@]}"; do
python3 dnstwist.py --registered-only --format csv "$domain" > "/data/phish/$domain-$DATE.csv"
done
结果入库:
将 CSV 导入内部威胁情报平台(如 MISP 或自研系统),设置告警规则:
新增已注册变体;
Favicon 相似度 > 85%;
SSL 证书无效或自签名。
自动化响应:
触发工单系统,通知安全团队人工研判,并同步至防火墙 DNS 黑名单。
📊 演练加分项:在 CNNIC 演练评分中,“自动化监测覆盖率”和“平均响应时间”是关键指标,此类方案可显著提升得分。
4.3 整合进现有安全体系
4.3.1 与其他安全工具的联动
dnstwist 并非孤立工具,应作为 SOC(安全运营中心)链条中的一环:
| 上游系统 | 下游系统 | 联动方式 |
|---|---|---|
| 威胁情报平台 | dnstwist | 定期推送重点品牌域名列表 |
| SIEM(如 Splunk、ELK) | dnstwist | 接收钓鱼域名告警日志 |
| 防火墙/DNS 过滤设备 | dnstwist | 自动下发黑名单(通过 API 或 CSV 导入) |
| EDR 终端防护 | dnstwist | 将高危域名加入 URL 过滤策略 |
示例:与 Suricata IDS 联动
将 dnstwist 发现的钓鱼域名转换为 Suricata HTTP Host 匹配规则:
alert http any any -> any any (msg:"Phishing Domain - icbc0.com.cn";
http_host; content:"icbc0.com.cn"; nocase; sid:1000001; rev:1;)
4.3.2 自动化响应机制设计
在攻防演练中,手动操作难以满足时效性要求。建议构建如下自动化流水线:
[品牌域名清单]
↓
[定时任务:dnstwist 扫描]
↓
[结果解析:提取高风险域名]
↓
[调用内部 API 上报至威胁平台]
↓
[触发剧本(Playbook):自动封禁 + 邮件通知]
↓
[生成演练报告(含发现时间、处置时间、截图证据)]
关键技术点:
使用 jq 解析 JSON 输出;
通过企业微信/钉钉机器人发送告警;
利用 Ansible 或 SaltStack 下发防火墙策略。
🔐 合规提示:根据《网络安全法》及《关键信息基础设施安全保护条例》,金融、能源、通信等行业单位有义务建立主动防御机制,此类自动化方案符合监管要求。
五、参与“网络钓鱼攻防演练”
5.1 演练背景与规则
CNNIC 公共互联网反网络钓鱼工作组组织的“网络钓鱼攻防演练”是一项年度国家级网络安全实战活动,旨在检验关键信息基础设施运营单位对新型钓鱼攻击的防御能力。演练通常在每年第三季度开展,周期为 7–14 天,采用“红蓝对抗+裁判评估”模式。
核心规则包括:
红队(攻击方):由授权安全团队模拟高级持续性钓鱼攻击者,使用合法工具(如 dnstwist、PhishKit 等)生成并部署钓鱼域名,目标是绕过蓝队监测体系,诱导模拟用户提交凭证。
蓝队(防守方):参演单位需在演练期间实时监控其品牌资产,发现、分析、上报并阻断钓鱼域名。
裁判组:由 CNNIC、CNCERT、高校专家组成,依据《攻防演练评分细则》从以下维度打分:
发现率:成功识别红队投放的钓鱼域名比例;
响应时效:从域名上线到完成阻断的平均时间(要求 ≤4 小时);
研判准确性:误报率 ≤5%;
自动化程度:是否实现“监测-分析-处置”闭环;
报告质量:包含技术细节、截图证据、处置记录。
⚠️ 特别说明:所有操作必须在授权范围内进行,严禁对非演练目标发起扫描或攻击。
5.2 如何使用 dnstwist 提升演练效果
5.2.1 演练前:资产梳理与基线建立
确定重点保护域名清单
包括主站、子站、移动 App 关联域名、第三方合作平台等。例如某银行应包含:
bankofchina.com
m.boc.cn
ebank.boc.cn
bocpay.com
预生成高风险变体库
使用 dnstwist 对每个域名执行一次全量扫描,保存结果作为“基线”:
python3 dnstwist.py --registered-only --format json boc.com > baseline/boc.json
此基线可用于后续比对,快速识别“新增注册”变体。
配置监控策略
在内部威胁情报平台中设置告警规则,例如:
新出现的 .com.cn 域名包含 “boc” 或 “bankofchina”;
Favicon 相似度 >80% 且 SSL 证书非官方签发。
5.2.2 演练中:实时监测与快速响应
高频轮询扫描
建议每 2 小时执行一次增量扫描:
# 仅检查新注册域名(提升效率)
python3 dnstwist.py --registered-only --format csv bankofchina.com >> /logs/phish_$(date +%Y%m%d).csv
结合 DNS 流量分析
若单位部署了 DNS 日志系统(如 PassiveDNS),可将 dnstwist 生成的变体列表导入,实时匹配异常查询行为。例如:
内网主机频繁请求 b0c.com;
单次会话中访问多个相似域名。
人工复核与上报
对疑似钓鱼站点,需完成以下动作:
截图保存(含 URL 栏);
导出 HTML 源码;
记录 WHOIS 与 DNS 信息;
通过 CNNIC 指定渠道(如专用邮件或平台)提交《钓鱼域名处置申请表》。
✅ 加分技巧:在报告中附上 dnstwist 生成的相似度评分矩阵,展示技术研判过程,可显著提升裁判印象分。
5.2.3 演练后:复盘与能力提升
差距分析
对照裁判公布的“红队投放清单”,统计漏报域名,分析原因:
是否未覆盖某类变体(如同形异义)?
扫描频率不足?
判定阈值过高?
优化策略
调整 fuzzers 策略组合;
引入机器学习模型辅助判定(如基于页面文本的分类器);
增加对新 gTLD(如 .xyz, .top)的监控权重。
知识沉淀
将本次演练中发现的典型钓鱼手法整理成内部培训材料,提升全员安全意识。
六、维护与更新
dnstwist 作为开源项目,需持续维护以应对不断演化的钓鱼技术。
6.1 定期检查与更新
源码更新
官方仓库不定期修复漏洞、新增 fuzzers 策略。建议每月执行:
cd /opt/dnstwist
git pull origin master
pip install -r requirements.txt --upgrade
依赖库升级
使用 pip list --outdated 检查过期包,特别关注:
selenium(浏览器驱动兼容性);
tldextract(新顶级域支持);
Pillow(图像处理性能)。
浏览器内核同步
若使用 Chromium 截图,需确保其版本与 chromedriver 一致。可通过脚本自动更新:
sudo apt update && sudo apt upgrade chromium-browser -y
6.2 社区贡献与反馈
提交 Issue
遇到 Bug 或功能缺失,可在 GitHub 提交详细描述,包括:
操作系统与 Python 版本;
完整命令与错误日志;
目标域名(若可公开)。
贡献代码
若开发了新 fuzzers 策略(如针对中文拼音混淆:zhongguoyinhang.com → zhongguoyinhan.com),可发起 Pull Request,推动社区发展。
本地化适配
针对中国场景,可扩展以下功能:
支持 CNNIC WHOIS 接口(whois.cnnic.cn);
集成国内威胁情报源(如微步在线、奇安信天眼);
增加对 .中国、.公司 等中文域名的支持。
6.3 错误排查与解决方案
| 常见问题 | 可能原因 | 解决方案 |
|---|---|---|
No module named 'PyQt5' | GUI 依赖未安装 | 执行 pip install -r requirements-gui.txt |
| 截图为空白 | 浏览器未加载完成 | 在 web.py 中增加 time.sleep(3) 或使用 WebDriverWait |
| WHOIS 查询超时 | GFW 干扰或服务器限速 | 配置代理,或改用本地 WHOIS 缓存 |
| 内存溢出(OOM) | 域名变体过多(>10万) | 使用 --limit 10000 限制数量,或分批次处理 |
| 同形异义检测失效 | 系统缺少 Unicode 字体 | 安装 fonts-noto-color-emoji 等字体包 |
💡 生产建议:在高负载场景下,建议将 dnstwist 部署为微服务,通过消息队列(如 RabbitMQ)接收扫描任务,避免单点阻塞。
七、总结
7.1 对比其他类似工具的优势
| 工具 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| dnstwist | 开源免费、算法全面、支持 GUI/Web、活跃社区 | 依赖复杂、大规模扫描资源消耗大 | 主动防御、攻防演练、品牌保护 |
| PhishTank | 全球共享数据库、API 友好 | 仅被动收录、滞后性强 | 辅助验证 |
| URLScan.io | 可视化强、集成 VirusTotal | 需联网、免费版有配额 | 快速查询单个 URL |
| 自研系统 | 完全可控、深度集成 | 开发成本高、维护复杂 | 大型企业 SOC |
dnstwist 的核心优势在于主动发现能力——它不依赖已有黑名单,而是从攻击者视角“预测”可能被滥用的域名,这正是 CNNIC 攻防演练所倡导的“以攻促防”理念的最佳体现。
7.2 未来发展趋势展望
AI 增强判定
未来版本或将引入深度学习模型,通过分析页面布局、交互逻辑、JavaScript 行为等,提升钓鱼站点识别准确率。
云原生架构
容器化(Docker/K8s)部署将成为主流,支持弹性扩缩容,适应大规模域名监控需求。
合规集成
与《网络安全等级保护 2.0》《数据安全法》要求对接,自动生成合规审计日志,满足监管报送需求。
跨语言支持
扩展对阿拉伯语、俄语、日语等非拉丁字符的同形异义检测,构建全球化反钓鱼能力。
结语
在数字经济高速发展的今天,网络钓鱼已从“广撒网”走向“精准打击”。作为防守方,我们必须从被动响应转向主动狩猎。dnstwist 不仅是一款工具,更是一种防御思维的载体。通过将其深度融入 CNNIC “网络钓鱼攻防演练”体系,各单位不仅能提升实战能力,更能为构建清朗网络空间贡献技术力量。
作者:芦笛 中国互联网络信息中心(公共互联网反网络钓鱼工作组)
2672

被折叠的 条评论
为什么被折叠?



