Відповідь на моє запитання від 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
.
Джерела (та додаткова інформація):
- https://access.redhat.com/articles/1332213
- http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux/
- http://www.openwall.com/lists/oss-security/2015/01/27/9
- /security/80210/ghost-bug-is-there-a-simple-way-to-test-if-my-system-is-secure
- http://bobcares.com/blog/ghost-hunting-resolving-glibc-remote-code-execution-vulnerability-cve-2015-0235-in-centos-red-hat-ubuntu-debian-and-suse-linux- сервери
- https://community.qualys.com/blogs/laws-of-vulnerables/2015/01/27/the-ghost-vulnerability
- https://security-tracker.debian.org/tracker/CVE-2015-0235