О проекте
Здесь я буду публиковать анализ публичных эксплойтов или некоторые из моих 1day-эксплойтов.
[ Анализ публичных эксплойтов ]
- Лично я считаю, что лучший способ изучить публичный эксплойт — это понять его построчно, пока не разберёшься в нём до конца. Я буду публиковать некоторые из таких (чрезмерно закомментированных ;) ) эксплойтов, чтобы, надеюсь, другие могли на них учиться, и как попытку дать что-то взамен сообществу. А также для документирования, потому что со временем эти вещи выветриваются из головы.
CVE-2016-8655
- Это детальный анализ эксплойта rebel.
- Спасибо rebel за потрясающий эксплойт! :D
CVE-2016-5342
версия mp3
- Это закомментированная версия Android LPE эксплойта freener
- arm32
- Переполнение кучи
- Этот эксплойт напрямую перезаписывает указатель на функцию другого объекта
версия tty
- Это закомментированная версия Android LPE эксплойта freener
- arm32
- Переполнение кучи
- Этот эксплойт перезаписывает указатель объекта в другом объекте. Он использует ret2dir-атаку, чтобы заставить повреждённый указатель ссылаться на предсказуемый фиксированный адрес в ядре, содержащий полезную нагрузку эксплойта. Эта техника эксплуатации обходит PXN и PAN.
CVE-2016-2434
- Это закомментированная версия Android LPE эксплойта Jianqiang Zhao
- arm64
- Обнуляет 16 байт по произвольному адресу
- Этот эксплойт затирает 16 байт полезного глобального объекта, расположенного по фиксированному адресу в ядре.
- Повреждённый указатель объекта внутри глобального объекта ссылается на полезную нагрузку эксплойта из пользовательского пространства. Такой тип атаки не сработает на устройствах/ядрах с PAN (или эмуляцией PAN).
- Моя попытка разобраться в джейлбрейке extra_recipe
- Особенно меня интересовала часть обхода kpp. Хотя по этой теме было несколько слайдов, из которых я получил общее представление об обходе, мне действительно хотелось углубиться в детали и понять, что на самом деле происходит в коде.
- Я также хотел понять финальные составляющие джейлбрейка (установка Cydia и т.д.)
yalu102 (ViewController.m)
- Я закомментировал часть, относящуюся к самой уязвимости, и то, как она была использована.
- Причина, по которой я обратился к yalu102, а не к оригинальному эксплойту, в том, что техника port-feng-shui выглядела более чистой и понятной.
- Анализ обрывается прямо перед обходом kpp
- Я перешёл сюда, потому что здесь было немного больше информации о различных числовых смещениях.
- Кроме того, здесь присутствует исходный файл patchfinder.c, в отличие от yalu102, где есть только объектный файл.
- Часть с cydia несколько неполная, поэтому после kpp я перехожу к ветке cydia
- Попытка понять составляющие джейлбрейка после получения tfp0 и пост-эксплуатации
empty_list (sploit.c)
- Детальный разбор эксплойта ядра empty_list от Ian Beer.
- В нём используются потрясающие техники: начиная с очень слабых примитивов, строится более мощное AAR, и в итоге полноценный порт задачи. Магия портов в коде эксплойта невероятна. И всё это при переполнении кучи на 8 нулевых байт. Совершенно умопомрачительно.
- Я набросал несколько наивных идей по повышению надёжности. Надеюсь, в будущем кто-нибудь выпустит более надёжную версию эксплойта. :)
- Спасибо Ian Beer за потрясающий эксплойт!
CVE-2018-4233
- Это закомментированная версия iOS WebKit эксплойта от @niklas_b.
- Огромное спасибо kudima(@begger_dd) за очень ясный, краткий и тщательно аннотированный разбор! :)
- В разборе объясняется уязвимость путаницы типов в JIT, некоторые ограничения преобразований boxing/unboxing (которые могут приводить к ненадёжности), а также детально описывается, как строятся ранние/поздние примитивы AAR/AAW. Также он даёт представление об изменениях в техниках эксплуатации после последнего раунда митигаций (маскирование индексов, отравление backing store ArrayBuffer, некоторые изменения в механизме W^X JIT, изменения в структуре JSObject и т.д.)
jsc_ConcatMemcpy_infoleak
- Это закомментированная версия эксплойта для утечки информации WebKit от kudima (исправлена 27.08.2018).
- Он основан на неполном исправлении одной из уязвимостей, о которых сообщил lokihardt. Патч из отчёта lokihardt исправил примитив путаницы типов Double -> Object, но не исправил обратную ситуацию: Object -> Double.
- Он заполняет кучу WebKit «бабочками», содержащими один объект и маркер, а затем вызывает ошибку concat и заполняет большую часть нескольких массивов double неинициализированными данными кучи. Затем он перебирает неинициализированные double-массивы, созданные ошибочным concat, пока не найдёт адрес ранее размещённого объекта и не извлечёт его.
- Ещё раз спасибо kudima(@begger_dd) за отличный эксплойт и разбор! :)
[ 1Day ]
CVE-2017-2547
- Однажды я посмотрел на эксплойт singi после его презентации на Zer0con 2018 и решил его улучшить.
- Это автономная версия эксплойта, до того как я интегрировал его в pwnjs.
- Улучшения включают в себя
- Повышенная надёжность (работает безупречно после длительных сессий браузера с загрязнённой памятью)
- Удалены все жёстко заданные смещения для совместимости с различными версиями браузера
- Использована другая техника эксплуатации (стандартная техника misalign)
- В итоге интегрирован во фреймворк pwnjs путём создания прототипа webkit
- Код сделан гораздо более читаемым, добавлено множество комментариев
- Особая благодарность
- qwertyoruiop & Samuel Grob за потрясающую статью в Phrack и публичные эксплойты
- Brian Pak & Andrew Wesie за отличный фреймворк pwnjs!