
CVE-2020-0688 は、静的キーの使用が原因で Microsoft Exchange に存在する重大な脆弱性です。悪用には (メールユーザーレベルの) 有効な資格情報が必要であり、大量悪用のリスクは低いものの、この脆弱性は SYSTEM レベルの RCE につながるため、標的型攻撃で非常に有用となる可能性があります。
詳細情報:
既知の偽陰性 (このスクリプトによって見逃される脆弱な Exchange サーバー) には、いくつかの原因があります:
潜在的な Exchange サーバーは、ポート 25 と 443 の両方が開放されているホストを識別することで事前スクリーニングされます。これらのいずれかをブロックするセットアップがある場合、それらは見逃されます。
zmap は、精度を犠牲にして速度とスケーラビリティを最適化しています。通常、zmap を複数回連続して実行すると、結果がわずかに異なります。その結果、このスクリプトを複数回実行した場合も結果がわずかに異なります。
これが純粋にネットワーク輻輳によるものなのか、バグのあるコードによるものなのかは不明です。パッチや回避策を含むプルリクエストは大歓迎です!
ここでは目立たないようにしようとはしていないため、一部のファイアウォールが単に私たちをロボットとしてブロックする可能性があります。
凝ったフィンガープリンティングを行わず、Exchange サーバーが自己報告するバージョンにのみ依存しているため、バージョン番号の最初の 3 つのフィールドに限定されます。
例えば、Exchange Server 2019 の最新の累積更新プログラムは 12 月にリリースされた 15.2.529.5 であり、これは脆弱です。パッチを含む最新の更新プログラムは 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
その場合、サーバーが脆弱かどうかを示す列が 1 つ追加されます:
| IP | Exchange バージョン | 脆弱? | サーバー名 | PTR | コモンネーム (TLS 証明書から) |
|---|
ブラックリストに登録された IP/サブネットを含むファイルを提供することもできます (-b オプション)。並列タスクの数 (-p) やタイムアウトの長さ (-t) を変更することもできます:
$ # ./scan.py -h
usage: scan.py [-h] [-b BLACKLIST] [-f] [-p PARALLEL] [-t TIMEOUT]
input output
Identify Exchange servers vulnerable to CVE-2020-0688.
positional arguments:
input Input file, each line contains one IP/subnet
output File to save the results (in CSV format)
optional arguments:
-h, --help show this help message and exit
-b BLACKLIST, --blacklist BLACKLIST
File containing IPs/subnets to avoid
-f, --full Don't filter seemingly up-to-date Exchange servers
-p PARALLEL, --parallel PARALLEL
How many requests to send in parallel (default: 1000)
-t TIMEOUT, --timeout TIMEOUT
Timeout (seconds) to use for network connections
(default: 5)