Реверсивный инжиниринг приложений под Windows
Покупка
Новинка
Тематика:
Windows
Издательство:
ДМК Пресс
Автор:
Бирюков Андрей Александрович
Год издания: 2024
Кол-во страниц: 376
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Специалитет
ISBN: 978-5-93700-292-1
Артикул: 856477.01.99
Реверсивный инжиниринг считается одним из наиболее сложных направлений в информационной безопасности (ИБ). В книге автор предлагает приоткрыть завесу тайны над этой темой и с помощью практических примеров рассмотреть, как работают приложения под ОС Windows, а также разобраться в том, как эксплуатировать уязвимости переполнения буфера, размещать свой код в выполняемых файлах, находить полезную информацию в дампах памяти и многое другое.
Книга предназначена как для начинающих специалистов, желающих разобраться в реверс-инжиниринге, так и для опытных специалистов по информационной безопасности, интересующихся данной темой.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Операционные системы и программы-оболочки
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.02: Информационные системы и технологии
- ВО - Специалитет
- 09.05.01: Применение и эксплуатация автоматизированных систем специального назначения
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Реверсивный инжиниринг приложений под Windows А. А. Бирюков Москва, 2024
УДК 004.056 ББК 32.973 Б64 Бирюков А. А. Б64 Реверсивный инжиниринг приложений под Windows-. – М.: ДМК Пресс, 2024. – 376 с.: ил. ISBN 978-5-93700-292-1 Реверсивный инжиниринг считается одним из наиболее сложных направлений в информационной безопасности (ИБ). В книге автор предлагает приоткрыть завесу тайны над этой темой и с помощью практических примеров рассмотреть, как работают приложения под ОС Windows, а также разобраться в том, как эксплуатировать уязвимости переполнения буфера, размещать свой код в выполнимых файлах, находить полезную информацию в дампах памяти и многое другое. Книга предназначена как для начинающих специалистов, желающих разобраться в реверс-инжиниринге, так и для опытных специалистов по ИБ, интересующихся данной темой. УДК 004.056 ББК 32.973 Все права защищены. Ни одна из частей этого документа не может быть воспроизведена, опубликована, сохранена в электронной базе данных или передана в любой форме или любыми средствами, такими как электронные, механические, записывающие или иначе, для любой цели без предварительного письменного разрешения владельца права. Все торговые марки и названия программ являются собственностью их владельцев. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. По этой причине издательство не несет ответственности за возможные ошибки, связанные с использованием книги. © Бирюков А. А., 2024 ISBN 978-5-93700-292-1 © Оформление, издание, ДМК Пресс, 2024
ОГЛАВЛЕНИЕ 0x0cf11 Вступление......................................................................................8 О пользе реверсинга...............................................................................................8 Зачем нужен реверсинг...........................................................................................9 О чем эта книга.....................................................................................................10 Заключение к вступлению....................................................................................11 Глава 1. 0x00f13 О коде, инструментах и крякмиксах.........................12 Основы реверсинга...............................................................................................12 Регистры и стек.....................................................................................................12 Флаги......................................................................................................................15 Инструкции............................................................................................................17 Режимы адресации................................................................................................19 Реальный режим....................................................................................................20 Защищенный режим.............................................................................................20 Многосегментная модель памяти........................................................................20 Длительный режим (Long Mode)..........................................................................21 О реверсинге .........................................................................................................21 Ассемблер и компиляторы...................................................................................21 Отладчики и дизассемблеры................................................................................23 Только виртуализация...........................................................................................25 Основы реверсинга, начинаем ломать................................................................25 О патчинге.............................................................................................................25 Подведем промежуточные итоги.........................................................................29 Пишем кейген........................................................................................................30 Виды механизмов защиты...................................................................................30 Разбор крякми ......................................................................................................31 Пишем кейген........................................................................................................34 Заключение............................................................................................................40
Глава 2. 0x06f16 Переполняем и эксплуатируем..................................41 Переполнение буфера...........................................................................................41 Суть проблемы.......................................................................................................42 Подопытный код...................................................................................................43 Методы поиска уязвимостей................................................................................44 Метод белого ящика.........................................................................................44 Метод серого ящика ........................................................................................45 Метод черного ящика......................................................................................47 Фаззинг..............................................................................................................47 Подключаем отладчик...........................................................................................48 Готовый шелл-код.................................................................................................58 Прямой и обратный шелл.....................................................................................59 Генерируем прямой шелл................................................................................61 Генерируем обратный шелл............................................................................63 Заключение............................................................................................................68 Глава 3. 0x05f1b Забираемся в чужие EXE’шники................................69 Инъекции кода в выполнимые файлы................................................................69 Не только расширение..........................................................................................70 MZ и другие............................................................................................................71 Сигнатура...............................................................................................................71 Структура...............................................................................................................71 Таблица импорта...................................................................................................72 Таблица экспорта..................................................................................................72 Таблица перемещений..........................................................................................72 Следы компиляторов............................................................................................74 Прячемся в «пещере кода» ..................................................................................83 Заключение............................................................................................................98 Глава 4. 0x04704 Свой код среди чужого..............................................99 Инъекции процессов в Windows .........................................................................99 Байты плохие и очень плохие............................................................................100 Пишем инжектор.................................................................................................101 Эксплуатируем.....................................................................................................103 DLL-инъекция кода ............................................................................................105 Динамические библиотеки............................................................................105 Создаем свою DLL..........................................................................................105 Отражающая DLL-инъекция .........................................................................108 Учимся отражать............................................................................................109 Эксплуатируем................................................................................................110 4 Оглавление
Инжектируем..................................................................................................111 Заглянем под капот........................................................................................113 Mimikatz: инъекции для взрослых................................................................114 Препарируем Mimikatz..................................................................................120 Заключение..........................................................................................................127 Глава 5. 0x04b35 Мешаем отладке....................................................... 128 Защищаемся от реверсинга................................................................................128 Антиотладка.........................................................................................................129 IsDebuggerPresent...........................................................................................129 Полный PEB....................................................................................................136 Код смерти......................................................................................................140 Атака на отладчик..........................................................................................144 Родительский процесс...................................................................................146 Подключение к процессу...............................................................................149 Родительский процесс...................................................................................151 Отладочные регистры....................................................................................153 Скрываемся из TEB........................................................................................160 Плагины для отладчика x64dbg.....................................................................161 Плагины для сокрытия IDA Pro.....................................................................164 Заключение..........................................................................................................164 Глава 6. 0x04d56 Прячемся в дебрях ОС............................................ 165 Прячемся в автозагрузку....................................................................................165 Работа с реестром................................................................................................166 Функции для работы с реестром...................................................................166 Раздел Startup......................................................................................................170 Ветка Run........................................................................................................171 Сервисы...........................................................................................................174 Установка сервиса..........................................................................................181 Другой путь.....................................................................................................190 И снова реестр................................................................................................191 Скрытый отладчик.........................................................................................195 Запуск через обновления...............................................................................198 Переселяем папки..........................................................................................200 Планировщик задач............................................................................................201 Инъекция DLL в уже запущенный процесс..................................................202 …И просто ярлыки.........................................................................................210 Заключение..........................................................................................................211 Глава 7. 0x04e97 Оконный реверсинг без ассемблера..................... 212 Платформа .NET...................................................................................................212 Необходимые инструменты...............................................................................217 5 Оглавление
Пример обфускации............................................................................................237 Заключение..........................................................................................................242 Глава 8. 0x04e98 Разбираем упаковку................................................. 243 Упаковка и обфускация.......................................................................................243 Разбор обфусцированного крякми....................................................................248 Заключение..........................................................................................................258 Глава 9. 0x04d59 Исследуем вредоносы............................................. 259 Анализ вредоносов..............................................................................................259 Виды вредоносов.................................................................................................259 Об инструментах.................................................................................................262 Препарируем блокировщик................................................................................263 Препарируем шифровальщик............................................................................272 Заключение..........................................................................................................281 Глава 10. 0x04b3a ROP: видишь код? А он есть!................................ 282 Код без кода.........................................................................................................282 String-oriented programming...............................................................................286 Sig return-oriented programming.........................................................................288 Blind Return Oriented Programming....................................................................289 Аналогичные атаки.............................................................................................289 Эксплуатируем ROP.............................................................................................290 Заключение..........................................................................................................298 Глава 11. 0x0470b Кукушка против вредоносов................................ 299 Песочницы...........................................................................................................299 Cuckoo Sandbox....................................................................................................300 Заключение..........................................................................................................321 Глава 12. 0x05f04 Копаемся в памяти с помощью Volatility........... 322 Форензика............................................................................................................322 Статический анализ.......................................................................................323 Динамический анализ...................................................................................323 Заключение..........................................................................................................330 Глава 13. 0x06f01 Полезный инструментарий Remnux.................... 331 Дистрибутив REMnux..........................................................................................332 Установка REMnux...............................................................................................332 Вариант из контейнера..................................................................................333 6 Оглавление
Общие действия по анализу подозрительного файла.....................................334 Начинаем анализ.................................................................................................334 Стереть нельзя отправить...................................................................................338 Cutter....................................................................................................................343 Заключение..........................................................................................................360 Глава 14. 0x00f00 Заключение.............................................................. 361 Глава 15. 0x0cf00 Приложения.............................................................. 365 Приложение № 1. Инструкции языка ассемблера............................................365 Приложение № 2. Горячие клавиши x64dbg.....................................................371 Приложение № 3. Горячие клавиши IDA Pro....................................................373 Глава 16. 0x14f00 Библиография.......................................................... 375 7 Оглавление
«Ален ноби, ностра алис! Что означает: если один человек построил, другой завсегда разобрать может!» Х/ф «Формула любви» О пользе реверсинга Реверсивный инжиниринг, или обратная разработка, появился задолго до создания компьютеров. Техническим специалистам всегда было интересно, как работает то или иное устройство или агрегат. А государства и промышленники хотели заполучить готовые технологии без затрат на разработку собственных аналогов или покупку лицензий. Традиционно двигателем технологий являются военные конфликты, и здесь обратная разработка пришлась как нельзя кстати, ведь, захватив трофейную 0X0CF11 ВСТУПЛЕНИЕ
технику, инженеры сразу же начинали изучать принципы ее работы, для того чтобы, с одной стороны, выявить слабые места вражеского вооружения, а с другой – понять, какие решения у противника лучше своих, дабы затем применить эти решения уже на своей технике. Кстати, не стоит думать, что реверсивный инжиниринг – это «тупое» копирование чужого готового решения. Казалось бы, просто разобрал готовое устройство, измерил детали, перенес на чертежи – и готово, можешь делать свое такое же. Однако на практике это далеко не так. Возьмем, к примеру, реверсинг самолета. Прежде всего отметим, что такое сложное устройство состоит из тысяч деталей, собираемых вместе в определенной последовательности, поэтому инженерам сначала придется немало потрудиться, чтобы его разобрать и понять принципы взаимодействия различных узлов. А затем мы можем столкнуться с неожиданными проблемами. Так, при изучении американских самолетов и другой техники, поставлявшейся в СССР по ленд-лизу, инженерам пришлось переводить все размеры деталей из дюймов в метрическую систему. А так как это соотношение является иррациональным числом, то задача «копирования» становится совсем нетривиальной. Таким образом, обратная разработка является одним из инструментов технологического развития экономики и государства в целом. Зачем нужен реверсинг Но вернемся к компьютерам. Возможно, у многих читателей возник вопрос, почему книга посвящена реверсингу приложений под Windows, хотя всем известно, что в свете последних геополитических событий в России взят курс на замещение иностранного ПО российскими аналогами. Однако во многих отраслях на сегодняшний день есть проприетарные приложения, работающие только под Windows. Так, например, на многих объектах критической инфраструктуры, прежде всего на промышленных предприятиях, для управления технологическим оборудованием используются ОС Windows и проприетарные SCADA-системы. Для того чтобы заменить данные решения на отечественные разработки, необходимо понимать, как функционирует та или иная SCADAсистема, как работают протоколы обмена данными и драйверы оборудования. Таким образом, реверсинг может быть востребован при решении задач по замене проприетарного программного обеспечения на собственные разработки. Кроме того, противостояние может вестись в том числе и в виртуальном пространстве, и противники могут использовать различное вредоносное программное обеспечение для достижения своих целей. Соответственно, реверсинг может помочь как тем, кто защищается от вражеских атак (например, вирусным аналитикам и специалистам по тестированию на проникновение), так и тем, кто выполняет противоположные задачи. Код практически любого приложения может содержать ошибки. Самый простой способ исправить эти ошибки – это найти в исходном коде проблемную команду или функцию и внести соответствующие исправления в код. Но что делать, когда по тем или иным причинам исходный код нам не доступен, как в случае с проприетарным ПО? Если у нас имеется только откомпилированный выполнимый файл – артефакт. Например, для выявления уязвимостей, недокументированных возможностей и т. д. В таком случае нам тоже потребуется 9 0x0cf11 Вступление
обратная разработка. Результатом обратной разработки является построение детального алгоритма работы программы, а также выявление уязвимостей и других интересующих исследователя аспектов работы программного обеспечения. Таким образом, обратная разработка нужна тем, кто занимается поиском уязвимостей с целью улучшения защищенности программного обеспечения, – багхантерам. Также реверсивный инжиниринг требуется программистам, работающим с низкоуровневыми языками программирования (например, разработчикам драйверов), где без знания ассемблера не обойтись. Не стоит забывать, что вредоносный код – это тоже программное обеспечение, и его тоже необходимо реверсить для выявления принципов заражения и для того, чтобы понять, как от них можно защититься. Этими задачами занимаются вирусные аналитики. Ну что ж, надеюсь, мне удалось наглядно обосновать необходимость реверсивного инжиниринга для решения задач ИТ и ИБ, и теперь мы можем перейти непосредственно к описанию разделов этой книги. О чем эта книга Реверсинг приложений традиционно считается одним из самых сложных направлений в информационных технологиях. Многих пугает необходимость изучать язык ассемблера, необходимый для работы с дизассемблерами и отладчиками. Также программистам, работавшим только с языками высокого уровня, не всегда понятны принципы работы со стеком, обратная запись байтов в памяти и манипуляции с регистрами. Опыт автора по созданию и сопровождению курса по реверсивному инжинирингу в Академии Кодебай и проведению занятий в других учебных центрах по данной тематике лег в основу этой книги. В своей книге я постарался как можно больше внимания уделить практической части процесса обратной разработки, поэтому здесь большое количество иллюстраций, в которых я постарался зафиксировать все выполняемые на практике действия. В начале книги мы уделим внимание основам языка ассемблера, поговорим об основных инструкциях, регистрах и организации памяти. Но потом сразу же начнем решать Crack Me (крякмиксы, задачки «взломай меня»). Это маленькие приложения, в которых необходимо ввести определенный пароль или выполнить иное действие, для того чтобы получить сообщение об успешном решении. Решение крякмиксов позволяет быстрее понять основные принципы реверсинга. Далее мы поговорим о переполнении буфера – одной из самых распространенных ошибок программистов. Мы откомпилируем уязвимое приложение на С и затем напишем к нему эксплойт. Эта тема будет наиболее интересна специалистам по анализу защищенности приложений. Потом обсудим инъекцию своего кода в выполнимые файлы. В частности, рассмотрим формат PE, следы, которые оставляют компиляторы в файлах, понятие code cave и многое другое. Эта тема будет полезна прежде всего вирусным аналитикам и специалистам по анализу защищенности. Следующая глава будет посвящена тоже инъекциям, но уже процессов. Материал будет полезен вирусным аналитикам. 10 0x0cf11 Вступление