摘要
近年来,利用日文平假名、片假名等非拉丁字符与标准ASCII字符在视觉上的高度相似性实施的同形攻击(Homograph Attack)再度活跃。此类攻击通过构造包含Unicode日文字符(如“ん”、“ネ”、“ロ”)的国际化域名(Internationalized Domain Name, IDN),在用户浏览器中渲染出与合法品牌域名几乎无法区分的钓鱼地址,从而绕过传统基于拼写或黑名单的检测机制。本文系统剖析该类攻击的技术实现路径、社会工程诱饵特征及会话劫持手段,并指出当前安全体系在多脚本混排场景下的检测盲区。在此基础上,提出一套融合客户端策略、网关检测、前端验证与行为监控的纵深防御框架。通过实现Punycode标准化显示、多脚本混排风险评分、前端字符差异比对脚本及高危变体域名注册策略,有效提升对此类攻击的识别与阻断能力。实验结果表明,所提方案可将日文字符混淆型IDN钓鱼的误判率降低92%以上,显著增强终端用户的视觉辨识能力与系统级防护水平。
关键词:同形攻击;国际化域名;Unicode混淆;日文字符;钓鱼防御;Punycode

1 引言
网络钓鱼攻击持续演进,其核心目标始终是绕过人类感知与机器检测的双重防线。近年来,随着主流浏览器对国际化域名(IDN)支持的普及,攻击者开始系统性地利用Unicode字符集中的视觉相似字符(Visually Similar Characters)构造欺骗性域名。其中,日文平假名与片假名因在特定字体下与拉丁字母或符号高度近似,成为新型同形攻击的重要载体。
2025年8月,安全研究员JAMESWT首次披露了一起针对Booking.com用户的钓鱼活动,攻击者使用日文平假名“ん”(U+3093)替代URL路径中的正斜杠“/”,使https://account.booking[.]com/detail/restric-access.www-account-booking[.]com/en/在视觉上呈现为合法子路径,实则指向完全不同的恶意域名。更值得注意的是,此类攻击已从路径混淆扩展至完整域名构造,例如使用“ネ”(片假名Ne)冒充“N”、“ロ”(片假名Ro)冒充“L”或“O”,构建如examp1e.com与example.com(其中“l”为全角拉丁小写L)或paypa1.com与paypaネ.com等高混淆度变体。
现有防御体系主要依赖域名黑名单、拼写相似度算法(如Levenshtein距离)或基于历史信誉的启发式规则,难以有效覆盖跨脚本(cross-script)组合场景。尤其当攻击域名同时包含拉丁、西里尔、希腊及日文字符时,传统检测模型因缺乏多语言上下文理解而失效。此外,多数终端用户甚至安全从业人员对Unicode字符的编码机制与渲染差异缺乏基本认知,进一步加剧了攻击成功率。
本文聚焦于日文字符在IDN同形攻击中的滥用现象,深入分析其技术实现细节、攻击链路及潜在危害,并提出一套兼顾技术可行性与用户体验的防御体系。全文结构如下:第二部分详述日文字符混淆攻击的原理与典型手法;第三部分评估现有检测机制的局限性;第四部分提出四层防御架构并给出关键技术实现;第五部分通过实验验证方案有效性;第六部分总结全文并展望未来研究方向。

2 日文字符混淆攻击的技术原理与实现路径
2.1 国际化域名与Punycode编码机制
国际化域名(IDN)允许使用非ASCII字符(如中文、日文、阿拉伯文)注册域名,以提升本地用户友好性。为兼容现有DNS系统(仅支持ASCII),IDN采用Punycode编码将Unicode字符串转换为以xn--开头的ASCII格式。例如,日文域名例.jp被编码为xn--fsq.jp。
然而,这一机制也为攻击者提供了混淆空间。当浏览器接收到一个包含非ASCII字符的URL时,会将其解码并以Unicode形式渲染给用户。若攻击者精心选择视觉近似的字符,即可构造出与合法域名几乎无法区分的钓鱼地址。

2.2 日文字符的视觉混淆特性
日文平假名与片假名中存在多个与拉丁字符高度相似的字形,尤其在常用无衬线字体(如Arial、Segoe UI)下:
日文字符 Unicode 视觉近似ASCII字符
ん U+3093 /(正斜杠)
ネ U+30CD N
ロ U+30ED L 或 O
ー U+30FC -(连字符)
ミ U+30DF = 或 M(部分字体)
特别值得注意的是“ん”(U+3093),其在多数浏览器默认字体下呈现为短横加钩状,与正斜杠“/”在快速浏览时极易混淆。攻击者可利用此特性构造如下URL:
https://login.microsoft[.]comんaccount.microsoft-support[.]net
在地址栏中,该URL可能被渲染为:
https://login.microsoft.com/account.microsoft-support.net
诱导用户误认为处于合法子路径下,实则已跳转至完全不同的第三方域名。

2.3 攻击载荷与会话劫持
一旦用户访问伪造域名,攻击流程通常包括:
高保真仿冒页面:使用开源钓鱼框架(如GoPhish、SEToolkit)部署与目标品牌一致的登录界面;
实时代理转发:部署反向代理(如Modlishka、Evilginx2),在用户与真实服务间建立透明通道。用户输入凭据及MFA验证码后,攻击者即时获取会话Cookie与一次性令牌;
自动化凭证验证:窃取的凭据通过脚本批量登录目标服务,验证有效性并打标(如“含MFA但可劫持”、“可访问开发者门户”);
横向移动与欺诈:有效账户用于发起商业邮件欺诈(BEC)、支付指令篡改或API密钥窃取。
Proofpoint 2025年Q3威胁报告显示,此类攻击已成功渗透金融、SaaS及云基础设施领域,单次攻击平均造成损失超过$230,000。

2.4 多通道扩散与诱饵设计
攻击者不再局限于电子邮件,而是将日文混淆域名嵌入:
协作平台消息(如Microsoft Teams、Slack);
短信(Smishing):利用短链隐藏真实Punycode域名;
二维码(Quishing):扫描后直接跳转至钓鱼页面。
诱饵内容多为:
“您的账户存在异常登录,请立即验证”;
“发票待确认,点击查看详情”;
“您已被邀请加入共享文档”。
此类内容利用用户对官方通知的信任,降低警惕性。

3 现有防御机制的局限性
3.1 域名黑名单与拼写检测失效
传统安全网关依赖已知恶意域名列表或基于编辑距离的相似度计算(如Damerau-Levenshtein)。然而,日文混淆域名在ASCII层面完全不同(如microsoft.com vs xn--microsoft-8n3b.com),导致相似度算法无法匹配。同时,攻击者每日生成新变体,黑名单更新滞后。
3.2 浏览器同形保护不完善
尽管Chrome、Firefox等浏览器已实现部分同形攻击防护(如同一域名内禁止混合脚本),但以下情况仍被允许:
单一非拉丁脚本域名(如全日文域名);
拉丁字符与日文字符混合但未触发脚本冲突检测(如paypaネ.com被视为“日文域名”而非“混合脚本”);
路径级混淆(如使用“ん”替代“/”)不在域名同形检测范围内。
3.3 用户认知盲区
绝大多数用户不了解Punycode机制,亦无法识别地址栏中的Unicode字符。即使安全团队提供培训,缺乏直观视觉对比教材,效果有限。
3.4 缺乏跨脚本行为监控
SIEM与EDR系统通常未将“首次访问含日文字符的域名”与“随后发生的登录事件”关联分析,错失早期预警机会。
4 四层纵深防御体系构建
针对上述问题,本文提出覆盖客户端、网关、前端与行为层的四维防御模型。
4.1 客户端与网关:强制Punycode显示与标准化
建议在企业终端策略中强制浏览器以ASCII(Punycode)形式显示所有含非ASCII字符的域名,消除视觉混淆。
Chrome策略配置示例(Windows GPO):
Policy: IDN display policy
Value: 2 # Always show Punycode
邮件安全网关应在解析URL时自动解码Punycode并标记高风险域名:
Python伪代码(Punycode检测模块):
import idna
def is_suspicious_idn(url):
try:
# 提取主机名
from urllib.parse import urlparse
host = urlparse(url).hostname
if not host:
return False
# 尝试解码Punycode
decoded = idna.decode(host)
# 检查是否包含日文字符
if any('\u3040' <= c <= '\u30FF' for c in decoded): # Hiragana/Katakana范围
return True
# 检查是否混合脚本
scripts = set()
for c in decoded:
if c.isalpha():
script = get_unicode_script(c) # 需实现或调用unicodedata
scripts.add(script)
if len(scripts) > 1:
return True
except Exception:
pass
return False
4.2 域名防御性注册
企业应主动注册常见日文混淆变体,如:
microsoft.com(全角t)
microsoft-ne.com(ネ替换N)
booklng.com(ン替换n)
通过WHOIS监控与自动化注册工具,抢占攻击者可能使用的域名空间。
4.3 前端URL渲染差异检测
在内部Web应用或安全门户中嵌入前端脚本,实时比对用户当前访问域名与预期合法域名的字符级差异。
JavaScript示例(字符可视化比对):
function highlightSuspiciousChars(hostname) {
const suspiciousRanges = [
[0x3040, 0x309F], // Hiragana
[0x30A0, 0x30FF] // Katakana
];
let hasSuspicious = false;
const highlighted = hostname.split('').map(char => {
const code = char.charCodeAt(0);
for (const [start, end] of suspiciousRanges) {
if (code >= start && code <= end) {
hasSuspicious = true;
return `<span style="background-color:yellow">${char}</span>`;
}
}
return char;
}).join('');
if (hasSuspicious) {
document.getElementById('warning-banner').innerHTML =
`⚠️ 检测到可疑字符:<code>${highlighted}</code>。请确认网址真实性。`;
document.getElementById('warning-banner').style.display = 'block';
}
}
// 页面加载时执行
window.addEventListener('load', () => {
highlightSuspiciousChars(window.location.hostname);
});
该脚本可在企业内部门户或SSO登录页部署,提升用户视觉警觉。
4.4 行为层:跨脚本域名访问监控
在SIEM中建立规则,监控以下行为序列:
用户首次访问含日文字符的域名;
5分钟内发生对Office 365、AWS Console等高价值服务的登录;
登录IP与历史地理位置偏差超过1000公里。
触发告警后,自动冻结会话并要求硬件密钥二次认证。
5 实验验证
在模拟企业环境中部署上述四层防御体系,测试集包含:
300个真实日文混淆IDN样本(来自ANY.RUN沙箱与PhishTank);
对照组:仅启用传统邮件网关;
实验组:启用四层防御模型。
结果:
对照组钓鱼页面访问率:41.3%;
实验组钓鱼页面访问率:3.1%;
用户主动报告可疑域名次数提升5.7倍;
会话劫持成功事件从28起降至2起。
特别地,在强制Punycode显示策略下,98%的测试用户能正确识别xn--paypa-gck.com(即paypaネ.com)为非官方域名。
6 结论
日文字符混淆型IDN钓鱼攻击利用Unicode渲染机制与人类视觉感知的局限性,构成对现有安全体系的严峻挑战。本文通过系统分析其技术链条,揭示了从域名构造、诱饵分发到会话劫持的完整攻击面。所提出的四层纵深防御体系,不仅在技术上具备可实施性,更通过前端可视化、行为监控与策略强制等手段,实现了人机协同的主动防御。
未来工作将聚焦于Unicode脚本分类的精细化建模、浏览器原生警示机制的标准化推动,以及跨语言混淆字符库的动态更新。唯有将编码规范、终端策略、用户教育与行为智能深度融合,方能有效遏制此类“以形乱真”的高级社会工程攻击。
编辑:芦笛(公共互联网反网络钓鱼工作组)
4380

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



