Призрачная уязвимость - CVE-2015-0235

13

Требует ли Ghost Vulnerability доступ (как при входе в систему) к рассматриваемой операционной системе? Может кто-нибудь уточнить «удаленный злоумышленник, который может сделать вызов приложения»? Кажется, я только нахожу тесты для запуска в локальной системе напрямую, но не с удаленного хоста.

Всю информацию, которую я до сих пор собирал об Уязвимости Призрака из нескольких источников (ссылки на эти источники), я разместил ниже в ответе на случай, если кому-то еще будет любопытно.

Изменить, я нашел свой ответ :

Во время аудита кода исследователи Qualys обнаружили переполнение буфера в функции __nss_hostname_digits_dots () в glibc. Эта ошибка может быть вызвана как локально, так и удаленно через все функции gethostbyname * (). Приложения имеют доступ к преобразователю DNS в основном через набор функций gethostbyname * (). Эти функции преобразуют имя хоста в IP-адрес.

devnull
источник
возможно, добавьте некоторые ссылки на сайт безопасности SE, такие как security.stackexchange.com/q/80210/1341 и другие посты там же?
MattBianco
Муру, я перенес содержание в ответ. Спасибо за предложение. MattBianco, я также добавил эту ссылку, спасибо.
devnull
Я обновил вопрос, чтобы убрать любую двусмысленность.
devnull

Ответы:

20

Ответ на мой вопрос от Qualys :

Во время нашего тестирования мы разработали концептуальное доказательство, в котором мы отправляем специально созданную электронную почту на почтовый сервер и можем получить удаленную оболочку для компьютера с Linux. Это позволяет обойти все существующие средства защиты (например, ASLR, PIE и NX) как в 32-разрядных, так и в 64-разрядных системах.


Мое обобщенное исследование ниже для всех, кто ищет:


отказ

Несмотря на то, что многие другие темы / блоги могут рассказать вам, я советую не обновлять сразу все ваши ОС без всестороннего тестирования этих glibcобновлений. Сообщалось, что обновления glibc вызвали массовые ошибки в приложениях, заставив людей откатить свои обновления glibc до их предыдущей версии.

Нельзя просто массово обновить производственную среду без тестирования.


Исходная информация

GHOST - это ошибка 'переполнения буфера', затрагивающая вызовы функций gethostbyname () и gethostbyname2 () в библиотеке glibc. Эта уязвимость позволяет удаленному злоумышленнику, который может вызвать приложение к любой из этих функций, выполнить произвольный код с разрешениями пользователя, запускающего приложение.

Влияние

Вызовы функций 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}'

Какую версию библиотеки C (glibc) использует моя система Linux?

Самый простой способ проверить номер версии - выполнить следующую команду:

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 / Научный 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 для 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

Чтобы увидеть список доступных обновлений, включая glibc в OpenSUSE Linux, введите:

zypper lu

Чтобы просто обновить установленные пакеты glibc новыми доступными версиями, запустите:

zypper up

Почти каждая программа, работающая на вашем компьютере, использует glibc. Вам нужно перезапустить все службы или приложения, которые используют glibc, чтобы патч вступил в силу. Поэтому рекомендуется перезагрузка.


Как перезапустить init без перезагрузки или влияния на систему?

telinit u

'man telinit' - U или u, чтобы запросить повторное выполнение демона init (8). Это не рекомендуется, поскольку Upstart в настоящее время не может предварительно сохранить свое состояние, но это необходимо при обновлении системных библиотек.


Немедленно смягчить угрозу ограниченным способом, отключив обратные проверки DNS во всех общедоступных службах. Например, вы можете отключить проверку обратного DNS в SSH, установив UseDNSдля 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
devnull
источник
1
Nitpick: тестовый код на уязвимость взят из Qualys, а не из Openwall. Ссылка на Openwall, на которую ссылаются, является просто рекомендацией Qualys, размещенной в их списке рассылки.
Муру
«Из-за большого количества приложений / системных утилит, зависящих от glibc» -> Вы можете также убрать этот материал или подчеркнуть тот факт, что 100% абсолютно всего зависит напрямую от libc, за исключением очень странных вещей, которые были скомпилированы как гигантский статический комок. Спасибо это за BTW!
Златовласка
@goldilocks, спасибо за предложение. Я отредактировал это наряду с некоторыми другими вещами. Рад, что помогает!
devnull