课题研究 域名滥用治理 仿冒域名监测识别 · 第2页 / 共8页
01域名滥用治理 · 子课题深度研究

仿冒域名监测识别

相似度计算是仿冒域名监测的引擎。本页系统解析字符级(编辑距离/Jaro-Winkler)、键盘邻接、发音级、视觉混淆字符(含Unicode UTS #39与IDN/Punycode攻防)五类度量方法,给出变体生成工程化的手法清单、空间剪枝策略与融合排序模型,并讨论中文环境下的适配与算法局限。所有权重与阈值为标注"经验值"的起点参数,须以自有标注集校准。

编辑距离Jaro-Winkler键盘邻接Soundex/拼音UTS #39Punycodednstwist学习排序
研究定位算法基础 · 支撑第3-6页全部检测管道
目标受众算法工程师、域名安全分析师
关键产出手法清单、特征权重表、校准方法论

01 · 字符级相似度度量

1.1 Levenshtein编辑距离与Damerau变体

Levenshtein距离(V. Levenshtein, 1965)定义两个字符串之间的最小编辑次数(插入、删除、替换),是域名相似度计算的基线度量。设品牌域名为 s、候选域名为 t,归一化相似度可表示为 sim = 1 − ED(s,t) / max(|s|,|t|)。Damerau-Levenshtein距离(Damerau, 1964)额外允许"相邻字符交换"这一编辑操作,对键盘误触型变体(如"googel")更敏感,是域名场景中的首选变体。

工程要点:①长度归一——原始ED值受域名长度影响,必须归一化后才能跨品牌比较;②前缀加权——域名首段(Second-Level Domain)的品牌核心位置权重高于后缀,可对前2-4字符设置更高替换代价;③TLD剥离——比较前必须剥离顶级域(.com/.cn等),否则"brand.com vs brand.xyz"会产生系统性高分。

1.2 Jaro-Winkler:面向短字符串的改进

Jaro相似度(Jaro, 1989;Winkler, 1990改进)衡量两个字符串的字符匹配度与换位情况,对短字符串(域名典型长度6-15字符)表现优于编辑距离,且对前缀一致的字符串给予加成——恰好契合仿冒域名"保留品牌前缀、改动尾部"的常见模式。Winkler加成系数通常取0.1,前缀匹配窗口4字符。经验上,Jaro-Winkler ≥ 0.85 可作为高相似候选的初筛阈值(经验值,需按品牌长度分布校准)。

1.3 键盘邻接加权距离

用户拼写错误高度集中于键盘物理相邻键(QWERTY布局):n↔m↔b、c↔v、g↔h、.↔/等。将"相邻键替换"的编辑代价设为低于"任意替换"(如0.5 vs 1.0),可显著区分"手滑打错"与"随机字符"两类变体——前者是typosquatting的主要模拟对象。dnstwist等工具内置键盘邻接矩阵;多语言环境下应扩展考虑九宫格输入法与拼音输入法的错误模式。

算法时间复杂度优势局限
LevenshteinO(m·n)语义直观、实现成熟、被广泛引用不区分错误类型;对短串区分度一般
Damerau-LevenshteinO(m·n)覆盖转置错误(手滑高频)代价矩阵需按场景调权
Jaro-WinklerO(m·n) 实际更快短字符串表现好;前缀加成契合仿冒模式对字符位置敏感,尾部插入收益递减
键盘加权距离取决于基线算法贴合真实输入错误分布依赖布局假设(QWERTY),需本地化扩展

1.4 工程实现要点

算法落地时的四个工程要点:①空间优化——Levenshtein/Damerau的动态规划实现可将完整矩阵压缩为两行(O(min(m,n))空间),域名典型长度下毫秒级完成单次比较;②短串查表——长度≤5的品牌核心词候选空间小,可预生成全量变体字典做O(1)哈希查表,避免重复计算;③分桶阈值——阈值须按品牌长度分桶校准(短品牌收紧、长品牌放宽),并定期用新标注样本回归复核(见第5页校准方法);④算法库选型——成熟字符串相似度库(如Python的python-Levenshtein、jellyfish,Java的commons-text)均内置上述算法并通过长期社区验证,生产环境优先使用成熟实现而非自研,将研发资源留给领域特征(视觉归一化、键盘加权)层。

02 · 发音级相似度:Sound-Squatting

攻击者不仅利用"看错",还利用"听错":电话客服、语音助手、口头传播场景下,发音相似的域名可截获流量(学术社区称之为sound-squatting)。经典发音编码算法包括:Soundex(美国人口普查局,1918/1922年)保留首字母并按发音规则映射辅音;Metaphone(Philips, 1990)与Double Metaphone改进多语言发音覆盖,可处理英文中不规则发音。

中文场景的发音相似更为关键:拼音全拼/简拼(zhongguo→zg、zhg)、声调丢失(gongsi≠gōngsī)、儿化与方言变体都应纳入变体生成器。例如品牌"招商"的拼音zhāoshāng,其简拼zssh、全拼变体zhaoshang1、zhaoshang88等均属发音维度的常见仿冒扩展。

注意:发音算法在域名场景属补充度量而非主度量——Soundex类算法为英文设计,直接用于拼音效果有限。建议将拼音相似度作为排序特征之一(权重通常低于字符距离,经验值0.1-0.2),而非硬性过滤条件。

03 · 视觉级相似度:混淆字符

3.1 ASCII内的视觉混淆

纯ASCII范围内存在大量视觉等价/近似的字符组合,攻击者利用人眼的分辨极限实施欺骗:

混淆类型典型字符对机理说明
数字-字母0↔O、1↔l↔I、5↔S、8↔B、6↔G/b字形轮廓高度相似,低分辨率下不可区分
多字符-单字符rn↔m、cl↔d、vv↔w、ij字符序列的视觉融合
相邻键形近c↔e、g↔q、n↔h书写体/印刷体中的字形收敛
大小写与分隔符paypaL、paypal-secure、paypal_secure利用大小写视觉弱化与合法分隔符习惯

检测方法:构建混淆字符映射表(confusable map),对候选域名做"视觉归一化"(canonicalization)——将所有视觉等价字符归并到同一表示后再计算编辑距离。例如将 rn→m、0→o 后再比对,可捕获"microsoft"→"rnicrosoft"这类纯编辑距离难以暴露的变体。

3.2 Unicode混淆字符集(UTS #39)

Unicode联盟发布的UTS #39《Unicode Security Mechanisms》维护官方混淆字符数据(confusables.txt),覆盖跨书写系统的等价字形:西里尔小写а(U+0430)与拉丁a(U+0061)、希腊ο(U+03BF)与拉丁o(U+006F)、全角a(U+FF41)与半角a等。检测时应将域名逐字符查表归一,再比对标准品牌名。

3.3 IDN与Punycode:国际化域名的攻防

国际化域名(IDN)通过Punycode编码(RFC 3492)以xn--前缀表示非ASCII域名。2002年Gabrilovich与Gontmakher发表的同形字符攻击(Homograph Attack)论文揭示了其风险:将拉丁"apple.com"中的字母替换为西里尔等价字符后,浏览器地址栏显示几乎无法区分。2017年安全研究者Xudong Zheng公开的演示(将"apple.com"的西里尔变体注册并展示证书有效性)推动主流浏览器改进策略:当域名中同时混合多个书写系统的字符时,地址栏强制显示Punycode形式(如xn--pple-43d.com)。

检测规则建议:对任何含xn--前缀的域名,①解码为Unicode后检查是否存在跨书写系统字符混合(mixed-script);②对照UTS #39混淆表做视觉归一;③比对品牌库。三条任一命中即进入候选队列。同时,中文品牌须额外关注".中国"等IDN后缀及中文域名的形近字问题(如"工商"vs"工啇")。

边界说明:浏览器对同形字符域名的缓解策略(强制显示Punycode)并不完备——仅对"混合书写系统"生效,纯西里尔仿冒(面向俄语用户)或利用允许同文种内混淆的场景(UTS #39定义的single-script confusable)仍可显示为欺骗性外观。因此服务端/企业侧检测不可依赖浏览器自保护。

04 · 变体生成工程化

4.1 生成手法清单

以开源工具dnstwist(elceef/dnstwist)为代表,社区已沉淀出成熟的变体生成手法清单。本课题在其基础上按手法谱系扩展:

生成器原理示例(示意)
bitsquat逐字符做单比特翻转example→exampld(比特翻转)
homoglyph按混淆字符表替换视觉等价字符0→o、rn→m
hyphenation插入连字符(词边界切分)example→ex-ample
insertion / omission插入/删除单字符example→exxample / exaple
repetition重复相邻字符example→exxample
replacement替换单字符(含键盘邻接加权)example→exanple
transposition交换相邻字符example→exapmle
vowel-swap元音互换(读音近似)example→axample
addition / dictionary拼接高频词/品牌功能词example→example-login
subdomain / TLD-swap品牌入子域、更换TLDexample.com.cn→example-login.net

4.2 变体空间爆炸与剪枝策略

全手法展开下,单个品牌的候选变体可达数十万至百万级。工程上必须剪枝:①注册活跃度过滤——仅保留历史上真实注册过或当前可注册的变体(与注册局/数据商接口比对);②长度约束——域名长度越界(<3或>63字符)直接裁剪;③手法优先级——按各手法的历史命中率分配生成配额,高频手法(replacement、addition)展开深度大,低频手法(bitsquat)全量展开;④品牌分级——核心品牌全手法展开,长尾品牌仅高召回手法。

变体生成—排序—分流流水线
从品牌库到候选队列的处理阶段(教学示意流程)
说明:流程为本课题方法论示意。
示例:dnstwist 快速验证某品牌变体(开源工具)
# 生成某品牌域名的常见变体并探测可注册/已注册状态(仅示例命令)
$ dnstwist --registered example.com

# 输出字段通常包括:变体域名、解析IP、MX记录、WHOIS创建时间等
# 注意:探测行为应遵守目标注册商与网络的可接受使用策略

05 · 融合排序与阈值校准

5.1 特征体系

单一度量均有盲区,工程实践采用多特征融合排序。推荐特征集合:

特征取值说明建议权重(经验)
归一化编辑距离1 − ED/max(len)0.25
Jaro-Winkler0-1连续值0.20
视觉归一后距离混淆字符表归一化后再计算0.20
键盘加权距离邻接替换低代价版本0.10
发音相似度拼音/Metaphone编码一致度0.10
手法先验分按手法历史命中率赋分0.15

注:权重为经验起点值,须以自有标注集训练/校准后替换(见§5.3)。

5.2 排序模型演进路径

  • 阶段一(规则加权):线性加权打分,可解释性强,适合冷启动;
  • 阶段二(学习排序):以人工标注的"仿冒/合法"样本训练GBDT/LambdaMART类排序模型,输出候选的相对恶意度排序;
  • 阶段三(语义扩展):引入词向量/字符级神经编码(如基于CNN的域名嵌入),捕获训练集外的变体模式。

5.3 指标与校准

采用Precision/Recall/F1与PR曲线评估(类别极不平衡下PR曲线比ROC更有区分度);人工复核资源决定工作点选择——经验上应先保证召回≥95%(高召回切入),再通过判定层(第5页)压制误报。阈值按品牌长度分桶校准:短品牌(<6字符)编辑距离阈值应收紧(≤1),长品牌(>10字符)可放宽(≤2)。

参考实现:多度量相似度融合(Python 伪代码)
CONFUSABLE = {'0':'o','1':'l','rn':'m','cl':'d'}   # 混淆字符表(生产环境用UTS#39全表)

def visual_canon(name: str) -> str:
    for k in sorted(CONFUSABLE, key=len, reverse=True):
        name = name.replace(k, CONFUSABLE[k])
    return name

def sim_score(brand: str, cand: str) -> float:
    b, c = brand.lower(), cand.lower()
    f1 = 1 - damerau_levenshtein(b, c) / max(len(b), len(c))
    f2 = jaro_winkler(b, c)
    f3 = 1 - damerau_levenshtein(visual_canon(b), visual_canon(c)) / max(len(b), len(c))
    return 0.25*f1 + 0.20*f2 + 0.20*f3 + keyboard_weighted(b, c) + phonetic(b, c)

06 · 算法局限与对策

局限说明对策
语义仿冒不可见"brand-login-verify"类组合与品牌字面距离远,但语义高度仿冒功能词词典扩展生成器(第4页视觉层兜底)
混淆表不完备新注册字体/Emoji/罕见Unicode块未覆盖跟踪UTS #39更新;引入字形渲染比对(截图级)
中文拼音歧义多音字、简拼碰撞率高拼音特征降权;结合商标词库人工维护
对抗性生成器升级攻击者借鉴公开工具手法进行规避(如随机插入无关字符)持续运营:手法库版本化、红蓝对抗演练

本节参考来源(第2页)

[1]

V. Levenshtein, "Binary Codes Capable of Correcting Deletions, Insertions and Reversals"(1965,编辑距离出处):苏联物理学报

[2]

F. J. Damerau, "A Technique for Computer Detection and Correction of Spelling Errors"(1964):Communications of the ACM

[3]

W. Winkler, "String Comparator Metrics and Enhanced Decision Rules in the Fellegi-Sunter Model of Record Linkage"(1990):Proceedings of the Section on Survey Research Methods

[4]

Unicode Technical Standard #39 及 confusables 数据:unicode.org/reports/tr39

[5]

RFC 3492 "Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)"(2003)

[6]

RFC 5890-5894 "Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework" 等(IDNA 2008)

[7]

Xudong Zheng, "Phishing with Unicode Domains"(2017,同形字符PoC演示):公开安全博客

[8]

elceef/dnstwist 项目文档(生成器手法清单):github.com/elceef/dnstwist

[9]

L. Philips, "Hanging on the Metaphone"(1990, Computer Language杂志):Metaphone发音算法出处

[10]

Kintis et al., CCS 2017(combosquatting纵向研究):ACM CCS