Bashdoor
Bashdoor (также англ. Shellshock[1]) — серия программных уязвимостей, обнаруженных в программе GNU Bash в сентябре 2014 года и открыто опубликованных 24 сентября[2]. Множество интернет-сервисов, в том числе веб-серверы, могут использовать Bash для обработки некоторых запросов, например при исполнении CGI-скриптов. Уязвимость позволяет атакующему исполнять произвольные команды, получив неправомерный доступ к компьютерным системам[3].
Уязвимости заключаются в том, что Bash вопреки задекларированным возможностям производит исполнение команд при получении некоторых нестандартных значений переменных окружения (environment)[1][4]. За несколько дней после публикации оригинальной уязвимости было обнаружено несколько сходных ошибок, что не позволило оперативно издать версию с исправлениями.
Изначальная ошибка была обнаружена Стефаном Шазеля [1] (фр. Stéphane Chazelas) 12 сентября 2014 года[1], который предложил назвать её «bashdoor» (созвучно backdoor)[1]. Уязвимость получила в базе MITRE номер CVE-2014-6271 и оставалась неопубликованной (находилась под эмбарго) до 14 часов по UTC 24 сентября. Цель вышеуказанного ограничения заключалась в том, что авторы программы, создатели дистрибутивов и иные заинтересованные организации получили время принять необходимые меры[5].
Анализ исходного кода Bash свидетельствует, что уязвимость была заложена в код приблизительно в версии 1.13 в 1992 году или ранее[6] и с тех пор оставалась необнаруженной среди общей публики и незадекларированной[4]. Группа авторов Bash затрудняется в определении точного времени внедрения ошибки из-за недостаточно подробной истории изменений (changelog)[1].
25 сентября 2014 года на базе уязвимости уже были созданы ботнеты для проведения DoS- и DDoS-атак, а также для сканирования уязвимостей[7][8]. Предполагается, что уязвимы миллионы систем. Ошибка получила максимальную оценку по шкале опасности и сравнивается по значению с Heartbleed — ошибкой в OpenSSL (апрель 2014)[9][10].
Описание
Уязвимость Shellshock (bashdoor) относится к программе bash (разрабатывается в рамках проекта GNU), используемой во множестве Unix-подобных операционных систем и дистрибутивов в качестве интерпретатора командной строки и для исполнения командных скриптов. Часто устанавливается в качестве системного интерпретатора по умолчанию.
В Unix-подобных и других поддерживаемых bash операционных системах каждая программа имеет список пар имя-значение, называемый переменными среды (англ. environment variable). Когда одна программа запускает другую, то также передается изначальный список переменных среды[11]. Кроме переменных среды, bash также поддерживает внутренний список функций — именованных скриптов, которые могут вызываться из исполняемого скрипта bash[12]. При запуске новых экземпляров bash из существующего bash возможна передача (экспортирование, export) значений существующих переменных окружения и определений функций в порождаемый процесс[13]. Определения функций экспортируются путём кодирования их в виде новых переменных окружения специального формата, начинающегося с пустых скобок ()
, за которыми следует определение функции в виде строки. Новые экземпляры bash при своем запуске сканируют все переменные среды, детектируя данный формат и преобразовывая его обратно в определение внутренней функции[14]. Данное преобразование проводится путём создания фрагмента bash-кода на базе значения переменной среды и его исполнения, то есть «на лету» (англ. on-the-fly). Подверженные уязвимости версии bash не производят проверок, что исполняемый фрагмент содержит лишь определение функции[14]. Таким образом, если злоумышленник имеет возможность подать произвольную переменную среды в запуск bash, то появляется возможность исполнения произвольных команд.
27 сентября был опубликован качественный патч, который добавляет ко всем экспортируемым и импортируемым функциям специальный префикс при их преобразовании в переменные окружения и обратно[15].
Последующие эпизоды эксплуатирования bash
В тот же день, когда была опубликована информация об оригинальной уязвимости и патчи, исправляющие её, Tavis Ormandy обнаружил новую родственную ошибку CVE-2014-7169[3]. Обновлённые исправления стали доступны 26 сентября[3][16][17][18][19][20].
Во время работы над исправлением оригинальной ошибки Shellshock, исследователь компании Red Hat, Florian Weimer обнаружил ещё две ошибки: CVE-2014-7186 и CVE-2014-7187[21][22].
26 сентября 2014 два разработчика open-source, David A. Wheeler и Norihiro Tanaka заметили, что существуют дополнительные проблемы, всё ещё не исправленные патчами, доступными на тот момент. В своём электронном письме в почтовые списки рассылок «oss-sec» и «bash bug» Wheeler писал:
Этот патч лишь продолжает работы типа «прибей крота» (whac-a-mole)[23] по исправлению различных ошибок разбора, начатый первым патчем. Парсер bash конечно же содержит много много много других уязвимостей.
Оригинальный текст (англ.)This patch just continues the 'whack-a-mole' job of fixing parsing errors that began with the first patch. Bash's parser is certain [to] have many many many other vulnerabilities— [24]
27 сентября 2014, Michal Zalewski анонсировал, что обнаружил несколько других ошибок в bash[25][26], одна из которых использует то, что bash часто компилируется без использования техники защиты ASLR (Address Space Layout Randomization)[27]. Zalewski также призвал срочно применить патч от Florian Weimer[25][26][27].
Список уязвимостей
CVE-2014-6271
Оригинальный bashdoor: переменная окружения специального вида состоит из определения экспортируемой функции, за которым следуют произвольные команды. Bash уязвимых версий исполняет эти произвольные команды во время своего запуска[28]. Пример ошибки:
env x='() { :;}; echo Уязвим' bash -c "echo Тестовая печать"
В уязвимых системах этот тест напечатает фразу «Уязвим», выполнив команду из переменной окружения x[29].
CVE-2014-6277
На 29 сентября детали уязвимости публично не раскрывались[25][27][30].
CVE-2014-6278
На 29 сентября детали уязвимости публично не раскрывались[25][31].
CVE-2014-7169
Обнаружено Tavis Ormandy во время работы над CVE-2014-6271:
env X='() { (a)=>\' sh -c "echo date"; cat echo
Тест приводит к тому, что «echo» становится именем файла для перенаправления вывода, а «date» исполняется. Ошибка получила номер CVE-2014-7169[3].
Пример ошибки 7169 на системе, получившей исправление ошибки CVE-2014-6271 но не ошибки CVE-2014-7169:[32]
$ 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[33] однако воздействует с помощью многократного повторения "<<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[33], однако воздействует с помощью множественных повторений «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»[34][35]. Корпорация Kaspersky Labs сообщала, что некоторые из зараженных компьютеров начали атаку DDoS против трех целей[8]. 26 сентября был обнаружен ботнет «wopbot», составленный из серверов, зараженных через bashdoor, и используемый в DDoS против CDN Akamai Technologies и для сканирования сетей Министерства обороны США[7].
Существует несколько потенциальных путей, которыми атакующий может воспользоваться для передачи произвольных переменных окружения в bash, исполняемый на атакуемом сервере:
CGI-атака на веб-сервера
Веб-сервера, исполняющие скрипты Common Gateway Interface (CGI) передают подробности о пользовательском запросе через переменные окружения, например HTTP_USER_AGENT. Если запрос обрабатывается программой Bash, либо другой программой, которая внутри себя вызывает bash, то атакующий может подменить передаваемую по http строку User-Agent на триггер атаки Shellshock, добавив свои команды[36]. Например, в качестве такой команды может подаваться инструкция «ping» с адресом атакующего. По входящим ping-запросам атакующий узнает, сработала ли атака.
Несмотря на то, что CGI — устаревший интерфейс, обладающий и другими рисками безопасности[37], он всё ещё используется. Например, уязвим один из стандартных скриптов cPanel[38], по оценкам уязвимый cPanel может использоваться на 2—3 % веб-сайтов[39].
Атака на SSH-сервер
SSH-сервер OpenSSH позволяет ограничивать пользователя фиксированным набором доступных команд (опция «ForceCommand»). Фиксированная команда исполняется даже если пользователь запросил исполнение иной команды. Запрошенная команда в этом случае сохраняется в переменной среды «SSH_ORIGINAL_COMMAND». Если фиксированная команда исполняется в интерпретаторе Bash shell (если пользовательский интерпретатор установлен в Bash), GNU Bash обнаружит заложенные в среду значения SSH_ORIGINAL_COMMAND при запуске, и, в случае уязвимости перед Bashdoor, исполнит встроенные туда команды. Таким образом атакующий с доступом лишь к ограниченной оболочке получает неограниченный доступ[3].
Атака на DHCP-клиент
DHCP-клиент обычно запрашивает IP адрес у DHCP-сервера. Однако сервер может послать несколько дополнительных опций, которые могут записываться в переменные среды и приводить к эксплуатации ошибки Shellshock на компьютере или ноутбуке, подключаемом к локальной сети[40][41].
Повышение привилегий через setuid программы
Программа с установленным битом setuid может вызывать bash непосредственно, либо косвенно при использовании системных вызовов system(3), popen и других, не сбрасывая при этом переменные окружения. Атака Shellshock в таких случаях позволит локальному пользователю повысить собственные привилегии до владельца подобной setuid программы, часто вплоть до root (суперпользователя).
Уязвимость офлайн-систем
Ошибка потенциально может достичь систем, не подключённых к сети Интернет, во время офлайн-обработки с помощью bash[42].
Примечания
- ↑ 1 2 3 4 5 Perlroth, Nicole (2014-09-25). "Security Experts Expect 'Shellshock' Software Bug in Bash to Be Significant". New York Times. Архивировано 5 апреля 2019. Дата обращения: 25 сентября 2014.
- ↑ Staff. What does the "Shellshock" bug affect? The Safe Mac (25 сентября 2014). Дата обращения: 27 сентября 2014. Архивировано 29 сентября 2014 года.
- ↑ 1 2 3 4 5 The Laws of Vulnerabilities . Дата обращения: 26 сентября 2014. Архивировано из оригинала 6 октября 2014 года.
- ↑ 1 2 Leyden, John Patch Bash NOW: 'Shell Shock' bug blasts OS X, Linux systems wide open . The Register (24 сентября 2014). Дата обращения: 25 сентября 2014. Архивировано 16 октября 2014 года.
- ↑ oss-security - Re: CVE-2014-6271: remote code execution through bash . Openwall. Дата обращения: 26 сентября 2014. Архивировано 28 сентября 2014 года.
- ↑ bash — When was the shellshock (CVE-2014-6271/7169) bug introduced, and what is the patch that fully fixes it? Архивная копия от 14 октября 2014 на Wayback Machine — Unix & Linux Stack Exchange
- ↑ 1 2 Saarinen, Juha (26 Septemberr 2014). "First Shellshock botnet attacks Akamai, US DoD networks". iTnews. Архивировано 29 сентября 2014. Дата обращения: 26 сентября 2014.
{{cite news}}
: Проверьте значение даты:|date=
() - ↑ 1 2 Greenberg, Andy Hackers Are Already Using the Shellshock Bug to Launch Botnet Attacks . Wired (25 сентября 2014). Дата обращения: 28 сентября 2014. Архивировано 1 января 2017 года.
- ↑ "На сотнях миллионов компьютеров найдена опаснейшая уязвимость". «Российская газета». 2014-09-25. Архивировано 27 сентября 2014. Дата обращения: 29 сентября 2014.
- ↑ "Ошибка в оболочке Bash поставила под угрозу компьютеры на Linux и OS X". РБК. 2014-09-25. Архивировано 28 сентября 2014. Дата обращения: 29 сентября 2014.
- ↑ Open Group Base Specification: exec . Дата обращения: 29 сентября 2014. Архивировано 9 октября 2014 года.
- ↑ Bash Reference Manual: Shell functions . Дата обращения: 29 сентября 2014. Архивировано 28 сентября 2014 года.
- ↑ Bash Reference Manual: Bourne Shell Builtins . Дата обращения: 29 сентября 2014. Архивировано 28 сентября 2014 года.
- ↑ 1 2 Bash 4.3 source code, file variables.c, lines 315—388 . Дата обращения: 29 сентября 2014. Архивировано 21 апреля 2017 года.
- ↑ Steven J. Vaughan-Nichols (2014-09-27). "Shellshock: Better 'bash' patches now available" (англ.). ZDNet. Архивировано 29 сентября 2014. Дата обращения: 29 сентября 2014.
- ↑ Ubuntu . Дата обращения: 26 сентября 2014. Архивировано 28 сентября 2014 года.
- ↑ Red Hat . Дата обращения: 26 сентября 2014. Архивировано из оригинала 26 сентября 2014 года.
- ↑ Red Hat 2 . Дата обращения: 26 сентября 2014. Архивировано 6 октября 2014 года.
- ↑ CentOS 5.10 . Дата обращения: 26 сентября 2014. Архивировано 28 сентября 2014 года.
- ↑ CentOS 7 . Дата обращения: 26 сентября 2014. Архивировано 28 сентября 2014 года.
- ↑ FAQShellshock (26 сентября 2014). Дата обращения: 26 сентября 2014. Архивировано 29 сентября 2014 года.
- ↑ FAQShellshock2 (26 сентября 2014). Дата обращения: 26 сентября 2014. Архивировано 6 октября 2014 года.
- ↑ 'whack-a-mole' — популярный игровой автомат, в переносном смысле — повторяющаяся безвыигрышная задача
- ↑ Gallagher, Sean Still more vulnerabilities in bash? Shellshock becomes whack-a-mole . Arstechnica (26 сентября 2014). Дата обращения: 26 сентября 2014. Архивировано 8 января 2017 года.
- ↑ 1 2 3 4 Saarinen, Juha Further flaws render Shellshock patch ineffective . iTnews (29 сентября 2014). Дата обращения: 29 сентября 2014. Архивировано 29 сентября 2014 года.
- ↑ 1 2 lcamtuf. Bash bug: apply Florian's patch now (CVE-2014-6277 and CVE-2014-6278) . lcamtuf's blog (27 сентября 2014). Дата обращения: 29 сентября 2014.
- ↑ 1 2 3 Staff. Shellshock, Part 3: Three more security problems in Bash (in german) . Heise Online (28 сентября 2014). Дата обращения: 28 сентября 2014. Архивировано 29 сентября 2014 года.
- ↑ NVD — Detail . Дата обращения: 29 сентября 2014. Архивировано 25 сентября 2014 года.
- ↑ Bash specially-crafted environment variables code injection attack | Red Hat Security . Дата обращения: 29 сентября 2014. Архивировано 25 сентября 2014 года.
- ↑ Staff. National Cyber Awareness System Vulnerability Summary for CVE-2014-6277 . National Institute of Standards and Technology (27 сентября 2014). Дата обращения: 28 сентября 2014. Архивировано 5 октября 2014 года.
- ↑ Staff. CVE Report - CVE-2014-6278 . Common Vulnerabilities and Exposures (9 сентября 2014). Дата обращения: 29 сентября 2014. Архивировано 23 мая 2015 года.
- ↑ Are You Open to Being Shell-Shocked? HOST. Дата обращения: 26 сентября 2014. Архивировано из оригинала 9 октября 2014 года.
- ↑ 1 2 Sidhpurwala, Huzaifa; Weimer, Florian Non-upstream patches for bash . 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 <tsabin@...online.net>.» Дата обращения: 27 сентября 2014. Архивировано 28 сентября 2014 года.
- ↑ Various. Shellshock Updates: BASHLITE C&Cs Seen, Shellshock Exploit Attempts in Brazil . Trend Micro (26 сентября 2014). Дата обращения: 26 сентября 2014. Архивировано 28 сентября 2014 года.
- ↑ Various. Web attacks build on Shellshock bug . BBC (26 сентября 2014). Дата обращения: 26 сентября 2014. Архивировано 29 сентября 2014 года.
- ↑ Various. CVE-2014-6271 : Remote code execution through bash . Reddit (24 сентября 2014). Дата обращения: 26 сентября 2014.
- ↑ Apache HTTP Server 2.2 Documentation: Security Tips . Дата обращения: 29 сентября 2014. Архивировано 9 октября 2014 года.
- ↑ Bash Vulnerability Exploits Dropping DDoS Bots | Threatpost | The first stop for security news . Дата обращения: 29 сентября 2014. Архивировано 6 октября 2014 года.
- ↑ Website Security — Bash «Shell Shock» Vulnerability Impacts CPANEL Users | Sucuri Blog . Дата обращения: 30 сентября 2014. Архивировано 29 сентября 2014 года.
- ↑ «Shellshock DHCP RCE Proof of Concept» Архивная копия от 25 сентября 2014 на Wayback Machine, Geoff Walton, TrustedSec
- ↑ "Эксплоит Shellshock для DHCP-сервера". Xakep.ru. 2014-09-26. Архивировано 29 сентября 2014. Дата обращения: 30 сентября 2014.
- ↑ «Collection of various attacks» Архивная копия от 27 сентября 2014 на Wayback Machine, Daniel Fox Franke, Akamai
Ссылки
- NIST National Vulnerability Database Архивная копия от 25 сентября 2011 на Wayback Machine & 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 БУДЕТ НЕПРОСТО Архивная копия от 22 октября 2014 на Wayback Machine // Threat Post, 2014-09-26
- В Linux и Unix найдена масштабная многолетняя «дыра» // Cnews, 2014-09-25