Приветствую Хабр!  4 года назад я публиковал инструкцию по сборке платформы динамического анализа вредоносных файлов Cuckoo Sandbox 1.2. За это время проект успел обрасти внушительным функционалом и огромным комьюнити, недавно обновившись до версии 2.0, которая больше полутора лет висела в стадии Release Candidate.  Я наконец-то подготовил для вас полнейший мануал по сборке Cuckoo Sandbox 2.0.5 со всеми плюшками, какие есть в проекте на данный момент, с упаковкой Cuckoo в venv и без использования root, добавив более 12-ти security утилит в песочницу! По совокупности собранного материала, не побоюсь сказать: "Это самый полный и выверенный шаг в шаг гайд из всех опубликованных в интернете на данный момент". Тем кто, осилит статью до конца — дам маленький совет, что делать, когда песочница собрана и как получить максимальный профит с автоматизации процессов ИБ своими сиилами с помощью опенсорса. Всем гикам, вирусным аналитикам, безопасникам, ребятам из SOC, CERT, CSIRT и просто любителям потыкать кнопки в терминале — добро пожаловать под кат! За последние несколько лет в проекте Cuckoo произошло немало, добавились новые инструменты, появилась поддержка дополнительного ПО, количество сигнатур увеличилось в разы, появилась система рейтинга вредоносности проверяемого файла, был переписан весь UI и теперь можно настроить приятную глазу тёмную тему.  Позитивные изменения в проекте очевидны — песочница начала обновляться микро релизами, которые оперативно закрывают выявленные и подтверждённые баги. Обо всех небольших изменениях разработчики начали писать в блог, там можно найти и roadmap проекта. К сожалению, изменений произошло настолько много, что сводную таблицу "до" и "после" проблематично составить, сейчас это 2 платформы разных эпох, лучше сами посмотрите блог, вам понравится!  Советую почаще заглядывать в блог, разработчики уже который релиз обещают включить в маcтер ветку драйвер антидетекта ВМ zer0mon, однако теперь сроки сдвинудись до релиза 2.1.0, следите за новостями, вещь реально нужная!

Сам же код Cuckoo перебрался в пакетный менеджер PIP и кукушка обновляется буквально в одну команду. Позитивной стала и новость о запуске коммерческой поддержки, для клиентов, которым необходима стабильность в работе, поскольку стабильность — главный недостаток Cuckoo с первых релизов. Очень надеюсь, что привлечённые в проект деньги помогут разработчикам добиться качественной работы приложения.  Однако проблема с установкой неизменна с начала проекта — Cuckoo Sandbox документирован хорошо, а с модулями, в которых всегда происходят баги — беда. Некоторые приложения не документированы вовсе и чтобы понять как и что работает — нужно смотреть код, некоторые почти не обновляются и не поддерживаются, как HoneyD. Потратив немалое количество времени, я смог собрать кукушку со всеми рекомендациями разработчиков — обернуть кукушку в Venv и настроить всё с нуля не используя root привелегий для работы Cuckoo! Каждый этап выверен шаг в шаг многократным откатом бекапов в тестовой среде, пока инструкция не стала полностью рабочей.  Согласно рекомендациям разработчиков, Cuckoo Sandbox 2.0.5 собрана на ОС Ubuntu 16.04.03 установленной в ESXi кластере. В качестве гипервизора Cuckoo будет использован VirtualBox 5.2. Установка ВМ будет производиться через скрипт автоустановки VMcloak. С VMcloak больше не нужно искать уязвимое старое ПО для гостевой ОС, не надо настраивать сеть и Python, в одну команду терминала VMcloak установит всё необходимое, в том числе Cuckoo Agent и настроит. С VMcloak клонировать, администрировать и донастраивать ВМ теперь одно удовольствие. В качестве ОС виртуальной среды я использую Windows 7 SP1 X64, хотя Cuckoo Sandbox поддерживает все версии Windows, начиная с XP.
Пол года назад разработчики Cuckoo включили возможность проксировать трафик с ВМ через VPN или Tor. В данной настройке я остановился на простом методе — давать доступ в интернет напрямую или через Tor. Дополнительно к Cuckoo Sandbox будут установлены следующее ПО: Тринадцатым пунктом должна была стать программа потокового антивирусного анализа файлов IRMA, однако при включении IRMA в Cuckoo, выгрузка отчёта в Elastic ломалась, разработчики так и не дали ответ по этой баге, а анализировать Index эластика не было времени. Поэтому в данной инструкции будет пункт про сборку IRMA, но интеграция с Cuckoo включена не будет. Возможно найдётся гуру ELK стека, готовый доблестно побороть баг и дополнить мою статью. Найти IRMA и воспользоваться ею можно будет на порте 8080. В качестве недостатка могу отметить некорректные ссылки на Moloch в веб интерфейсе песочницы, поправить, наверное, можно, но для меня это не критично, сам сервис Moloch будет висеть на порту 8005 и этого достаточно.  Cuckoo будет хранить данные скаинрований в БД MongoDB, системные данные в Postgresql и индексы в Elasticsearch для быстрого поиска и выборки, экспортировать в Json, HTML и PDF, работать через веб сервер Nginx с настроенным по всем канонам SSL (не считая self-signed cert) и в связке с UWSGI.  Данная сборка настроена только на анализ в Windows песочнице. Android, OS X и Linux не настроены. Если будут вопросы по этой части — пишите в ЛС, теоретически я знаю, как это сделать, но этот функционал выходит за области моих интересов и моей работы в данный момент. В текущей статье, не будет предоставлен скрипт автоустановки. Мне, конечно не лень его написать, но в нём нет смысла, чтобы песочница работала корректно — лучше собирать вручную и внимательно смотреть что и как собирается, анализировать каждую ошибку. Вы всё-таки собираете приложение, которое взаимодействует с десятком внешних программ, которые постоянно обновляются. Баги — неизбежны, поэтому лучше найти их самому, чем потом разобраться что в скрипте пошло не так. В эту статью я не стал выносить все зависимости устанавливаемых программ в самое начало одной строчкой, как в прошлой статье. К каждому конкретному ПО, подключаемому к Cuckoo зависимости указаны в разделе установки данного ПО.  4 года анализа вредоносного ПО с использованием Cuckoo показали мне вполне очевидную линейную зависимость — чем больше ты подключишь к песочнице сервисов, тем хуже она работает. Поэтому нет смысла ставить все зависимости сразу, ведь айтишники постарше и поопытней могут отказаться в проде от тех компонентов, которые работают нестабильно, а информация от них будет избыточна. Лучшее — враг хорошего, как говорится. В данной статье не задействован REST API, сделать это достаточно просто, но мне он на текущем этапе не нужен. Описывать каждую утилиту подробно не стану, помечу только важное, тем более существенная часть утилит описана в моей прошлой статье, там же есть и инфа по включению REST API. И самое главное — статья выходит в свет на несколько месяцев после инструкции по сборке, что-то уже может поменяться, что-то не работать. Если встретили баг — напишите в ЛС.  А теперь ответим на самый популярный вопрос и приступим к установке! Ответ на этот вопрос прост — используй онлайн песочницы или возись с Windows Sysinternals. Итак, теоретическая часть позади, приступаем к практике! Обновляем системные пакеты. Устанавливаем зависимости Cuckoo. Устанавливаем Virtualbox вместе с extpack. Устанавливаем Venv, активируем и ставим Cuckoo через PIP. Elastic написан на Java, поэтому нам нужно установить Java. Тут устанавливаем и настраиваем все БД, обратите внимание, переменная "db_passwd" генерирует рандомный пароль к базе Postgres, если хотите задать свой — не забудьте установить его.
Cuckoo использует морально устаревший Elastic 2-й версии, обратите на это внимание и не установите случайно 5.x+ версию.  Установим последнюю версию Yara и добавим правила Yara в Cuckoo. Устанавливаем SSDeep. Установить Volatility просто, но заставить Cuckoo из venv его увидеть — не очень, ставить — же в venv вместе с Cuckoo — тоже не вариант, он зависимостями меняет версии библиотек Cuckoo. С третей строчки костыль, решающий эту проблему, если у кого есть идея, как это подружить более верным способом — напишите. Дошли до TCP dump. Ставится просто, подключается тоже, однако прелести в работе OCR я не заметил. Без этой магии PDF отчёты генерироваться не будут. Очень полезная библиотека, позволяющая подглядывать в SSL трафик. Обратите внимание, Cuckoo понимает только пакет версии 0.18.2. Тут всё достаточно просто. Изначально я хотел написать что и где в конфиге надо править, но к моменту, когда я смог побороть Suricata и убрать все огрехи работы, правок в конфиг было внесено немало, а задокументировано — 0, поэтому публикую конфиг целиком. Тем более оригинальный файл с правилами останется нетронутым. И напоследок, поправим права. Настраиваем автообновление Community сигнатур Suricata. Добавлять правила в него не стал, так как больше доверяю Suricata. При конфигурации указываем дефолтный интерфейс и подсеть 192.168.0.0/16. Удобнейшая программа для автоматического развёртывания ВМ Cuckoo. Существенно сокрашает время, однако автор переписывал её логику работы и конечно-же не обновил документацию. Советую посмотреть либо код утилиты на GitHub, либо почитать старую документацию, чтобы понять все прелести работы с VMcloak и разобраться с тем, что мы будем делать дальше.
Самый внимательный хабражитель заметит, что официальный репозиторий проекта https://github.com/jbremer/vmcloak отличается от того, что использован ниже в скрипте https://github.com/tweemeterjop/vmcloak. По отношению к форку, оригинал не умел включать vRDE — реализацию RDP протокола в настраиваемой гостевой ВМ.
Наверное правильным будет вариант — взять оригинальный код и допилить в него vRDE, однако если форк не так далеко ушёл от отригинала — можно использовать форк, как делаю я ниже. На момент настройки репозиторий и его форк практически не имели отличий.
По опыту своему скажу — vRDE нужен, бывают use cases, когда документ целевой атаки защищён паролем Word и пароль надо ввести, чтобы вирус отработал в песочнице, либо вирус склеен с установщиком, который надо проинсталлить. Без vRDE это сделать проблематично. Да и для дальнейшей настройки ОС vRDE нам тоже понадобится. После запустится ВМ, подключиться к ней можно по RDP. Если вы работаете с Win10 — не используйте плиточное приложение удалённого рабочего стола, оно впадает в ступор и транс, когда подключение идёт к ВМ без логина и пароля, используйте классическое приложение, там всё ОК. Следующие пункты моего списка не обязательны, однако, чтобы сократить количество ложных срабатываний и упростить работу вредоносному ПО — рекомендуется отключить (или включить) всё ниже перечисленное. Не лишним будет и установка в гостевую ВМ софта, который используется на работе всеми сотрудниками.  Пример лишних данных в отчёте:  Замечу! Всё нижеперечисленное нужно проделать только для Windows 7 SP1 x64, на других ОС действия, возможно, будут другими.  Спустя некоторое время работы с новой песочницей, мой список стал включать следующие пункты: Отключаем Windows Messenger broadcasts on UDP port 1900  HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlayNATHelp\DPNHUPnP ключ Name: UPnPMode Type: REG_DWORD Value: 2 Отключаем проверку драйверов x64, чтобы Cuckoo нормально работала с x64 cmd — bcdedit.exe /set nointegritychecks ON отключить NCSI  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet ключ EnableActiveProbing Type: REG_DWORD Value: 0 отключить teredo.ipv6.microsoft.com cmd — netsh interface teredo set state disabled отключаем IPv6  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ добавлыяем ключ DWORDDisabled DisabledComponents 8 Последовательность составления собственной инструкции под собственную ОС: Создаём снапшот свежесконфигурированной гостевой ОС и добавляем в Cuckoo заодно удалив предустановленную ВМ cuckoo1 из конфига. Наикрутейший инструмент для работы с сетевым трафиком. В отличии от других сетевых анализаторов — ставка в Moloch сделана на инструментарий для аналитика с кучей возможностей, временными шкалами, графами и прочим. Очень сожалею, что узнал о нём так недавно и пользовался до этого менее удобным MalCom. Одно из ключевых преимуществ Moloch — возможность объединить и проанализировать одним разом все сетевые пакеты всех сканирований из Cuckoo. Ну а работа в связке с Elasticsearch позволяет Moloch обрабатывать огромное количество данных. Вот так выглядит эта красота (скрин из официального репозитория):  Ну и его тоже проинсталлим. Далее необходимо указать интерфейс vboxnet0, логин и пароль Moloch, IP адрес Elasticsearch. Устанавливаем виртуальную локальную сеть, чтобы вирусу не было одиноко в песочнице. Настройки эмулируемых сервисов оставил дефолтные, 18 эмулированных служб получилось, не считая веба. В конфиге /etc/inetsim/inetsim.conf нужно закомментировать сервисы веба HTTP и HHTPS, чтобы не конфликтовали с Cuckoo:  C песочницей IRMA не интегрирована из-за проблемы выгрузки отчётов в Elasticsearch. Но это не мешает нам развернуть и протестировать утилиту. IRMA собрана в Vagrant и деплоится автоматически через Ansible строго версии 2.2.1.0. Загрузим IRMA: Добавим переадресацию из VM на порт 8080 добавив в файл /opt/irma/ansible/Vagrantfile
строчку 19: И установим IRMA: HoneyD — старейший и крайне функциональный ханипот. Минус его только в одном — он перестал обновляться несколько лет назад. Навыки поиска годных форков были применены успешно, после чего был найден относительно свежий вариант установки HoneyD через Ansible, которым я и поспешил воспользоваться. В ханипоте я настрил всего один хост, можете сконфигурировать хоть целую подсеть, воспользовавшись официальным мануалом. Сохраняем конфиг. Установим Nginx, сгенерируем сертификат и даже включим поддержку http2. Далее добавим конфиг UWSGI. И конфиг nginx, поменяв IP и название сайта: Теперь добавим пользователя www-data в группу cuckoo и симлинком включим наш конфиг. И, наконец, самое главное — объединяем всё собранное в песочницу. Объяснять что тут к чему долго, бессмысленно и 85% параметров интуитивно понятны, предлагаю воспользоваться официальной документацией начиная с 96 страницы, если есть сложности с пониманием некоторых параметров. Либо основное подглядеть в моей прошлой статье. Не самым плохим будет и вариант скопировать и использовать мои файлы приведённые ниже, но на свой страх и риск. Теперь сделаем так, чтобы наш сервис после каждого перебоя в питании вставал самостоятельно и без лишней помощи. Установим supervisor и добавим в него конфигурацию автозапуска Cuckoo. Cоздаём файлы supervisor: И применяем: Создаём скрипт для запуска остальных сервисов (можно было и через supervisor настроить, но была какая-то бага, не давшая мне применить то элегантное решение): И добавляем в крон: Собрали с нуля на работе новый ИБ сервис и не знаете что делать?
Самый простой ответ, когда кукушка собрана — надо ручками анализировать найденное подозрительное ПО и быть молодцом.
Для небольшой конторы это вполне приемлемое решение, для студента ИБ ВУЗа — очень приемлемое. А вот для компаний побольше, увы, нет. И скорее всего данным вопросом задаются люди из компаний побольше.
Мой вам совет — выстраивайте с нуля или модернизируйте бизнес-процесс мониторинга и реагирования на инциденты информационной безопасности доводя обработку инцидентов до полного автоматизма. Это самый прямой путь к улучшению скорости и качества работы департамента ИБ или групп ИБ, следовательно и к сокращению издержек, снижению рисков. Вот самый минимум для старта — всего 3 класса ПО и почти всё можно найти с открытым кодом: Одна из лучших систем ИБ с открытым кодом, которая поражает меня своей простотой, удобством и функциональными возможностями — IRP стек TheHive Project. Сам стек состоит из нескольких элементов, нас интересуют 2. TheHive Project stack.
 TheHive — платформа реагирования на инциденты, имеющая под капотом внушительную архитектуру и поразительную гибкость, позволяющую подстроить процесс реагирования на инциденты под любой уже устоявшийся бизнес-процесс в компании. TheHive создана для управления инцидентами на всём жизненном цикле. Каждый инцидент (case) делится на таски, например, кейс "DDoS сайта" делится на таски: По каждому таску пишется отчёт, каждый таск назначен персонально на ответственного, а когда таск закрыт — директор подразделения ИБ решает, можно или нельзя этой информацией делиться с другим офисом компании, согласно правилам TLP или ещё с кем. TheHive UI.
 В TheHive поступают данные, из любых систем, посредством API TheHive4Py, например, из SIEM, либо вбиваются безопасником вручную. У каждого инцидента есть важная составляющая — индикаторы компрометации. Это ссылки, IP, домены, семплы вредоносных файлов, хэши, названия процессов и так далее. По сути то, что безопасник счёл угрозой. И вот тут появляется второй элемент стека — Cortex. Он, используя API десятков сервисов (коммерческих и не очень) обогащает данные инцидента.
Вот примерный кейс — антивирус на рабочем компьютере находит подозрительный файл, безопасник вносит файл в TheHive и регистрирует инцидент (Case). Инцидент делится на задачи (Tasks), например, "Отключить АРМ от сети", "Проверить рабочую почту Петрова" и так далее. И вот пока этими задачами занимается сотрудник ИТ, аналитик ИБ с помощью Cortex определит количество антивирусов обнаруживших файл на VirusTotal, вредоносную кампанию, в которой файл учувствовала и попал в пульс AlienVault OTX, точную дату вредоносной компании, метаданные файла, отправит файл в Cuckoo Sandbox и осуществит ещё 8-10 проверок. Нажав при этом одну кнопку. Да-да, всего одну кнопку. А Cortex сделает всё остальное и сам добавит данные в TheHive. MISP
 Данные по закрытым подтверждённым инцидентам из TheHive и Cuckoo попадают в MISP и сразу отправляются в территориально удалённые подразделения компании, где происходит превентивная блокировка индикаторов компрометации в системах защиты информации: на Firewall IP адрес управляющего сервера вируса, на рабочей станции — блокировка файла по хешу антивирусом.
Кроме того, у вас остаётся структурированная база всех инцидентов, семплы всех вредоносных файлов, и в разы более подробная информация об инциденте, собранная моментально. А встроенные в TheHive механизмы метрик позволят анализировать работу групп мониторинга и реагирования на инциденты обозначив им в последствии справедливый KPI.  MISP, ко всему прочему, имеет 47 предустановленных фидов, включение которых позволяет получать индикаторы компрометаций от других CERT, эти индикаторы можно проверять в логах уже имеющихся систем ИБ и ИТ. Например в MISP попал домен, а скрипт, который сделал сисадмин компании — проверяет все ссылки с корпоративного Proxy в MISP, и в случае совпадения — отключает от сети пользователя и угроза может быть предотвращена даже до заражения пользователя.
И вишенка на торте: всё перечисленное выше ПО — open source, который дружит друг с другом, хорошо документирован и умеет работать с Cuckoo Sandbox. Красота, не правда-ли? Спасибо за внимание! В этом разделе далеко не все полезные ссылки, выписывал в этот список то, что пригодилось в работе, большую часть я знал по памяти или из опыта, поэтому если есть чем дополнить — пишите в ЛС.