Interested Article - Bashdoor

Bashdoor (также англ. Shellshock ) — серия программных уязвимостей , обнаруженных в программе GNU Bash в сентябре 2014 года и открыто опубликованных 24 сентября . Множество интернет-сервисов , в том числе веб-серверы , могут использовать Bash для обработки некоторых запросов, например при исполнении CGI -скриптов. Уязвимость позволяет атакующему исполнять произвольные команды, получив неправомерный доступ к компьютерным системам .

Уязвимости заключаются в том, что Bash вопреки задекларированным возможностям производит исполнение команд при получении некоторых нестандартных значений переменных окружения ( environment ) . За несколько дней после публикации оригинальной уязвимости было обнаружено несколько сходных ошибок, что не позволило оперативно издать версию с исправлениями.

Изначальная ошибка была обнаружена Стефаном Шазеля ( фр. Stéphane Chazelas ) 12 сентября 2014 года , который предложил назвать её «bashdoor» (созвучно backdoor ) . Уязвимость получила в базе номер CVE-2014-6271 и оставалась неопубликованной (находилась под эмбарго ) до 14 часов по UTC 24 сентября. Цель вышеуказанного ограничения заключалась в том, что авторы программы, создатели дистрибутивов и иные заинтересованные организации получили время принять необходимые меры .

Анализ исходного кода Bash свидетельствует, что уязвимость была заложена в код приблизительно в версии 1.13 в 1992 году или ранее и с тех пор оставалась необнаруженной среди общей публики и незадекларированной . Группа авторов Bash затрудняется в определении точного времени внедрения ошибки из-за недостаточно подробной истории изменений ( changelog ) .

25 сентября 2014 года на базе уязвимости уже были созданы ботнеты для проведения DoS - и DDoS -атак, а также для сканирования уязвимостей . Предполагается, что уязвимы миллионы систем. Ошибка получила максимальную оценку по шкале опасности и сравнивается по значению с Heartbleed — ошибкой в OpenSSL (апрель 2014) .

Описание

Уязвимость Shellshock (bashdoor) относится к программе bash (разрабатывается в рамках проекта GNU ), используемой во множестве Unix -подобных операционных систем и дистрибутивов в качестве интерпретатора командной строки и для исполнения командных скриптов. Часто устанавливается в качестве системного интерпретатора по умолчанию.

В Unix-подобных и других поддерживаемых bash операционных системах каждая программа имеет список пар имя-значение, называемый переменными среды ( англ. environment variable ). Когда одна программа запускает другую, то также передается изначальный список переменных среды . Кроме переменных среды, bash также поддерживает внутренний список функций — именованных скриптов, которые могут вызываться из исполняемого скрипта bash . При запуске новых экземпляров bash из существующего bash возможна передача (экспортирование, export ) значений существующих переменных окружения и определений функций в порождаемый процесс . Определения функций экспортируются путём кодирования их в виде новых переменных окружения специального формата, начинающегося с пустых скобок () , за которыми следует определение функции в виде строки. Новые экземпляры bash при своем запуске сканируют все переменные среды, детектируя данный формат и преобразовывая его обратно в определение внутренней функции . Данное преобразование проводится путём создания фрагмента bash-кода на базе значения переменной среды и его исполнения, то есть «на лету» ( англ. on-the-fly ). Подверженные уязвимости версии bash не производят проверок, что исполняемый фрагмент содержит лишь определение функции . Таким образом, если злоумышленник имеет возможность подать произвольную переменную среды в запуск bash, то появляется возможность исполнения произвольных команд.

27 сентября был опубликован качественный патч, который добавляет ко всем экспортируемым и импортируемым функциям специальный префикс при их преобразовании в переменные окружения и обратно .

Последующие эпизоды эксплуатирования bash

В тот же день, когда была опубликована информация об оригинальной уязвимости и патчи, исправляющие её, Tavis Ormandy обнаружил новую родственную ошибку CVE-2014-7169 . Обновлённые исправления стали доступны 26 сентября .

Во время работы над исправлением оригинальной ошибки Shellshock, исследователь компании Red Hat, Florian Weimer обнаружил ещё две ошибки: CVE-2014-7186 и CVE-2014-7187 .

26 сентября 2014 два разработчика open-source, и Norihiro Tanaka заметили, что существуют дополнительные проблемы, всё ещё не исправленные патчами, доступными на тот момент. В своём электронном письме в почтовые списки рассылок «oss-sec» и «bash bug» Wheeler писал:

Этот патч лишь продолжает работы типа «прибей крота» ( ) по исправлению различных ошибок разбора, начатый первым патчем. Парсер bash конечно же содержит много много много других уязвимостей.

27 сентября 2014, анонсировал, что обнаружил несколько других ошибок в bash , одна из которых использует то, что bash часто компилируется без использования техники защиты ASLR ( Address Space Layout Randomization ) . Zalewski также призвал срочно применить патч от Florian Weimer .

Список уязвимостей

CVE-2014-6271

Оригинальный bashdoor: переменная окружения специального вида состоит из определения экспортируемой функции, за которым следуют произвольные команды. Bash уязвимых версий исполняет эти произвольные команды во время своего запуска . Пример ошибки:

env x='() { :;}; echo Уязвим' bash -c "echo Тестовая печать"

В уязвимых системах этот тест напечатает фразу «Уязвим», выполнив команду из переменной окружения x .

CVE-2014-6277

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

CVE-2014-6278

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

CVE-2014-7169

Обнаружено во время работы над CVE-2014-6271 :

env X='() { (a)=>\' sh -c "echo date"; cat echo

Тест приводит к тому, что «echo» становится именем файла для перенаправления вывода, а «date» исполняется. Ошибка получила номер CVE-2014-7169 .

Пример ошибки 7169 на системе, получившей исправление ошибки но не ошибки :

$ X='() { (a)=>\' bash -c "echo date"
bash: X: line 1: syntax error near unexpected token `='
bash: X: line 1: `'
bash: error importing function definition for `X'
[root@ ec2-user]# cat echo
Fri Sep 26 01:37:16 UTC 2014

Исправление обеих ошибок и приведет к неработоспособности теста:

$ X='() { (a)=>\' bash -c "echo date"
date
$ cat echo
cat: echo: No such file or directory

CVE-2014-7186

Ошибка вызвана сходными проблемами в коде Bash однако воздействует с помощью многократного повторения "<<EOF"

Тест
bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' ||
echo "Уязвим по CVE-2014-7186, redir_stack"
Уязвимая система отобразит текст "Уязвим по CVE-2014-7186, redir_stack".

CVE-2014-7187

Ошибка вызвана сходными проблемами в коде Bash , однако воздействует с помощью множественных повторений «done»

Тест
(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash ||
echo "Уязвим по CVE-2014-7187, word_lineno"
Уязвимая система отобразит текст «Уязвим по CVE-2014-7187, word_lineno».

Векторы атаки

В течение часа после публикации уязвимости Bash появились сообщения о взломе компьютерных систем с её помощью. 25 сентября были подтверждены различные атаки «in the wild», начиная с простых DoS , заканчивая развёртыванием серверов command & control через зловредную систему «BASHLITE» . Корпорация Kaspersky Labs сообщала, что некоторые из зараженных компьютеров начали атаку DDoS против трех целей . 26 сентября был обнаружен ботнет «wopbot», составленный из серверов, зараженных через bashdoor, и используемый в DDoS против CDN Akamai Technologies и для сканирования сетей Министерства обороны США .

Существует несколько потенциальных путей, которыми атакующий может воспользоваться для передачи произвольных переменных окружения в bash, исполняемый на атакуемом сервере:

CGI-атака на веб-сервера

Веб-сервера, исполняющие скрипты Common Gateway Interface (CGI) передают подробности о пользовательском запросе через переменные окружения, например HTTP_USER_AGENT. Если запрос обрабатывается программой Bash, либо другой программой, которая внутри себя вызывает bash, то атакующий может подменить передаваемую по http строку User-Agent на триггер атаки Shellshock, добавив свои команды . Например, в качестве такой команды может подаваться инструкция «ping» с адресом атакующего. По входящим ping-запросам атакующий узнает, сработала ли атака.

Несмотря на то, что CGI — устаревший интерфейс, обладающий и другими рисками безопасности , он всё ещё используется. Например, уязвим один из стандартных скриптов cPanel , по оценкам уязвимый cPanel может использоваться на 2—3 % веб-сайтов .

Атака на SSH-сервер

SSH-сервер OpenSSH позволяет ограничивать пользователя фиксированным набором доступных команд (опция «ForceCommand»). Фиксированная команда исполняется даже если пользователь запросил исполнение иной команды. Запрошенная команда в этом случае сохраняется в переменной среды «SSH_ORIGINAL_COMMAND». Если фиксированная команда исполняется в интерпретаторе Bash shell (если пользовательский интерпретатор установлен в Bash), GNU Bash обнаружит заложенные в среду значения SSH_ORIGINAL_COMMAND при запуске, и, в случае уязвимости перед Bashdoor, исполнит встроенные туда команды. Таким образом атакующий с доступом лишь к ограниченной оболочке получает неограниченный доступ .

Атака на DHCP-клиент

DHCP -клиент обычно запрашивает IP адрес у DHCP-сервера. Однако сервер может послать несколько дополнительных опций, которые могут записываться в переменные среды и приводить к эксплуатации ошибки Shellshock на компьютере или ноутбуке, подключаемом к локальной сети .

Повышение привилегий через setuid программы

Программа с установленным битом setuid может вызывать bash непосредственно, либо косвенно при использовании системных вызовов , popen и других, не сбрасывая при этом переменные окружения. Атака Shellshock в таких случаях позволит локальному пользователю повысить собственные привилегии до владельца подобной setuid программы, часто вплоть до root (суперпользователя).

Уязвимость офлайн-систем

Ошибка потенциально может достичь систем, не подключённых к сети Интернет, во время офлайн-обработки с помощью bash .

Примечания

  1. Perlroth, Nicole (25 September 2014). . New York Times . из оригинала 5 апреля 2019 . Дата обращения: 25 сентября 2014 .
  2. Staff. The Safe Mac (25 сентября 2014). Дата обращения: 27 сентября 2014. 29 сентября 2014 года.
  3. . Дата обращения: 26 сентября 2014. Архивировано из 6 октября 2014 года.
  4. Leyden, John . The Register (24 сентября 2014). Дата обращения: 25 сентября 2014. 16 октября 2014 года.
  5. . Openwall . Дата обращения: 26 сентября 2014. 28 сентября 2014 года.
  6. от 14 октября 2014 на Wayback Machine — Unix & Linux Stack Exchange
  7. Saarinen, Juha (26 Septemberr 2014). . iTnews . из оригинала 29 сентября 2014 . Дата обращения: 26 сентября 2014 . {{ cite news }} : Проверьте значение даты: |date= ( справка )
  8. Greenberg, Andy . Wired (25 сентября 2014). Дата обращения: 28 сентября 2014. 1 января 2017 года.
  9. . « Российская газета » . 2014-09-25. из оригинала 27 сентября 2014 . Дата обращения: 29 сентября 2014 .
  10. . РБК . 2014-09-25. из оригинала 28 сентября 2014 . Дата обращения: 29 сентября 2014 .
  11. . Дата обращения: 29 сентября 2014. 9 октября 2014 года.
  12. . Дата обращения: 29 сентября 2014. 28 сентября 2014 года.
  13. . Дата обращения: 29 сентября 2014. 28 сентября 2014 года.
  14. . Дата обращения: 29 сентября 2014. 21 апреля 2017 года.
  15. Steven J. Vaughan-Nichols (2014-09-27). (англ.) . ZDNet. из оригинала 29 сентября 2014 . Дата обращения: 29 сентября 2014 .
  16. . Дата обращения: 26 сентября 2014. 28 сентября 2014 года.
  17. . Дата обращения: 26 сентября 2014. Архивировано из 26 сентября 2014 года.
  18. . Дата обращения: 26 сентября 2014. 6 октября 2014 года.
  19. . Дата обращения: 26 сентября 2014. 28 сентября 2014 года.
  20. . Дата обращения: 26 сентября 2014. 28 сентября 2014 года.
  21. (26 сентября 2014). Дата обращения: 26 сентября 2014. 29 сентября 2014 года.
  22. (26 сентября 2014). Дата обращения: 26 сентября 2014. 6 октября 2014 года.
  23. ' ' — популярный игровой автомат, в переносном смысле — повторяющаяся безвыигрышная задача
  24. Gallagher, Sean . Arstechnica (26 сентября 2014). Дата обращения: 26 сентября 2014. 8 января 2017 года.
  25. Saarinen, Juha . iTnews (29 сентября 2014). Дата обращения: 29 сентября 2014. 29 сентября 2014 года.
  26. lcamtuf. . lcamtuf's blog (27 сентября 2014). Дата обращения: 29 сентября 2014.
  27. Staff. . (28 сентября 2014). Дата обращения: 28 сентября 2014. 29 сентября 2014 года.
  28. . Дата обращения: 29 сентября 2014. 25 сентября 2014 года.
  29. . Дата обращения: 29 сентября 2014. 25 сентября 2014 года.
  30. Staff. . National Institute of Standards and Technology (27 сентября 2014). Дата обращения: 28 сентября 2014. 5 октября 2014 года.
  31. Staff. . Common Vulnerabilities and Exposures (9 сентября 2014). Дата обращения: 29 сентября 2014. 23 мая 2015 года.
  32. HOST. Дата обращения: 26 сентября 2014. Архивировано из 9 октября 2014 года.
  33. Sidhpurwala, Huzaifa; Weimer, Florian . oss-security mailing lists . Openwall. — «Internal analysis revealed two out-of-bounds array accesses in the bash parser. This was also independently and privately reported by Todd Sabin <[email protected]>.» Дата обращения: 27 сентября 2014. 28 сентября 2014 года.
  34. Various. . Trend Micro (26 сентября 2014). Дата обращения: 26 сентября 2014. 28 сентября 2014 года.
  35. Various. . BBC (26 сентября 2014). Дата обращения: 26 сентября 2014. 29 сентября 2014 года.
  36. Various. . Reddit (24 сентября 2014). Дата обращения: 26 сентября 2014.
  37. . Дата обращения: 29 сентября 2014. 9 октября 2014 года.
  38. . Дата обращения: 29 сентября 2014. 6 октября 2014 года.
  39. . Дата обращения: 30 сентября 2014. 29 сентября 2014 года.
  40. от 25 сентября 2014 на Wayback Machine , Geoff Walton, TrustedSec
  41. . Xakep.ru. 2014-09-26. из оригинала 29 сентября 2014 . Дата обращения: 30 сентября 2014 .
  42. от 27 сентября 2014 на Wayback Machine , Daniel Fox Franke, Akamai

Ссылки

  • от 25 сентября 2011 на Wayback Machine &
    • CVE-2014-6271 — & ( first bug )
    • CVE-2014-6277 — & (under review)
    • CVE-2014-6278 — & (under review)
    • CVE-2014-7169 — & ( second bug )
    • CVE-2014-7186 — & (under review)
    • CVE-2014-7187 — & (under review)
  • от проекта GNU, включая патчи
  • // 3dnews, 26.09.2014
  • // Ferra.ru, 25.09.2014
  • // TJournal, 25.09.2014
  • // Brian Donohue, 26 Сентябрь 2014
  • // Roem, 2014-09-26
  • // Xakep, 2014-09-25
  • от 22 октября 2014 на Wayback Machine // Threat Post, 2014-09-26
  • // Cnews, 2014-09-25
Источник —

Same as Bashdoor