Динамично двоично инструментиране в информационната сигурност

Сложността на софтуера нараства - програмите стават все по-динамични и тяхното поведение може да бъде оценено само по време на изпълнение. Много по-трудно е да се извърши оценка на сигурността (търсене на уязвимости, недокументирани функции и т.н.) на такива приложения. Става невъзможно да се използват само подходи за статичен анализ, тъй като поради динамично генерирания код не можем дори да гарантираме пълно покритие на кода по време на анализа. На помощ идват динамичните методи за анализ.

Има такава забележителна технология като динамична двоична инструментация (Dynamic Binary Instrumentation, DBI), която се състои във вмъкване на анализиращи (в общия случай) процедури в двоичния изпълняващ код. Основната красота на този подход е, че няма нужда от изходния код на анализираното приложение - работата се извършва директно с двоичния файл.

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

В резултат на това да се създаде такъвинструменти, които работят по време на изпълнението на програмата, са разработени специални рамки за динамична двоична инструментация. Инструментите, които могат да бъдат създадени с тяхна помощ, се наричат ​​динамични двоични анализатори (DBA, Dynamic Binary Analysis).

В тази статия бих искал да се спра на PIN библиотеката от Intel, която активно използваме в рамките на проектите на нашия изследователски център DSecRG, и да разгледам как може да се използва за решаване на проблеми, възникващи при работа с двоични приложения без изходни кодове.

Тази библиотека се развива и поддържа активно. Около него се разви доста голяма общност - pinheads, където можете да получите отговор на всеки въпрос, който ви интересува за ЕГН.

DBI се използва активно от такива страхотни изследователски центрове за сигурност като Immunity, Zynamics, Rapid7, SourceFire VRT, Coseinc и др. Познаването на DBI вече се изпълнява като едно от изискванията за специалисти по оценка на сигурността на софтуера и разработване на експлойти. Ето пример за изискванията за работа за позицията Exploit Engineer в екипа за разработка на Metasploit:

динамично

Графично работата на този инструмент може да бъде представена по следния начин:

двоично

информационната

И накрая, ще дам списък с интересни проекти за обществена сигурност, реализирани с помощта на PIN: - Shellcode dumper - dumper на стандартни shellcodes, чийто принцип се основава на прехвърляне на контрол към стек или купчина. — Moflow-mitigs е прототип, който идентифицира ROP shellcodes и JIT shellcodes. —Инструменти за анализ на покритието на кода - анализатор на покритието на кода. — RunTracer е набор от инструменти за проследяване на контролния поток на програма. — Kerckhoffs е инструмент за полуавтоматизирано откриване на криптографски даннипримитиви в програмите. —VERA е инструмент за визуализиране на работата на програмата. —Tripoux е анализатор на пакети за зловреден софтуер. —Privacy Scope е инструмент за откриване на изтичане на критична информация. — Tartetatintools е набор от инструменти за анализиране на зловреден код.

Има и много интересни реализации за интегриране на резултатите от PIN инструментите с IDA Pro disassembler, който играе ролята на визуализатор: — DiffCov е набор от инструменти за запис на изпълнените основни програмни блокове. - runtime-tracer - създава следа за изпълнение на програма със стойности на регистъра и обработени области на паметта.

двоично

Това не е пълен списък на проекти за сигурност, реализирани с PIN, но мисля, че това ще бъде достатъчно, за да започнете да създавате свои собствени инструменти за pintool.

Също така силно съветвам всички, които се интересуват от DBI / PIN за информационна сигурност, да обърнат внимание на семинара „Двоични инструменти за професионалисти по сигурността“ (слайдове, примери) от моя добър приятел Гал Дискин от Intel. Имах късмета да участвам в този курс. Той беше прочетен на такива хакерски конференции като BlackHat, DEFCON и HackLu.