Bashdoor

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

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

Изначальная ошибка была обнаружена Стефаном Шазеля (фр. 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 конечно же содержит много много много других уязвимостей.

[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. Perlroth, Nicole. Security Experts Expect ‘Shellshock’ Software Bug in Bash to Be Significant, New York Times (25 September 2014). Дата обращения 25 сентября 2014.
  2. Staff. What does the "Shellshock" bug affect?. The Safe Mac (25 September 2014). Дата обращения: 27 сентября 2014.
  3. The Laws of Vulnerabilities (недоступная ссылка). Дата обращения: 26 сентября 2014. Архивировано 6 октября 2014 года.
  4. Leyden, John Patch Bash NOW: 'Shell Shock' bug blasts OS X, Linux systems wide open. The Register (24 September 2014). Дата обращения: 25 сентября 2014.
  5. oss-security - Re: CVE-2014-6271: remote code execution through bash. Дата обращения: 26 сентября 2014.
  6. bash — When was the shellshock (CVE-2014-6271/7169) bug introduced, and what is the patch that fully fixes it? — Unix & Linux Stack Exchange
  7. Saarinen, Juha. First Shellshock botnet attacks Akamai, US DoD networks, iTnews (26 Septemberr 2014). Дата обращения 26 сентября 2014.
  8. Greenberg, Andy Hackers Are Already Using the Shellshock Bug to Launch Botnet Attacks. Wired (25 September 2014). Дата обращения: 28 сентября 2014.
  9. На сотнях миллионов компьютеров найдена опаснейшая уязвимость, РГ (25.09.2014). Дата обращения 29 сентября 2014.
  10. Ошибка в оболочке Bash поставила под угрозу компьютеры на Linux и OS X, РБК (25 сентября 2014). Дата обращения 29 сентября 2014.
  11. Open Group Base Specification: exec
  12. Bash Reference Manual: Shell functions
  13. Bash Reference Manual: Bourne Shell Builtins
  14. Bash 4.3 source code, file variables.c, lines 315—388
  15. Steven J. Vaughan-Nichols. Shellshock: Better 'bash' patches now available (англ.), ZDNet (27 September 2014). Дата обращения 29 сентября 2014.
  16. Ubuntu. Дата обращения: 26 сентября 2014.
  17. Red Hat (недоступная ссылка). Дата обращения: 26 сентября 2014. Архивировано 26 сентября 2014 года.
  18. Red Hat 2. Дата обращения: 26 сентября 2014.
  19. CentOS 5.10. Дата обращения: 26 сентября 2014.
  20. CentOS 7. Дата обращения: 26 сентября 2014.
  21. FAQShellshock (26 September 2014). Дата обращения: 26 сентября 2014.
  22. FAQShellshock2 (26 September 2014). Дата обращения: 26 сентября 2014.
  23. 'whack-a-mole' — популярный игровой автомат, в переносном смысле — повторяющаяся безвыигрышная задача
  24. Gallagher, Sean Still more vulnerabilities in bash? Shellshock becomes whack-a-mole. Arstechnica (26 September 2014). Дата обращения: 26 сентября 2014.
  25. Saarinen, Juha Further flaws render Shellshock patch ineffective. iTnews (29 September 2014). Дата обращения: 29 сентября 2014.
  26. lcamtuf. Bash bug: apply Florian's patch now (CVE-2014-6277 and CVE-2014-6278). lcamtuf's blog (27 September 2014). Дата обращения: 29 сентября 2014.
  27. Staff. Shellshock, Part 3: Three more security problems in Bash (in german). Heise Online (28 September 2014). Дата обращения: 28 сентября 2014.
  28. NVD — Detail
  29. Bash specially-crafted environment variables code injection attack | Red Hat Security
  30. Staff. National Cyber Awareness System Vulnerability Summary for CVE-2014-6277. National Institute of Standards and Technology (27 September 2014). Дата обращения: 28 сентября 2014.
  31. Staff. CVE Report - CVE-2014-6278. Common Vulnerabilities and Exposures (09 September 2014). Дата обращения: 29 сентября 2014.
  32. Are You Open to Being Shell-Shocked? (недоступная ссылка). HOST. Дата обращения: 26 сентября 2014. Архивировано 9 октября 2014 года.
  33. 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.
  34. Various. Shellshock Updates: BASHLITE C&Cs Seen, Shellshock Exploit Attempts in Brazil. Trend Micro (26 September 2014). Дата обращения: 26 сентября 2014.
  35. Various. Web attacks build on Shellshock bug. BBC (26 September 2014). Дата обращения: 26 сентября 2014.
  36. Various. CVE-2014-6271 : Remote code execution through bash. Reddit (24 September 2014). Дата обращения: 26 сентября 2014.
  37. Apache HTTP Server 2.2 Documentation: Security Tips
  38. Bash Vulnerability Exploits Dropping DDoS Bots | Threatpost | The first stop for security news
  39. Website Security — Bash «Shell Shock» Vulnerability Impacts CPANEL Users | Sucuri Blog
  40. «Shellshock DHCP RCE Proof of Concept» Архивная копия от 25 сентября 2014 на Wayback Machine, Geoff Walton, TrustedSec
  41. Эксплоит Shellshock для DHCP-сервера, Xakep.ru (26 сентября 2014). Дата обращения 30 сентября 2014.
  42. «Collection of various attacks» Архивная копия от 27 сентября 2014 на Wayback Machine, Daniel Fox Franke, Akamai

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.