Реверсивні посилання - Версія для друку

Windows

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

Даний список посилань, ресурсів, книг ми вже років п'ять розсилаємо людям, які хотіли б потрапити до нашого дослідницького відділу, але не проходять поки що за рівнем знань або лише розпочинають свій шлях у сфері інформаційної безпеки. Природно, цьому переліку, як і більшості матеріалів/підбірок, через деякий час буде потрібно оновлення та актуалізація.

Отже, перейдемо до переліку матеріалів!

1. Тематики

У цьому розділі ми розглянемо основні напрямки RE. Почнемо безпосередньо з самого процесу зворотної розробки, перейдемо до пошуку вразливостей та розробки експлоїтів, і, звичайно, дістанемося до аналізу шкідливих програм.

1.a Reverse engineering

1.b Пошук уразливостей

1.c Приклади експлуатації знайдених уразливостей

1.d Аналіз шкідливих програм

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

Нижче наведено популярні інструменти, що застосовуються при RE.

2.a IDA Pro

2.b Radare2

  • "The radare2 book [72]" - основна книга з використання фреймворку Radare2 для реверсу;
  • "Radare2 Cheatsheet [73]" - "шпаргалка" по основним командам;
  • "Radare Today - the blog of radare2 [74]" - блог фреймворку. У ньому знайдуться як новини, а й практичні приклади.

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

Без знання принципів роботивідладчика та вміння ним користуватися теж не обійтися. Нижче ми розглянемо відладчики для Windows, а в наступному пункті приділимо увагу знаменитому GDB. Отже, поїхали:

  • Advanced Windows Debugging: Developing and Administering Reliable, Robust, and Secure Software [75] - в першу чергу, ця книга стане в нагоді для розуміння та "вилову" помилок типу пошкодження купи;
  • "У Windows Debugging: A Practical Guide to Debugging and Tracing Strategies in Windows [76] " - це видання добре доповнить попередню книгу;
  • "Введення в крекінг з нуля, використовуючи OllyDbg" - на жаль, найстаріший ресурс wasm.ru закрився, але подібна добірка легко шукається, оскільки була продубльована на безліч ресурсів. До того ж, у мережі стали з'являтися "форки", тільки в них вже використовується x64dbg або IDA.

  • "gdb Debugging Full Example (Tutorial): ncurses [77]" - посібник із застосування GDB;
  • "GEF - Multi-Architecture GDB Enhanced Features for Exploiters & Reverse-Engineers [78] " - надбудова над GDB мовою Python, додає багато нових корисних команд, які стануть у нагоді для розробки експлоїтів;
  • "GEF Tutorials [79]" - серія скрінкастів з використання GEF.

Програмоване налагодження - це сьогодні невід'ємний підхід в арсеналі будь-якого реверсера. І DBI – один із інструментів. Детальніше:

  • "Dynamic Binary Instrumentation в ІБ [80]" - у цій статті вже зібрана деяка узагальнена інформація про DBI;
  • "Light And Dark Side Of Code Instrumentation [81]" - дана презентація допоможе вам орієнтуватися в різновидах різних інструментацій коду і в тому, що і коли вам може допомогти з аналізом програм.

Що таке SMT-вирішувач? Якщо коротко, SMT-рішач - це програма,яка може розв'язувати логічні формули.

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

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

  • пошук багів (статичний аналіз/фазинг);
  • деобфускація;
  • "домашній" криптоаналіз;
  • символьне виконання (як "движок");
  • також є певні успіхи в галузі автоматичної генерації експлойтів (наприклад, генерації ROP).

За цей час SMT втратила ореол таємничості, з'явилися інструменти, що більш-менш працюють, для "простих" людей.

Нижче наведено джерела, які допоможуть поринути у тему:

  • " SMT Solvers for Software Security, Sean Heelan, Rolf Rolles [82] " - мабуть, перша наукова робота, у якій було запропоновано застосування SMT на вирішення завдань у сфері безпеки ПЗ. Дає уявлення про те, де і як SMT може знайти своє місце у цій сфері;
  • Z3 [83] - один з найпопулярніших та найефективніших SMT-рішателей;
  • Z3 wiki [84] – репозиторій проекту;
  • "Getting Started with Z3: A Guide [85]" - онлайн-підручник, SMT-рішатель для експериментів;
  • Z3Py [86] - обв'язування на Python для Z3;
  • "Theorem prover, symbolic execution and practical reverse-engineering [87]" - хороша оглядова презентація, з прикладами вирішення реальних завдань та застосування Z3Py;
  • "Quick introduction in SAT/SMT solvers and symbolic execution [88] " (версія українською[89] ) - Хороша книга з цікавими практичними прикладами.
  • "An introduction to the use SMT solvers [90]" - оглядовий матеріал.
  • 2.g Python для автоматизації

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

    • "Gray Hat Python [91]" (переклад [92] ) - Відмінна книга, яка розповість, чим корисний Python в реверсі;
    • "The Beginner's Guide to IDAPython [93]" - безкоштовна книга про IDAPython;
    • "Python Arsenal for Reverse Engineering [94]" - ресурс, присвячений різним утилітами та бібліотекам для reverse engineering, що використовує Python.

    2.h BAF (Binary Analysis Frameworks)

    Декілька цікавих фреймворків/інструментів:

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

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

    3.a x86-x86_64

    • "Intel 64 and IA-32 Architectures Software Developer Manuals [106]" - раніше такі посібники відправляли на пошту, але через велику кількість матеріалу в них друк став дорогим задоволенням. Рекомендується як настільний довідник.

    Знання принципів роботи популярних операційних систем.

    4.a Windows

      "Windows Internals [110]" - основна книга для розуміння роботи ОС Windows. Наступні пункти хоч і пов'язані, в основному, з експлуатацією вразливостей у цій ОС, але дозволяють глибше дізнатися нутрощіWindows:

      "Linux insides [116]" - аналог книги Windows Internals, але тільки для ОС типу Linux. Як і у випадку з Windows, такі теми пов'язані з розробкою експлойтів:

    4.c Mac OS(OSX) / iOS

    4.d Android

    5. Формати виконуваних файлів

    У цьому розділі наведено посилання, що роз'яснюють подробиці популярних форматів виконуваних файлів.

    Відомий дослідник corkami [130] робить дуже корисні та цікаві "постери" зі схемою різних форматів файлів, у тому числі згаданих вище. Радимо використовувати їх як шпаргалку.

    6. Програмування

    Один наш знайомий якось сказав, що добрий реверсер це на 80% добрий програміст. Уміння програмувати та розуміння того, що й навіщо робиться, спрощує процес дослідження чужої програми. Тому без програмування у реверсі нікуди. Ну і звичайно автоматизація рутинного завдання, як ви вже напевно зрозуміли, дуже корисна річ ;)

    • "A Crash Course in x86 Assembly for Reverse Engineers [132]" - "прискорений курс" для занурення в x86 Асемблер, що позиціонується як спеціальний для RE;
    • "Assembly Programming Tutorial [133]" - посібник з програмування на Асембері, з можливістю запуску прикладів в online по ходу вивчення;
    • "Assembler. 2-ге видання [134]" - рекомендується використовувати як довідник;
    • "x86 Assembly Guide [135]" - online-версія.

    7. Практика

    У цій секції представлені посилання на віртуальні машини та online ресурси, що дозволяють попрактикуватися.

    7.a War Games

    Ну і насамкінець кілька посилань з великою кількістю матеріалів з вищевказаних тем:

    Посилання у тексті:

    [1] Тематика:#1-tematiki

    [2] Реверс:#1a-reverse-інженерія

    [3] Пошук вразливостей (фазинг):#1b-search-uyazvimostey

    [4] Використання вразливостей:#1c-primery-exploatacii-naydennyh-uyazvimostey

    [5] Аналіз шкідливого коду:#1d-analysis-of-malware-programs

    [6] Інструмент:#2-neobhodimyy-instrumentariy

    [8] Radare2:#2b-radar2

    [9] WinDBG (Ollydbg/Immunity Debugger/x64dbg):#2c-windbg-ollydbg--immunity-debugger--x64dbg

    [13] Python для автоматизації:#2g-python-dlya-automation

    [14] BAF (Binary Analysis Frameworks):#2h-baf-binary-analysis-frameworks

    [15] Архітектура:#3-архітектура

    [16] x86-x86_64:#3a-x86-x86_64

    [19] Windows:#4a-windows

    [21] Mac OS(OSX) / iOS:#4c-mac-ososx--ios

    [22] Andro >#4d-android

    [23] Формат файлу:#5-format-ispolnyaemyh-filev

    [27] Програмування:#6-програмування