此脚本可以检测针对CVE-2020-0601的利用尝试。它执行一个简单的检查,以查看证书中是否使用了已知曲线——如果不是则会发出通知。
notice.log中的示例通知:
1579043477.791522 CHhAvVGS1DHFjwGM9 192.241.209.49 46110 192.241.202.21 4433 F37z6n1B8zn1fZjpj application/x-x509-user-cert 192.241.202.21:4433/tcp tcp CVE_2020_0601::Unknown_X509_Curve ECC certificate with unknown curve; potential CVE-2020-0601 exploit attempt - 192.241.209.49 192.241.202.21 4433 - - Notice::ACTION_LOG 3600.000000 - - - - -
要记录可疑证书,请使用
redef CVE_2020_0601::log_certs = T;
在你的local.zeek中启用提取。一旦启用,可疑的证书将被记录到一个新的cve-2020-0601-certs.log文件中。
此脚本需要一个能自动将显式曲线转换为名称的OpenSSL安装,在解析证书时自动转换显式曲线为名称。许多Linux发行版附带的不同OpenSSL版本似乎没有这样做;我目前对此有点不确定,不确定为什么会这样。
使用行为不同的OpenSSL版本将导致更高的误报率。此包的测试将在安装期间检查OpenSSL行为;如果"explicit.zeek"测试失败,你的OpenSSL版本不符合要求。
在这种情况下,脚本将对所有具有显式曲线定义的证书发出警报;这些情况应该非常罕见,但本身并不是问题。
此插件的第二个版本可在 https://github.com/0xxon/cve-2020-0601-plugin 获取。第二个版本使用OpenSSL原语直接检查证书曲线。然而,插件版本需要OpenSSL 1.1.x,并且需要构建C++代码并加载到你的Zeek安装中。
插件版本(位于 https://github.com/0xxon/cve-2020-0601-plugin)的优势是更高的准确性——提供更具体的通知,给出关于发现的利用尝试的更多信息。缺点主要是更高的安装难度。
虽然此插件成功检测到了已知的POC代码,但有可能(尽管可能性很小)攻击的另一种变体可能不会被检测到。