ゴースト CVE- 2015-0235 )がポップアップしました。私のシステムが安全かどうかをすばやく確認するにはどうすればよいですか?理想的には、1行のシェルコマンドを使用します。

ZDNetの記事によると、「システムを再起動する必要があります」。理想的には、テストでもこれが示されます…

コメント

  • "に昇格することをお勧めしますカンコニカルな質問"
  • すばらしい質問です。残念ながら、1行のシェルコマンドではなく、完全な開発者ツールチェーンをインストールする必要があるという回答を受け入れました。ルーターなどの重要なデバイスには、ほとんどの場合' gccがありません。一部のデバイスは'セルフホストすらできません。
  • あなたは'正しい@BenVoigtです。 '開発ツールを必要としない1つのライナーで回答に報奨金を出しました。
  • 自己ホスト、uClibc、dietlibcはglibcよりもはるかに可能性が高いです。クロスコンパイラをドラッグする前に、'が実際にglibcで実行されていることを確認してください。

回答

シカゴ大学からシステムの脆弱性をテストできるツールをダウンロードできるようです。

これは何も修復または再起動しませんシステムが脆弱かどうかのみを通知します。

$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c $ gcc GHOST.c -o GHOST $ ./GHOST [responds vulnerable OR not vulnerable ] 

これをリモートサーバーの1つで実行すると、次のようになります。

user@host:~# wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c --2015-01-27 22:30:46-- https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c Resolving webshare.uchicago.edu (webshare.uchicago.edu)... 128.135.22.61 Connecting to webshare.uchicago.edu (webshare.uchicago.edu)|128.135.22.61|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1046 (1.0K) [text/x-csrc] Saving to: `GHOST.c" 100%[============================================>] 1,046 --.-K/s in 0s 2015-01-27 22:30:48 (237 MB/s) - `GHOST.c" saved [1046/1046] user@host:~# gcc GHOST.c -o GHOST user@host:~# ./GHOST vulnerable 

そのスクリプトのソースコードは、次のコードブロックのように見えますが、とにかく最初にオリジンコードを調べる必要があります他の人が指摘しているように、コードが何をするのかを知らずにインターネットから任意にコードを実行していると、悪いことが起こる可能性があります

/* * GHOST vulnerability check * http://www.openwall.com/lists/oss-security/2015/01/27/9 * Usage: gcc GHOST.c -o GHOST && ./GHOST */ #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #define CANARY "in_the_coal_mine" struct { char buffer[1024]; char canary[sizeof(CANARY)]; } temp = { "buffer", CANARY }; int main(void) { struct hostent resbuf; struct hostent *result; int herrno; int retval; /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/ size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1; char name[sizeof(temp.buffer)]; memset(name, "0", len); name[len] = "\0"; retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno); if (strcmp(temp.canary, CANARY) != 0) { puts("vulnerable"); exit(EXIT_SUCCESS); } if (retval == ERANGE) { puts("not vulnerable"); exit(EXIT_SUCCESS); } puts("should not happen"); exit(EXIT_FAILURE); } 

編集:Ansible Playbook ここに追加しました。これは、多数のユーザーが使用できる場合に役立ちます。テストするシステムの数とansibleを使用すると、すばやく実行できます。

また、以下の説明に従って、サーバーが脆弱であり、利用可能なパッチを適用している場合は、システムを再起動することを強くお勧めします

コメント

  • @KasperSourenはい、そうです。脆弱な場合は、パッチ/アップグレードを適用して再起動します。
  • @KasperSouren '質問するのは率直に言って少しばかげています。この答えはあなたの質問に完全に答えます:どうすればこの脆弱性を検出できますか。 'はあなたが尋ねたすべてです。 "ワンライナー"を求めるのも少しばかげています。彼がここに投稿したテストをすべてのサーバーで2分以内に実行しました。 'は非常に単純です。 'が完了したら、" shutdown -r now "を実行します。 ..
  • アップグレードしてテストを実行しましたが、'再起動しませんでした。再起動する必要があることがわかったときにのみ、これに戻りました。これはかなりの数の人々に起こる可能性があり、彼らのサーバーは脆弱であり、彼らの誤った安心感にもかかわらずハッキングされる可能性があります。したがって、可能であればこれをまっすぐにするのはそれほど愚かなことではありません。
  • GHOST.c POCは元のQualysに由来しますアドバイザリ
  • @KasperSourenテストでは、新しいプログラムが安全なバージョンのglibcを使用することがわかります。ただし、アップグレード前に開始されたプログラムがバックグラウンドで実行されているため、古いバージョンが読み込まれている可能性があります。

回答

PHPワンライナー:

php -r "$e="0";for($i=0;$i<2500;$i++){$e="0$e";gethostbyname($e); }" 

Pythonワンライナー:

python -c "import socket;y="0"*50000000;socket.gethostbyname(y)" 

それらがセグメンテーション違反(はい、Pythonセグメンテーション違反、まれな標本)を与える場合、あなたは「脆弱です。Pythonを「開発者ツール」と見なすかどうかはわかりませんが、PHPは一般的なプログラムです。

ターゲットデバイスがルーターの場合、メーカーの仕様を調べたり、メーカーのアドバイザリやファームウェアの更新を待つ以外に、そのデバイスでできることは何もわかりません。

コメント

  • これをsudo lsof | grep libc- | grep DEL"と組み合わせることは可能ですか?それを回避するために、別のコメントで提供されています人々は、古いlibcがまだ使用されている間は、'安全だと考えています。この追加により、'すぐに賞金を差し上げます。
  • 'シェルコマンドなので、& 。そして、そのコマンドは、glibcパッケージを更新した後でのみ実行できます。'を更新した場合、これらの1つのライナーは失敗します。では、更新のvommamdを間に詰め込みますか?
  • SUSE 11SP3でphpを使用しましたが、パッチの前後にセグメンテーション違反は見られませんでした。何かアイデアはありますか?
  • @marcinそれは'興味深いものです。私はこれらをインターネットソースから引き出しました、そして多くの人々がsegfaultingを報告します。ループ数を増やすことは何かをしますか? ('の価値については、Pythonのsegfaultは、パッチが適用された一部のシステムでもsegfaultします…その理由については何も言われていません'
  • uchicagoコードで遊んでいると、4バイト以上オーバーフローしようとすると、gethostbyname()がオーバーフローではなくエラー(EINVAL)を返すように見えます。 Cを使用すると、何を上書きするかを正確に制御できます。 PHPまたはPythonでは、上書きされるものが重要でセグメンテーション違反になる場合もあれば、何もない場合もあります。 'は、システムの正確なビルドに依存します。そして、gethostbyname("0"*50000000)のPythonsegfaultは、私にはPythonのバグのように見えます。 (Ghost Python?)

回答

aaronfayの回答では、基盤となるシステムが脆弱かどうかを判断する方法についてすでに説明しています。ただし、アップグレード後も古いバージョンのglibcを使用して実行されているプログラムがあるかどうかは検出されません。つまり、影響を受けるプロセスを再起動せずにアップグレードでき、古い脆弱なライブラリがまだ使用されている場合でも、スクリプトは「脆弱ではない」と報告します。

これが存在するかどうかを確認する1つの方法です。まだ古いバージョンのglibcを使用している動的にリンクされたプログラム:

sudo lsof | grep libc- | grep DEL 

結果がある場合は、削除されたバージョンのglibcが使用されており、それらを使用しているプロセスは脆弱性。

もちろん、これはglibcが静的にリンクされた場合をカバーしていません。良い(?)ニュースは、バイナリで静的にリンクされたglibcを見つけることは非常にまれです。サイズの、そしてそれは他のいくつかの迷惑と困難を提示するため。静的にコンパイルされたglibcを使用するプログラムを 持っている場合(ほとんど確実にそうではありません)、それらを再コンパイルする必要があります。

コメント

  • lsof +c0 -f -- /usr/lib64/libc-*.so | grep "(deleted)$"もう少し正確に、プロセスのフルネームを表示し、削除されたファイルへのリンクを探します。

回答

Redhatにアカウントがある場合は、このURL glibcが脆弱かどうかを通知する小さなシェルスクリプトです。

RedHatが復活しました。 https://bugzilla.redhat.com/show_bug.cgi?id=1186717

コメント

  • RedHatツールはglibcRPMのバージョンのみをチェックします、そしてそれだけRedHatバージョン(およびおそらく派生物)について知っています。実際には他のOSでは機能しません。
  • これもダウンロードできなくなり、欠陥が発生する可能性があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です