Содержание статьи
Есть два основных способа безопасно запустить подозрительный исполняемый файл: под виртуальной машиной или в так называемой «песочнице» (sandbox). Причем последнюю можно с помощью изящного способа адаптировать для оперативного анализа файла, не прибегая к специализированным утилитам и онлайн-сервисам и не используя множество ресурсов, как в случае с виртуалкой. О нем я и хочу тебе рассказать.
WARNING
Неправильное использование описанной методики может нанести вред системе и привести к заражению! Будь внимателен и осторожен.
«Песочница» для анализа
Люди, которые занимаются компьютерной безопасностью, хорошо знакомы с концепцией «песочницы». Если вкратце, «песочница» — эта тестовая среда, в которой выполняется некая программа. При этом работа налажена таким образом, что все действия программы отслеживаются, все изменяемые файлы и настройки сохраняются, но в реальной системе ничего не происходит. В общем, можешь запускать любые файлы в полной уверенности, что на работоспособность системы это никак не повлияет. Такие инструменты можно использовать не только для обеспечения безопасности, но и для анализа тех действий зловреда, которые он выполняет после запуска. Еще бы, ведь если есть слепок системы до начала активных действий и картина того, что произошло в «песочнице», можно легко отследить все изменения.
Конечно, в Сети есть масса готовых онлайн-сервисов, которые предлагают анализ файлов: Anubis, CAMAS, ThreatExpert, ThreatTrack. Подобные сервисы используют разные подходы и имеют свои достоинства и недостатки, но можно выделить и общие основные минусы:
• Необходимо иметь доступ к интернету. • Необходимо ждать очереди в процессе обработки (в бесплатных версиях). • Как правило, файлы, создаваемые или изменяемые в ходе выполнения, не предоставляются. • Невозможно контролировать параметры выполнения (в бесплатных версиях). • Невозможно вмешиваться в процесс запуска (например, нажимать на кнопки появляющихся окон). • Как правило, невозможно предоставлять специфические библиотеки, необходимые для запуска (в бесплатных версиях). • Как правило, анализируются только исполняемые РЕ-файлы.
Такие сервисы чаще всего строятся на основе виртуальных машин с установленным инструментарием, вплоть до отладчиков ядра. Их можно организовать и дома. Однако эти системы достаточно требовательны к ресурсам и занимают большой объем на жестком диске, а анализ логов отладчика уходит много времени. Это значит, что они весьма эффективны при глубоком исследовании определенных образцов, но вряд ли смогут оказаться полезными в рутинной работе, когда нет возможности нагружать ресурсы системы и тратить время на анализ. Использование «песочницы» для анализа позволяет обойтись без огромных затрат ресурсов.
Пара предупреждений
Сегодня мы попробуем сделать свой собственный анализатор на основе «песочницы», а именно утилиты Sandboxie. Эта программа доступна как условно-бесплатная на сайте автора www.sandboxie.com. Для нашего исследования вполне подойдет ограниченная бесплатная версия. Программа запускает приложения в изолированной среде, так что они не производят вредоносных изменений в реальной системе. Но тут есть два нюанса:
- Sandboxie позволяет отслеживать только программы на уровне user mode. Вся деятельность вредоносного кода в режиме ядра не отслеживается. Поэтому максимум, что удастся узнать при изучении руткитов — это каким образом вредонос внедряется в систему. Проанализировать само поведение на уровне kernel mode, к сожалению, невозможно.
- В зависимости от настроек Sandboxie может блокировать выход в Сеть, разрешать полный доступ или доступ только для отдельных программ. Понятно, что, если для нормального запуска вредоносу нужен выход в интернет, необходимо его предоставить. С другой стороны, если у тебя на флешке валяется Pinch, который запускается, собирает все пароли в системе и отправляет их на ftp злоумышленнику, то Sandboxie с открытым доступом в интернет не защитит тебя от потери конфиденциальной информации! Это очень важно, и об этом следует помнить.
Хакер #157. Деньги на багах в Chrome
Первичная настройка Sandboxie
Sandboxie — великолепный инструмент с большим количеством настроек. Упомяну лишь те из них, которые необходимы для наших задач.
После установки Sandboxie автоматически создается одна «песочница». Ты можешь добавить еще несколько «песочниц» под разные задачи. Доступ к настройкам «песочницы» осуществляется через контекстное меню. Как правило, все параметры, которые можно изменять, снабжены достаточно подробным описанием на русском языке. Для нас особенно важны параметры, перечисленные в разделах «Восстановление», «Удаление» и «Ограничения». Итак:
- Необходимо убедиться, что в разделе «Восстановление» ничего не указано.
- В разделе «Удаление» не должны быть никаких проставлены галки и/или отмечены добавленные папки и программы. Если неправильно выставить параметры в разделах, указанных в пунктах 1 и 2, это может привести к тому, что вредоносный код заразит систему или все данные для анализа будут уничтожены.
- В разделе «Ограничения» необходимо выбрать настройки, соответствующие твоим задачам. Практически всегда необходимо ограничивать доступ низкого уровня и использование аппаратных средств для всех выполняемых программ, чтобы не допустить заражения системы руткитами. А вот ограничивать доступ на запуск и выполнение, а также забирать права, наоборот, не стоит, иначе подозрительный код будет выполняться в нестандартной среде. Впрочем, всё, в том числе и наличие доступа к интернету, зависит от задачи.
- Для наглядности и удобства в разделе «Поведение» рекомендуется включить опцию «Отображать границу вокруг окна» и выбрать цвет для выделения программ, выполняемых в ограниченной среде.
Подключаем плагины
В несколько кликов мы получили отличную изолированную среду для безопасного выполнения кода, но не инструмент для анализа его поведения. К счастью, автор Sandboxie предусмотрел возможность использования целого ряда плагинов для своей программы. Концепция довольно интересна. Аддоны представляют собой динамические библиотеки, внедряемые в выполняемый в «песочнице» процесс и определенным образом регистрирующие или модифицирующие его выполнение.
Нам понадобится несколько плагинов, которые перечислены ниже.
- Buster Sandbox Analyzer.
- SBIExtra. Этот плагин осуществляет перехват ряда функций для выполняемой в песочнице программы, чтобы блокировать следующие возможности:
- обзор исполняемых процессов и потоков;
- доступ к процессам вне пределов «песочницы»;
- вызов функции BlockInput (ввод с клавиатуры и мыши);
- считывание заголовков активных окон.
- Antidel. Аддон перехватывает функции, отвечающие за удаление файлов. Таким образом, все временные файлы, команда на удаление которых поступает от исходного кода, все равно остаются на своих местах.
Как интегрировать их в «песочницу»? Поскольку это не предусмотрено средствами интерфейса Sandboxie, редактировать файл конфигурации придется вручную. Создаем папку Plugins и распаковываем в нее все подготовленные плагины. Теперь внимание: в состав Buster Sandbox Analyzer входит несколько библиотек с общим именем LOG_API*.dll, которые могут инжектироваться в процесс. Есть два типа библиотек: Verbose и Standard. Первый отображает практически полный список вызовов API, выполняемых программой, включая обращения к файлам и реестру, второй — сокращенный список. Сокращение позволяет ускорить работу и уменьшить журнал, который затем придется анализировать. Лично я не боюсь больших логов, зато опасаюсь того, что какая-нибудь нужная инфа будет заботливо «сокращена», поэтому выбираю Verbose. Именно эту библиотеку мы и будем инжектировать. Чтобы зловред не смог заметить инжект библиотеки по ее имени, применим простейшую меру предосторожности: сменим имя LOG_API_VERBOSE.dll на любое другое, например LAPD.dll.
Теперь в главном окне Sandboxie выбираем «Настроить -> Редактировать конфигурацию». Откроется текстовый конфиг со всеми настройками программы. Сразу обращаем внимание на следующие строки:
- Параметр FileRootPath в разделе [GlobalSettings] указывает общий путь к папке изолированной среды, то есть к папке, где будут находиться все файлы «песочницы». У меня этот параметр имеет вид FileRootPath=C:\Sandbox\%SANDBOX%, у тебя он может отличаться.
- Раздел [UserSettings_XXXXXXX] нас не интересует — его пропускаем и листаем дальше.
- Затем идет раздел, имя которого совпадает с названием «песочницы» (пусть это будет BSA). Сюда мы и будем добавлять плагины:[BSA]InjectDll=C:\Program Files\Sandboxie\Plugins\sbiextra.dll InjectDll=C:\Program Files\Sandboxie\ Plugins\antidel.dll InjectDll=C:\Program Files\Sandboxie\ Plugins\LAPD.dll OpenWinClass=TFormBSA Enabled=y ConfigLevel=7 BoxNameTitle=n BorderColor=#0000FF NotifyInternetAccessDenied=y Template=BlockPorts
Пути, конечно, могут отличаться. Но порядок инжектируемых библиотек обязательно должен быть именно таким! Это требование связано с тем, что перехват функций должен осуществляться именно в указанном порядке, иначе плагины работать не будут. Чтобы применить изменения, выбираем в главном окне Sandboxie: «Настроить -> Перезагрузить конфигурацию».
Теперь настроим сам плагин Buster Sandbox Analyzer.
- Запускаем плагин вручную, воспользовавшись файлом bsa.exe из папки Plugins.
- Выбираем «Options -> Analysis mode –> Manual» и далее «Options -> Program Options -> Windows Shell Integration -> Add right-click action "Run BSA"».
Теперь всё готово для работы: наша «песочница» интегрирована в систему.
Portable-версия «песочницы»
Безусловно, многим не понравится, что надо что-то устанавливать, настраивать и т. д. Так как меня всё это тоже не прельщает, я сделал портабельную версию инструмента, который можно запускать без установки и настройки, прямо с флешки. Скачать такую версию можно здесь: tools.safezone.cc/gjf/Sandboxie-portable.zip. Для запуска «песочницы» достаточно выполнить скрипт start.cmd, а по окончании работы не забыть выполнить скрипт stop.cmd, который полностью выгрузит драйвер и все компоненты из памяти, а также сохранит внесенные в ходе работы изменения в портабеле.
Настроек у самого портабелизатора совсем не много: его работа в основном основана на манипуляциях с файлом Sandboxie.ini.template, находящегося в папке Templates. По сути, этот файл представляет собой файл настроек Sandboxie, который должным образом обрабатывается и передается программе, а по окончании работы перезаписывается обратно в Templates. Если открыть этот файл «Блокнотом», то ты вряд ли найдешь что-то интересное. Нужно обязательно обратить внимание на шаблон $(InstallDrive), повторяющийся в ряде параметров пути. Особенно нас интересует параметр FileRootPath. Если он имеет следующий вид:
FileRootPath=$(InstallDrive)\Sandbox\%SANDBOX%
— то «песочницы» будут создаваться на диске, где находится портабельная Sandboxie. Если же параметр имеет, например, такой вид:
FileRootPath=C:\Sandbox\%SANDBOX%
— иначе говоря в нем указан определенный системный диск, то «песочницы» будут создаваться на этом диске.
Лично я рекомендую всегда создавать песочницы на локальных дисках. Это ускоряет работу инструмента, а при запуске с флешки — ускоряет на порядки. Если же тебя настолько замучила паранойя, что хочется всё запускать и анализировать на любимом носителе, который ты носишь у сердца, то параметр можно поменять, но тогда хотя бы используй портабельные жесткие диски, чтобы всё безбожно не тормозило.
Практическое применение
Попробуем наш инструмент на реальной угрозе. Чтобы никто не упрекнул меня в подтасовке, я поступил просто: зашел на www.malwaredomainlist.com и скачал последнее, что там появилось на момент написания статьи. Это оказался премилый файл pp.exe с какого-то зараженного сайта. Одно только название внушает большие надежды, кроме того, на этот файл сразу заорал мой антивирус. К слову, все наши манипуляции лучше производить при отключенном антивирусе, иначе мы рискуем заблокировать/удалить что-нибудь из того, что исследуем. Как изучить поведения бинарника? Просто нажимаем правой кнопкой на этот файл и выбираем в выпавшем меню пункт Run BSA. Откроется окно Buster Sandbox Analyzer. Внимательно смотрим в строку Sandbox folder to check. Все параметры должны совпадать с теми, которые мы указали при настройке Sandboxie, то есть если песочница получила название BSA, а в качестве пути к папке был задан параметр FileRootPath=C:\Sandbox\%SANDBOX%, то вс,ёе должно быть как на скриншоте. Если же ты знаешь толк в извращениях и назвал песочницу по-другому или настроил параметр FileRootPath на другой диск или папку, его нужно изменить соответствующим образом. В противном случае Buster Sandbox Analyzer не будет знать, где искать новые файлы и изменения в реестре.
BSA включает в себя массу настроек по анализу и изучению процесса выполнения бинарника, вплоть до перехвата сетевых пакетов. Смело нажимай кнопку Start Analysis. Окно перейдет в режим анализа. Если песочница, выбранная для анализа, по каким-то причинам содержит результаты предыдущего исследования, утилита предложит предварительно ее очистить. Все готово к запуску исследуемого файла.
Готов? Тогда нажми на изучаемый файл правой кнопкой мыши и в открывшемся меню выбери «Запустить в песочнице», после чего укажи ту «песочницу», к которой мы прикрутили BSA.
Сразу после этого в окне анализатора побегут API-вызовы, которые будут фиксироваться в лог-файлах. Обрати внимание, что сам Buster Sandbox Analyzer не знает, когда завершится анализ процесса, фактически сигналом к окончанию служит именно твое жмакание на кнопку Finish Analysis. Как же узнать, что время уже наступило? Тут может быть два варианта.
- В окне Sandboxie не отображается ни один выполняемый процесс. Это означает, что выполнение программы явно завершилось.
- В списке API-вызовов долгое время не появляется ничего нового или, наоборот, одно и то же выводится в циклической последовательности. При этом в окне Sandboxie что-то еще выполняется. Такое бывает, если программа настроена на резидентное выполнение или попросту зависла. В этом случае ее необходимо вначале завершить вручную, нажав правой кнопкой в окне Sandboxie на соответствующую «песочницу» и выбрав «Завершить программы». Кстати, при анализе моего pp.exe произошла именно такая ситуация.
После этого можно смело выбирать Finish Analysis в окне Buster Sandbox Analyzer.
Анализ поведения
Нажав на кнопку Malware Analyzer, мы сразу получим некоторую сводную информацию о результатах исследования. В моем случае вредоносность файла была совершенно очевидна: в ходе выполнения создавался и запускался файл C:\Documents and Settings\Администратор\Application Data\dplaysvr.exe, который добавлялся в автозагрузку (кстати, именно он не хотел завершаться сам), происходило соединение с 190.9.35.199 и модифицировался hosts-файл. Кстати, при этом на VirusTotal файл детектировали только пять антивирусных движков, что видно из логов, а также на сайте VirusTotal.
Всю информацию о результатах анализа можно получить непосредственно в меню Viewer в окне Buster Sandbox Analyzer. Здесь же приютился и журнал API-вызовов, который, безусловно, будет полезен при подробном исследовании. Все результаты хранятся в виде текстовых файлов в подпапке Reports папки Buster Sandbox Analyzer. Особый интерес представляет отчет Report.txt (вызывается через View Report), в котором приводится расширенная информация по всем файлам. Именно оттуда мы узнаём, что временные файлы на самом деле были исполняемыми, соединение шло по адресу http://190.9.35.199/view.php?rnd=787714, вредонос создал специфический мутекс G4FGEXWkb1VANr и т. д. Можно не только просматривать отчеты, но и извлекать все файлы, созданные в ходе выполнения. Для этого в окне Sandboxie нажми правой кнопкой по «песочнице» и выбери «Просмотреть содержимое». Откроется окно проводника со всем содержимым нашей «песочницы»: в папке drive находятся файлы, создаваемые на физических дисках «песочницы», а в папке user — файлы, создаваемые в профиле активного пользователя (%userprofile%). Здесь я обнаружил dplaysvr.exe с библиотекой dplayx.dll, временные файлы tmp и измененный файл hosts. Кстати, оказалось, что в него добавлены следующие строки:
94.63.240.117 www.google.com
94.63.240.118 www.bing.com
Учти, что в «песочнице» валяются зараженные файлы. Если их нечаянно запустить двойным кликом, ничего не будет (они запустятся в «песочнице»), но если ты их куда-то скопируешь, а потом выполнишь… хм, ну, ты понял. Здесь же, в папке, можно найти дамп реестра, измененного в ходе работы, в виде файла RegHive. Этот файл можно легко перевести в более читабельный reg-файл при помощи следующего командного скрипта:
REG LOAD HKLM\uuusandboxuuu RegHive
REG EXPORT HKLM\uuusandboxuuu sandbox.reg
REG UNLOAD HKLM\uuusandboxuuu
notepad sandbox.reg
Что умеет и не умеет инструмент
Полученный инструмент умеет:
- Отслеживать API-вызовы запущенного приложения.
- Отслеживать новые создаваемые файлы и параметры реестра.
- Перехватывать сетевой трафик при выполнении приложения.
- Проводить базовый анализ файлов и их поведения (встроенный поведенческий анализатор, анализ на VirusTotal по хешам, анализ с помощью PEiD, ExeInfo и ssdeep и т. д.).
- Получать некоторую дополнительную информацию за счет выполнения в «песочнице» вспомогательных программ (например, Process Monitor) вместе с анализируемой.
Этот инструмент не может:
- Анализировать зловреды, выполняющиеся в kernel mode (требующие установки драйвера). Тем не менее возможно выявить механизм установки драйвера (до его фактического внедрения в систему).
- Анализировать зловреды, отслеживающие выполнение в Sandboxie. Однако Buster Sandbox Analyzer включает в себя ряд механизмов, препятствующих такому отслеживанию.
Таким образом, ты получишь sandbox.reg, в котором указаны строки, внесенные зловредом в ходе выполнения. После выполнения анализа выбери в меню Options пункт Cancel analysis, чтобы вернуть всё как было. Учти, что после этой операции все журналы анализа будут удалены, но содержимое «песочницы» останется на месте. Впрочем, при следующем запуске программа сама предложит все удалить.