Что такое эксплойт ?

XITAMI WEB SERVER 2.5B4: Удаленное переполнение буфера

9.3 (AV:N/AC:M/Au:N/C:C/I:C/A:C)

Brief

Xitami — web/ftp-сервер, первоначально создаваемый с 1996 по 2000 годы конторой iMatrix, как бесплатный продукт с открытыми исходными кодами. Работает он как одиночный процесс и не требует для своей работы больших объемов памяти. Xitami по скорости работы не дотягивает до быстрейших серверов, но по заверениям производителя является хорошо расширяемым решением. Более того, он поддерживает некоторое количество прикладных протоколов, а также имеет веб-интерфейс, через который можно конфигурировать web/ftp-сервер. Код эксплоита можно найти на популярном ресурсе exploit-db.com в разделе Remote Exploits. Для академических целей мы его слегка модифицируем под себя.

Exploit

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

> 192.168.178.37

Check please for the shell

Вместо полезной нагрузки, размещенной в скрипте автором, забацаем классический калькулятор. Сказано — сделано.

Вставляем данное добро в скрипт Xitami2_5b4.pl, генерирующий рабочий эксплоит, поднимаем сервер, запускаем скрипт, вбиваем ipадрес сервака и наблюдаем возникающий из ниоткуда кулькулятор. Ну а теперь немного подробней. Перезапись стека происходит на вызове функции _sscanf:

Таким образом стек выглядит после перезаписи (видим стандартную АААА…, начинающуюся с адреса 0x00c8fee8):

Сразу же после всех этих AAAAA… будет располагаться адрес возврата, которым мы переписали первоначальный адрес возврата. Так как в данном варианте эксплоита не ставится целью обход DEP’а, то и управление в дальнейшем нам надо будет передавать на стек. Посему необходимо искать что-то наподобие push esp — ret.

Сразу краткое замечание по поводу кода эксплоита. Необходимо внимательней смотреть на адрес, которым будет перетираться оригинальный, поскольку все это хардкод. На моей системе адрес push esp — ret немного отличался от авторского:

ws2_32.dll push ESP — ret — (Windows XP SP3 — ).

На моей системе:

Посмотреть данные адреса можно либо простым поиском по опкодам 0x54,0xc3 (push esp — retn), либо при помощи плагина к ImmDbg под названием pvefindaddr. Каким образом использовать pvefindaddr, можно узнать при помощи команды !usage pvefindaddr с дальнейшим созерцанием результатов исполнения вышеприведенной команды в окне логов ImmDbg.

После того как мы дойдем до последнего ret’а, на вершине стека будет лежать адрес 0x71a92b53. Исполняется retn, далее выполняются команды push esp — retn, мы прыгаем на nop-цепочку, по которой в конце концов добираемся до полезной нагрузки.

Xitami 2.5b4

Nuclear Exploit kit

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

Nuclear Exploit kit собственной персоной

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

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

Для деобфускации кода при выполнении Nuclear EK использует примерно вот такие функции (думаю действия, которые выполняют эти функции, понятны без пояснений):

Ко всему прочему код некоторых функций, в частности скрипт определения платформы и версий плагинов браузера (для определения плагинов используется JS-библиотека PluginDetect), генерируется динамически:

Стоимость аренды авторы оценили таким образом (в зависимости от трафика и времени пользования):

Месяц:

  • 50k — 500 WMZ;
  • 100k — 800 WMZ;
  • 200k — 1200 WMZ;
  • 300k — 1600 WMZ.

Две недели:

  • 50k — 300 WMZ;
  • 100k — 500 WMZ;
  • 200k — 700 WMZ;
  • 300k — 900 WMZ.

Одна неделя:

  • 100k — 300 WMZ;
  • 200k — 400 WMZ;
  • 300k — 500 WMZ.

Самая старая уязвимость в нашем обзоре — CVE 2010-0188, эксплойт к которой есть в составе Nuclear EK, позволяет с помощью специально сформированного PDF-файла выполнить произвольный код на атакуемой системе.

PDF-эксплойт LibTiff к уязвимости CVE 2010-0188 из состава Nuclear EK 

EXPLOIT

Начнем с уязвимости CVE-2014-6271. Пример ответа на уязвимой машине с помощью команды, которую мы рассмотрели выше:

После патча вывод в терминале был уже другой:

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

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

Теперь уже этому обходу был присвоен новый номер — CVE-2014-7169.

Далее уязвимости с многократными повторениями символа и слова . CVE-2014-7186:

CVE-2014-7187:

Эксплойты для найденных уязвимостей от Михала Залевского. CVE-2014-6277:

CVE-2014-6278:

или

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

Хакер Роберт Грэхем (Robert Graham) решил проверить наличие уязвимых серверов в интернете. В качестве средства для исследования была выбрана программа masscan с открытым исходным кодом. Исследователь лишь внес небольшие изменения в код, добавив свою полезную нагрузку в запросы:

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

Рассмотрим пример более опасной атаки. Скачиваем исполняемый файл и запускаем.

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

На одном из скриншотов приведен пример обмен командами между ботом и управляющим центром.

И как видишь, бот периодически сообщает, что жив. Далее хозяин запускает (или автоматически запускается) сканер рандомных IP-адресов для размножения, и иногда дается команда UDP-флуд определенных адресов. Помимо него, в «дикой природе» еще встречается Perl-бот. Пример атаки:

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

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

  • Python-скрипт, отправляющий письма на уязвимый сервер с запущенным SMTP и атаками в заголовках;
  • Python-скрипт для атаки на модуль mod_cgi сервера Apache;
  • пример атаки на OpenVPN-сервер;
  • Metasploit-модуль;
  • видео с примером атаки с использованием утилиты Burp Suite;
  • обновляемый список атак/эксплойтов.

MS11-077 Win32k Null Pointer De-reference Vulnerability POC

CVSSV2 7.2 (AV:L/AC:L/Au:N/C:C/I:C/A:C)

EXPLOIT

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

Функция NtUserMessageCall вызывает NtUserfnINCBOXSTRING по индексу, связанному с номером сообщения CB_ADDSTRING:

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

или

В заключение перечислим все сообщения, использование которых в приведенном выше коде дает аналогичный результат — BSoD:

TARGETS

Windows XP SP3/XP SP2 x64, Windows 2003 Server SP2 (+ itanium,x64), Windows Vista SP2/SP2 x64, Windows Server 2008 SP2 x32/x64/itanium, Windows 7 x32/x64, Windows 7 SP1 x32/x64, Windows Server 2008 r2 x64/itanium, r2 sp1 x64/itanium.

Переполнение буфера на стеке в Wireshark

9.3 (AV:N/AC:M/Au:N/C:C/I:C/A:C)

Brief

  • Дата релиза: 18 апреля 2011
  • Авторы: Paul Makowski — провел первоначальное исследование, sickness — реализовал POC, corelanc0d3r — создал эксплоит, использующий ROP + модуль для metasploit.
  • CVE id: CVE-2011-1591

Wireshark (ранее Ethereal) — это один из лучших анализаторов сетевого трафика, доступных на сегодняшний момент. Имеет графический пользовательский интерфейс. Функциональность, которую предоставляет Wireshark, очень схожа с возможностями программы tcpdump, однако Wireshark имеет графический пользовательский интерфейс и гораздо так же больше возможностей по сортировке и фильтрации информации.

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

Wireshark «знает» структуру самых различных сетевых протоколов и поэтому позволяет разобрать сетевой пакет, отображая значение каждого поля протокола любого уровня.

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

Exploit

Уязвимое место в коде (исходный код wireshark 1.4.1, packetdect.c, строка 1886):

pkt_bfield представляет собой структуру типа dect_bfield, описание которой приведем ниже:

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

Запускаем wireshark, заставляем его слушать нужный нам интерфейс и шлем ему привет в виде только что сформированного пакета:

Ровно один пакет — и wireshark с грохотом падает ниц. Ну а теперь, воспользуемся благами цивилизации в виде модуля для metasploit и сформируем эксплоит с классической, полезной нагрузкой в виде запуска калькулятора:

Запускаем wireshark, ставим прослушку интерфейса. Отправляем вредоносный пакет:

Наблюдаем калькулятор

Win32 (Обход защитных механизмов DEP & ASLR).

Атаки на шифрование в .net с использованием утечек данных

CVE-2010-3332

Microsoft .NET Framework 1.1-4.0

BRIEF

Вернемся к Microsoft. В этот раз огромная дыра была обнаружена в механизме шифрования .NET Framework. На прошедшей конференции Ekoparty 2010 исследователи Тай Дуонг (Thai Duong) и Джулиано Риззо (Juliano Rizzo), развивая тему своего доклада про атаки на системы шифрования с помощью утечек данных, показали, что почти все приложения, основанные на .NET, поддаются атаке. Результат атаки — раскрытие ключа шифрования. Так как одни и те же ключи используются для аутентификации в кукисах, форм-тикетах и viewstate, то возможна компрометация всего сервера. В качестве доказательства была продемонстрирована атака на криптографию .NET с последующей модификацией кукисов с подобранным ключом, что привело к административному доступу к DotNetNuke. А уже с помощью CMS — доступ к серверу.

EXPLOIT

Для раскрытия секретного ключа применяется метод перебора, но не полный, так как это развлечение затянулось бы на несколько десятков лет. Сократить перебор можно с помощью подсказок (оракула), которые любезно предоставляет .NET в виде скриптов WebResource.axd или ScriptResource.axd. В качестве входного параметра «d» они принимают зашифрованное имя ресурса. Подсказка заключается в том, что если зашифрованная строка неверная, то скрипт об этом скажет, либо прямым текстом, либо HTTP-кодом. Причем, зная алгоритм шифрования, можно понять, как и где произошла ошибка. Вернее, сам алгоритм шифрования даже неинтересен, потому что достаточно знать метод связки блоков шифрования и длину выравнивания. Затем, меняя последний байт, можно подобрать правильное значение, при котором сравнение выравнивания и последний байт совпадает.

Итак, выравнивание; так как у нас используется блочное шифрование (3DES/AES), то весь текст (имя ресурса) разбивается на блоки по 8 или 16 байт. Если общая длина не кратна 8 или 16 (в зависимости от конфигурации), то оставшаяся часть «дописывается».

Разбивается на два блока по 8 байт.

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

IV — вектор инициализации

С(0), нулевой блок — это значение вектора. Затем шифруется первый блок, который побайтово «проксорен» с вектором. Второй блок с паддингом «ксорится» с первым зашифрованным блоком и затем шифруется. Расшифровка — обратный процесс:

IV — вектор инициализации

Штука в том, что атакующий, зная ответы от оракула, может подобрать любое правильно зашифрованное значение за приемлемое время (30 минут). Для этого алгоритм, который используется для расшифровки, применяется и для шифрования. Исследователи назвали этот метод CBC-R. Механизм связки через XOR позволяет зашифровать любое значение, какое угодно. В случае с ASP .NET этим значением может быть web.config (чтобы получить к нему доступ). Для этого атакующему достаточно выбрать любой шифр-блок, подобрать для него открытый текст с помощью побайтового перебора и подсказок оракула. Когда такой блок будет готов, он может выбрать такой IV, чтобы при операции XOR с IV получался такой текст, какой хотелось бы атакующему. После этого можно подбирать следующий блок согласно CBC-связи. Подробнее об оракуле, его подсказках и переборе читай тут: gdssecurity.com/l/b/2010/09/14/automated-padding-oracle-attacks-withpadbuster/.

В любом случае, реализованы готовые тулзы, которые все это делают в автоматизированном режиме: POET, padBuster.pl и т.д.

SOLUTION

Фикс от Microsoft уже готов. В любом случае не мешает сделать вывод об ошибках менее информативным. Кроме того, код ошибки 500 также дает атакующему подсказку. На самом деле атакующий может ориентироваться и по времени отклика, так что патч — самое верное решение :).

0-day-уязвимость в драйвере NDProxy

Данная уязвимость первый раз была замечена в «дикой природе» и эксплуатировалась в паре с другой для Adobe Reader, которая давала возможность выполнить произвольный код при открытии вредоносной страницы или файла (CVE-2013-3346). Ошибка находится в в компоненте ядра Windows, позволяющем повысить привилегии. — это системный драйвер, который обеспечивает выполнение различных сетевых операций с устройствами, поддерживающими телефонию. Проще говоря, этот драйвер является пользовательским интерфейсом для операций с телефонией. Таким образом, мы можем использовать WinAPI-функцию с дескриптором NDProxy, чтобы выполнять TAPI-команды (Telephony Application Programming Interface).

Сама же уязвимость находится в функции PxIODispatch(), которая используется для управления командами из режима пользователя. Обратиться к ней возможно так:

Функция работает следующим образом:

  • Читаем значения индекса, используя IOCTL-сообщения.
  • Вызываем функцию из массива функций, используя полученный индекс

Полный листинг ищи здесь: pastebin.com/fmbtaZ2p.

Таблицу с функциями можно посмотреть в памяти, используя следующую команду в WinDbg:

Также она представлена на скриншоте.

Таблица функций для уязвимости в NDProxy

Последняя функция в этом массиве (индекс 0×24) указывает на адрес . После его вызова мы получим долгожданное падение:

То есть атакующему достаточно «положить» свой шелл-код по этому адресу. В представлении C-кода приведенные выше операции можно описать так:

EXPLOIT

Эта уязвимость заинтересовала многих, и написано три публичных эксплойта. Ссылки на исходники:

  • от китайских коллег на С;
  • модуль для Metasploit;
  • на Python.

Основные части последнего эксплойта мы и разберем. Для начала подключим некоторые стандартные модули:

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

Выделим память по адресу :

Полезная нагрузка, которую мы запишем по адресу :

Получаем дескриптор для драйвера и вызываем функцию через:

И наконец-то запускаем калькулятор с правами :

Теперь разберем Metasploit-вариант. Так как эксплойт локальный и используется для повышения привилегий, то команды, используемые нами обычно, будут отличаться:

SOLUTION

Есть исправление от производителя, или можно воспользоваться небольшим хаком. Отключить с помощью следующих команд:

и перезагрузить систему.

Уязвимость в Adobe Reader при обработке U3D-данных

BRIEF

Уязвимость вызвана ошибкой при обработке U3D-данных. Такая ошибка может привести к сбою. При успешной эксплуатации эта уязвимость позволяет злоумышленникам установить полный контроль над системой. Для обхода DEP используется ROP-цепочка, основанная на библиотеке icucnv36.dll. Для обхода ASLR выполняется JavaScript-код, реализующий технику heap spraying. Кратко опишем U3D-компоненты, чтобы лучше понимать, какие из них использует сплоит:

  • U3D — на текущий момент единственный поддерживаемый подтип и 3D-объект.
  • 3DD (необходим) — определяет поток или словарь с 3D-данными, подлежащими рендерингу.
  • 3DA (необязателен) — словарь активации, определяющий время, когда следует показывать 3D-данные.
  • 3DI (необязателен) — переменная логического типа, определяющая основной режим использования. Значение true соответствует интерактивному режиму, false — взаимодействию через JavaScript.
  • DIS (необязателен) — имя, определяющее состояние 3D-данных при деактивации.
  • A — имя, под которым должна быть активирована аннотация.
  • PO — аннотация должна активироваться, как только открывается страница, содержащая аннотацию на 3D-данные.

EXPLOIT

Последовательность запуска объектов:

  • Объект 4 — действие OpenAction инициирует обращение к JavaScript.
  • Объект 14 — JavaScript ссылается на объект 15.
  • Объект 15 — JavaScript-код применяет технику heap spraying, затем переходит на вторую страницу.
  • Объект 11 — определение 3D-данных и описание их форматирования.
  • Объект 10 — 3D-данные, которые будут показываться (вероятно, поврежденные).

Объекты, на которые следует обратить внимание:

  • Объект 10 — ссылается на именованные словари (/3D, /U3D).
  • Объект 11 — ссылается на именованные словари (/3DI, /3DD, /3D, /3DA).
  • Объект 15 — содержит JavaScript-код для реализации heap spraying и перенаправления на вторую страницу (инициирует процесс отображения 3D-данных).

Сплоит реализован в Metasploit (пример с полезной нагрузкой в виде запуска калькулятора):

TARGETS

Adobe Reader 9.4.0 / 9.4.5 / 9.4.6 под Windows XP SP3.

SOLUTION

Существует обновление, устраняющее эту уязвимость.

Вредоносное содержимое 3D-объекта в теле pdf-файла 

Переполнение буфера в Microsoft Office 2007 Excel .xlb

CVSSV2 9.3 (AV:N/AC:M/AU:N/C:C/I:C/A:C)

EXPLOIT

Excel позволяет создавать и настраивать панели для более удобного и эффективного использования различных инструментов, причем эти панели можно сохранять для повторного использования (например, на другом компьютере). Обычно такие панели инструментов имеют расширение xlb. Формат файла эксплоита соответствует спецификации BIFF8. Перечислим кратко некоторые положения этой спецификации, чтобы лучше понять суть работы эксплоита. BIFF-структура представляет собой идущие подряд записи:

Все записи имеют следующий формат:

Первые четыре байта (ID и размер) — это заголовок записи. Записи могут группироваться в потоки. Ограничителями групп служат две специальные записи: BOF (Begin Of File) и EOF (End Of File). Нас интересует BOF, которая имеет следующий формат:

На практике за записью BOF может следовать недокументированная запись со значением типа 0xA7. Эта запись имеет смысл только в том случае, если за ней идет другая запись со значением типа 0x3C. При выполнении этих требований в стек копируется длина записей и происходит вызов функции sub_30199E55. Она принимает три аргумента. В первом аргументе содержится прочитанное из файла количество байт для копирования. Второй аргумент определяет адрес, куда копируются данные, а третий указывает максимальный объем данных, который может быть скопирован.

Проблема состоит в том, что в функции sub_30199E55 не осуществляется должная фильтрация третьего аргумента, тогда как пользователь может контролировать его значение. Это значит, что в стеке можно перезаписать объем и адрес нужных данных.

Прыжок к началу полезной нагрузки
Другие статьи в выпуске:

Хакер #156. Взлом XML Encryption

  • Содержание выпуска
  • Подписка на «Хакер»

Считается, что для уязвимостей типа переполнения буфера писать эксплоиты не сложно. Однако в данном случае одновременно используются защитные механизмы, включаемые флагами компилятора /GS и /SAFESEH. Напомню, что /GS — это флаг для компилятора MS Visual Studio, отвечающий за внедрение механизмов, которые защищают буфер в стеке от переполнения. Если компилятор считает, что для функции возможно переполнение буфера, то в процессе компиляции он выделяет для нее память в стеке перед возвращаемым адресом. При входе в функцию в выделенную память загружается объект безопасности cookie, который формируется один раз при загрузке модуля. При выходе из функции и при обработке кадров в обратном порядке в 64-разрядных операционных системах вызывается вспомогательная функция, которая проверяет, не изменилось ли значение объекта cookie. Если значение изменилось, то это может означать, что стек был перезаписан. При обнаружении измененного значения процесс завершается. /SAFESEH защищает установленные SEH-обработчики от перезаписи. Обработчик исключений представляет собой фрагмент кода, который выполняется в исключительных случаях, например при попытке деления на ноль. Адрес обработчика хранится в стеке функции, и поэтому его вполне можно повредить. Входящий в состав Visual Studio компоновщик поддерживает параметр /SAFESEH для сохранения во время компиляции списка допустимых обработчиков исключений в заголовке PE-образа. Если при выполнении возникает исключительная ситуация, операционная система проверяет правильность адреса обработчика по заголовку образа. Если адрес неправильный, работа приложения прерывается. Но так как мы имеем доступ к memcpy, то сможем переписать стек после всех проверок, включаемых флагом /GS. Когда управление вернется, в esp будет находиться контролируемое нами значение. Таким образом, мы сможем передать на него управление простым вызовом call esp.

Автозаполнение форм в браузере SAFARI

  • Safari 4
  • Safari 5

N/A

Brief

Продолжаем плавно переходить от *nix к Windows, и от «баг» к «фичам».
Джереми Гроссман (Jeremiah Grossman), известный исследователь, показал нам с тобою, какую опасность таят «модные и удобные фишки». Никто не спорит, что автозаполнение в браузере привносит в наш, погрязший в ненависти и лжи, мир лучик надежды на что-то хорошее, но все же стоит понимать, что всякая автоматизация потенциально опасна, и когда-нибудь компьютеры просто убьют всех людей :).

Exploit

Что такое автозаполнение? Это когда тебе лень каждый раз писать свой хаксорский «никнэйм» или адрес электронного ящика, и умный, услужливый браузер сам, по памяти, дописывает нужные байтики в editbox.

Создатели Safari пошли еще дальше — они берут всю инфу прямо из твоей карточки, что в адресной книге (кто вообще ими пользуется?)

Вот до чего техника дошла! Но зоркий глаз Гроссмана обратил внимание на то, что после автозаполнения поля с определенным ID, а также остальные поля заполняются сами. Круто! Но если представить, что эти поля скрыты? То ты даже не заметишь, что они заполнились чем-то, что ты уже вводил

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

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

Соответственно, видно только поле для ввода ФИО. Остальное как бы не видно, но тоже является частью формы и подвержено автозаполнению. При отправке формы указанные параметры будут отображены в адресной строке (так тут у нас метод GET).

Solution

Гроссман сообщил Apple о проблеме, но, по его словам, те просто тихо проигнорировали сей факт, так что патча нет. К счастью проблема решает ся просто — отключением автозаполнения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *