Homograph / Homoglyph Attacks in Phishing
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
概述
同形异义词(又称同形字)攻击利用了许多来自非拉丁脚本的Unicode代码点在视觉上与ASCII字符完全相同或极为相似的事实。通过用一个或多个外观相似的字符替换拉丁字符,攻击者可以制作:
- 看起来对人眼合法的显示名称、主题或消息正文,但可以绕过基于关键字的检测。
- 让受害者相信他们正在访问受信任网站的域名、子域名或URL路径。
因为每个字形在内部是通过其Unicode代码点来识别的,单个替换字符就足以击败简单的字符串比较(例如,"Παypal.com"
与"Paypal.com"
)。
典型钓鱼工作流程
- 制作消息内容 – 用来自另一种脚本(希腊文、斯拉夫文、亚美尼亚文、切罗基文等)中视觉上无法区分的字符替换被模仿品牌/关键字中的特定拉丁字母。
- 注册支持基础设施 – 可选地注册一个同形字域名并获得TLS证书(大多数CA不进行视觉相似性检查)。
- 发送电子邮件/SMS – 消息在以下一个或多个位置包含同形字:
- 发件人显示名称(例如,
Ηеlрdеѕk
) - 主题行(
Urgеnt Аctіon Rеquіrеd
) - 超链接文本或完全合格的域名
- 重定向链 – 受害者通过看似无害的网站或URL缩短器被转发,然后落在收集凭据/投放恶意软件的恶意主机上。
常被滥用的Unicode范围
脚本 | 范围 | 示例字形 | 看起来像 |
---|---|---|---|
希腊文 | U+0370-03FF | Η (U+0397) | 拉丁字母 H |
希腊文 | U+0370-03FF | ρ (U+03C1) | 拉丁字母 p |
斯拉夫文 | U+0400-04FF | а (U+0430) | 拉丁字母 a |
斯拉夫文 | U+0400-04FF | е (U+0435) | 拉丁字母 e |
亚美尼亚文 | U+0530-058F | օ (U+0585) | 拉丁字母 o |
切罗基文 | U+13A0-13FF | Ꭲ (U+13A2) | 拉丁字母 T |
提示:完整的Unicode图表可在 unicode.org 获取。
检测技术
1. 混合脚本检查
针对英语组织的钓鱼电子邮件应该很少混合来自多个脚本的字符。一个简单但有效的启发式方法是:
- 遍历被检查字符串的每个字符。
- 将代码点映射到其Unicode块。
- 如果存在多个脚本或在不应出现的地方(显示名称、域名、主题、URL等)出现非拉丁脚本,则发出警报。
Python概念验证:
import unicodedata as ud
from collections import defaultdict
SUSPECT_FIELDS = {
"display_name": "Ηоmоgraph Illusion", # example data
"subject": "Finаnꮯiаl Տtatеmеnt",
"url": "https://xn--messageconnecton-2kb.blob.core.windows.net" # punycode
}
for field, value in SUSPECT_FIELDS.items():
blocks = defaultdict(int)
for ch in value:
if ch.isascii():
blocks['Latin'] += 1
else:
name = ud.name(ch, 'UNKNOWN')
block = name.split(' ')[0] # e.g., 'CYRILLIC'
blocks[block] += 1
if len(blocks) > 1:
print(f"[!] Mixed scripts in {field}: {dict(blocks)} -> {value}")
2. Punycode 正规化 (域名)
国际化域名 (IDN) 使用 punycode 编码 (xn--
)。将每个主机名转换为 punycode 然后再转换回 Unicode 允许在字符串被正规化 后 进行白名单匹配或相似性检查(例如,Levenshtein 距离)。
import idna
hostname = "Ρаypal.com" # Greek Rho + Cyrillic a
puny = idna.encode(hostname).decode()
print(puny) # xn--yl8hpyal.com
3. 同形字典 / 算法
工具如 dnstwist (--homoglyph
) 或 urlcrazy 可以枚举视觉上相似的域名排列,对于主动下架 / 监控非常有用。
预防与缓解
- 强制执行严格的 DMARC/DKIM/SPF 策略 – 防止来自未授权域的欺骗。
- 在 Secure Email Gateways 和 SIEM/XSOAR 方案中实施上述检测逻辑。
- 标记或隔离显示名称域名 ≠ 发件人域名的消息。
- 教育用户:将可疑文本复制粘贴到 Unicode 检查器中,悬停链接,永远不要信任 URL 短链接。
现实世界示例
- 显示名称:
Сonfidеntiаl Ꭲiꮯkеt
(西里尔字母С
,е
,а
; 切罗基Ꭲ
; 拉丁小写大写ꮯ
)。 - 域名链:
bestseoservices.com
➜ 市政/templates
目录 ➜kig.skyvaulyt.ru
➜ 假冒的 Microsoft 登录在mlcorsftpsswddprotcct.approaches.it.com
受自定义 OTP CAPTCHA 保护。 - Spotify 冒充:
Sρօtifŭ
发件人,链接隐藏在redirects.ca
后面。
这些示例来源于 Unit 42 研究(2025 年 7 月),展示了同形字滥用如何与 URL 重定向和 CAPTCHA 规避结合,以绕过自动分析。
参考文献
- The Homograph Illusion: Not Everything Is As It Seems
- Unicode Character Database
- dnstwist – domain permutation engine
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。