
Vulnerability scanner for CVE-2020-0688
CVE-2020-0688 是 Microsoft Exchange 中的一个关键漏洞,源于使用了静态密钥。虽然利用此漏洞需要有效的凭据(至少是电子邮件用户级别),且大规模利用的风险较低,但在定向攻击中此漏洞可能非常有用,因为它可导致 SYSTEM 级别的远程代码执行。
更多信息:
存在几种已知的假阴性来源(即易受攻击但会被此脚本遗漏的Exchange服务器):
潜在Exchange服务器通过识别同时开放端口25和443的主机进行预筛选。如果某些设置阻止了其中一个端口,它们就会被遗漏。
zmap 优化了速度和可扩展性,牺牲了精度。通常情况下,多次连续运行 zmap 会得到略微不同的结果。因此,此脚本的多次运行也会显示略微不同的结果。
不确定这是由网络拥塞还是由有缺陷的代码导致的。欢迎提交包含补丁/解决方法的 Pull Request!
我们并不试图隐藏行为,因此某些防火墙可能直接将我们视为机器人而屏蔽。
由于我们没有进行任何花哨的指纹识别,仅依赖Exchange服务器自报的版本,因此我们只能使用版本号的前三个字段。
例如,Exchange Server 2019 的最新累积更新是 15.2.529.5(已于12月发布),该版本存在漏洞。包含补丁的最新更新是 15.2.529.8。两者都自报版本为 15.2.529,因此脚本将假定服务器已修补,即使它未安装最新补丁且存在漏洞。
但实际上,Exchange管理员要么在补丁发布后立即更新系统,要么遵循“如果它能用,就别动它”的原则,没有中间状态。
zmap, Python >= 3.5, 模块:
你可以通过以下命令全局安装:
$ sudo dnf install zmap python3-gevent python3-dns python3-pyOpenSSL
或:
$ sudo apt install zmap python3-gevent python3-dns python3-openssl
Python模块也可以通过 virtualenv 本地安装:
$ virtualenv -p python3 CVE-2020-0688
$ . ./CVE-2020-0688/bin/activate
$ pip install -r ./requirements.txt
基本扫描只需要一个包含IP/子网(CIDR格式)的文件:
$ ./scan.py ~/my_networks.txt output.csv
输出将以CSV格式写入,包含以下列:
| IP | Exchange 版本 | 服务器名称 | PTR | TLS证书中的通用名称 |
|---|
可选地,你也可以要求输出所有找到的Exchange服务器的信息:
$ ./scan.py -f ~/my_networks.txt output.csv
此时将多出一列,指示服务器是否易受攻击:
| IP | Exchange 版本 | 是否易受攻击? | 服务器名称 | PTR | TLS证书中的通用名称 |
|---|
你还可以提供黑名单IP/子网文件(选项 -b),更改并行任务数(-p)或超时时间(-t):
$ # ./scan.py -h
用法:scan.py [-h] [-b BLACKLIST] [-f] [-p PARALLEL] [-t TIMEOUT] input output
识别易受 CVE-2020-0688 攻击的 Exchange 服务器。
positional arguments:
input 输入文件,每行包含一个 IP/子网
output 保存结果的文件(CSV格式)
optional arguments:
-h, --help 显示此帮助信息并退出
-b BLACKLIST, --blacklist BLACKLIST
包含要避免的 IP/子网的文件
-f, --full 不筛选看似已更新的 Exchange 服务器
-p PARALLEL, --parallel PARALLEL
并行请求数(默认:1000)
-t TIMEOUT, --timeout TIMEOUT
网络连接超时(秒)(默认:5)