Компания
310,77
рейтинг
28 января 2015 в 16:06

Разработка → Новая уязвимость GHOST угрожает популярным дистрибутивам на базе Linux

image

Уязвимость в распространенных дистрибутивах Linux может позволить злоумышленнику получить удаленный контроль над системой. Под ударом оказались пользователи Debian 7 (wheezy), Red Hat Enterprise Linux 6 & 7, CentOS 6 & 7, Ubuntu 12.04. Также уязвимы Zend Framework v2, Wordpress и ряд других популярных приложений.

Информация о новой уязвимости (CVE-2015-0235) в библиотеке glibc (GNU C Library) впервые была опубликована во французской рассылке. Некоторые специалисты считают, что это было сделано по ошибке, так как к тому моменту никто не успел подготовить обновления.

Подробное техническое описание уязвимости и эксплойт для уязвимости можно найти на Openwall, а первые описания были опубликованы в сообществе Rapid 7.

В чем проблема


Специалистам, обнаружившим уязвимость, удалось подготовить специально сформированное email-сообщение, эксплуатирующее уязвимость в почтовом сервере Exim под управлением уязвимой версии Glibc. Стоит заметить, что Exim весьма широко распространен и в некоторых операционных системах является почтовым сервером по умолчанию. Но помимо этого потенциально могут быть проэксплуатированы и другие приложения:

  • SSH-серверы, использующие DNS-запросы при аутентификации с allow/deny.
  • Почтовые серверы с обратными DNS-запросами.
  • Многочисленные веб-приложения, которые по входным данным пользователя проводят DNS-запросы.
  • СУБД MySQL, которые проводят аутентификацию по доменным именам (MySQL privileges).

Уязвимость GHOST была обнаружена в библиотеке (glibc — функции gethostbyname() и gethostbyname2()), являющейся неотъемлемой частью Linux — десктоп-компьютеров под управлением этой ОС во всем мире не так много, а вот популяция работающих на ней серверов очень велика, а это значит, что под угрозой может оказаться сетевая инфраструктура большинства технологических проектов. В других реализациях libc (такие как uclibc, musl) уязвимость отсутствует.

Ошибке было присвоено имя GHOST («призрак») — сокращение, обыгрывающее названия уязвимых функций gethostbyname() и gethostbyname2().

По одной из версий, основанных на анализе метаданных логотипа с красным привидением, специалисты знали об этой уязвимости как минимум со 2 октября 2014 года и соблюдали условия ответственного разглашения, пока разработчики исправляли ошибку.

В чем отличие от Heartbleed и Shellshock


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

В сравнении с другой нашумевшей уязвимостью Shellshock, эксплуатация GHOST сложнее, поскольку позволяет выполнять бинарные инструкции, а не консольные команды — это значит, что для эксплуатации необходимо обойти механизмы защиты ядра Linux.

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


Для того чтобы обезопасить свои серверы, необходимо установить патч (заплатку), выпущенную поставщиком соответствующего Linux-дистрибутива. Информация об уязвимости появилась 27 января, поэтому уже сегодня (28 января) должны появиться первые патчи.

Кроме того, ресурс Cyberciti.biz опубликовал инструкцию по обнаружению всех сервисов, приложений и исполняемых файлов в дистрибутиве, связанных с уязвимой библиотекой glibc (GNU C Library), а также устранением ошибки.

image
Автор: @ptsecurity
Positive Technologies
рейтинг 310,77

Комментарии (28)

  • 0
    А перезапустить сервисы?
  • 0
    С того же сайта, указанного в статье: patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux.
    Там есть программа на C, которой можно проверить уязвима ли система или нет, прежде чем патчиться.
    • +1
      Немного дополню. Протестировать можно так:

      wget https://gist.githubusercontent.com/koelling/ef9b2b9d0be6d6dbab63/raw/de1730049198c64eaf8f8ab015a3c8b23b63fd34/gistfile1.c
      gcc gistfile1.c -o CVE-2015-0235
      ./CVE-2015-0235
      
      • 0
        А чем вас не устроил предыдущий вариант с отсылкой на оригинальный текст?
        В вашем случае надо проверить тот ли это код и ничего ли не поменяли, благо код небольшой, но это трата времени.
        • 0
          Всем устроил. Мне показалось, что такой вариант будет быстрее, если кому-то надо просто проверить уязвим или нет.
          • 0
            К слову, я сначала скачал, а потом код почитал. И только потом скомпилил и запустил.
          • 0
            Подписываюсь! Прога на Си пришлась очень полезной. Мне было проще открыть линк чтобы проверить небольшой код нежели открывать доки с кучей ненужной мне информации.
            Благодарю!
  • +3
    Вчера вечером вкратце упоминали, кстати: habrahabr.ru/company/dsec/blog/249007/
  • –38
    Сколько лет еще понадобиться, чтоб фраза «опенсоурс это безопасно из-за открытости кода» исчезла из обихода? =)
    • +25
      Нисколько, потому что такие инциденты этот тезис только подтверждают. Или это настолько неочевидно, что нужно каждый раз объяснять?
    • +16
      Ну «понадобится» же, ну. Или это настолько неочевидно, что нужно каждый раз объяснять?
      • +6
        Они еще «тся\ться» в школе не проходили, ну, что вы?..
  • –3
    [paranoid_mod_on]
    почему сразу уязвимость? обычный бэкдор.
    [paranoid_mod_off]
    • +5
      Это фигня. Я вот тут раскопал в nova.conf (кусок openstack'а) опцию backdoor_port = None (выключено по-умолчанию). Я понимаю, питон, эвентлеты и всё такое, для отладки, но название внушает.
  • +9
    Инструкция по исправлению ошибки — это же жесть
    sudo apt-get clean
    sudo apt-get update
    sudo apt-get dist-upgrade
    

    А если мне НЕ нужно обновляться до следующей версии дистрибутива?
    • +2
      Собственно обновить только libc не проблема
      sudo apt-get update
      sudo apt-get install libc-bin
      
      • 0
        И да, после обновления этим способом скрипт пишет, что уязвимости нет. Сервер перезагружать тоже не нужно. Рестарта сервисов вполне достаточно
        • 0
          Насчет перезагрузки, это чтобы гарантировано перезапустить все, что можно. Тест заработал с обновленной библиотекой, а sshd продолжает работать с загруженной в оперативку старой.
          • 0
            Думаете перезапуска сервисов не достаточно? Именно для этого перезапуск и придумали )
            • 0
              SSH-сервер даже после перезапуска сохраняет уже установленные соединения по понятным причинам. Так что в случае SSH нужно закрыть все пользовательские сессии и самому выйти :)
            • +1
              Не все оформлено как сервис. Особенно, если у вас какой-то самостоятельно скомпиленный демон на cron @ reboot подвешен.
    • +4
      apt-get dist-upgrade — это не обновление версии дистрибутива, ничего страшного в этой команде
    • +1
      >apt-get dist-upgrade
      >А если мне НЕ нужно обновляться до следующей версии дистрибутива?

      При чём тут обновление до следующей версии дистрибутива?
      Если в sources.list вы не указывали никаких новых версий дистрибутива, то ничего dist-upgrade без вашего ведома обновлять не будет.

      Вот подробное описание, чтобы понимали о чём речь:

      Иногда у вас уже установлен пакет и выходит новая версия, в которой есть много новых возможностей, поэтому, она теперь при работе зависит от некоторых других программ. Например, у вас уже может быть установлен видеопроигрыватель, который поддерживает много различных видеоформатов. Когда появляются новые видеоформаты, модули для них могут добавляться в виде отдельных пакетов, так что последняя версия видеоплейера теперь зависит от нового пакета, который еще не установлен в вашей системе. Если вы просто запустите команду apt-get upgrade, вы получите последний видеоплеер, но вы не получите все новые пакеты видеоформатов. Команда apt-get dist-upgrade позволит вам решить эту проблему: она не только получит самую последнюю версию каждого уже установленного пакета так, как это делает команда apt-get upgrade, но также установит все необходимые новые пакеты, которых еще может не быть в вашей системе. Если вы хотите, чтобы ваша система находилась в постоянно обновленном состоянии и в ней были использованы все обновления, связанные с безопасностью, лучший способ этого добиться — это время от времени запускать команды apt-get update; apt-get dist-upgrade


      >Собственно обновить только libc не проблема
      >sudo apt-get update
      >sudo apt-get install libc-bin

      Держать всю систему в актуальном состоянии очень важно. Обновлять отдельные компоненты дистрибутива конечно можно, но только когда это какой-нибудь zip/zsh, но когда речь идёт о glibc — лучше обновить всё, потому что это зависимость номер один в любой linux-системе.
  • +8
    Это уже третья статья по теме Ghost в хабе «Информационная безопасность». Я понимаю, всем хочется быстрее сообщить о проблеме, но вы хоть смотрите, прежде чем постить!
  • 0
    Проверил C-ым скриптом — vulnerable. Выполнил все рекомендации по обновлению… Всё равно vulnerable. «cat /etc/issue => Debian GNU/Linux 6.0»… :(
    • 0
      Даже после перезагрузки?
      • +1
        Да :( Впрочем, я кажется понял. У меня что попало в sources.list-е прописано. Вот и не обновилось ничего.
    • 0
      необходимо подключить LTS репозиторий, и будет счастья.
      root@vm ~ # grep lts /etc/apt/sources.list
      deb http://ftp.de.debian.org/debian squeeze-lts main
      root@vm ~ #
      

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка