Вразливість привидів - CVE-2015-0235


13

Чи потрібна вразливість Ghost (як і коли ви ввійшли в систему) до відповідної ОС? Чи може хтось уточнити "віддалений зловмисник, який може здійснити виклик програми"? Я, здається, знаходжу тести, які можна запустити безпосередньо в локальній системі, але не з віддаленого хоста.

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

Редагувати, я знайшов свою відповідь :

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


можливо, додайте кілька посилань на безпековий веб-сайт SE, наприклад, security.stackexchange.com/q/80210/1341 та інші повідомлення там?
MattBianco

Муру, я перемістив вміст у відповідь. Дякую за пропозицію. MattBianco, я також додав це посилання, дякую.
devnull

Я оновив питання, щоб усунути будь-яку неясність.
devnull

Відповіді:


20

Відповідь на моє запитання від Qualys :

Під час нашого тестування ми розробили доказову концепцію, в якій ми відправляємо спеціально створену електронну пошту на поштовий сервер і можемо отримати віддалену оболонку на машину Linux. Це обходить усі існуючі засоби захисту (наприклад, ASLR, PIE та NX) для 32-бітної та 64-бітної систем.


Нижче моє складене дослідження для всіх, хто шукає:


Відмова від відповідальності

Незважаючи на те, що може сказати вам багато інших тем / блогів, я раджу не одразу оновлювати кожну операційну систему, яку ви маєте наосліп, не ретельно перевіряючи ці glibcоновлення. Повідомлялося, що оновлення glibc призвели до масових segfault додатків, змушуючи людей повертати свої оновлення 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}'

Яку версію бібліотеки С (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 Lab 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 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

Нарешті запустіть для всіх версій Linux SUSE для оновлення вашої системи:

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-vulnerables/2015/01/27/the-ghost-vulnerability
  7. https://security-tracker.debian.org/tracker/CVE-2015-0235

1
Nitpick: код тестування на вразливість походить від Qualys, а не від Openwall. Повідомлення на Openwall, на яке посилається, - це просто рекомендація Qualys, розміщена в їх списку розсилки.
muru

"Через велику кількість застосунків / системних утиліт, залежних від glibc" -> Ви також можете вийняти ці речі або наголосити на тому, що 100% абсолютно всього залежить безпосередньо від libc, за винятком дуже дивних речей, які були складені як гігантський статичний грудочку. Дякую за BTW!
золотинок

@goldilocks, дякую за пропозицію. Я редагував це разом із деякими іншими речами. Радий, що допомагає!
devnull
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.