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

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

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

Анализ исходного кода Bash свидетельствует, что уязвимость была заложена в код приблизительно в версии 1.13 в 1992 году или ранееbash — When was the shellshock (CVE-2014-6271/7169) bug introduced, and what is the patch that fully fixes it?  — Unix & Linux Stack Exchange и с тех пор оставалась необнаруженной среди общей публики и незадекларированной. Группа авторов Bash затрудняется в определении точного времени внедрения ошибки из-за недостаточно подробной истории изменений (changelog).

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

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

В Unix-подобных и других поддерживаемых bash операционных системах каждая программа имеет список пар имя-значение, называемый переменными среды (). Когда одна программа запускает другую, то также передаётся изначальный список переменных среды. Кроме переменных среды, bash также поддерживает внутренний список функций — именованных скриптов, которые могут вызываться из исполняемого скрипта bash. При запуске новых экземпляров bash из существующего bash возможна передача (экспортирование, export) значений существующих переменных окружения и определений функций в порождаемый процесс. Определения функций экспортируются путём кодирования их в виде новых переменных окружения специального формата, начинающегося с пустых скобок (), за которыми следует определение функции в виде строки. Новые экземпляры bash при своём запуске сканируют все переменные среды, детектируя данный формат и преобразовывая его обратно в определение внутренней функции. Данное преобразование проводится путём создания фрагмента bash-кода на базе значения переменной среды и его исполнения, то есть «на лету» (). Подверженные уязвимости версии 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, David A. Wheeler и Norihiro Tanaka заметили, что существуют дополнительные проблемы, всё ещё не исправленные патчами, доступными на тот момент. В своём электронном письме в почтовые списки рассылок «oss-sec» и «bash bug» Wheeler писал:

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

27 сентября 2014, Michal Zalewski анонсировал, что обнаружил несколько других ошибок в 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 Обнаружено Tavis Ormandy во время работы над CVE-2014-6271:

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

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

Пример ошибки 7169 на системе, получившей исправление ошибки CVE-2014-6271 но не ошибки CVE-2014-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

Исправление обеих ошибок CVE-2014-6271 и CVE-2014-7169 приведёт к неработоспособности теста:

$ 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 на компьютере или ноутбуке, подключённом к локальной сети«Shellshock DHCP RCE Proof of Concept» , Geoff Walton, TrustedSec.

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

Уязвимость офлайн-систем Ошибка потенциально может достичь систем, не подключённых к сети Интернет, во время офлайн-обработки с помощью bash«Collection of various attacks» , Daniel Fox Franke, Akamai.

Примечания

Ссылки

NIST National Vulnerability Database & CVE Common Vulnerabilities and Exposures CVE-2014-6271 — 20140924nist & 20140909cve (first bug) CVE-2014-6277 — 20140927nist & 20140909cve (under review) CVE-2014-6278 — XXXXXXXXnist & 20140909cve (under review) CVE-2014-7169 — 20140924nist & 20140924cve (second bug) CVE-2014-7186 — XXXXXXXXnist & 20140925cve (under review) CVE-2014-7187 — XXXXXXXXnist & 20140925cve (under review) Исходники Bash от проекта GNU, включая патчи Интернет снова под угрозой: в командной оболочке Bash обнаружена масштабная уязвимость // 3dnews, 26.09.2014 Уязвимость в Bash для OS X и Linux позволяет хакерам захватить контроль над системой // Ferra.ru, 25.09.2014 Баг в командной оболочке Bash позволял хакерам годами контролировать компьютеры на Linux и Mac OS // TJournal, 25.09.2014 Уязвимость Bash: почему это касается всех // Brian Donohue, 26 Сентябрь 2014 Уязвимости bash оказались подвержены даже F5 Big-IP // Roem, 2014-09-26 Уязвимость ShellShock опаснее, чем Heartbleed // Xakep, 2014-09-25 ЗАКРЫТЬ УЯЗВИМОСТЬ BASH В АСУ И SCADA БУДЕТ НЕПРОСТО // Threat Post, 2014-09-26 В Linux и Unix найдена масштабная многолетняя «дыра» // Cnews, 2014-09-25

Категория:Ошибки программирования Категория:Уязвимости защиты Категория:Информационная безопасность