ゴーストの脆弱性-CVE-2015-0235


13

ゴーストの脆弱性が問題になっている、影響をOSに(ユーザーでログインしているのように)アクセスを必要としますか?誰かが「アプリケーションを呼び出すことができるリモート攻撃者」を明確にすることはできますか?ローカルシステムで直接実行するテストを見つけるだけで、リモートホストからではないようです。

複数のソース(それらのソースに対するクレジット)からGhostの脆弱性に関してこれまでに収集したすべての情報は、他の誰かが興味を持っている場合の回答として以下に投稿しました。

編集、私の答えを見つけました:

コード監査中に、Qualysの研究者はglibcの__nss_hostname_digits_dots()関数にバッファオーバーフローを発見しました。このバグは、すべてのgethostbyname *()関数を介してローカルおよびリモートの両方でトリガーできます。アプリケーションは、主にgethostbyname *()関数セットを介してDNSリゾルバーにアクセスできます。これらの関数は、ホスト名をIPアドレスに変換します。


security.stackexchange.com/q/80210/1341などの他の投稿など、セキュリティSEサイトへのリンクを追加することもできますか?
マット・ビアンコ

Muru、内容を答えに移しました。提案をありがとう。MattBianco、リンクも追加しました、ありがとう。
-devnull

あいまいさを取り除くために質問を更新しました。
-devnull

回答:


20

Qualysからの私の質問への回答:

テスト中に、特別に作成された電子メールをメールサーバーに送信し、Linuxマシンにリモートシェルを取得できる概念実証を開発しました。これにより、32ビットシステムと64ビットシステムの両方で既存の保護(ASLR、PIE、NXなど)がすべてバイパスされます。


探している他の人のための私のコンパイルされた研究:


免責事項

他の多くのスレッド/ブログがあなたに言うかもしれないことにもかかわらず、私はこれらの更新を徹底的にテストせずに盲目的にすべての単一のOSをすぐに更新しないことを提案しglibcます。glibcの更新により、大規模なアプリケーションのセグメンテーション違反が発生し、人々がglibcの更新を以前のバージョンにロールバックすることが強制されたことが報告されています。

テストせずに本番環境を単純に一括更新することはできません。


背景情報

GHOSTは、glibcライブラリのgethostbyname()およびgethostbyname2()関数呼び出しに影響する「バッファオーバーフロー」バグです。この脆弱性により、リモートの攻撃者はこれらの機能のいずれかをアプリケーションで呼び出して、アプリケーションを実行しているユーザーの権限で任意のコードを実行できます。

影響

gethostbyname()関数呼び出しは、非常に一般的なイベントであるDNS解決に使用されます。この脆弱性を悪用するには、攻撃者はDNS解決を実行するアプリケーションに無効なホスト名引数を提供することにより、バッファオーバーフローをトリガーする必要があります。

影響を受けるLinuxディストリビューションの現在のリスト

RHEL(Red Hat Enterprise Linux)バージョン5.x、6.xおよび7.x

RHEL 4 ELS              fix available ---> glibc-2.3.4-2.57.el4.2
Desktop (v. 5)          fix available ---> glibc-2.5-123.el5_11.1
Desktop (v. 6)          fix available ---> glibc-2.12-1.149.el6_6.5
Desktop (v. 7)          fix available ---> glibc-2.17-55.el7_0.5
HPC Node (v. 6)         fix available ---> glibc-2.12-1.149.el6_6.5
HPC Node (v. 7)         fix available ---> glibc-2.17-55.el7_0.5
Server (v. 5)           fix available ---> glibc-2.5-123.el5_11.1
Server (v. 6)           fix available ---> glibc-2.12-1.149.el6_6.5
Server (v. 7)           fix available ---> glibc-2.17-55.el7_0.5
Server EUS (v. 6.6.z)   fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 6)      fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 7)      fix available ---> glibc-2.17-55.el7_0.5

CentOS Linuxバージョン5.x、6.xおよび7.x

CentOS-5    fix available ---> glibc-2.5-123.el5_11
CentOS-6    fix available ---> glibc-2.12-1.149.el6_6.5
CentOS-7    fix available ---> glibc-2.17-55.el7_0.5

Ubuntu Linuxバージョン10.04、12.04 LTS

10.04 LTS   fix available ---> libc6-2.11.1-0ubuntu7.20
12.04 LTS   fix available ---> libc6-2.15-0ubuntu10.10

Debian Linuxバージョン6.x、7.x

6.x squeeze              vulnerable
6.x squeeze (LTS)        fix available ---> eglibc-2.11.3-4+deb6u4
7.x wheezy               vulnerable
7.x wheezy (security)    fix available ---> glib-2.13-38+deb7u7

Linux Mintバージョン13.0

Mint 13    fix available ---> libc6-2.15-0ubuntu10.10

Fedora Linuxバージョン19(またはそれ以上はアップグレードする必要があります)

Fedora 19 - vulnerable - EOL on Jan 6, 2014 (upgrade to Fedora 20/21 for patch)

SUSE Linux Enterprise

Server 10 SP4 LTSS for x86                    fix available ---> glibc-2.4-31.113.3
Server 10 SP4 LTSS for AMD64 and Intel EM64T  fix available ---> glibc-2.4-31.113.3
Server 10 SP4 LTSS for IBM zSeries 64bit      fix available ---> glibc-2.4-31.113.3
Software Development Kit 11 SP3               fix available ---> glibc-2.11.3-17.74.13
Server 11 SP1 LTSS                            fix available ---> glibc-2.11.1-0.60.1
Server 11 SP2 LTSS                            fix available ---> glibc-2.11.3-17.45.55.5
Server 11 SP3 (VMware)                        fix available ---> glibc-2.11.3-17.74.13
Server 11 SP3                                 fix available ---> glibc-2.11.3-17.74.13
Desktop 11 SP3                                fix available ---> glibc-2.11.3-17.74.13

openSUSE(11より古いバージョンはアップグレードする必要があります)

11.4 Evergreen     fix available ---> glibc-2.11.3-12.66.1
12.3               fix available ---> glibc-2.17-4.17.1


削除されたglibcをまだ使用しているパッケージ/アプリケーションは何ですか?

ジルへのクレジット

CentOS / RHEL / Fedora / Scientific Linuxの場合:

   lsof -o / | awk '
   BEGIN {
       while (("rpm -ql glibc | grep \\\\.so\\$" | getline) > 0)
           libs[$0] = 1
   }
   $4 == "DEL" && $8 in libs {print $1, $2}'

Ubuntu / Debian Linuxの場合:

   lsof -o / | awk '
   BEGIN {
       while (("dpkg -L libc6:amd64 | grep \\\\.so\\$" | getline) > 0)
           libs[$0] = 1
   }
   $4 == "DEL" && $8 in libs {print $1, $2}'

LinuxシステムではどのCラ​​イブラリ(glibc)バージョンを使用していますか?

バージョン番号を確認する最も簡単な方法は、次のコマンドを実行することです。

ldd --version

RHEL / CentOS Linux v6.6からのサンプル出力:

ldd (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

Ubuntu Linux 12.04.5 LTSからのサンプル出力:

ldd (Ubuntu EGLIBC 2.15-0ubuntu10.9) 2.15
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

Debian Linux v7.8からのサンプル出力:

ldd (Debian EGLIBC 2.13-38+deb7u6) 2.13
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

GHOST脆弱性チェック

シカゴ大学は、簡単にダウンロードできるように次のスクリプトをホストしています。

$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
[OR]
$ curl -O https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
$ gcc GHOST.c -o GHOST
$ ./GHOST
[responds vulnerable OR not vulnerable ]
/* ghosttest.c:  GHOST vulnerability tester */
/* Credit: http://www.openwall.com/lists/oss-security/2015/01/27/9 */
#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);
}

次のようにコンパイルして実行します。

$ gcc ghosttester.c -o ghosttester
$ ./ghosttester
[responds vulnerable OR not vulnerable ]

Red Hat Access Lab:GHOSTツールこのツールは使用しないでください。そのレポートは間違っています。Qualysの脆弱性チェッカーは正確です。


パッチ適用


CentOS / RHEL / Fedora / Scientific Linux

sudo yum clean all
sudo yum update

次に、再起動して有効にします。

sudo reboot

または、ミラーに最新のパッケージが含まれていない場合は、手動でダウンロードするだけです。*注:上級ユーザー向け

CentOS 5

http://mirror.centos.org/centos/5.11/updates/x86_64/RPMS/

CentOS 6

mkdir ~/ghostupdate
cd ~/ghostupdate

wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-common-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/nscd-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-static-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-headers-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-utils-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-static-2.12-1.149.el6_6.5.i686.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.i686.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.i686.rpm

yum localupdate *.rpm [OR] rpm -Uvh *.rpm

Ubuntu / Debian Linux

sudo apt-get clean
sudo apt-get update
sudo apt-get dist-upgrade

再起動:

sudo reboot

SUSE Linux Enterprise

このSUSEセキュリティアップデートをインストールするには、YaST online_updateを使用します。または、バージョンごとに次のコマンドを使用します。

SUSE Linux Enterprise Software Development Kit 11 SP3

zypper in -t patch sdksp3-glibc-10206

SUSE Linux Enterprise Server 11 SP3 for VMware

zypper in -t patch slessp3-glibc-10206

SUSE Linux Enterprise Server 11 SP3

zypper in -t patch slessp3-glibc-10206

SUSE Linux Enterprise Server 11 SP2 LTSS

zypper in -t patch slessp2-glibc-10204

SUSE Linux Enterprise Server 11 SP1 LTSS

zypper in -t patch slessp1-glibc-10202

SUSE Linux Enterprise Desktop 11 SP3

zypper in -t patch sledsp3-glibc-10206

最後に、すべてのSUSE linuxバージョンで実行して、システムを最新の状態にします。

zypper patch

OpenSUSE Linux

OpenSUSE Linux上のglibcを含む利用可能なアップデートのリストを表示するには、次のように入力します。

zypper lu

インストールされたglibcパッケージを新しいバージョンで更新するには、次を実行します。

zypper up

マシンで実行されているほぼすべてのプログラムがglibcを使用しています。glibcを使用するすべてのサービスまたはアプリを再起動して、パッチを有効にする必要があります。したがって、再起動をお勧めします。


システムを再起動または影響せずにinitを再起動する方法は?

telinit u

'man telinit'-init(8)デーモンが自身を再実行することを要求するUまたはu。Upstartは現在その状態を保持できないため、これはお勧めしませんが、システムライブラリをアップグレードする場合に必要です。


限られた方法で脅威をすぐに軽減するには、すべての公共向けサービスで逆引きDNSチェックを無効にします。たとえば、にを設定UseDNSすることにより、SSHでDNS逆引きチェックを無効にできnoます/etc/ssh/sshd_config

ソース(および詳細):

  1. https://access.redhat.com/articles/1332213
  2. http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux/
  3. http://www.openwall.com/lists/oss-security/2015/01/27/9
  4. /security/80210/ghost-bug-is-there-a-simple-way-to-test-if-my-system-is-secure
  5. http://bobcares.com/blog/ghost-hunting-resolving-glibc-remote-code-execution-vulnerability-cve-2015-0235-in-centos-red-hat-ubuntu-debian-and-suse-linux-サーバー
  6. https://community.qualys.com/blogs/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability
  7. https://security-tracker.debian.org/tracker/CVE-2015-0235

1
Nitpick:脆弱性テストコードは、OpenwallではなくQualysからのものです。リンクされているOpenwallの投稿は、メーリングリストに投稿されたQualysアドバイザリです。
ムル

「glibcに依存するアプリケーション/システムユーティリティの数が多いため」 ->そのようなものを削除するか、コンパイルされた非常に奇妙なものを除いて、完全にすべてが直接libcに依存するという事実を強調する巨大な静的塊。BTWに感謝します!
goldilocks

@goldilocks、提案をありがとう。私はいくつかの他のものと一緒にそれを編集しました。助かります!
devnull
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.