Cuckoo Sandbox, Gray Hat C#, Программирование

#40 Gray Hat C#. Руководство для хакера по созданию и автоматизации инструментов безопасности. Автоматизация Cuckoo Sandbox.

Здравствуйте, дорогие друзья.

Cuckoo Sandbox — это проект с открытым исходным кодом, который позволяет запускать образцы вредоносного ПО на безопасных виртуальных машинах, затем анализировать и сообщать о том, как вредоносное ПО вело себя в виртуальной песочнице без угрозы вредоносного ПО, заражающее Вашу настоящую машину. Приложение написано на Python, и Cuckoo Sandbox также предлагает REST API. Это позволяет программисту, использующему любой язык, полностью автоматизировать многие функции Cuckoo, такие как запуск песочниц, запуск вредоносного ПО и получение отчетов. В этом разделе мы сделаем все это с помощью простых в использовании библиотек и классов C#. Однако предстоит проделать большую работу, например, настроить виртуальную среду для использования Cuckoo, прежде чем мы сможем начать тестирование и запуск образцов вредоносного ПО с помощью C#. Вы можете найти дополнительную информацию и загрузить Cuckoo Sandbox по адресу https://www.cuckoosandbox.org/.


Настройка песочницы Cuckoo

В этом разделе мы не будем рассматривать настройку Cuckoo Sandbox, поскольку инструкции могут сильно различаться в разных операционных системах и даже в зависимости от того, какую версию Windows Вы используете в качестве песочницы виртуальной машины. В этом разделе предполагается, что Вы правильно настроили Cuckoo Sandbox с гостевой Windows, и что Cuckoo полностью функционален. Обязательно следуйте инструкциям на основном веб-сайте Cuckoo Sandbox (http://docs.cuckoosandbox.org/en/latest/installation/), где представлена актуальная и подробная документация по установке и настройке программного обеспечения.
В файле conf/cuckoo.conf, который поставляется с Cuckoo Sandbox, я рекомендую внести изменения в конфигурацию таймаута по умолчанию, чтобы она была короче (я установил 15 секунд), прежде чем Вы начнете работать с API. Это облегчит и ускорит процесс тестирования. В Вашем файле cuckoo.conf Вы увидите раздел внизу, похожий на листинг ниже.

The default timeout configuration section in cuckoo .conf

Тайм-аут по умолчанию для тестирования Cuckoo установлен на 120 секунд [1]. Большой тайм-аут может вызвать у Вас нетерпение посмотреть, устранили ли Вы проблему во время отладки, поскольку Вам придется дождаться истечения тайм-аута, прежде чем отчет будет готов, но установка этого значения между 15 и 30 секундами должна быть полезна для нашей целевой системы.


Запуск API Cuckoo Sandbox вручную.

Как и Nessus, Cuckoo Sandbox использует шаблон REST (если Вам нужно освежить знания, см. описание REST в разделе 5). Однако API Cuckoo Sandbox намного проще, чем API Nessus, поскольку нам нужно взаимодействовать только с парой конечных точек API. Для этого мы продолжим использовать шаблон сеанса/менеджера и сначала реализуем класс CuckooSession, который определяет, как мы будем взаимодействовать с API Cuckoo Sandbox. Однако давайте проверим, правильно ли Вы настроили Cuckoo Sandbox, прежде чем мы начнем писать код.


Запуск API

После успешной установки Cuckoo Sandbox Вы сможете запустить ее локально с помощью команды ./cuckoo.py, как показано в листинге ниже. Если Вы получили сообщение об ошибке, убедитесь, что виртуальная машина, которую Вы используете для тестирования, работает.

 Starting the Cuckoo Sandbox manager

Успешный запуск Cuckoo должен привести к появлению забавного художественного баннера ASCII, за которым последуют быстрые информационные строки о том, сколько виртуальных машин было загружено. После запуска основного скрипта Cuckoo нужно запустить API, с которым мы будем общаться. Оба этих скрипта Python должны быть запущены одновременно! Скрипт Python cuckoo.py является движком Cuckoo Sandbox. Если мы запустим сценарий api.py, не запуская сценарий cuckoo.py, как показано в листинге ниже, наши запросы API ничего не сделают. Чтобы мы могли использовать Cuckoo Sandbox из API, должны быть запущены как cuckoo.py, так и api.py. По умолчанию API Cuckoo Sandbox прослушивает порт 8090, как показано в листинге ниже.

Running the HTTP API for Cuckoo Sandbox

Чтобы указать IP-адрес для прослушивания (по умолчанию используется localhost), Вы можете передать сценарию utils/api.py аргумент -H, который сообщает API, IP-адрес, который будет использоваться при прослушивании запросов API. В этом случае мы установили 0.0.0.0 в качестве IP-адреса для прослушивания, что означает, что все сетевые интерфейсы (как внутренние, так и внешние IP-адреса системы) будут иметь порт 8090, доступный для связи, поскольку мы используем порт по умолчанию. URL-адрес, который прослушивает Cuckoo API, также выводится на экран после запуска. Этот URL-адрес позволяет нам взаимодействовать с API для управления Cuckoo Sandbox в оставшейся части раздела.


Проверка статуса Cuckoo’s

Мы можем протестировать API, чтобы убедиться, что он настроен правильно, с помощью инструмента командной строки Curl, как мы это делали в предыдущих разделах для других API. Далее в этом разделе мы делаем аналогичные запросы API для создания задачи, наблюдаем за ее выполнением до ее завершения и создаем отчет о файле, чтобы увидеть, как он вел себя при запуске. Но для начала в листинге ниже показано, как использовать Curl для получения информации о состоянии Cuckoo Sandbox в формате JSON с помощью HTTP API.

Using curl to retrieve the Cuckoo Sandbox status via the HTTP API

Информация о состоянии весьма полезна и подробно описывает многие аспекты системы Cuckoo Sandbox. Следует отметить совокупную информацию о задачах [2], включающую количество задач, которые были запущены или выполняются Cuckoo, с указанием их статуса. Задачей может быть анализ запущенного файла или открытие веб-страницы с URL-адресом, хотя в этом разделе мы рассмотрим только отправку файла на анализ. Вы также можете увидеть количество виртуальных машин, доступных для анализа [1], и текущую версию Cuckoo [3].
Отлично, API запущен и работает! Эту же конечную точку API статуса мы будем использовать позже, чтобы тестировать наш код по мере его написания и более подробно обсуждать возвращаемый им JSON. На данный момент нам нужно только подтвердить, что API запущен и работает.

На этом все. Всем хорошего дня!

Цикл статей по Gray Hat C#. Руководство для хакера по созданию и автоматизации инструментов безопасности.