Уязвимость Ghost

Ghost — новый враг ваших сайтов

На днях было заявлено об обнаружении новой уязвимости glibc, затрагивающей значительную часть прикладного ПО на Linux-системах, включая почтовые и веб-сервера. Также были опубликованы подробности атаки на EXIM-сервер.

Уязвимость связана с переполнением буфера в функциях gethostname библиотек glibc. Эти функции вызываются всеми прикладными программами, когда необходимо обработать входящий хост запроса (т.е. при значительном количестве пользовательских запросах). Переполнение памяти в совокупности со специально подобранными последующими запросами позволяет выполнять произвольный код на атакуемой системе (находящейся под управлением Linux систем).

Как защититься?

Если у вас есть контроль над серверным окружением, то необходимо выполнить обновление всех системных библиотек и перезапустить службы. Это устранит уязвимость сервера. Если контроля над серверным окружением у вас нет, то необходимо написать вашему хостинг провайдеру о необходимости обновления.

Если возможности полностью перезапустить сервер нет, то можно обновить все службы, использующие уязвимую библиотеку:

lsof | grep libc | awk '{print $1}' | sort | uniq

После этого получить список запущенных служб :

service --status-all | grep running

И последовательно перезапустить каждую службу.

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

Техническая подробности

Команда Openwall подготовила детальное исследование, как указанная уязвимость может быть использована и почему она настолько опасна. К счастью, использование уязвимости существенно зависит от приложение, на котором она будет эксплуатироваться. И требуется глубоко изучить архитектуру работы с памятью как приложения, так и операционной системы, чтобы корректно воспользоваться «дырой».

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

                            |< malloc_chunk       |< malloc_chunk
                            |                     |
-----|----------------------|---------------------+-------|----------+----|-----
 ... | gethostbyname buffer |p|s|f|b|F|B| aaaaaaa |p|s|f|b|F|B| r message | ...
-----|----------------------|---------------------+-------|----------+----|-----
                            |                     |        X         |
                            |<------------------->|< ---------------->|
                                allocated chunk        free chunk

Пока неизвестны корректные векторы атаки для других приложений — например, SSH, Apache или nginx — но их все нужно обновить во избежание угрозы.