Dynamic Binary Instrumentation в ІБ
Складність програмного забезпечення зростає – програми стають динамічнішими, та його поведінка можна оцінити лише у процесі виконання. Проводити оцінку безпеки (пошук уразливостей, недокументованих можливостей тощо) таких додатків значно складніше. Використовувати тільки статичні підходи аналізу стає неможливим, тому що через код, що динамічно генерується, ми навіть не можемо гарантувати повне покриття коду при аналізі. На допомогу приходять динамічні методи аналізу.
Є така чудова технологія, як динамічна бінарна інструментація (Dynamic Binary Instrumentation, DBI), яка полягає у вставці в бінарний виконуваний код аналізуючих (загалом) процедур. Основна принадність цього підходу полягає в тому, що немає необхідності у вихідному коді додатка, що аналізується - робота відбувається безпосередньо з бінарним файлом.
Інструментацією називають процес модифікації досліджуваної програми з її аналізу. За вставку додаткового коду зазвичай відповідають процедури, що інструментують, які викликаються тільки раз при виникненні необхідної події і модифікують цільову програму. Доданий код є аналізуючими процедурами. Ці процедури відповідають за проведення необхідного аналізу, модифікації та моніторингу досліджуваної (цільової) програми та викликаються щоразу при досягненні певної ділянки коду або виникнення у програмі певної події (створення процесу, виникнення виключення тощо). Інструментація бінарної програми може бути виконана на різних рівнях гранулярності програми: • інструкції; • базового блоку; • траси; • процедури; • секції бінарного файлу; • бінарного образу.
У результаті для створення такихІнструментів, що працюють під час виконання програми, були розроблені спеціальні фреймворки для динамічної бінарної інструментації. Інструменти, які можна створити з їх допомогою, називають динамічними бінарними аналізаторами (DBA, Dynamic Binary Analysis).
У цій статті хотілося б зупинитися на бібліотеці PIN від Intel, яку ми активно використовуємо в рамках проектів нашого дослідницького центру DSecRG, і розглянути, як її можна використовувати для вирішення завдань, що виникають при роботі з бінарними програмами без вихідних кодів.
Ця бібліотека активно розвивається та підтримується. Навколо неї склалося досить велике співтовариство – pinheads, де можна отримати відповідь на будь-яке питання з приводу PIN.
Активно DBI використовують такі круті дослідні центри безпеки, як Immunity, Zynamics, Rapid7, SourceFire VRT, Coseinc і т.д. Знання DBI вже зараз зустрічається як одна з вимог до фахівців з оцінки безпеки програмного забезпечення та розробки експлойтів. Ось приклад вимог з вакансії на посаду Exploit Engineer до команди розробників Metasploit:

Графічно роботу даного інструменту можна так:


І насамкінець наведу список цікавих публічних проектів з безпеки, реалізованих за допомогою PIN: Shellcode dumper – дампер стандартних шелкодів, принцип роботи яких ґрунтується на передачі управління на stack або heap. — Moflow-mitigations – прототип, що ідентифікує ROP-шелкоди та JIT-шелкоди. - Code-coverage-analysis-tools - аналізатор покриття коду. - RunTracer - набір інструментів для відстеження потоку управління програми. — Kerckhoffs – інструмент для напівавтоматичного детектування криптографічнихпримітивів у програмах. — VERA – інструмент візуалізації роботи програми. - Tripoux - аналізатор пакувальників зловредів. - Privacy Scope - інструмент для виявлення витоків критичної інформації. - Tartetatintools - набір інструментів для аналізу шкідливого коду.
Також є дуже цікаві реалізації інтеграції результатів роботи PIN-інструментів з дизассемблером IDA Pro, який відіграє роль візуалізатора: — DiffCov – набір інструментів для запису базових блоків програми, що виконалися. - runtime-tracer - створює трейс виконання програми зі значеннями регістрів і оброблюваними ділянками пам'яті.

Це далеко не повний список проектів безпеки, реалізованих за допомогою PIN, але, мені здається, цього буде достатньо, щоб почати робити свої pintool-інструменти.
Також усім, хто зацікавився DBI/PIN з метою інформаційної безпеки, наполегливо раджу звернути увагу на workshop “Binary instrumentation for security professionals” (slides, examples) від мого хорошого знайомого Gal Diskin з компанії Intel. До цього курсу пощастило прикласти руку і мені. Він читався на таких хакерських конференціях, як BlackHat, DEFCON та HackLu.