Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
rdpscan — CVE-2019-0708 "BlueKeep" 脆弱性のための高速スキャナー。 | Kitploit
ツール/GitHubGitHub/robertdavidgraham/rdpscan
脆弱性スキャナーエクスプロイトネットワークセキュリティ
GitHubrobertdavidgraham/rdpscan

rdpscan

CVE-2019-0708 "BlueKeep" 脆弱性のための高速スキャナー。

リポジトリを見る
9212377年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Windows download macOS download Linux download Follow Build

rdpscan: 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)で連絡してください。

  • 2019-05-38 - 出力結果の説明を改善、およびその意味のドキュメントを追加(下記参照)。
  • 2019-05-27 - WindowsとmacOSのバイナリをリリース(上のバッジをクリック)。
  • 2019-05-26 - Windowsのネットワーク問題を修正
  • 2019-05-25 - LinuxとmacOSで正常動作、Windowsにいくつかのネットワークエラー
  • 2019-05-24 - LinuxとmacOSで動作、Windowsにいくつかのコンパイルバグ
  • 2019-05-23 - 現在XCode内でmacOS上で作業中

主な使用方法

ネットワークをスキャンするには、次のように実行します:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

各アドレスに対して、次の3つの結果のいずれかが出力されます:

  • SAFE - ターゲットがパッチ適用済み、または少なくともCredSSP/NLAが必要であると判断された場合
  • VULNERABLE - ターゲットが脆弱であると確認された場合
  • UNKNOWN - ターゲットが応答しない、または何らかのプロトコル障害がある場合

ターゲットIPアドレスに何も存在しない場合、古いバージョンでは「UNKNOWN - connection timed out」というメッセージが出力されていました。大規模なネットワークをスキャンする場合、関心のないシステムに関する情報が多すぎて過負荷になります。そのため、新しいバージョンでは、コマンドラインに -v(verbose)を追加しない限り、この情報はデフォルトでは出力されません。

大規模なネットワークのスキャン速度を上げるには、ワーカーの数を増やします:

root@kitploit:~
rdpscan --workers 10000 10.0.0.0/8

ただし、私のコンピュータでは、システムの制限により、このパラメータをいくら高く設定しても、実際には約1500ワーカーしか生成されません。

さらに速度を上げるには、これをmasscanと組み合わせて使用します(下記の2番目の説明を参照)。

結果の解釈

主な応答は3つあります:

  • SAFE - ターゲットはおそらくパッチ適用済み、または脆弱ではないことを意味します。
  • VULNERABLE - ターゲットがこのバグに対して脆弱であることを確認したことを意味します。
  • UNKNOWN - どちらとも確認できないことを意味します。通常はターゲットが応答しないか、RDPが実行されていない場合(これが大多数です)。また、ターゲットのリソース不足やネットワーク問題の場合も多く発生します。最後に、プロトコルエラーも多くの原因となります。 3つの主な応答はSAFE、VULNERABLE、UNKNOWNですが、診断を説明する追加のテキストが含まれています。このセクションでは、表示される様々な文字列について説明します。

SAFE

ターゲットが安全であると考える主な理由は3つあります:

  • SAFE - Target appears patched これは、ターゲットがトリガーリクエストに応答しない場合に発生します。これは、パッチが適用されたWindowsシステム、またはWindows 10やUnixのように最初から脆弱ではなかったシステムを意味します。
  • SAFE - CredSSP/NLA required これは、RDP接続を確立する前に、ターゲットが最初にネットワークレベル認証を要求することを意味します。ツールは正当な資格情報なしではこのポイントを通過できないため、ターゲットがパッチ適用済みかどうかを判断できません。ただし、ハッカーもこのポイントを通過して脆弱なシステムを悪用することはできないため、おそらく「安全」です。しかし、エクスプロイトが出現すると、有効なユーザー名/パスワードを持つ内部関係者は、システムが未パッチであればそれを悪用できるようになります。
  • SAFE - not RDP これは、システムがRDPではなく、たまたま同じポートを使用する別のサービスであり、明らかにRDPではない応答を生成する場合を意味します。一般的な例はHTTPとSSHです。ただし、特定可能なプロトコルではなく、サーバーがRSTまたはFINパケットで応答する場合があります。これらはSAFEではなくUNKNOWNとして識別されます。

VULNERABLE

これは、システムがバグに対して脆弱であることを確認したことを意味します。

  • VULNERABLE - got appid システムが脆弱である場合の応答はこれ1つだけです。

UNKNOWN

UNKNOWNには無数のバリエーションがあります

  • UNKNOWN - no connection - timeout これははるかに最も一般的な応答であり、ターゲットIPアドレスが全く応答しない場合に発生します。実際、これは非常に一般的であるため、広いアドレス範囲をスキャンする場合、通常は省略されます。有効にするには -v(verbose)フラグを追加する必要があります。
  • UNKNOWN - no connection - refused (RST) これは2番目に多い応答であり、ターゲットが存在しネットワークトラフィックに応答するが、RDPを実行していないため、TCP RSTパケットで接続を拒否する場合に発生します。
  • UNKNOWN - RDP protocol error - receive timeout これは3番目に多い応答であり、RDP接続の確立に成功した後、サーバーが応答を停止した場合に発生します。これはネットワークエラーや、ターゲットシステムが何らかの理由で過負荷になっている場合に発生します。また、NATの背後にいて接続を過剰にロードしている場合など、この端のネットワークエラーも考えられます。
  • UNKNOWN - no connection - connection closed これは、接続を確立した(TCP SYN-ACK)後、接続がすぐに閉じられる(RSTまたはFINによる)ことを意味します。これが発生する理由は多数あり、区別できません:
    • RDPを実行しているが、何らかの理由で接続を閉じる(リソース不足の可能性)。
    • RDPではなく、送信したRDPリクエストを好まず、適切なエラーメッセージを送信する代わりに(そうすればSAFE - not RDPがトリガーされる)、接続を突然閉じる。
    • IPS、ファイアウォール、NATなどの中間デバイスが、これを敵対的と判断したか、リソース不足のために接続を閉じた。
    • その他特定できていない理由。インターネットをスキャンすると、多くの奇妙なことが起こります。
  • UNKNOWN - no connection - host unreachable (ICMP error) リモートネットワークが、ホストに到達できないか、実行されていないと報告しています。そのホストが生きているべきだと思う場合は、後でもう一度試してください。
  • UNKNOWN - no connection - network unreachable (ICMP error) 遠端に(一時的な)ネットワークエラーがあります。そのネットワークが稼働しているはずだと思う場合は、後でもう一度試してください。
  • UNKNOWN - RDP protocol error RDPプロトコルで何らかの破損が発生したことを意味します。リモート側が誤って実装している(Windowsシステムではない)、一時的なネットワークエラーをうまく処理していない、またはその他の理由によるものです。
  • UNKNOWN - SSL protocol error Windows Vista以降、RDPはSTARTTLSプロトコルを使用してSSL上で動作します。このレイヤーには上記と同様の独自の問題があり、基礎となるネットワークエラーをうまく処理しなかったり、何らかの非互換性があるシステムと通信しようとしたりすることが含まれます。ここで非常に長いエラーメッセージ(SSL3_GET_RECORD:wrong versionなど)が表示される場合、それは相手側にSSLのバグがあるか、使用しているSSLライブラリ自体にバグがあることを意味します。

masscanとの併用

このrdpscanツールはかなり遅く、1秒あたり数百ターゲットしかスキャンできません。代わりにmasscanを使用して高速化できます。masscanツールは約1000倍高速ですが、ターゲットに関する限られた情報しか提供しません。

手順は次のとおりです:

  • 最初にmasscanでアドレス範囲をスキャンし、ポート3389(または使用するポート)に応答するホストを素早く見つけます。
  • 次に、masscanの出力をrdpscanにフィードし、アクティブであることがわかっているターゲットのみをスキャンするようにします。

簡単な実行方法は、コマンドラインでそれらを組み合わせることです:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 | rdpscan --file -

私のやり方は2段階です:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt

ビルド

難しいのはOpenSSLライブラリをインストールし、システム上の他のバージョンと競合しないようにすることです。テストしたいくつかのLinuxバージョンの例を以下に示しますが、パッケージ名はディストリビューションによって異なります。また、OpenSSL互換API(BoringSSLやLibreSSLなど)にも多くのオプションがあります。

root@kitploit:~
$ sudo apt install libssl-dev
$ sudo yum install openssl-devel

この問題を解決したら、次のようにすべての.cファイルを一緒にコンパイルするだけです:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -o rdpscan

ディレクトリにこれを行うMakefileを配置してあるので、おそらく次のようにするだけで済みます:

root@kitploit:~
$ make

コードはCで書かれているため、Cコンパイラがインストールされている必要があります。例えば、次のようにします:

root@kitploit:~
$ sudo apt install build-essential

よくあるビルドエラー

このセクションでは、より明白なビルドエラーについて説明します。

root@kitploit:~
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory

これは、OpenSSLのヘッダーがインストールされていないか、パスにないことを意味します。OpenSSLのバイナリがインストールされていても、開発用のものがインストールされているとは限らないことに注意してください。ヘッダーとライブラリの両方が必要です。

Debianでこれらをインストールするには、次のようにします:

root@kitploit:~
$ sudo apt install libssl-dev

パスの問題を修正するには、コンパイルフラグ-I/usr/local/includeなどを追加します。

リンカ問題の例:

root@kitploit:~
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で発生します。パスをハードコードすることで修正します:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan

他の人のコメントによると、Homebrewでインストールした場合、次のコマンドラインがmacOSで動作する可能性があります。ただし、競合する他のOpenSSLコンポーネントをインストールしているため、上記のリンクエラーが依然として発生します。

root@kitploit:~
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c

実行

上記のセクションでは、プログラムを実行するためのクイックスタートのヒントを提供しました。このセクションでは、より詳細なヘルプを提供します。

単一のターゲットをスキャンするには、ターゲットのアドレスを渡すだけです:

root@kitploit:~
./rdpscan 192.168.10.101

IPv6アドレスとDNS名を渡すことができます。複数のターゲットを渡すこともできます。例:

root@kitploit:~
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1

また、begin-end IPv4アドレスまたはIPv4 CIDR指定を使用して、アドレス範囲をスキャンすることもできます。IPv6範囲は大きすぎるためサポートされていません。

root@kitploit:~
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16

デフォルトでは、一度に100ターゲットのみをスキャンします。この数は--workersパラメータで増やすことができます。ただし、このパラメータをいくら高く設定しても、実際にはシステムに応じて最大約500~1500ワーカーが同時に実行されます。

root@kitploit:~
./rdpscan --workers 1000 10.0.0.0/24

コマンドラインでターゲットを指定する代わりに、適切な名前の--fileパラメータを使用してファイルからロードすることもできます:

root@kitploit:~
./rdpscan --file ips.txt

ファイルの形式は、1行に1つのアドレス、名前、または範囲です。また、masscanによって生成されたテキストを消費することもできます。余分な空白はトリミングされ、空行は無視され、コメント行は無視されます。コメントは#文字または//文字で始まる行です。

出力はstdoutに送られ、VULNERABLE、SAFE、またはUNKNOWNのステータスが表示されます。それぞれに追加の理由がある場合があります。これらの理由については上記で説明しています。

root@kitploit:~
211.101.37.250 - SAFE - CredSSP/NLA required
185.11.124.79 - SAFE - not RDP - SSH response seen
125.121.137.42 - UNKNOWN - no connection - refused (RST)
40.117.191.215 - SAFE - CredSSP/NLA required
121.204.186.182 - SAFE - CredSSP/NLA required
99.8.11.148 - SAFE - CredSSP/NLA required
121.204.186.114 - SAFE - CredSSP/NLA required
49.50.145.236 - SAFE - CredSSP/NLA required
106.12.74.155 - VULNERABLE - got appid
222.84.253.26 - SAFE - CredSSP/NLA required
144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout
199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout
183.134.58.152 - UNKNOWN - no connection - refused (RST)
83.162.246.149 - VULNERABLE - got appid

追加のunixコマンド(grepやcutなど)で処理できます。脆弱なマシンのリストだけを取得するには:

root@kitploit:~
./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'

-ddddパラメータは診断情報を意味し、dの数が多いほど詳細が出力されます。これはstdoutではなくstderrに送信されるため、ストリームを分離できます。bashを使用すると、次のように行います:

root@kitploit:~
./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt

診断情報

-dパラメータを追加すると、接続の診断情報がstderrにダンプされます。

root@kitploit:~
./rdpscan 62.15.34.157 -d

[+] [62.15.34.157]:3389 - connecting...
[+] [62.15.34.157]:3389 - connected from [10.1.10.133]:49211
[+] [62.15.34.157]:3389 - SSL connection
[+] [62.15.34.157]:3389 - version = v4.8
[+] [62.15.34.157]:3389 - Sending MS_T120 check packet
[-] [62.15.34.157]:3389 - Max sends reached, waiting...
62.15.34.157    - SAFE - Target appears patched

macOS/Linuxでは、通常の方法でstdoutとstderrを別々のファイルにリダイレクトできます:

root@kitploit:~
./rdpscan --file ips.txt 2> diag.txt 1> results.txt

SOCKS5とTorのお遊び

SOCKS5サポートも含まれています:

root@kitploit:~
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050

接続の問題が悪化するため、さらに多くの"UNKNOWN"結果が得られます。

OpenSSLの静的リンク

このプロジェクトにリリースとして添付されているWindowsおよびmacOSバイナリをリリースするために、OpenSSLを静的にリンクしているため、別途含める必要がなく、プログラムがそのまま動作します。このセクションでは、その方法に関する注意事項を説明します。特に、OpenSSL自身のページの説明は古くなっているようです。

どちらの手順も、OpenSSLソースをダウンロードしてrdpscanディレクトリの隣に配置することから始まります:

root@kitploit:~
git clone https://github.com/openssl/openssl

Windows

Windowsの場合、最初に何らかのバージョンのPerlをインストールする必要があります。ActiveStateのものを使用しています。

次に、特別な「アセンブラ」が必要です。推奨されるNASMを使用します。

次に、コンパイラが必要です。VisualStudio 2010を使用しています。代わりに、Microsoftから最新の「Visual Studio Community Edition」(2019)をダウンロードできます。

次に、メイクファイルをビルドする必要があります。これは、OpenSSLディレクトリに移動してConfigure Perlプログラムを実行することで行います:

root@kitploit:~
perl Configure VC-WIN32

Windowsでは32ビットを選択しました。古いWindowsが多く存在するため、プログラムをできるだけ古いバージョンと互換性を持たせたいからです。

完全に静的なビルド(Cランタイムを含む)が必要です。そのために、結果のメイクファイルをエディタで開き、Cコンパイルフラグを/MD(DLL使用)から/MTに変更しました。その際、CPPFLAGSに-D_WIN32_WINNT=0x501を追加しました。これにより、OpenSSLがWindows XPおよびServer 2003まで遡って動作する機能に制限されます。そうしないと、これらの古いシステムで実行した場合にbcrypt.dllが見つからないというエラーが発生します。

次に、すべてがパスに含まれていることを確認する必要があります。nasm.exeをPATH内のディレクトリにコピーしました。Visual Studio 2010では、vcvars32.batプログラムを実行してコンパイラのパス変数を設定しました。

この時点でコマンドラインで、次のように入力しました:

root@kitploit:~
nmake

これによりライブラリが作成されます。静的なものはlibssl_static.libとlibcrypto_static.libであり、これらをrdpscanでリンクするために使用します。

macOS

まず、コンパイラをインストールする必要があります。AppleのDeveloper Toolsを使用し、XCodeとコンパイラをインストールしています。Homebrewを使用してgccをインストールすることもできると思います。

次に、OpenSSLのソースディレクトリに移動し、メイクファイルを作成します:

root@kitploit:~
perl Configure darwin64-x86_64-cc

次に、単に作成します:

root@kitploit:~
make depend
make

この時点で、動的(.dylib)ライブラリと静的(.lib)ライブラリの両方が作成されます。動的ライブラリを削除して、デフォルトで静的ライブラリが使用されるようにしました。

次に、rdpscanでmacOSのメイクファイルをビルドします:

root@kitploit:~
make -f Makefile.macos

これにより、すべてのrdpscanソースファイルがコンパイルされ、先ほどビルドした../opensslディレクトリ内のOpenSSLライブラリにリンクされます。

これにより、3メガバイトの実行可能ファイルが生成されるはずです。代わりに200キロバイトの実行可能ファイルしか得られなかった場合は、誤って動的ライブラリにリンクしたことになります。

ツールをダウンロード