
CVE-2018-15473 - Opensshenumは、OpenSshのバグを悪用するユーザー列挙ツールです。
Opensshenum は OpenSsh ユーザ列挙ツールで、任意のユーザ名リストを OpenSsh サーバに対して検証し、そのリモートマシンに実際に存在するユーザを特定します。このプログラムは2018年7月に修正されたバグを悪用し、少なくともOpenSSH 2.3.0(2000年11月リリース)以降で有効であることが確認されています。
私はこのエクスプロイトを、RFCに基づいてC++11でスクラッチから作成したSSH 2クライアントTsshを基に作成しました。
詳細はこちらをお読みください:
http://seclists.org/oss-sec/2018/q3/124
この問題にはCVE-2018-15473が割り当てられています。
このコードは情報提供および教育目的で公開されています。所有者の許可なくシステムやサービスに侵入することは違法です。このリポジトリ内の情報やソフトウェアを誤用すると、犯罪者に対して刑事告訴が行われる可能性があります。このGitリポジトリに含まれる資料に関連するいかなる行動や活動も、すべて自己責任で行われます。このウェブサイトの情報やソフトウェアを悪用して法律を破った個人に対して刑事告訴が行われた場合、著者は一切の責任を負いません。
このプログラムは *nix 環境で使用することを想定しており、以下のLinuxディストリビューションおよびOS Xでテストされています:
コンパイラは以下のいずれかを使用:
また、SSHサーバは以下のいずれか:
唯一の外部依存関係はOpenSSLライブラリで、暗号化機能に使用されます。 今後のバージョンではOpenSSL以外の選択肢も導入する可能性があります。 このプログラムは以下のOpenSSLバージョン以上で使用することを想定しています:
(つまり、OS Xではアップグレードが必須です)。
プログラムをコンパイルするには、以下のツール/ライブラリが必要です:
パイプで渡されたユーザリストを処理します。例:
cat user.txt | ./opensshenum -i dummy_cert target_addr
xxx:NOK
gabriel:OK
ここで user.txt は各行に1ユーザが記述されたファイル、 dummy_cert は OpenSsh の ssh-keygen コマンドで生成された鍵です (鍵のディレクトリはデフォルトで ~/.ssh)。
プログラムを使用してリストを生成することもできます:
printf "xxx\ngabriel" | ./src/opensshenum -i dummy_rsa localhost
xxx:NOK
gabriel:OK
このリリースに含まれるマニュアルページを参照してください。
SSHポートスキャン機能が追加されました。opensshenum は、アドレスに関連するすべてのポートをスキャンし、22以外のポートでリッスンしているSSHインスタンスを検出し、確認されたポートに対してのみエクスプロイトを実行できます。 この機能は単独で使用することもでき、攻撃を実行せずにSSHに関連するポートのリストのみを取得できます。
例:
opensshenum -s -n -t2 -m22221 -M22225 -r'.*OpenSSH' -idummy_rsa my_imaginary_website.com
これは、ポート22221から22225(両端含む)をスキャンし(-s)、スキャンのみを実行し(-n)、タイムアウト2秒(-t)、hello文字列にOpenSSHを含むことを期待し(-r)、idummy_rsaという公開鍵を使用し(-i)、ターゲットをmy_imaginary_website.comとします。詳細はマニュアルページを参照してください。
GNU Parallelを使用したアルファ版スクリプト(parallenum.sh)が含まれており、スキャンするポート範囲をサブ範囲に分割し、各サブ範囲を個別のプロセスに割り当てることでスキャン時間の短縮を実証しています。これは明らかに多くのノイズを発生させます。ノイズを減らすには、-t パラメータを使用できます。
フィンガープリント機能は、OSの種類(hello文字列が省略された場合など)やサービスを、ユーザDB(ユーザの組み合わせ)を使用して自動識別するのに役立ちます。DBは、ディレクトリに収集された *.lst ファイルから作成されます。各 *.lst ファイルの名前は <os_name_or_service>.lst です。例:
ubuntu_17_10.lst aix.lst proprietary_ftp.lst
DBはCSVファイルで、形式は次のとおりです:
user_1;os_or_service_1; ... ;os_or_service_n ... user_m;os_or_service_1; ... ;os_or_service_n
DBは、./utils ディレクトリにある createdb ユーティリティを使用して .lst ファイルから作成できます。.lst ディレクトリを指定します。例:
cd utils make ./createdb ../lists/
フィンガープリンティングを要求するには、-F オプションでDBファイルを指定します。例:
cat test/scan.sample | opensshenum -p22 -idummy_rsa -Futils/opensshenum.db localhost