在野流量中经常会看到一批 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 中记录的数据转换为特征向量,但数据中包含大量非结构化与半结构化文本数据。例如 User-Agent 有 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) 与 Anarchy99;Web 路径有 / 与 /${(#[email protected]@toString(@java.lang.Runtime@getRuntime().exec("whoami").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}/。
为了转换为固定大小的数字特征向量,需要使用 Token 化与特征哈希两种技术进行处理。有大量的内容对此进行描述,此处就简单进行介绍:
将字母数字以外的所有字符替换为空格,再利用空格拆分字符串并将所有字符统一小写
import hashlibbucket_size = 16
text = 'mozilla'
hash_index = int(hashlib.sha1(text.encode("utf-8")).hexdigest(), 16) % (bucket_size)
将对应数值插入 hash_index,所有都进行同类处理
想要获取更高的准确度,可以将向量的维度从 16 扩到更大
根据特征重要程度的不同,还可以为不同的特征创建不同的权重。例如,相比 Web 路径来说,JA3 就没那么重要。例如权重如下所示:
最终就会得到可以用于比较或者机器学习的向量表示,如下所示:
据此,GreyNoise 就利用 ElasticSearch 提供了 IP 相似度的计算能力。
系统也能提供 IP 相似的原因介绍:
以 Shodan 的一个 IP 地址 89.248.172.16 为例,根据 IP 相似性可发现 Shodan 另外的 19 个 IP 地址。
GreyNoise 也给出了 IP 相似的原因介绍:
研究人员发现有许多 IP 在扫描 Tridium NiagraAX Fox ICS,很多都是 Shodan、Censys 类的网空搜索引擎。但也有部分未知的扫描源,如 122.238.45.114 正在扫描工控设备。但如果利用 JA3 指纹作为特征,会找到超过七千个相似 IP。
但是如果利用 IP 相似度计算,并将阈值提高到 95% 以上。可以发现 8 个同类扫描 IP,这提供了一种快速调查的方法。
通过一个执行 NETGEAR DGN 命令执行的 IP 地址,发现其他类似攻击的 IP:
在操作系统、端口、Web 路径与 rDNS 上都是相同的。
ReCyber 扫描项目也是如此,根据一个也可以发现同类的 ReCyber 扫描 IP:
通过数据分析来发现网络空间中实体的关联关系,是网络安全领域中一个经久不衰的研究点。不论是通过各种指纹还是解析类的应然关系,都是为了拨开网络空间中的“战争迷雾”。GreyNoise 现在的玩法也越来越多,回望当年“青涩”的 GreyNoise 还是很令人感慨。
https://docs.greynoise.io/docs/greynoise-ip-similarity
https://greynoise-website.webflow.io/blog/introducing-ip-similarity
https://www.greynoise.io/blog/how-we-built-ip-similarity
https://www.greynoise.io/blog/fingerprinting-attackers-with-ip-similarity