课题研究 威胁情报分析研究 子课题05 · 第2页 / 共7页
05十大核心研究子课题 · 实体解析与IOC去重

实体解析与IOC去重

实体解析(Entity Resolution)回答融合关联的第一个问题:"这是不是同一个东西"。本页研究跨源IOC的规范化规则、字符串相似度计算、证书与基础设施复用特征、去重合并策略与冲突消解机制——这是整个融合流水线中错误代价最高、最需要工程经验的环节。

实体同一性规范化Levenshtein距离Jaccard系数JA3/JA3S被动DNS证书透明度研究状态:研究中
所属阶段融合流水线 · 数据级融合层
目标受众威胁数据工程师、TIP平台开发团队
关键风险误合并污染 > 漏合并冗余,需保守策略与人工复核队列

01 · 问题定义:实体同一性(Entity Resolution)

实体解析要判定的是:来自不同来源、表面不同的两条记录,是否指向现实世界中的同一实体。在威胁情报中,这一问题的表现形式有三类:

  • 别名型:同一攻击组织在不同厂商报告中的不同命名(如第1页所述APT28的多个公开别名),或同一恶意软件的不同家族名。
  • 变体型:同一基础设施的轻微变形——钓鱼域名采用单字符替换(0与o、1与l)、TLD替换(.com与.cn)、子域名增减。
  • 表达型:同一指标的不同写法——同一恶意URL带不带跟踪参数、同一域名的大小写与国际化编码(IDN/punycode)差异、同一文件的不同哈希算法结果。

需要强调:实体同一性判定与攻击归因是两回事。判定"这两个域名属于同一基础设施"是技术事实判断(可自动化);而"这批基础设施属于某组织"是分析归因判断(需证据链与人工研判)。本页聚焦前者,后者在第4页讨论。

形式化描述:设记录集 R 中每条记录 r 携带属性(类型、值、上下文),实体解析即求解划分 π: R → E,将记录映射到实体集合 E,使同一实体下的记录间"相似度"高于跨实体的记录。工程上该问题通常分解为:规范化 → 候选对生成(Blocking,避免全量两两比较)→ 相似度计算 → 阈值判定 → 人工复核。

02 · IOC规范化(Canonicalization)

规范化是实体解析的前置步骤:先把"写法差异"消除,再做"实质差异"的比较。主要规则如下:

IOC类型规范化规则示例
域名统一小写;IDN域名转为punycode编码(xn--前缀);去除末尾点;保留完整注册域供相似度计算,同时记录可注册主域Exämple.com → xn--exmple-cua.com
URL协议与默认端口统一;去除utm等跟踪参数(保留路径语义);末尾斜杠归一;注意:去参需谨慎,部分钓鱼URL的关键标识恰在参数中,应保留原始值并仅派生规范化副本http://a.com:80/x/?utm_src=1 → http://a.com/x/
IP地址IPv6统一压缩格式;记录WHOIS/RDAP归属与ASN,归属信息本身是重要相似特征2001:0db8:0:0:0:0:0:1 → 2001:db8::1
文件哈希统一小写十六进制;按长度识别算法(MD5为32位、SHA-1为40位、SHA-256为64位十六进制),不同算法的哈希互为派生指纹而非重复记录md5与sha256分别建索引,互为同一文件的关联证据
邮箱域名部分按域名规则规范化;本地部分(@之前)区分大小写策略需明确约定User@Example.COM → user@example.com(约定策略)

域名比较中的关键概念是可注册主域(registrable domain):比较"bank-login.example.com"与"bank-login.example.cn"时,真正承载攻击者意图的是二级标签与TLD的组合。可注册主域边界由公共后缀列表(Public Suffix List,Mozilla维护)确定——该列表收录了.com、.co.uk、.github.io等多级公共后缀,是业界处理域名层级的通行依据。

03 · 相似度计算方法

不同相似度度量适用于不同数据形态,工程上需要按IOC类型选择并组合:

方法提出者与时间原理适用场景与局限
Levenshtein编辑距离Vladimir Levenshtein,1965/1966年两个字符串互相转换所需的最少单字符编辑(插入、删除、替换)次数;归一化后除以较长串长度得相似度域名变体检测的首选基线;计算复杂度O(m·n),长串开销大;对字符位置变化敏感(音似变形"paypa1"效果好,词序重排差)
Jaccard系数Paul Jaccard,1901年(植物学相似性研究)两个集合交集大小除以并集大小;用于n-gram字符集合或token集合对顺序不敏感,适合关键词集合(如恶意软件名、邮件主题);细粒度拼写区分能力弱
余弦相似度向量空间模型经典方法将字符串转为n-gram词频向量,计算向量夹角余弦综合平衡的选择,n-gram大小(通常2-3)影响粒度;需要词频统计基础设施
Jaro-WinklerJaro(1989)、Winkler(1990)改进基于匹配字符数与换位数的相似度,对前缀匹配给予额外权重适合短字符串(域名、人名变体);前缀加权特性与"品牌词开头"的钓鱼域名构造模式吻合
四类相似度方法特性对比
按"对钓鱼域名变体检测的适配度"定性评估(5分制,本课题教学评估,非实验数据)
说明:上图为方法特性定性示意(本课题根据算法机理评估),用于展示选型思路,不代表基准实验结论;实际阈值需以本组织数据离线标定。

阈值设定的两难:阈值过高→漏合并(同一攻击者的域名被拆成多个实体,画像碎裂);阈值过低→误合并(把合法站点的相似域名并入恶意集群,误伤正常业务并污染封禁清单)。本课题建议:以编辑距离≤2且同TLD作为"疑似"候选生成条件,最终合并需叠加基础设施特征佐证,或直接送入人工复核队列。

编辑距离演算示例(教学演算)

以§08案例中的两个虚构域名为例手算归一化编辑距离:s1="paypa1-secure.example",s2="paypal-secure.example"。两串长度均为21,仅需将s1中第6位的"1"替换为"l"即可得到s2,故Levenshtein距离d=1。归一化相似度 = 1 − d/max(len) = 1 − 1/21 ≈ 0.9524,远高于"疑似"阈值。配合基础设施佐证(同IP+同JA3S+证书SAN重叠),四特征加权投票后触发自动合并。读者可用任何编辑距离实现复算此例——本课题所有教学演算均给出可复算的中间步骤,以区别于不可复现的"黑盒结论"。

04 · 基础设施复用特征:比字符串更强的同源性证据

字符串相似度只能发现"刻意模仿"或"批量生成"的变体;攻击者复用基础设施留下的痕迹,往往提供更可靠的同源性证据:

  • 共享IP与自治域(ASN):多个域名解析到同一IP,或位于同一ASN的相邻网段,提示共同运营。但需注意反向陷阱——虚拟主机与CDN(如Cloudflare)会让大量无关域名共享IP,因此"同IP"只能作为弱特征,必须与证书、注册时间等联合使用。
  • 被动DNS(Passive DNS):被动DNS复制由Florian Weimer于2005年提出,通过旁路复制递归解析流量,建立"域名—IP—时间"的历史映射。两个域名若在长时间窗口内持续共现同一IP,其关联强度远高于瞬时共现。商业与开源被动DNS数据源(如Farsight DNSDB、SecurityTrails、VirusTotal的被动DNS查询)是本特征的数据基础。
  • TLS指纹(JA3/JA3S):JA3由Salesforce于2017年开源,将TLS客户端Hello中的版本、加密套件、扩展等字段拼接后计算MD5指纹;JA3S为服务端对应指纹。C2服务器与钓鱼站点若使用相同的服务端配置(JA3S相同)且证书链一致,是强同源性信号。
  • 证书重叠:同一X.509证书的主题备用名称(SAN)列出多个域名;或不同证书共用同一公钥。证书透明度(Certificate Transparency,RFC 6962,2013年)要求公开可审计的证书日志(如crt.sh),使"一个证书签发了哪些域名"可以被公开审计——这是发现钓鱼域名集群的高效公开途径。
  • 域名生成算法(DGA)指纹:部分僵尸网络与钓鱼运营者使用DGA批量生成域名。DGA家族识别本身就是一类跨样本关联特征:同一DGA家族的不同域名在字符分布上高度相似,可通过n-gram语言模型与家族分类器识别。Fraunhofer FKIE安全研究部门维护的DGArchive项目公开收录了数十个DGA家族的生成算法与历史域名数据,是该方向的通行参考资源;Tranco排名列表(聚合多家主流站点排名、抗操纵)则常被用作域名研究的良性对照基线。
  • 注册行为特征:同一注册邮箱/注册商账号批量注册的域名、注册时间高度集中的域名簇(批量注册是钓鱼与C2运营的常见模式)。

多特征联合判定原则:任何单一复用特征都存在良性解释(CDN、云主机、托管服务)。本课题采用"特征加权投票":字符串相似 + 基础设施重叠 + 注册行为,命中特征数越多,合并置信度越高;仅命中弱特征(如同IP)时不自动合并,仅建立"疑似关联"边供分析师查看。

05 · 去重与合并策略

5.1 三级去重体系

级别机制处理对象
L1 精确去重规范化值计算哈希,完全相同即合并(同一来源同值重复投递)同源重复记录、系统重试造成的副本
L2 派生去重已知关联关系(同文件的不同哈希、同域名的URL变体)映射到同一实体同一实体的不同表达(表达型差异)
L3 近似去重候选对生成(Blocking:按可注册主域、TLD、IP分桶)→ 相似度计算 → 阈值+联合特征判定变体型与别名型差异

5.2 合并(Merge)而非覆盖(Overwrite)

归并两个记录时,正确做法是多值保留与来源标注:标签、别名、外部引用采用数组合并;每条属性保留其来源与获取时间(provenance);STIX 2.1中可通过external-reference字段引用多个来源报告,通过Relationship对象的描述承载"合并依据"。禁止的做法是直接用新记录覆盖旧记录——这会造成证据链断裂,且一条来源的笔误会永久污染实体。

5.3 合并的审计与回滚

每次合并生成审计日志(谁、何时、依据什么特征、合并了哪两个ID);保留"拆分"(unmerge)能力。实践中误合并被发现时,能够无损回滚是平台可信度的底线。

06 · 冲突消解

多源归并后,同一实体的属性可能出现冲突,按类型分别处理:

  • 属性值冲突:源A将域名标记为恶意,源B标记为良性。不覆盖、共存呈现,并分别记录各源的置信度与判定时间;在消费侧(如封禁决策)采用保守策略(任一源恶意且未过期→按恶意处理,但标注争议状态),并将该实体送入复核队列。
  • 时效冲突:源A三个月前标记恶意,源B上周观测该域名已变为合法停放页。以最近观测为准更新"当前状态",同时保留历史判定用于趋势分析——情报的时效性管理(有效期、TTL)是消解此类冲突的制度化手段。
  • 粒度冲突:源A将整个网段标记,源B仅标记其中单个IP。保留细粒度记录,网段级标记作为背景上下文,不做互相覆盖。

特别注意:标签冲突不等于源错误。域名被攻陷后由攻击者运营、后被原站长夺回并清理,是真实存在的状态变迁;"良性"与"恶意"标记反映的是不同时间截面。冲突消解的前提是保留时间维度,禁止用静态标签抹平状态历史。

07 · 评估指标

实体解析质量需要离线评测集支撑,本课题采用以下指标:

  • 去重准确率(Precision):被判为"同一实体"的实体对中,经人工确认确为同一实体的比例。误合并会污染图谱,是本课题最看重的反向指标。
  • 去重召回率(Recall):数据集中真实同实体对里,被系统成功识别的比例。漏合并主要造成冗余,危害相对可控。
  • 人工复核占比:送入人工队列的候选对占总候选对的比例。工程上追求"机器自动合并高置信、人工只处理边界",该指标衡量自动化程度。
  • 评测方法:构造金标准集(抽取若干已确认关联关系的实体对+等量的无关实体对作为负样本),交叉验证;阈值按业务可承受的误合并率反推(例如先定Precision下限≥99%,再求对应阈值)。

08 · 案例推演(教学示意)

示例声明:以下推演中的域名、IP、组织名均为虚构,仅用于演示实体解析的决策流程,不指向任何真实实体。

场景:源A报告域名"paypa1-secure.example"(A记录指向203.0.113.7),源B报告域名"paypal-secure.example"(指向203.0.113.7)。

解析决策链:①规范化:两域名小写后保持不变;②字符串相似度:编辑距离为1(0↔o),远低于阈值2;③基础设施佐证:同一IP、JA3S指纹相同、证书SAN同时列出两个域名;④注册行为:注册时间相差3分钟,同一注册商。→ 四个独立特征命中,自动合并为同一实体,生成合并审计记录;若仅命中"同IP"一项,则只建立"疑似关联"边,不合并。

反例:域名"paypal.example"与"paypal-security.example"编辑距离虽满足条件,但分别位于不同CDN、证书与注册信息完全无关——字符串相似只是攻击者模仿品牌的表象,不构成同源性证据。这正是"特征加权投票、弱特征不自动合并"原则的意义。

09 · 大规模候选生成:MinHash、LSH与SimHash

§05已指出全量两两比较是O(n²)不可行,Blocking(分桶)是生命线。本节补充两个可大幅提升分桶质量的经典技术:

  • MinHash(Broder,1997):将集合(如域名n-gram集合)通过多个哈希函数取最小值签名,使两个集合的Jaccard相似度可由签名碰撞率无偏估计——无需存储与比较完整集合即可估算"像不像"。
  • 局部敏感哈希(LSH):将MinHash签名切成b个条带(band),只要两个对象在任一条带内签名完全一致即进入同一候选桶——以可控的假阳性为代价,将候选对搜索从"全量比较"降为"桶内比较",工程上通常带来数量级的提速;条带数b与行数r直接决定召回/效率权衡,需以金标准集调参。
  • SimHash(Charikar,STOC 2002):将高维向量映射为固定位数的指纹,指纹的海明距离即相似度估计;适合"一个域名→一个64位指纹"的内存级近重复检测(Google曾公开将其用于网页近重复检测的工程实践),可用于钓鱼页面模板与域名变体的粗筛。

组合用法(本课题建议):SimHash做内存级预筛(秒级判定"肯定不像")→ LSH/MinHash桶做候选召回 → 精确编辑距离在桶内终判。三层结构保证:任何漏召回只会发生在"连SimHash指纹都差异巨大"的实体对之间——对这类实体对,其相似度本就低于合并阈值,漏召回无害。

10 · 同形字符与IDN高级混淆识别

钓鱼者不止替换字符(0/o),还会使用视觉上完全无法区分的同形字符(homoglyph):如西里尔字母"a"(U+0430)与拉丁字母"a"(U+0061)在多数字体下渲染一致。Unicode联盟为此发布了UTS#39(Unicode Security Mechanisms)与"confusables"数据表,给出字符间视觉混淆的权威映射——这是同形域名检测的通行依据。

  • 检测流程:域名转punycode前先按UTS#39做脚本混合检测(mixed-script detection)——同一标签内混用不同文字系统的字符是高危信号(如"аррӏе.com"中混杂西里尔与拉丁字符);再对全部标签做confusable归一化映射后比较。
  • 双重编码:攻击者可能对已编码的xn--域名再次编码以绕过简单匹配——规范化器必须递归解码至稳定状态(最多3次递归,防止解码炸弹)。
  • 注册局侧实践:部分注册局与浏览器厂商对混合脚本域名采取默认阻断或强警告策略(通行实践,具体策略各注册局不同);防御方应关注"同形+新注册+无历史解析"三重叠加的高危组合。

为何必须单独设防:同形字符对编辑距离类算法天然免疫——"аррӏе.com"与"apple.com"的编辑距离为0(字符完全不同源但码位一一对应替换),若不做confusable归一化,§03的全部字符串方法都会漏检。这是"单字符串方法必然失败案例"的典型教学素材。

11 · 布隆过滤器的参数工程与准确性边界

Bloom过滤器由Bloom于1970年提出(《Space/time trade-offs in hash coding with allowable errors》,ACM通讯),用于在极小内存内回答"元素是否可能在集合中"。设位数组长度m、哈希函数个数k、已插入元素数n,则假阳性率为 (1−e^(−kn/m))^k 。工程要点:

  • 假阳性无害性论证:在L1精确去重前置中,假阳性只会把"未见过"误判为"可能见过",从而多走一次精确哈希校验——不会导致数据错误,只会浪费少量校验算力。这是布隆过滤器能够安全前置的根本原因,也是它不能用于"判定肯定见过"的原因(布隆过滤器无假阴性,但本场景不需要这个方向的保证)。
  • 参数选取:在预期元素量n与可接受假阳性率p下,最优 k = (m/n)·ln2,m ≈ −n·lnp /(ln2)²。例:n=1亿、p=0.1%时,m ≈ 1亿×6.9078/0.48045 ≈ 14.4亿位(约1.8×10⁸字节,约180MB),k ≈ 14.377×0.6931 ≈ 10。给出可复算的公式即意味着参数不依赖经验拍脑袋。
  • 变体:计数布隆过滤器支持删除(情报过期下架时需要);分层布隆过滤器支持"近30天/近1年"两级时窗。合并审计要求记录过滤器版本与重建时间点。

12 · 金标准集构造与双标注协议

§07的指标需要金标准集支撑,其构造质量直接决定所有评测结论的可信度。本课题采用与公开基准一致的双标注协议:

  • 分层抽样:按IOC类型(域名/URL/IP/哈希)与来源分层,保证每个"类型×来源"单元都有足量样本;负样本(确认无关实体对)从Tranco良性域名与跨源随机配对中抽取,正负样本比例按预估先验失衡程度设定(如1:3)。
  • 双标注+仲裁:两名分析师独立判定,分歧由第三名高级分析师仲裁——该流程与Das等arXiv:2607.23312数据集(25份随机样本双标注+仲裁)及CTI-HAL(arXiv:2504.05866)的质控流程一致。
  • 一致性度量:报告加权Cohen's Kappa(分类标注)与Krippendorff's Alpha(序数/区间标注),Kappa≥0.6视为可接受的一致性下限(参照Landis与Koch 1977年的通行分级,0.61—0.80为" substantial ")。
  • 防腐纪律:金标准集版本化并隔离存储,只用于评测、绝不进入阈值调参的训练循环——否则评测结论退化为"在调参集上的表现"(评测集过拟合)。

13 · 样本级近似去重:模糊哈希与导入表哈希

本节前述规范化与字符串相似度面向域名、URL、IP等“网络类IOC”;对文件类IOC(恶意软件样本、钓鱼页面附件),攻击者只需重编译、加壳或修改少量字节,MD5/SHA系列精确哈希便完全失效。样本级去重需要专门的近似指纹技术:

  • 模糊哈希(Fuzzy Hashing / 上下文触发分段哈希):ssdeep由Jesse Kornblum于2006年在Digital Investigation期刊提出(论文《Identifying almost identical files using context triggered piecewise hashing》),将文件按内容触发的分段点切分,对各分段计算传统哈希后拼接为签名——内容局部变化只改变少数分段,两签名可计算0—100的相似度分值。它是恶意样本家族聚类、钓鱼附件变体归并的通行工具(开源实现:ssdeep项目)。
  • TLSH(Trend Micro Locality Sensitive Hash):趋势科技2013年开源发布,基于桶统计的局部敏感哈希,对文件局部修改与插入具备稳定性,与ssdeep互补使用——业界经验是二者组合可显著降低单一算法的漏报。
  • 导入表哈希(imphash):对PE文件导入地址表(IAT)的库名与函数名拼接后计算MD5。同一攻击者用同一工具链(编译器、链接设置)重编译的样本,imphash保持不变——它是恶意软件家族与攻击者工具链关联的高性价比特征,该方法论由Mandiant/Mandiant Advantage社区在公开分析中普及,现已被MAEC、VirusTotal及主流沙箱作为标准特征提供。

与三级去重体系的对接:样本类IOC在L2派生去重层新增“同文件多算法哈希互证”(MD5/SHA-1/SHA-256/ssdeep/TLSH/imphash并存于同一实体);在L3近似去重层,候选对生成按imphash与TLSH距离分桶,桶内以ssdeep相似度阈值终判。钓鱼场景中的Office/PDF附件变体,用此方法可将“逐文件告警”压缩为“家族活动告警”。

局限声明:模糊哈希相似度阈值(ssdeep通常以厂商经验值为起点)需以本组织金标准集(§12的双标注协议)离线标定;加壳、深度变形会同时击穿多种指纹,此时应回退到行为特征(沙箱行为报告相似度)而非继续叠加静态指纹。

14 · 感知哈希与钓鱼页面模板聚类

第4页§4.1的“诱饵模板相似度”维度需要图像/页面级的近似指纹支撑。感知哈希(Perceptual Hashing)将视觉内容映射为对缩放、压缩、轻微编辑鲁棒的指纹,是“同一钓鱼页面模板”判定的标准手段:

  • pHash(感知哈希):对图像做DCT变换,取低频系数符号构成64位指纹;指纹间汉明距离即可度量页面截图相似度。该方法的工程化描述见Zauner 2010年论文(《Implementation of perceptual image hashes in Datamark》),是图像近重复检测的通行方法。
  • dHash/aHash:梯度差分哈希与平均哈希,计算更廉价,适合作为pHash的前置粗筛(与第2页§09“SimHash预筛→精确判定”的三层结构同构)。
  • 落地方式:对钓鱼URL的落地页定时截图(沙箱或网页快照服务)→ pHash指纹入桶 → 桶内即为“同一模板”的候选活动成员;再叠加DOM结构特征(标签序列n-gram)与资源指纹(相同JS/CSS外链哈希),四特征加权后并入第4页的复合相似度。

与PhaaS案例的呼应:第7页§09所述LabHost(FBI披露约42,000个域名)、Tycoon 2FA(约占Microsoft所拦截钓鱼邮件的62%)均属“一套模板、成百客户复用”模式——模板级聚类一次即可覆盖大量末端活动,这正是感知哈希在融合流水线中的杠杆点;同时,模板共享不等于运营者同一(客户彼此无关),合并决策必须回到“多特征加权投票、弱特征不自动合并”纪律(第2页§04)。

本节参考来源(第2页)

以下均为真实可查来源,用于支撑本页事实性表述;学术论文仅列标题与出处,不给出来源不明的链接。

[1]

Florian Weimer,《Passive DNS replication》,FIRST Conference 2005(被动DNS复制的原始提出文献)。

[2]

Salesforce开源JA3/JA3S项目仓库:github.com/salesforce/ja3

[3]

RFC 6962《Certificate Transparency》(IETF,2013):rfc-editor.org/rfc/rfc6962;CT日志查询站点crt.sh:crt.sh

[4]

Mozilla维护的公共后缀列表(Public Suffix List):publicsuffix.org

[5]

V. I. Levenshtein,Binary codes capable of correcting deletions, insertions, and reversals,Doklady Akademii Nauk SSSR(1965/1966,编辑距离的原始文献)。

[6]

Farsight Security《Passive DNS Replication》(被动DNS数据服务说明):farsightsecurity.com/solutions/dnsdb;VirusTotal被动DNS查询:virustotal.com

[7]

OASIS《STIX Version 2.1》规范中关于Indicator、Observed Data、Infrastructure对象与external-reference的定义:docs.oasis-open.org

[8]

Fraunhofer FKIE DGArchive(DGA家族归档):dgarchive.caad.fkie.fraunhofer.de;Tranco站点排名列表:tranco-list.eu

[9]

J. Kornblum,《Identifying almost identical files using context triggered piecewise hashing》,Digital Investigation, Vol. 3, Supplement (2006)(ssdeep模糊哈希原始文献);开源实现:github.com/ssdeep-project/ssdeep

[10]

Trend Micro TLSH(局部敏感哈希,2013年开源):github.com/trendmicro/tlsh

[11]

imphash(导入表哈希)方法论:Mandiant/FireEye公开恶意软件分析实践中的通行特征,现由MAEC及主流沙箱作为标准特征提供(VirusTotal等)。

[12]

C. Zauner,《Implementation of perceptual image hashes in Datamark》(2010)(pHash工程化通行描述);aHash/dHash为图像指纹领域公开通行方法。