Технологии безопасности

Сайт посвященный вопросам безопасности

Избранное: ссылки по reverse engineering

(adsbygoogle = window.adsbygoogle || []).push({});

Всем привет!

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

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

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

Итак, перейдем к списку материалов!

Тематики
a. Реверс
b. Поиск уязвимостей (fuzzing)
c. Эксплуатация уязвимостей
d. Анализ вредоносного кода
Инструменты
a. IDA Pro
b. Radare2
c. WinDBG (Ollydbg / Immunity Debugger / x64dbg)
d. GDB
e. DBI
f. SMT
g. Python для автоматизации
h. BAF (Binary Analysis Frameworks)
Архитектуры
a. x86-x86_64
b. ARM
ОС
a. Windows
b. Linux
c. Mac OS(OSX) / iOS
d. Android
Форматы файлов
a. PE
b. ELF
c. Mach-O
Программирование
a. C/C++
b. Assembler
Практика
a. War games

1. Тематики

В данном разделе мы рассмотрим основные направления применения RE. Начнем непосредственно с самого процесса обратной разработки, перейдем к поиску уязвимостей и разработке эксплоитов, и, конечно, доберемся до анализа вредоносных программ.

1.a Reverse engineering

«Искусство дизассемблирования» от Крис Касперски — не новая, но очень хорошая и до сих пор актуальная книга от Криса с хорошей систематизацией знананий и отличным материалом;
«Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation» — «новая» книга от нескольких известных специалистов по ИБ, покрывающая некоторые новые моменты и темы, что отсутствуют в книге Криса;
«Реверсинг для начинающих» от Дениса Юрьевича — полностью бесплатная книга, переведенная уже на множество языков мира. Здесь, наверное, самое примечательное — это наличие интересных заданий после каждой главы, при этом — для нескольких архитектур сразу;
«Practical RE tips» — отличный webinar на английском языке от Gynvael Coldwind, содержащий много полезных советов и скриптов про RE;
Ресурс «OPENSECURITYTRAINING.INFO» содержит хорошие обучающие лекции и видеоролики по RE на английском;
«Digging Through the Firmware» — неплохая серия статей Practical Reverse Engineering — полезные статьи для тех, кто только собирается погрузиться в мир реверсинга прошивок устройств;
«Training: Security of BIOS/UEFI System Firmware from Attacker and Defender Perspectives» — если вы хотите окунуться в мир firmware security, UEFI BIOS, то вам определенно нужно ознакомиться с данными слайдами, которые ранее были в платном тренинге на ведущих конференциях по безопасности;
CRYPTO101 — немного введения в криптографию, без которой не обойтись.

1.b Поиск уязвимостей

«Fuzzing: Brute Force Vulnerability Discovery» — хоть и не новая книга, но в качестве понимания основ фаззинга подходит в самый раз. Есть перевод на русский язык, но содержит довольно смешные ляпы;
«Автоматический поиск уязвимостей в программах без исходных текстов» — хороший вводный материал на русском языке, представленный на PHDays 2011;
«The Evolving Art of Fuzzing» — статья про развитие фаззинга;
«Modern Security Vulnerability Discovery» — компиляция разных техник поиска уязвимостей в одном документе;
«(State of) The Art of War: Offensive Techniques in Binary Analysis» — all-in-one документ обо всех существующих техниках поиска уязвимостей;
«The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities» — далеко не новая, но до сих пор актуальная книга про разные подходы к поиску уязвимостей.

1.c Примеры эксплуатации найденных уязвимостей

«Exploit Writing Tutorials by Corelan Team» (перевод) — известная серия постов по написание эксплоитов и шеллкодов, начиная с основ;
«Exploit Development Community» (перевод частичный) — цикл статей по написанию боевого эксплоита для IE 10 и 11 версий;
«Modern Binary Exploitation» — материалы от команды RPISEC с учебного курса, который они проводили в Rensselaer Polytechnic Institute;
«Web-архив блога компании Vupen» — канувший влету блог с примерами эксплуатации сложных уязвимостей в VirualBox, XEN, Firefox, IE10, Windows Kernel, Adobe Flash, Adobe Reader;
«Project Zero» — блог от исследовательской команды Google, где их специалисты частенько делятся интересными историями по эксплуатации разных крутых уязвимостей;
«Browser mitigations against memory corruption vulnerabilities» — технологии защиты, используемые в популярных браузерах:

«Браузеры и app specific security mitigation. Часть 1»
«Браузеры и app specific security mitigation. Часть 2. Internet Explorer и Edge»
«Браузеры и app specific security mitigation. Часть 3. Google Chrome»

«SoK: Eternal War in Memory» — отличный документ, в котором показана модель атаки и описаны различные механизмы предотвращения эксплуатации на разных стадиях для различных типов уязвимостей, связанных с повреждением памяти;
«Writing Exploits for Win32 Systems from Scratch» — подробная статья по написанию эксплоита с нуля для уязвимости в программе SLMAIL;
Phrack — знаменитый хакерский журнал Phrack. Рекомендуем почитать, в первую очередь, статьи категории «The Art of Exploitation»;
«The Shellcoder’s Handbook: Discovering and Exploiting Security Holes» — легендарная книжка, посвященная написанию шеллкодов.

1.d Анализ вредоносных программ

«Practical Malware Labs» — исходники к книге «Practical Malware Analysis»;
«Malware Analyst’s Cookbook and DVD: Tools and Techniques for Fighting Malicious Code» — эту и предыдущую книги мы рекомендуем одним комплектом тем, кто интересуется данной темой;
«Malware Analysis Tutorials: a Reverse Engineering Approach» (перевод) — довольно длинная серия статей, посвященная настройке окружения с последующим анализом в нем вредоносных программ;
«Course materials for Malware Analysis by RPISEC» — ещё один курс от RPISEC, только теперь про вредоносные программы;
«Компьютерные вирусы и антивирусы. Взгляд программиста» — хоть в книге рассматриваются вредоносные программы, начиная с времён DOS, она всё равно будет полезна, поскольку кроме анализа кода таких программ автор показывает примеры написания антивирусов под каждый конкретный случай.

2. Необходимый инструментарий

Ниже представлены популярные инструменты, применяемые при RE.

2.a IDA Pro

«The IDA Pro Book: The Unofficial Guide to the World’s Most Popular Disassembler» — книга, благодаря которой ваше знакомство с IDA Pro пройдет легко и непринужденно 🙂
«TiGa’s Video Tutorial Series on IDA Pro» — подборка небольших HOW-TO видео по использованию IDA Pro;
«Open Analysis Live» — в отличие от предыдущей подборки по использованию IDA Pro, эта более новая и обновляемая. В основном, рассматривается анализ вредоносных программ.

2.b Radare2

«The radare2 book» — основная книга по использованию фреймворка Radare2 для реверса;
«Radare2 Cheatsheet» — «шпаргалка» по основным командам;
«Radare Today — the blog of radare2» — блог фреймворка. В нём найдутся не только новости, но и практические примеры.

2.c WinDBG (Ollydbg / Immunity Debugger / x64dbg)

Без знания принципов работы отладчика и умения им пользоваться тоже не обойтись. Ниже мы рассмотрим отладчики для ОС Windows, а в следующем пункте уделим внимание знаменитому GDB. Итак, поехали:

Advanced Windows Debugging: Developing and Administering Reliable, Robust, and Secure Software — в первую очередь, эта книга пригодится для понимания и «отлова» ошибок типа повреждения кучи;
«Inside Windows Debugging: A Practical Guide to Debugging and Tracing Strategies in Windows» — это издание хорошо дополнит предыдущую книгу;
«Введение в крэкинг с нуля, используя OllyDbg» — к сожалению, старейший ресурс wasm.ru закрылся, но подобная подборка легко ищется, поскольку была продублирована на множество ресурсов. К тому же, в сети стали появляться «форки», только в них уже используется x64dbg или IDA.

2.d GDB

«gdb Debugging Full Example (Tutorial): ncurses» — руководство по применению GDB;
«GEF — Multi-Architecture GDB Enhanced Features for Exploiters & Reverse-Engineers» — надстройка над GDB на языке Python, добавляет много новых полезных команд, которые пригодятся для разработки эксплоитов;
«GEF Tutorials» — серия скринкастов по использованию GEF.

2.e DBI

Программируемая отладка — это сегодня неотъемлемый подход в арсенале любого реверсера. И DBI — один из инструментов. Подробнее:

«Dynamic Binary Instrumentation в ИБ» — в этой статье уже собрана некоторая обобщенная информация про DBI;
«Light And Dark Side Of Code Instrumentation» — данная презентация поможет вам ориентироваться в разновидностях различных инструментаций кода и в том, что и когда вам может помочь с анализом программ.

2.f SMT

Что такое SMT-решатель? Если кратко, SMT-решатель — это программа, которая может решать логические формулы.

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

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

поиск багов (статический анализ/фаззинг);
деобфускация;
«домашний» криптоанализ;
символьное исполнение (в качестве «движка»);
также есть определенные успехи в области автоматической генерации эксплойтов (например, генерации ROP).

За это время SMT потеряла ореол таинственности, появились более-менее работающие инструменты для «простых» людей.

Ниже приведены источники, которые помогут погрузиться в тему:

«SMT Solvers for Software Security, Sean Heelan, Rolf Rolles» — пожалуй, первая научная работа, в которой было предложено применение SMT для решения задач в области безопасности ПО. Дает представление о том, где и как SMT может найти свое место в данной сфере;
Z3 — один из самых популярных и эффективных SMT-решателей;

Z3 wiki – репозиторий проекта;
«Getting Started with Z3: A Guide» — онлайн-учебник, SMT-решатель для экспериментов;
Z3Py — обвязка на Python для Z3;

«Theorem prover, symbolic execution and practical reverse-engineering» — хорошая обзорная презентация, с примерами решения реальных задач и применения Z3Py;
«Quick introduction into SAT/SMT solvers and symbolic execution» (версия на русском) – хорошая книга с интересными практическими примерами.
«An introduction to the use SMT solvers» — обзорный материал.

2.g Python для автоматизации

Сегодня без знаний основ языка Python будет очень сложно, потому что этот язык программирования считается самым популярном средством для автоматизации различных задач в сфере ИБ (и не только). К тому же, он используется в различных утилитах (к примеру, все указанные выше утилиты позволяют дополнять функционал с помощью этого ЯП):

«Gray Hat Python» (перевод) — отличная книга, которая расскажет, чем полезен Python в реверсе;
«The Beginner’s Guide to IDAPython» — бесплатная книга о IDAPython;
«Python Arsenal for Reverse Engineering» — ресурс, посвященный различным утилитами и библиотекам для reverse engineering, использующим Python.

2.h BAF (Binary Analysis Frameworks)

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

«Overview and Usage of Binary Analysis Frameworks» — небольшой обзор BAF;

Несколько интересных фреймворков/инструментов:

Triton

Примеры по использованию от разработчиков
«Dynamic Binary Analysis and Obfuscated Codes»
How Triton can help to reverse virtual machine based software protections
«Experimenting with Z3 — Dead code elimination»
«Experimenting with Z3 — Proving opaque predicates»

Angr

Solving kao’s toy project with symbolic execution and angr

Ponce
Binary Analysis Platform.

3. Архитектуры

Мы рассмотрим только несколько популярных архитектур. В конце статьи в разделе с дополнительными материалами вы найдете информацию по многим другим (MIPS, PowerPC и т.д.).

3.a x86-x86_64

«Intel 64 and IA-32 Architectures Software Developer Manuals» — раньше такие руководства отправляли на почту, но из-за большого количества материала в них печать стала дорогим удовольствием. Рекомендуется в качестве настольного справочника.

3.b ARM

Azeria Labs (ARM Assembly Basics & ARM Exploit Development) — сайт со статьями по основам ARM-ассемблера и разработке эксплойтов под эту архитектуру;
Курс «Introduction to ARM» — двухдневный видеокурс, посвященным ARM-разработке и эксплуатации;
VisUAL — визуализация работы ARM-команд.

4. ОС

Знание принципов работы популярных Операционных Систем.

4.a Windows

«Windows Internals» — основополагающая книга для понимая работы ОС Windows.
Следующие пункты хоть и связаны, в основном, с эксплуатацией уязвимостей в этой ОС, но позволяют глубже узнать внутренности Windows:

«Windows exploits, mostly precompiled»
«Exploit Development Environment»
«Windows Breakout from Defcon24»
«Part 10: Kernel Exploitation -> Stack Overflow»
«Kernel and Driver explotation».

4.b Linux

«Linux insides» — аналог книги Windows Internals, но только для ОС типа Linux.
Как и в случае с Windows, следующие темы связаны с разработкой эксплойтов:

«Heap Exploitation into Linux»
«A series tutorial for linux exploit development to newbie»
«Linux Kernel Exploitation »
«Programming Linux Anti-Reversing Techniques»

4.c Mac OS(OSX) / iOS

«Reverse Engineering Resources Maс и iOS» — подборка материалов по данной теме.

4.d Android

«Android Hacker’s Handbook» — наверное, самая популярная книга, посвященная безопасности ОС Android;
«Android Internals::Power User’s View» — книга, рассказывающая о внутренних механизмах этой ОС. Из-за недавних утечек материал появился в открытом доступе, о чём пишет сам автор на своём сайте и предоставляет возможность скачать прошлую версию.

5. Форматы исполняемых файлов

В этом разделе представлены ссылки, разъесняющие подробности популярных форматов исполняемых файлов.

5.a PE

«PE секции»
«Заголовок PE»
«[Формат исполняемого файла ОС Windows. PE32 и PE64]»(http://web.archive.org/web/20111024201441/http://wasm.ru:80/article.php?article=green2red02)
«Компьютерные вирусы изнутри и снаружи».

5.b ELF

«Linux x64 Infection for Lamers (by a Lamer).»

5.c Mach-O

«Parsing mach-o files»

Известный исследователь corkami делает очень полезные и интересные «постеры» со схемой различных форматов файлов, в том числе, упомянутых выше. Советуем использовать их как шпаргалку.

6. Программирование

Один наш знакомый как-то сказал, что хороший реверсер это на 80% хороший программист. Умение программировать и понимание того, что и зачем делается, упрощает процесс исследования чужой программы. Поэтому без программирования в реверсе никуда. Ну и конечно автоматизация рутинной задачи, как вы уже наверняка поняли, — очень полезная вещь 😉

6.a C/C++

Modern Memory Safety: C/C++ Vulnerability Discovery, Exploitation, Hardening — это большой курс с отличными примерами. Просто must have материал для всех.

6.b ASM

«A Crash Course in x86 Assembly for Reverse Engineers» — «ускоренный курс» для погружения в x86 Ассемблер, позиционирующийся как специальный для RE;
«Assembly Programming Tutorial» — руководство по программированию на Ассембере, с возможностью запуска примеров в online по ходу изучения;
«Assembler. 2-е издание» — рекомендуется использовать как справочник;
«x86 Assembly Guide» — online-версия.

7. Практика

В этой секции представлены ссылки на виртуальные машины и online-ресурсы, позволяющие попрактиковаться.

7.a War Games

SmashTheStack Wargaming Network — данная сеть с несколькими wargame поддерживается волонтёрами и доступна онлайн. Мы рекомендуем начать с неё;
BinTut — локальный wargame;
Reversing Workshop — мастер-класс по решению заданий с ежегодного соревнования «The Flare On Challenge» за 2016 г.;
Exploit-Challenges — подборка уязвимых ARM бинарных файлов;
ARM Reverse Engineering Exercises — оригинальный репозиторий «пропал», но был найден один из форков на просторах github;
CTF Time — тут вы сможете узнать расписание будущих CTF-мероприятий и прочитать решения прошедших.

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

Подборка, в целом посвященная сфере ИБ
Про эксплуатацию уязвимостей
Про reverse engineering:

Awesome-reversing
Обзор ресурсов от REMath

Про эксплуатацию уязвимостей в ОС Windows
Про фазинг
Про анализ вредоносных программ
И ещё много различных «awesome» подборок.