web-dev-qa-db-ja.com

GHOST:どのサービスが脆弱か、ssh、webサーバー?

[〜#〜] ghost [〜#〜]CVE-2015-0235 )がポップアップされました。

GHOSTバグ:システムが安全かどうかをテストする簡単な方法はありますか? は、システムが脆弱かどうかを確認する方法を扱います。

当面は、すべてのパブリックサービスでDNSの逆チェックを無効にすることで、脅威を即座に軽減することができます。たとえば、/ etc/ssh/sshd_configでUseDNS noを設定することにより、SSHでの逆DNSチェックを無効にすることができます。

外に開かれている他のどの一般的なサーバーソフトウェアがこの攻撃に対して脆弱ですか?ワニス、アパッチ、nginx?そして、OpenSSHのような迅速な回避策はありますか?

10
kqw

任意のソフトウェアパッケージが脆弱であるかどうか、およびどの構成または緩和策が適用されるかを判断するには、いくつかの詳細な分析が必要であると合理的に結論付けることができます(以下を参照)。名前解決を実行するサービスは危険にさらされる可能性があります(パッチ、および安全です!)。

Qualysはすでに ソフトウェアのリストを提供 影響を受ける関数を使用しています現時点では利用できません

Apache、cups、dovecot、gnupg、isc-dhcp、lighttpd、mariadb/mysql、nfs-utils、nginx、nodejs、openldap、openssh、postfix、proftpd、pure-ftpd、rsyslog、samba、sendmail、sysklogd、syslog-ng、 tcp_wrappers、vsftpd、xinetd。

現時点では、Eximのみが悪用可能であることが確認されています。

CVE詳細サイトは脆弱性のベンダー詳細を追跡しますが、 まだアップしていますが、すぐにここに表示されます まだ完全に完了していますが、ここで見つけることができます: http://www.cvedetails.com/cve/CVE-2015-0235/ (最近の Shellshock CVE-2014-7169を参照 ページなど)。 oss-sec メーリングリストは、最新ニュースを追跡するのに適した方法です。

Qualys POC(_GHOST.c_)は、glibcが影響を受ける場合にのみ示されます。プロセスを加速するのはQualysからの約束されたMetasploitモジュールです(モジュールを開発するために他の人がスクランブルするのではないかと思います)。

(私はリンクされているOpenSSHの「緩和策」を購入しません。UseDNSはTCP接続のIPアドレスの逆引きを引き起こします。もちろん、十分に制御することはできません。攻撃者によって。 実行した手順を確認する機会があったら、これを更新します。 OpenSSHまたはOpenSSH + libwrapのDNS逆引きは悪用できません。)


元の勧告 はかなり長く、聴衆はlibcとCプログラミングの知識を渡すよりも優れていると予想されます。さまざまな複雑さを説明するために、脆弱性のないコードとプログラムに多くのスペースが費やされています"publicity page" here はかなりわかりやすく、最近の義務的な脆弱性のアートワークが含まれています。

一般的なプログラミングイディオムと、脆弱なコードへの非常に具体的なコードパスのため、多くのプログラムは脆弱ではありません。明確にするために、glibcの一部のDNS関連機能に影響を与える問題があります(<2.18)。DNSは、攻撃者が制御するデータをシステムに取り込む優れた方法ですが、任意のデータin。しかし、最近の注目度の高いいくつかの問題とは異なり、単にライブラリを使用したり、それらの関数を使用しても、プログラムが自動的に脆弱になるわけではありません。

とはいえ、これは新たに公表された問題であり、問​​題を引き起こす他の方法が見つかるかもしれません。パッチ適用を延期する言い訳はありません。問題の_gethostbyname*_関数は、IPv6表記をサポートしておらず、サポートする関数に置き換えられているため、「廃止」と見なされますが、非常に普及しています。


脆弱性のこの重要な悪用はアドバイザリで詳細に説明されています。4.2の(悪用されない)_mount.nfs_の例を見てください:ほとんどのディストリビューションではsetuid-rootバイナリなので、ローカル 特権エスカレーション

同様に、mount.nfs(SUID-rootバイナリ)は脆弱ではありません。

_    if (inet_aton(hostname, &addr->sin_addr))
            return 0;
    if ((hp = gethostbyname(hostname)) == NULL) {
            nfs_error(_("%s: can't get address for %s\n"),
                            progname, hostname);
            return -1;
    }
_

上記のinet_aton()を呼び出す前のgethostbyname()の呼び出しパターンは、上記で参照される一般的なイディオムです。 hostnameに任意の文字列を指定した場合、最初にinet_aton()を介して有効なIPドット付きクワッド(安価で低遅延)として処理できるかどうかを確認します。それ以外の場合は、 gethostbyname()によるDNSホスト名(安価ではなく、待ち時間が長い可能性があります。アドバイザリのセクション3-問題を緩和する要素を参照してください)。

これは、OpenSSHがこれらの関数を使用する方法でもあります。_openbsd-compat/fake-rfc25553.c_のラッパーgetaddrinfo()を参照してください。その関数は、ホストにネイティブgetaddrinfo()がない場合(またはconfigureをだましてそれをだます場合)、コンパイル時にのみ有効になります。 glibcはその関数を1996(v2.0より前)から持っているので、gethostbyname()はOpenSSHによって呼び出されません。

OpenSSHがlibwrapでビルドされている場合、sshdバイナリは_gethostbyname*_のシンボル依存関係をいくつか持つため、Qualysは両方を要求しますTCPラッパーとOpenSSHは安全です(現在のところ)。OpenSSHでのgethostbyname()のその他の唯一の使用法は、X DISPLAYにホスト名ではなくIPを含める必要があるHP-UX固有のコードです。ここに関連。

一般的なケースでは、準拠するDNSデータに問題のある長い/不正なIPアドレスを含めることはできないため、逆引き参照と順方向/逆方向チェックは攻撃ベクトルではありません。ホスト名/ドット付きクワッドアドレスが上位プロトコルの一部である場合(例:Eximの悪用に使用されるSMTP EHLO名)、次に何かがある可能性があります。 OpenSSHの場合、これはポート転送でホスト名を提案します。 OpenSSHがgethostbyname()を直接使用した場合でも、閉じるが葉巻はありません。

_      if (strlen(Host) >= NI_MAXHOST) {
            error("Forward Host name too long.");
            return 0;
      }
_

ここで、_NI_MAXHOST_は、これまでに確認したバージョンでは1025です。これは、いずれにしても、それほど深刻ではない認証後の攻撃ベクトルになります。

14
mr.spuratic