
CVE-2019-0708 "BlueKeep" 脆弱性のための高速スキャナー。
これは、Microsoft Remote Desktopの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と組み合わせて使用します(下記の2番目の説明を参照)。
主な応答は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ライブラリをインストールし、システム上の他のバージョンと競合しないようにすることです。テストしたいくつかのLinuxバージョンの例を以下に示しますが、パッケージ名はディストリビューションによって異なります。また、OpenSSL互換API(BoringSSLやLibreSSLなど)にも多くのオプションがあります。
$ sudo apt install libssl-dev
$ sudo yum install openssl-devel
この問題を解決したら、次のようにすべての.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
これは、複数のバージョンのOpenSSLが存在するためmacOSで発生します。パスをハードコードすることで修正します:
$ 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
上記のセクションでは、プログラムを実行するためのクイックスタートのヒントを提供しました。このセクションでは、より詳細なヘルプを提供します。
単一のターゲットをスキャンするには、ターゲットのアドレスを渡すだけです:
./rdpscan 192.168.10.101
IPv6アドレスとDNS名を渡すことができます。複数のターゲットを渡すこともできます。例:
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1
また、begin-end IPv4アドレスまたはIPv4 CIDR指定を使用して、アドレス範囲をスキャンすることもできます。IPv6範囲は大きすぎるためサポートされていません。
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16
デフォルトでは、一度に100ターゲットのみをスキャンします。この数は--workersパラメータで増やすことができます。ただし、このパラメータをいくら高く設定しても、実際にはシステムに応じて最大約500~1500ワーカーが同時に実行されます。
./rdpscan --workers 1000 10.0.0.0/24