Эксплойты (exploits)

Автоматический запуск кода с помощью .lnk-файлов

  • Windows XP
  • Windows 2000/2003/2008
  • Windows Vista
  • Windows 7

CVE-2010-2568

Brief

0day уязвимость обнаружили эксперты, изучая метод распространения новой заразы — Win32/Stuxnet, которая была заточена под промышленный шпионаж и собирала данные с АСУ ТП систем (подробнее об этом читай в отдельной статье). Здесь же я расскажу лишь про саму уязвимость. Уязвимость заключается в том, что каким-то магическим образом вредоносный код из DLL-файла выполнялся автоматически при открытии флеш-накопителя с этой DLL’кой и неким ярлычком…

Exploit

Как же уязвимость может запускать произвольный код, да еще и автоматически через .LNK файл? При открытии содержимого флешки в стандартном вьювере, ярлычки автоматически обрабатываются для отображения. Во время этой обработки оболочка винды (explorer.exe и shell32.dll) попытается загрузить иконки. При этом, если там будет .LNK с указателем на элемент контрольной панели (.cpl), обработчик подгрузит этот апплет через вызов LoadLibraryW() с целью обработки иконки из .CPL-файла. Но фишка в том, что в таком ярлыке можно указать не путь к .CPL-файлу, а, например, к динамической библиотеке — .DLL.

А, как известно, LoadLibraryW() автоматически вызывает из библиотеки функцию DllMain(). Как видно, все дико просто. Уязвимость архитектурная, так как это не «бага», а скорее «фича». Тем не менее, такие ошибки всегда самые опасные. Злоумышленник сгенерил библиотеку с вредоносным кодом, создал .LNK файл, и все — автоматический залет, и покруче, чем через autorun.inf. В итоге был выложен безвредный PoC эксплойта, который всего лишь посылает «дебаг» сообщения, которые можно ловить программой DbgView. Сообщение гласит: «SUCKM3 FROM EXPLORER.EXE MOTH4FUCKA #@!». Какой-то смысл во фразе, конечно, есть… Тем не менее, ребята из команды MetaSploit показали эту же уязвимость в ином измерении. Одно дело — pwn’ить компьютеры, втыкая злостные флешки, и совсем другое — попытаться использовать эту уязвимость через интернет.

Добились они этого за счет использования WebDav, который позволяет использовать файловый доступ к ресурсу по протоколу HTTP. Иными словами, создается WebDav-сервис с ярлычком и библиотекой, подопытный, используя браузер типа IE, заходит на сервер и получает эти файлы в отображении стандартного видового просмотрщика директорий (explorer.exe). Что происходит потом — ты уже читал выше. Собственно для теста обнови свой метасплойт, найди модуль эксплутации уязвимости .lnk, запусти… даже настроек не надо, только выбери шеллкод, который будет внедрен в .DLL-файл, который подгрузится жертвой.

Solution

Официального патча пока нет, тем не менее, существует несколько шагов, которые способны снизить риски практически до нуля. Исследователь Дидье Стивенс (Didier Stevens) в своем блоге опубликовал аж две заметки на тему защиты от данной напасти. Во-первых, он предложил использовать его тулзу — Ariad [], которой можно запретить запуск и/или загрузку исполняемых файлов с CD-ROM и USB-диска. Во-вторых, использовать политики ограничения использования программ (SRP).

Эти политики позволяют контролировать различное ПО. Достаточно добавить политику типа «запретить всем неизвестным ПО запускаться с дисков», и эксплойт больше не опасен. Для этого идем в Панель управления — Администрирование — Локальная политика безопасности — Политики ограниченного использования программ, правой кнопкой — «Добавить новую политику». Далее выбираем дополнительные правила и правой кнопкой добавляем правило для пути. Вбиваем букву используемого диска, уровень — неограниченный. После этого опять идем на уровень выше и выбираем параметр «Принудительный». Там необходимо указать, что эти правила не только для .exe, но вообще для всех исполняемых файлов. После этого выбираем уровни безопасности и ставим на «Не разрешено», как правило по умолчанию.

Использование освобожденной памяти в модуле APACHE ISAPI_MODULE

  • Apache <= 2.2.14
  • Windows XP
  • Windows 2000/2003

Brief

Модуль isapi известного веб-сервера Apache для платформы Windows служит для использования расширений, написанных под веб-сервер IIS. Данный модуль подключен к серверу по умолчанию. Для успешной эксплуатации уязвимости необходимо, чтобы хоть какое-нибудь расширение было установлено. Само расширение представляет собой специальную DLL-библиотеку, которая может находиться, например, в папке cgi-bin. В конфиге апача должен быть установлен соответствующий обработчик для DLL файлов: «AddHandler isapi-handler .dll». Если целевой сервер обрабатывает ISAPI-расширения, то он может быть успешно захвачен, так как в этом модуле присутствует ошибка использования памяти после освобождения. Суть в том, что если послать запрос к ISAPI-расширению и оборвать сессию (RESET-пакетом), то выделенная под модуль память освободится, но указатель на нее сохранится. При повторном запросе, модуль isapi, увидев, что указатель у него есть, перейдет по нему, несмотря на то, что в памяти по данному адресу может быть что угодно.

Exploit

Баг-хантер Брэт Жервазони (Brett Gervasoni), написал эксплойт, который реализует данную уязвимость. Эксплойт посылает POST-запрос к ISAPI-расширению и тут же рвет сессию, затем немного ждет, дабы выделенная под расширение память могла освободиться, и шлет второй пакет к тому же расширению. Но второй пакет не простой, он с кучей больших псевдо-http-заголовков. В этих псевдозаголовках находится много буковок A (0x41 — INC ECX: семантический NOP) и шеллкод. Суть в том, что для этих заголовков нужна память, и вполне вероятно, что эти заголовки запишутся туда, где раньше располагалось расширение ISAPI. Это приведет к тому, что когда модуль попытается перейти по сохраненному адресу, то он попадет на шеллкод из псевдо-заголовков. Сложность эксплуатации в том, что для каждого расширения придется подбирать свой размер и количество псевдозаголовков, но эта задача решается методом грубой силы или, если есть доступ к расширению, дебаггером. В случае успеха, шеллкод создает текстовый файл sos.txt в директории апача.

Текстовый файл содержит одну строчку: «pwn-isapi». Разумеется, шеллкод можно заменить на более полезный. Разберем ключевые места кода эксплойта подробнее:

Автор предупреждает, что данный эксплойт не будет работать с виртуальной машины, и против DEP. Если цель находится под защитой DEP, то в итоге будет простой DoS.

Solution

Установить версию веб-сервера 2.2.15. Конечно, если не используются ISAPI-расширения, то бояться эксплойта не стоит.

Повышение привилегий в Linux

  • CVE-2010-3856
  • CVE-2010-3847
  • Fedora 13
  • Red Hat 5
  • CentOS 5
  • Ubuntu 8/9/10
  • Debian 5

BRIEF

В предыдущих обзорах мы много говорили об архитектурных багах в ОС от Microsoft, но, как известно, не ошибается тот, кто ничего не делает. Сегодня мы поговорим об уязвимостях в GNU LIBC, которые приводят к повышению привилегий в большинстве популярных дистрибутивов Linux. Уже не раз фигурировавший в наших обзорах баг-хантер Тэвис Арманди (Tavis Ormandy) обнаружил ошибки в динамическом линкере, которые позволяют делать предварительную загрузку указанных пользователем библиотек для программ с установленным setuid-битом. Последствия — захват суперпользовательских прав. Вообще, разработчики и раньше знали об этой ошибке (4 года), но решили не патчить ее, так как считали, что эксплуатация невозможна, потому что по факту линкер игнорирует предзагрузку библиотек откуда попало для stuid-программ. Вот Тэвис и доказал, что разработчики неправы, выпустив эксплойт, показывающий, как можно обойти это ограничение и захватить власть в ОС.

EXPLOIT

Уязвимость существует как минимум в двух вариантах, мы будем рассматривать более позднюю (CVE-2010-3856), так как она присутствует и в Ubuntu, которая есть у меня на виртуалке :). Обе уязвимости имеют общие корни, но различную реализацию; если тебе интересно, то подробнее про первый эксплойт можно почитать тут: exploit-db.com/exploits/15274/. Итак, теперь перейдем непосредственно к эксплойту, который представляет собой последовательность *nix-команд.

Данная команда задает маску прав для вновь создаваемых файлов. Параметр «0», говорит системе, что все создаваемые файлы будут создаваться с правами «rw-rw-rw-», а директории — «rwxrwxrwx». Зачем это надо — увидим потом.

Собственно, это и есть ключевая команда. libpcprofile.so — это библиотека, используемая для отслеживания времени выполнения кода процесса. Данная библиотека входит в стандартную поставку libc, и ее владельцем является root. Переменная окружения LD_AUDIT говорит динамическому линкеру ld.so подгрузить приложению указанную библиотеку для setuid-программы ping. Тэвис не случайно выбрал именно libpcprofile.so. Дело в том, что ld.so открывает библиотеку функцией dlopen(), что вызывает выполнение кода инициализации из открываемой библиотеки, а в этом коде есть проверка переменной окружения PCPROFILE_OUTPUT, и если она есть, то значение этой переменной используется как путь для сохранения лог-файла. Как видно, лог у нас будет иметь имя exploit в директории /etc/cron.d. Это директория с заданиями для планировщика. Так как ping — setuid-программа, то задание «exploit» будет создано от имени суперпользователя… и тут вспоминаем, зачем мы делали umask(0) — чтобы права доступа для вновь созданного задания были «rw-rw-rw»; таким образом, мы можем писать в него все, что хотим.

А вот и задание — копируем шелл во временную директорию и ставим права setuid. Таким образом через небольшой промежуток времени мы получим результат выполнения планировщика — рутовый шелл.

Результат смотри на скриншоте — у меня все сработало по сценарию.

SOLUTION

В некоторых Linux-дистрибутивах вроде OpenWall, давно зная об этих особенностях линковщика, разработчики на всякий случай пофиксили багу, не дожидаясь, пока Тэвис найдет способ эксплуатации уязвимости. От других дистрибутивов надо ждать патча, но, например, Debian и Ubuntu уже выпустили их; думаю, к выходу номера в печать все дистрибутивы уже будут иметь патч.

Откуда появляется эксплойт? Любители конкретики – пропускайте часть.

Где известна уязвимость, там, вероятно, может появиться и эксплойт. Уязвимость же можно толковать также по-разному. Википедия, как мне кажется, даёт немного неверное определение. Уязвимость – это не всегда ошибка или недостаток. Ахиллесова пята есть у любого механизма. Ну нельзя назвать ошибкой тот факт, что двигатель работает от топлива. Ведь, если он будет работать на воздухе, это также сразу станет его недостатком. Как и металл, из которого он собран; человек, который им управляет… Недостатки есть у всего, и профессионалам они также видны во всём.

Самое простое объяснение такой мысли – “взаимоотношения” человека и вируса. Биологического. В нашем организме всё продумано до мелочей, однако, столкнувшись с микрокодом извне, он выходит из строя на время или навсегда. Уязвимость – это просто неспособность механизма (в том числе и программного) адекватно реагировать на некое действие со стороны, сохраняя при этом заложенные в него (механизм) характеристики и функционал. И эксплойт называется эксплойтом только если позволяет получить от уязвимости выгоду

Не сочтите за белетристику, это важно понять сразу

Повышение привилегий в FREEBSD

  • FreeBSD 7.2
  • FreeBSD 7.3
  • FreeBSD 8.0 (DoS)

CVE-2010-2020

Brief

Первый гость нашей программы — ядро ОС FreeBSD. В ядре этом затерялась проблема в виде отсутствия проверки длины поступающих данных, что приводит к переполнению буфера в стеке. Да, похоже, этот класс ошибок никогда не потеряет своей популярности у программистов всех мастей. Багу нашел исследователь из Census Labs — Патроклос Аргуроудис (Patroklos Argyroudis), который любит покопаться во внутренностях различных *nix-систем. Уязвимость находится в функции nfs_mount(), которая отвечает за монтирование файловой системы NFS. Добраться до этой функции можно через API-функции вроде mount() или nmount(). Если эти команды доступны обычному пользователю, то через данное переполнение буфера он сможет выполнить код в ядре и стать root’ом.

Exploit

Покопаемся во внутренностях эксплойта, который Патроклос выложил на exploit-db.com.

Автор объявил структуру с описанием параметров для монтирования файловой системы типа NTFS. Далее он задал номер версии и выделил память для дескриптора файла, который будет монтироваться. BUFFSIZE = 272 байта. Затем эксплойт заполняет выделенную память символами буквы «А»=0x61 и указывает честно размер параметра в структуре:

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

Итак, в ptr заносится указатель на дескриптор, для которого мы выделили 272 байта. В lptr также заносится указатель на наш буфер, только не на начало, а с 264 байта. Как видно из комментариев, с 264 под 268 байт будут данные, которые перезапишут регистр EBP, а с 268 по 272 байт — данные, которые перезапишут адрес возврата из уязвимой функции. Если значение EBP не так интересно, от EIP перезаписывается значением адреса из ptr, а там содержится указатель на начало буфера. Таким образом, управление перейдет к инструкциям, которые у нас будут в буфере. Поэтому следующий шаг направлен на помещение в буфер шеллкода.

В переменной kernelcode содержится простой шеллкод уровня ядра, который меняет UID на 0, иными словами, дает права пользователя root. В общем, данные готовы, и теперь осталось, собственно, переполнить буфер с помощью вызова nmount(). Для начала нужна директория, куда эксплойт будет «монтировать»:

DIRPATH у нас «/tmp/nfs»,так как в /tmp могут создавать директории все пользователи. Для того, чтобы вызвать функцию nmount(), надо подготовить соответствующий массив структур — вектор, который мы уже объявили в начале — iovec. В этих структурах описываются аргументы для монтирования, включая указатель на подготовленные данные — na.

Далее идет вызов nmount() c указанием количества векторов:

Вызов закончится ошибкой, но это уже не имеет значения, так как шеллкод завершил работу в контексте ядра и вернул управление коду эксплойта, который, в свою очередь, просто выполнит exit(). Что же до атакующего, то он теперь стал root’ом, с чем мы его и поздравляем!

Solution

Решений несколько. Во-первых, есть уже FreeBSD 8.1, где уязвимость исправлена, во-вторых, более старые версии не подвержены уязвимости, ну и, в-третьих, по умолчанию права на монтирование есть только у root’а. Так что угроза актуальна для тех, кто выделил данные права и пользователям. Проверить сей факт можно, набрав в консоли:

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

Ошибочная обработка указателя в FLASH PLAYER

CVE-2010-1297

  • Adobe Acrobat Reader < 9.4
  • Adobe Flash Player < 10.1

BRIEF

В очередной раз мир поразила 0day-угроза для любителей продукции Adobe. А куда деваться? Темная сторона Силы нашла уязвимость в обработке байткода SWF Flash. Что примечательно, эксплойт, разработанный тьмой, был заточен и под Acrobat Reader. Фича в том, что читалка поддерживает воспроизведение флеш-анимации, а отсюда и последствия — атака сразу на два продукта. Эксплойт этот был разреверсен и добавлен в Metasploit. Так что добро пожаловать…

EXPLOIT

Пытаясь разобраться в том, откуда пришла проблема, исследователи обратили внимание на то, что SWF-файл, который использовался для эксплуатации уязвимости и заражения бедных юзеров, был практически идентичен файлу AES-PHP.swf, который есть в свободном доступе в Сети. Собственно, отличие было лишь в одном байте, а именно — в оригинальном файле байт-код 0x66 (GetProperty) заменен на байт-код 0x40 (newfunction)

Скорее всего, обнаружить эту уязвимость помог файловый фаззер.

Перед тем, как сработает SWF-файл, в PDF происходит heap-spray с помощью JavaScript. В куче создается множество страниц с шеллкодом, но не только. Для того, чтобы обойти защиту DEP, в кучу так же инжектится ROP-программа, которая с помощью системного вызова создает новый кусок исполняемой памяти и копирует туда шеллкод.

Самое интересное — это как ROP-программа из сгенерированной кучи попала в стек. Уязвимость (вставка байт-кода newfunction) приводит к возможности перезаписи указателя ECX значением 0x0C0C0C0C, после чего происходит вызов call . Научно доказано, что по этому адресу обычно бывают данные из heap-spray. Злостный хакер так рассчитал размер инжектируемых данных, что по адресу 0x0C0C0C0C + 0xC находится значение: 0x700156f. То есть фактически происходит вызов call 0x700156f. Этот адрес принадлежит BIB.dll и содержит такой вот код:

Вот таким образом указатель на стек стал указателем на кучу из heapspray. Далее приведу содержимое кучи с пошаговой нумерацией действий (все значения равны 4 байтам, первое значение в куче — по адресу 0x0C0C0C0C).

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

SOLUTION

Flash 10.1 не содержит этой уязвимости, так что патч-менеджмент — полезное дело. Кроме того, библиотека BIB.dll, которая используется эксплойтом, как донор инструкций, поддерживает ASLR, а посему владельцы Windows 7 могут спать спокойно — эксплойт не сработает на их системах.

Повышение привилегий в Ubuntu

  • Ubuntu 9.10
  • Ubuntu 10.04 LTS

CVE-2010-0832

Brief

В дистрибутиве ОС Linux Ubuntu была обнаружена серьезная уязвимость, позволяющая любому пользователю повысить свои привилегии до root’а. В этом случае мы говорим уже не о переполнении буфера в ядре, а просто об отсутствии проверок прав при создании файла. Как бы невинно не звучало описание, но последствия все те же — захват root’а.

Exploit

Во время входа в систему, например, через SSH, пользователю показывается приветствие. Делает это модуль pam_motd, который затем соз дает файл motd.legal-notice в домашней директории в папке ./cache.

Мол, смотри пользователь, что я тебе показал… Но делает он это с правами root’а, а так как пользователь не рут, то модуль меняет владельца файла на UID пользователя. Самое время вспомнить про символические линки в *nix-системах, но как это нам поможет? Очень просто — давайте удалим папку .cache из домашней директории и создадим символический линк с именем .cache, который указывает, ну, хотя бы на /etc/shadow.

Затем зайдем по SSH на Ubuntu со своими никчемными правами юзера. Взглянем, что же случилось с /etc/shadow:

Ого, мы теперь владельцы /etc/shadow, а не какой-то там root. А это значит, что мы можем читать файл и вытащить хеш пароля. Но можно сделать еще круче — записать туда новый пароль. Эксплойт на диске делает все вышесказанное автоматически: добавляет пользователя toor в файлы /etc/passwd и /etc/shadow и записывает пароль toor. UID нового пользователя равно нулю, а это значит права root’а. Делает он все это аналогично указанному методу, через символические линки. Взглянем на код эксплойта:

Актуальность

Информация, полученная в результате обнаружения уязвимости, может быть использована как для написания эксплойта, так и для устранения уязвимости. Поэтому в ней одинаково заинтересованы обе стороны — и взломщик, и производитель взламываемого программного обеспечения. Характер распространения этой информации определяет время, которое требуется разработчику до выпуска заплатки.

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

Где скачать Metasploit Framework?

Да вот здесь:

https://www.metasploit.com/download/

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

Знакомство с понятием ШЕЛЛ.

В зависимости от типа эксплойта, после того как экплойт претвориться в жизнь, мы будем иметь дело либо с удалённым шеллом (Remote shell) и метр-шеллом (Meterpreter shell).

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

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

Поиск и конфигурация эксплойта

Подразумеваю, что вы уже в Кали. Запускаем Метасплойт и даём команду на отображение известных эксплойтов. Это команда

search

Терминал вернёт информацию по эксплойтам в алфавитном порядке. Это не всегда удобно, потому поиск можно уточнить флагами на поиск по:

словарю Общих уязвимостей и незакрытых дыр в безопасности (CVE ID). Можно сразу указать желаемый год:

search cve:2017

Связки (набор эксплоитов, exploit kit)

Связки эксплоитов представляют из себя пакет эксплоитов сразу под несколько программ (версий) и/или под разные уязвимости в них. В последних версиях связок производится выбор эксплоита именно под конкретную программу пользователя.

В большинстве случаев эксплоит-киты применяются для атак, использующих уязвимости браузеров или их дополнений (частыми целями, к примеру, являются Java, Flash и PDF).

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

Проблемы эксплойта или абзац для любителей “на всё готовое”.

Эта часть статьи заслуживает отдельной темы. Но пока отведу ей лишь абзац. Что подстерегает пентестера на пути применения эксплойта? Объясняю на пальцах (да простят профессионалы):

  • первая проблема – старение уязвимости, на которую разработчики почти сразу устанавливают заплатку. Да, абсолютное большинство эксплойтов в том виде, как они существуют, не заслуживают вашего внимания. Они бесполезны – обновления систем безопасности их прикрывают. Так что выходов немного: пользуем 0day эксплойты (зеро-дэй) – если сможете найти и применить; либо включаем голову и работаем над своими; это проблема номер один – нам приходится учиться на операционных системах и программах предыдущих поколений: причина проста – разработчики “забили” на поддержку (Windows XP типичный тому пример) и не реагируют на появляющиеся уязвимости даже при официальном уведомлении (не забывая, однако, проверять не проявится ли эта уязвимость в рабочих версиях программ или ОС-ей).
  • вторая проблема (вытекает из первой) – если уязвимость опубликована, и существует для неё эксплойт, десятки специалистов уже работают над тем, чтобы уязвимость осталась в прошлом. Им платят. И люди, которые ищут уязвимости тоже хотят, чтобы платили им также. Так что не надейтесь на искатанную вдоль и поперёк уязвимость: прелесть кроется там, где тропинка не хожена. Если появилось то, что нужно, а ума или опыта нет – за это нужно порой платить (с риском остаться без результата и без денег). И не всегда тому виной будет пионер уязвимости и писатель эксплойта. Хотя бы потому, что есть проблема третья…
  • технические моменты применения эксплойта заключаются в том, что ТО, ЧТО ПРОКАТИЛО на английской локали Windows СКОРЕЕ ВСЕГО НЕ ПРОКАТИТ на русской. Эксплойт, написанный для американской версии Windows оправданно не сработает для русской системы. Результат применения может стать неожиданным: до безмолвной ошибки с Метасе типа Exploit seems to be failed до отказа службы на стороне системы жертвы, что заставит её насторожиться. Тему развернём потом.

Пока всё. Итак длинно получилось. Успехов нам всем.

Уязвимость в Adobe Flash Player 10.2.153.1 SWF

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

Brief

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

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

В этот раз мы рассмотрим сбой в Adobe Flash Player, который происходит из-за неправильного использования типа объекта, что позволяет атакующему перезаписать указатель в памяти и в результате добиться исполнения произвольного кода, иначе говоря, перехватить контроль над системой, подверженной данной уязвимости. На данный момент эта уязвимость активно используется для распространения разнообразной малвари: эксплоиты для бага вошли в используемые злоумышленниками сплойтпаки.

Векторы вторжения: Adobe Flash Player, Adobe Reader и Acrobat, Microsoft Word/Excel (включение .wf-файлов в doc- и xls-файлы соответственно). Справедливости ради нужно отметить, что Adobe Reader X в защищенном режиме работы использует sandbox и пресекает исполнение произвольного кода, несмотря на существование уязвимости. Впрочем, это обстоятельство мало что меняет :).

Exploit

Уязвимый вызов располагается по адресу 0x100d01f6 в библиотеке Flash10o.ocx (для версии плагина Adobe Flash Player 10.2.153.1). Код ActionScript, позволяющий достигнуть уязвимого места:

Дальнейший анализ уязвимости, вызванной вышеприведенным кодом, показывает, что мы имеем очередную неразбериху с типом объекта, произошедшую в SharedObject.prototype.getSize(), когда класс Date расширяется добавлением пользовательской функции, полученной через SharedObject.prototype.getSize. Объект Date инициализируется значением 1.41466385537348e-315, которое при сохранении в памяти преобразуется в 0x11111110, а он, в свою очередь, подходит для реализации техники heap spraying. Когда вызывается пользовательская функция Date.c_fun(), управление передается в SharedObject.prototype.getSize(), в которой происходит некорректная интерпретация передаваемого объекта Date как имеющего тип SharedObject, в результате чего совершается попытка использовать значение, которым был инициализирован объект Date (0x11111110), как указатель на таблицу виртуальных функций. Используя модуль из metasploit, запустим на подверженной уязвимости машине калькулятор:

Сервер запущен. Теперь от нас требуется только пройти по предоставленной ссылке (http://192.168.2.20:8080/Jk32OyCPJ0NUR6B) и мы сможем смиренно, затаив дыхание наблюдать за тем, как Internet Explorer превращается в калькулятор…

IE 6/7 на Windows XP SP3 и Windows Vista.

Процесс эксплойта и его роль в атаке на компьютер.

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

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

Как это выглядит воочию или как работать с эксплойтом?

Для примера используем ОС Кали Линукс в качестве хозяйской и Windows XP (эксплойт древний, начиная с уже с Windows XP SP2 он уже делает это менее охотно) в качестве гостевой в VirtualBox. Нам, конечно, известно, какие характеристики имеются у гостевой машины в сети (в нашем случае виртуальной), но пусть сканер Nmap сделает своё дело. Наведём “официальную справку” о жертве:

nmap -v -n 192.168.0.162

где 192.168.0.162 – ip адрес жертвы. Если вы знакомы с основными командами Nmap, то поняли, что флаги:

  • – v позволяет получить подробный отчёт об адресе
  • – n отключает реверсивные преобразования DNS

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

nmap -T4 -A -v 192.168.0.162

Информации предостаточно. Выбираем место нанесения удара. Открыта целая куча портов, которые являются потенциальными лазейками в систему противника. Пусть это будет один из открытых портов 135 с запущенной службой mcrpc (она же Microsoft Windows RPC – ссистемная служба удаленного вызова процедур). Нам остаётся подобрать под конкретный процесс подходящий эксплойт.

Заключение

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

  • авторы большинства эксплойт-паков от прямой продажи перешли к аренде на своих серверах, при этом зачастую они предоставляют полный цикл услуг — от чистки до постоянной смены доменных имен и проверок на обнаружение антивирусами;
  • почти во всех эксплойт-паках стали очень активно эксплуатироваться уязвимости Java и Silverlight;
  • многие эксплойт-паки стали обзаводиться функциями распознавания наличия виртуальных машин, антивирусов и разных хакерских утилит;
  • уязвимость CVE 2013-2551 пользуется большой популярностью и используется во всех наборах эксплойтов из нашего обзора.