Всем привет!


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


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


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


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


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



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



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



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


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


2.a 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



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 потеряла ореол таинственности, появились более-менее работающие инструменты для "простых" людей.


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



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


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



2.h BAF (Binary Analysis Frameworks)


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



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



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



4.b Linux



4.c Mac OS(OSX) / iOS



4.d Android


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

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


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


5.a PE



5.b ELF



5.c Mach-O



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


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


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


6.a C/C++



6.b ASM



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-мероприятий и прочитать решения прошедших.

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


Комментарии (15)


  1. vilgeforce
    15.08.2017 11:15
    +1

    И ни слова о HIEW… :-(


    1. dukebarman Автор
      15.08.2017 11:20
      +1

      HIEW не забыт! Он в виде пасхалки :)


      1. GreyCat
        15.08.2017 12:10
        +1

        Зато вот нас точно забыли ;)


        1. dukebarman Автор
          15.08.2017 12:23

          Исправились! :)


  1. k0nsu1
    15.08.2017 11:36

    1. dukebarman Автор
      15.08.2017 11:37

      Мы думали добавлять её или нет, но так как она не только RE тему покрывает, то решили, что Gray Hat Python будет достаточно.