IDN Spoof漏洞自动化挖掘
字数 1588 2025-08-27 12:33:43
IDN Spoof漏洞自动化挖掘技术详解
0x00 背景知识
国际化域名(IDN)
国际化域名(Internationalized Domain Name, IDN)是指部分或完全使用非ASCII字符(如中文、法语、阿拉伯语等)组成的互联网域名。这些域名使用Unicode编码,但在DNS系统中通过Punycode转换为ASCII字符串存储。
同形异义攻击(Homograph Attack)
利用IDN中某些非拉丁字符与拉丁字符视觉相似的特点,构造看似合法的域名进行钓鱼攻击。例如:
16ვ.com(U+10D5)16ဒဒ.com(U+1012)16ҙҙ.com(U+0499)
这些域名看起来与163.com相似,且可通过公开的HTTPS证书服务获取证书,增加欺骗性。
Punycode编码
Punycode是RFC 3492定义的编码系统,用于将Unicode域名转换为DNS兼容的ASCII字符串。例如:
16ҙҙ.com→xn--16-8tc.com
0x01 漏洞原理
Chromium项目对此类漏洞有专门关注,设置了idn-spoof安全标签。其防护机制包括:
- 维护一个知名域名列表(domainlist)
- 当检测到域名与列表中的域名相似时,强制显示Punycode形式
漏洞存在的条件是:
- 找到能通过Spoof Check的Unicode字符组合
- 在浏览器地址栏中显示的视觉形态与目标域名高度相似
0x02 自动化挖掘方法
总体思路
将域名同形问题转化为图像相似度问题,通过以下步骤实现自动化:
-
字符图像生成:
- 遍历Unicode字符集
- 使用浏览器地址栏渲染字体生成字符图像
-
图像相似度计算:
采用感知哈希算法(pHash)流程:- 缩小图像至统一尺寸(去除细节,保留结构)
- 转换为64级灰度(减少颜色影响)
- 计算像素灰度平均值
- 比较各像素灰度与平均值,生成二进制序列
- 组合序列生成图像指纹(Hash值)
- 使用汉明距离计算图像相似度
-
测试验证:
- 对相似字符构造测试域名
- 使用抽取的Chromium代码进行Spoof Check测试
- 对特殊字符(
/,?,.,#等)构造完整URL测试
-
人工确认:
- 验证是否确实存在欺骗可能
- 确认后提交漏洞报告
技术实现要点
-
Unicode字符选择:
- 重点关注与ASCII字符(特别是字母和数字)相似的字符
- 考虑不同语系的相似字符(西里尔字母、希腊字母等)
-
图像处理优化:
- 使用相同的字体和渲染引擎确保一致性
- 调整图像大小和灰度级别平衡计算效率与准确性
-
自动化测试框架:
- 构建测试用例生成器
- 集成Chromium的Spoof Check算法
- 实现批量测试和结果记录
0x03 实际挖掘成果
通过该方法成功发现的漏洞案例:
- crbug.com/904325
- crbug.com/904627
0x04 防御建议
-
浏览器改进:
- 增强Spoof Check算法
- 扩大保护域名列表
- 对高风险域名强制显示Punycode
-
网站防护:
- 注册常见混淆变体域名
- 实施严格的证书颁发策略
-
用户教育:
- 提高对IDN钓鱼的警惕性
- 检查地址栏完整域名
0x05 参考资料
- Gontmakher A. The Homograph Attack[J]. Communications of the Acm, 2002, 45(2):128.
- Chromium IDN相关安全实现
- Punycode编码标准(RFC 3492)
- 图像相似度算法研究资料
附录:关键工具和技术
- Unicode字符数据库:用于获取字符属性和关系
- 图像处理库:如OpenCV,用于实现pHash算法
- 浏览器渲染引擎:确保字符显示效果与真实环境一致
- 自动化测试框架:如Selenium,用于批量测试