
CVE-2019-0708「BlueKeep」脆弱性のクイックスキャナー。
これは、Microsoft リモートデスクトップの CVE-2019-0708 脆弱性を検査するための簡易スキャナです。 現在、公開インターネット上にはこの脆弱性の影響を受ける約 90 万台のマシンが存在しており、 WannaCry や notPetya のようなワームがすぐに発生すると予想する人も多くいます。そのため、自分のネットワークをスキャンして、 脆弱なシステムにパッチを適用する(または少なくとも NLA を有効にする)ことをお勧めします。
これはコマンドラインツールです。ソースコードをダウンロードして自分でコンパイルするか、 上記のリンクから Windows または macOS 用のプリコンパイル済みバイナリをダウンロードできます。
このツールは、https://github.com/zerosum0x0/CVE-2019-0708 の rdesktop パッチに完全に基づいています。
macOS と Windows で簡単にコンパイルできるようにコードを整理し、
複数のターゲットをスキャンする機能を追加しただけです。
これは開発開始からわずか数日の実験的なツールです。ただし、インターネット全体をスキャンしてテストしています
(masscan の助けを借りているので、多くの問題をかなり迅速に解決しています)。ヘルプやコメントについては、Twitter(@erratarob) で連絡してみてください。
ネットワークをスキャンするには、次のように実行します。
rdpscan 192.168.1.1-192.168.1.255
これにより、各アドレスに対して次の 3 つの結果のいずれかが出力されます。
ターゲットの IP アドレスに何も存在しない場合、古いバージョンでは "UNKNOWN - connection timed out" という メッセージが出力されていました。大規模なネットワークをスキャンする場合、 これは関心のないシステムに関する過剰な情報を大量に生成します。そのため、新しいバージョンではデフォルトで この情報を出力しません。出力するにはコマンドラインに -v(verbose)を追加してください。
ワーカー数を増やすことで、大規模ネットワークのスキャン速度を向上できます。
rdpscan --workers 10000 10.0.0.0/8
ただし、私のコンピュータでは、システムの制限により、このパラメータをいくら高く設定しても、 約 1500 ワーカーしか生成されません。
さらに速度を上げるには、後述のように masscan と組み合わせて使用することもできます。
一般的な応答は 3 つあります。
ターゲットが安全と考える主な理由は 3 つあります。
これは、システムがこのバグに対して脆弱であることを確認したことを意味します。
UNKNOWN には無数のバリエーションがあります。
この rdpscan ツールはかなり遅く、1 秒あたり数百ターゲットしかスキャンできません。
代わりに masscan を使用して高速化できます。
masscan ツールはおよそ 1000 倍高速ですが、ターゲットに関する情報は限られています。
手順は次のとおりです。
masscan の出力を rdpscan に渡して、既知のアクティブなターゲットのみを
スキャンします。簡単な実行方法は、コマンドラインでそれらを組み合わせることです。
masscan 10.0.0.0/8 -p3389 | rdpscan --file -
私の場合は、2 つのステップで行います。
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt
難しいのは OpenSSL ライブラリをインストールし、システム上の他のバージョンと競合しないようにすることです。 Debian Linux では、次のようにします。
$ sudo apt install libssl-dev
その問題を解決したら、次のようにすべての .c ファイルを一緒にコンパイルするだけです。
$ gcc *.c -lssl -lcrypto -o rdpscan
このディレクトリにはこれを行う Makefile を置いてあるので、おそらく次のようにするだけで済みます。
$ make
コードは C で書かれているため、C コンパイラがインストールされている必要があります。たとえば、次のようにインストールします。
$ sudo apt install build-essential
このセクションでは、よくあるビルドエラーについて説明します。
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory
これは、OpenSSL ヘッダーがインストールされていないか、パス上にないことを意味します。 OpenSSL バイナリがインストールされていても、開発用のファイルがインストールされているとは限らないことに注意してください。 ヘッダーとライブラリの両方がインストールされている必要があります。
Debian にこれらをインストールするには、次のようにします。
$ sudo apt install libssl-dev
パスの問題を修正するには、コンパイルフラグ -I/usr/local/include などを追加します。
リンカ問題の例は次のとおりです。
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
_tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
_rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
_tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
_rdssl_cert_to_rkey in ssl-d5fdf5.o
macOS では OpenSSL のバージョンが複数あるため、このエラーが発生します。 パスをハードコードすることで修正しています。
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan
他の人のコメントによると、Homebrew でインストールした場合、次のコマンドラインが macOS で機能する可能性があります。 ただし、競合する他の OpenSSL コンポーネントをインストールしているため、上記のリンクエラーは依然として発生します。
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c
上記のセクションでは、プログラムを実行するためのクイックスタートのヒントを示しました。このセクションでは、 より詳細なヘルプを提供します。