ХАКЕР 04 /171/ 2013 Ломаем вместе87сделать, приступая к работе над новымбинарником, чтобы иметь на руках актуальнуюверсию);• индивидуальный, когда происходит импортаннотации для конкретной функции.В этом случае можно выбирать, какуюверсию аннотации грузить (самую последнююили какую-то из более ранних).Поиск функций, для которых доступныаннотации, реализован несколькими способами.Первый — Exact matching, то естьполное соответствие. Берется хеш от бинарногопредставления функции и ее смещениев файле, на основании этих двух параметровв облаке происходит поиск доступныханнотаций. Второй — Fuzzy matching, илинечеткое соответствие, когда вычисляетсяSHA-1-хеш последовательности мнемоники уже на основании этого хеша ведется поисксоответствующей аннотации. Для чегонужен Fuzzy matching? Допустим, ты полностьюразобрал первое поколение червяStuxnet. Но тут идет новая волна, и надоразбираться уже со вторым поколением.Очевидно, что сам исполняемый файл зловредаизменился, функционал расширился,но большинство-то основных функций осталосьна месте. Не начинать же опять анализс чистого листа? В данной ситуации Fuzzymatching позволит сопоставить и загрузитьаннотации функций из первого поколениядля соответствующих функций второго поколениячервя, сэкономив таким образом кучувремени на анализ нового функционала.УСТАНОВКА И НАСТРОЙКАНо довольно теории. Можно долго растекатьсямыслью по древу, но, как говорится,лучше один раз увидеть. Поэтому давайопробуем инструмент в деле. Прежде всего необходимо скачать плагиндля IDA Pro под конкретную операционную систему (доступны для Windows,OS Х и Linux), сделать это можно тут — www.crowdstrike.com/crowdre/downloads. После чего установить его, скопировав в папку plugins в директорииIDA. На этом все настройки на локальной машине закончены, и остаетсятолько зарегистрироваться на облачном сервисе CrowdRE — crowdre.crowdstrike.com/sign-in. CrowdRE использует сервис аутентификации Google,поэтому если у тебя есть ящик на Gmail, то просто нажми на кнопку «Sign inwith Google». Если же нету — придется завести. Залогинившись, первым деломнеобходимо сгенерировать аутентификационный токен (AuthenticationToken), который плагин CrowdRE запросит для взаимодействия с сервисомпри первом использовании. Для этого надо всего лишь нажать на плюсикрядом с надписью Authentication Tokens. Также, если необходимо, чтобык загружаемым аннотациям имели доступ только члены команды, а не всеCLOUD NEINhttps://github.com/AntiCloud/CloudNeinВторой аналитик ещене обновился, поэтомуне видит, что функцияsub_404814 ужепроанализированаВ некоторых ситуациях преимущества облачного сервиса CrowdRE могут оказаться недостатками.Ведь сервис ведет базу всех проанализированных функций, которые подробноразобрали и привели в читабельный вид. Очевидно, что не всем хочется, чтобыплоды их исследований были доступны третьим лицам. Если твоя хактим занимаетсяреверсингом какого-то приватного софта, то будет совсем не круто, если данные о немутекут в Сеть в каком-либо виде. Чтобы избежать этого, можно воспользоваться CloudNein — сторонней реализаций CrowdRE-сервера, который можно развернуть на однойиз своих машин. Как утверждают разработчики, Cloud Nein поддерживает все функцииCrowdRE, единственная вещь, которая может пока работать некорректно, — это Fuzzymatching. В общем, кто-то успешно реверснул протокол обмена данными с CrordREсервером,чем теперь можно с радостью воспользоваться.СОФТ ДЛЯ СОВМЕСТНОГОРЕВЕРСИНГА ПРИЛОЖЕНИЙCrowdRE — не единственная возможностьсовместно анализировать исполняемыефайлы. Как только малварь сталастановиться все сложнее и сложнее,начал появляться софт для совместногоее анализа.• DA Sync (bit.ly/YVNAow) — один из пионеровв этой области, тулза, выпущеннаяв далеком 2005 году и позволяющая реверсерамделиться своими наработкамис коллегами в режиме реального времени.IDA Sync представляет собой централизованныйсервер, написанный на Python,и плагин для IDA, через который все участникиконнектятся к серверу. Как толькоклиент присоединился к серверу, всеизменения, сделанные им (переименованиефункций, локальных переменных,комментарии), немедленно передаютсяостальным участникам команды. Кромеэтого, центральный сервер хранит копиювсех изменений, позволяя новому аналитикув считаные секунды влиться в работу.Помимо прочего, возможность этого инструментаработать в реальном времении мгновенно отображать вносимые измененияможет быть использована для проведениядемонстраций/презентаций илиобучения реверсингу.• CollabREate (bit.ly/aaQOtB) — еще одинотличный инструмент для совместногореверсинга, появившийся на свет в 2008году. Он также состоит из серверной части,отвечающей за хранение и синхронизациюизменений между всеми клиентами,и клиентской части в виде плагинадля IDA. Как и IDA Sync, хранит все измененияи при подключении нового клиентапозволяет ему быстро получить актуальнуюверсию исследуемого файла. Интересно,что в данном инструменте началипроглядываться хоть и слабые, но вполнеразличимые черты систем контроляверсий. Так, CollabREate позволяет разработчикуфоркнуть текущий анализ бинарникаи продолжить его исследованиев другом ключе, не затрагивая при этомработу остальных участников.• BinCrowd (bit.ly/f1UogZ) — zynamics,разработчик таких популярных расширенийдля IDA, как BinDiff и BinNavi, выпустилав 2010 году инструмент BinCrowd. Даннаятулза для организации совместнойработы использует принцип функционированиясистем контроля версий. Она позволяетсоздать централизованный репозиторийдизассемблированного кода,посредством которого можно делитьсянаработками со всеми членами команды.В такой репозиторий можно «коммитить»новые имена и прототипы функций,комментарии и прочую информацию,обнаруживаемую во время реверсинга.Плагин для IDA написан на Python и требуетдля своей работы установленногоIDAPython минимум версии 1.3.2.Ничего сложного в использовании описанныхинструментов нет, а всю необходимую информациюпо установке/настройке/использованиюможно найти в соответствующихreadme-файлах или на официальных сайтах.
88 Взлом ХАКЕР 04 /171/ 2013УСТАНОВКА/НАСТРОЙКАНа официальном сайте (а также на нашем диске) доступны версиидля Windows и *nix. Установка Dradis под виндой вызвать затрудненийне должна — все необходимое включено в инсталляпользователисервиса, тут можно создать группу, которую указыватьзатем при загрузке аннотаций.На этом, собственно, вся установка закончена. Можно переходитьк использованию. Рассмотрим процесс работы с CrowdREна примере двух аналитиков.АНАЛИТИК НОМЕР РАЗИтак, первый аналитик запускает IDA, загружает зловред и начинаетанализ. Первой на глаза ему попадается функция, которая пишеткакие-то данные в ветку реестра HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows. Он анализирует локальныепеременные, дает им читабельные названия и переименовываетфункцию из sub_XXXXX в RegisterASEP().В дальнейшем его внимание привлекает константа, участвующаяв генерации таблиц для AES-шифрования. Копая код дальше, обнаруживаем,что малварь использует реализацию Gladman’а алгоритмашифрования AES с фиксированным 128-битным ключом. Аналитикснова приводит код в читабельный вид и загружает все измененияв облако CrowdRE. Для этого нажимает , в результате чегопоявляется диалоговое окно, в котором предлагается выбрать функциидля экспорта. Отмечает нужные функции и нажимает «Uploadannotations».АНАЛИТИК НОМЕР ДВАВ то же самое время над этим же бинарником трудится второй аналитик.В процессе анализа он натыкается на функцию, загружающуюфайл с инета, вызывает функцию sub_404814 для расшифровки/деобфускациифайла и сохраняет его на диск. Переходит в эту функциюsub_404814 и нажимает для вызова плагина CrowdRE, чтобыпосмотреть, доступны ли для данной функции аннотации. В появившемсяокне становится видно, что первый аналитик уже разобралэту функцию и даже дважды успел «закоммитить» информациюпо ней. Второй аналитик выбирает более поздний коммит, нажимает«Import annotation...» и в появившемся окне может выбрать, какиепараметры импортировать из CrowdRE-облака: имя функции и прототип,комментарии, имена и типы локальных переменных. Стоитотметить, что даже определенные первым аналитиком типы переменныхбудут доступны в облаке и подгрузятся второму аналитику.Как только первый аналитик начинает загружать аннотации в облако,CrowdRE-плагин устанавливает, что пользователем была определенановая структура GAesKey, и автоматически загружает в облакоопределение этой структуры. На самом деле плагин работает такимобразом, что автоматически подгружает в облако все зависимостидля каждой переменной, используемой в экспортируемой функции.Как только второй аналитик выбрал необходимые параметры и нажалкнопку «Import», изменения применяются к его idb-файлу.Загружать аннотации вручную к каждой функции не совсем удобно.Вместо этого аналитик может нажать на кнопку «Batch importannotations...», чтобы посмотреть все доступные варианты из облакаCrowdRE. В результате чего откроется диалоговое окно, в которомбудет представлен весь перечень функций, для которых доступны аннотации.Выбрав нужные и нажав на «Import annotations», можно загрузитьсведения о них в свою локальную idb-базу. Вот в общем видеи весь процесс реверсинга с использованием сервиса CrowdRE.Пакетный импорт аннотаций из облака CrowdREИмпортируем результат работы различных инструментов: Nmap,Nessus, Nikto, etc.Создаем новую заметкуDRADISНу что ж, с коллективным реверс-инжинирингом приложениймы разобрались. Теперь пришло время выяснить, как обстоятдела у их собратьев по цеху — пентестеров. Как и в случаеисследования сложной малвари, безопасность крупного объектав одиночку не проверишь. Командная работа снимает этупроблему, но ставит другую — действия команды надо как-токоординировать, а результат работы хранить. Иначе при тестированиибезопасности какой-либо сети может получиться,что половина тестирует один хост, вторая другой, а остальныеобъекты остаются обделенными вниманием. Кроме этого,внутри команды может быть разделение обязанностей и каждыйчлен команды может иметь свою специализацию: кто-тогуру в сканировании сети и с легкостью управляется с Nmapдаже с закрытыми глазами, кто-то съел собаку на SQLинъекциях,кто-то щелкает веб-приложения как орешки.Но при всем при этом им надо как-то делиться информациейо найденных уязвимостях со своими коллегами. Ведь найденнаяскуля может быть тем недостающим звеном, которогоне хватает другому члену команды для получения доступак внутренней сети исследуемого объекта. Собирая воединовсе сказанное, можно обобщить, что пентестерам нужен инструмент,позволяющий координировать работу и делитьсяинформацией. Обладает всеми необходимыми возможностямии способен удовлетворить основные потребности тестировщиковфреймворк Dradis (dradisframework.org), с которыммы познакомимся чуть поближе.