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ҙҙ.comxn--16-8tc.com

0x01 漏洞原理

Chromium项目对此类漏洞有专门关注,设置了idn-spoof安全标签。其防护机制包括:

  1. 维护一个知名域名列表(domainlist)
  2. 当检测到域名与列表中的域名相似时,强制显示Punycode形式

漏洞存在的条件是:

  1. 找到能通过Spoof Check的Unicode字符组合
  2. 在浏览器地址栏中显示的视觉形态与目标域名高度相似

0x02 自动化挖掘方法

总体思路

将域名同形问题转化为图像相似度问题,通过以下步骤实现自动化:

  1. 字符图像生成

    • 遍历Unicode字符集
    • 使用浏览器地址栏渲染字体生成字符图像
  2. 图像相似度计算
    采用感知哈希算法(pHash)流程:

    • 缩小图像至统一尺寸(去除细节,保留结构)
    • 转换为64级灰度(减少颜色影响)
    • 计算像素灰度平均值
    • 比较各像素灰度与平均值,生成二进制序列
    • 组合序列生成图像指纹(Hash值)
    • 使用汉明距离计算图像相似度
  3. 测试验证

    • 对相似字符构造测试域名
    • 使用抽取的Chromium代码进行Spoof Check测试
    • 对特殊字符(/, ?, ., #等)构造完整URL测试
  4. 人工确认

    • 验证是否确实存在欺骗可能
    • 确认后提交漏洞报告

技术实现要点

  1. Unicode字符选择

    • 重点关注与ASCII字符(特别是字母和数字)相似的字符
    • 考虑不同语系的相似字符(西里尔字母、希腊字母等)
  2. 图像处理优化

    • 使用相同的字体和渲染引擎确保一致性
    • 调整图像大小和灰度级别平衡计算效率与准确性
  3. 自动化测试框架

    • 构建测试用例生成器
    • 集成Chromium的Spoof Check算法
    • 实现批量测试和结果记录

0x03 实际挖掘成果

通过该方法成功发现的漏洞案例:

  • crbug.com/904325
  • crbug.com/904627

0x04 防御建议

  1. 浏览器改进

    • 增强Spoof Check算法
    • 扩大保护域名列表
    • 对高风险域名强制显示Punycode
  2. 网站防护

    • 注册常见混淆变体域名
    • 实施严格的证书颁发策略
  3. 用户教育

    • 提高对IDN钓鱼的警惕性
    • 检查地址栏完整域名

0x05 参考资料

  1. Gontmakher A. The Homograph Attack[J]. Communications of the Acm, 2002, 45(2):128.
  2. Chromium IDN相关安全实现
  3. Punycode编码标准(RFC 3492)
  4. 图像相似度算法研究资料

附录:关键工具和技术

  1. Unicode字符数据库:用于获取字符属性和关系
  2. 图像处理库:如OpenCV,用于实现pHash算法
  3. 浏览器渲染引擎:确保字符显示效果与真实环境一致
  4. 自动化测试框架:如Selenium,用于批量测试
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,用于批量测试