URL 结构为何能聚类
恶意样本的外联地址常带有同源习惯:固定的目录名、固定的参数顺序、相同的编码与分隔方式,这些结构特征比域名本身稳定得多。把大量 URL 按其结构归一后聚类,可以把不同样本或不同时间段的外联归到同一簇,用于判断是否存在共同的构建工具或运营基础设施。结构相似只能作为线索,最终归组要与样本哈希或证书特征互相印证。
基本信息
| 观察维度 | 路径模板、参数名与顺序、编码方式、分隔符 |
|---|---|
| 前置处理 | 去除参数值、替换长度较大的数字串 |
| 用途 | 为外联聚类、给线索排优先级 |
| 印证材料 | 样本哈希、TLS 证书、域名注册信息 |
典型使用场景
- 样本量较大,需要先把外联地址归成若干簇再逐个分析
- 判断两个不同样本是否来自同一批构建产物
- 识别域名生成规律,评估未来可能的域名范围
- 把流量侧观察到的地址与样本中的地址对齐
- 为封禁与监控清单提供模式而不是逐个罗列
聚类前先归一
聚类前先归一
grep -oE 'https?://[^ "]+' urls.txt | sort -u > all-urls.txt # 先抽取去重
sed -E 's/[0-9]{4,}/N/g' all-urls.txt > norm.txt # 长的数字段归一
cut -d/ -f3 norm.txt | sort | uniq -c | sort -rn | head -15 # 看域名分布
awk -F'[?&]' 'NF>1 {print $2}' all-urls.txt | cut -d= -f1 \
| sort | uniq -c | sort -rn | head -15 # 看参数名分布结构特征读法
| 特征 | 表现形式 | 判读要点 |
|---|---|---|
| 固定目录 | 所有地址含同一路径段 | 如 /api/v1/push,改名成本低于改结构 |
| 参数顺序固定 | 参数名与出现顺序一致 | 同一生成代码的典型痕迹 |
| 编码方式一致 | 统一十六进制或字符集受限 | 可反推生成函数 |
| 数字段规律 | 路径或参数为时间戳、自增编号 | 可用于推测地址枚举范围 |
把统计结果保存为文件并记录归一规则,改规则后重跑要能对比前后差异,否则聚类结论无法复算。
数字替换过粗会把不同模式合并成一簇,替换规则要写明长度阈值并保留原始地址备查。