在野流量中经常会看到一批 IP 地址使用相同的 User-Agent 或者将 Payload 部署到相同的 Web 路径,尽管存在部分差异,但仍然非常相似。基于这种观察,GreyNoise 推出了基于 IP 相似度的计算:

通过长期运营,GreyNoise 收集的数据非常丰富,以 IP 为视角查看相关的各类特征:

  • VPN、Tor、rDNS、OS、JA3、HASSH
  • Bot、Spoofable、Web Path、User-Agent、Mass Scanner、Port

在相似度计算时,不使用 GreyNoise 产出的判别标签(恶意、良性、未知等),避免基于自身生产的数据产生信息偏差。

相似度实现

首先要将 GreyNoise 中记录的数据转换为特征向量,但数据中包含大量非结构化与半结构化文本数据。例如 User-Agent 有 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) 与 Anarchy99;Web 路径有 / 与 /${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("whoami").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}/。

为了转换为固定大小的数字特征向量,需要使用 Token 化与特征哈希两种技术进行处理。有大量的内容对此进行描述,此处就简单进行介绍:

  • 将字母数字以外的所有字符替换为空格,再利用空格拆分字符串并将所有字符统一小写

可以将 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) 处理成 ['mozilla', '5', '0', 'x11', 'linux', 'x86_64', 'applewebkit', '537', '36', 'khtml', 'like', 'gecko']。

  • 创建一个固定大小的零向量,例例如 [0, 0, 0, 0, 0, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0]。将文本进行哈希计算
import hashlibbucket_size = 16
text = 'mozilla'
hash_index = int(hashlib.sha1(text.encode("utf-8")).hexdigest(), 16) % (bucket_size)
  • 将对应数值插入 hash_index,所有都进行同类处理

mozilla 会被插入向量中的第 9 位,变成 [0, 0, 0, 0, 0, 0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0]。所有的字符 ['mozilla', '5', '0', 'x11', 'linux', 'x86_64', 'applewebkit', '537', '36', 'khtml', 'like ', 'gecko'] 会被计算成 [0, 0.0833, 0.0833, 0.1667, 0.1667, 0.0833, 0, 0.0833, 0, 0.0833, 0.0833, 0.0833, 0.0833, 0, 0, 0]。

  • 想要获取更高的准确度,可以将向量的维度从 16 扩到更大

最终就将文本转换成了固定数值向量,变成了长特征向量。如下所示:

根据特征重要程度的不同,还可以为不同的特征创建不同的权重。例如,相比 Web 路径来说,JA3 就没那么重要。例如权重如下所示:

最终就会得到可以用于比较或者机器学习的向量表示,如下所示:

据此,GreyNoise 就利用 ElasticSearch 提供了 IP 相似度的计算能力。

系统也能提供 IP 相似的原因介绍:

示例-1

以 Shodan 的一个 IP 地址 89.248.172.16 为例,根据 IP 相似性可发现 Shodan 另外的 19 个 IP 地址。

GreyNoise 也给出了 IP 相似的原因介绍:

示例-2

研究人员发现有许多 IP 在扫描 Tridium NiagraAX Fox ICS,很多都是 Shodan、Censys 类的网空搜索引擎。但也有部分未知的扫描源,如 122.238.45.114 正在扫描工控设备。但如果利用 JA3 指纹作为特征,会找到超过七千个相似 IP。

但是如果利用 IP 相似度计算,并将阈值提高到 95% 以上。可以发现 8 个同类扫描 IP,这提供了一种快速调查的方法。

示例-3

通过一个执行 NETGEAR DGN 命令执行的 IP 地址,发现其他类似攻击的 IP:

在操作系统、端口、Web 路径与 rDNS 上都是相同的。

示例-4

ReCyber 扫描项目也是如此,根据一个也可以发现同类的 ReCyber 扫描 IP:

总结

通过数据分析来发现网络空间中实体的关联关系,是网络安全领域中一个经久不衰的研究点。不论是通过各种指纹还是解析类的应然关系,都是为了拨开网络空间中的“战争迷雾”。GreyNoise 现在的玩法也越来越多,回望当年“青涩”的 GreyNoise 还是很令人感慨。

拓展阅读

https://docs.greynoise.io/docs/greynoise-ip-similarityhttps://greynoise-website.webflow.io/blog/introducing-ip-similarityhttps://www.greynoise.io/blog/how-we-built-ip-similarityhttps://www.greynoise.io/blog/fingerprinting-attackers-with-ip-similarity