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 конечно же содержит много много много других уязвимостей.

[24]

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

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

[править | править код]

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

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

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

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

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

Обнаружено 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 

Ошибка вызвана сходными проблемами в коде 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".

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