Ку-ку, товарищи! И еще раз ку-ку!
-----------------------------------------
Кое-какие изменения
Я добавил скрипт для установки модифицированной cuckoo от Брэда Шпенглера (Brad Spengler)
https://github.com/brad-accuvant/cuckoo-modified
Компания Accuvant теперь называется Optiv. Поэтму модифицированную Кукушку теперь будем называть cuckoo-1.3-optiv. Разница между "стабильной" Кукушкой и версией Брэда, как между жигулями и тоётой. В том числе в стабильности.
В своем новом скрипте я тоже кое-что поменял. Функциональная разница в том, что теперь после импорта и настройки виртуалки, скрипт ее запускает и становится в позу ожидания нажатия Enter. Это сделано для того, чтобы можно было спокойно подключиться к виртуалке по rdp (порт 7001) и убедиться, что всё с ней в порядке и она нормально работает, а также настроить что-нибудь на машине дополнительно или установить еще какие-нибудь компоненты. Это полезно когда вы переносите виртуалку с одного типа хадваре на другой (например, другие процессоры), ей может понадобиться устновка драйверов и перезагрузка.
Соответственно секция настройки iptables в скрипте перенесена повыше, до запуска виртуалки, чтобы виртуалка могла нормально выйти в Интернет и скачать что-нибудь нужное.
А еще я прямо в скрипте теперь правлю ошибку в модуле mashinery.py о которой написано ниже.
-----------------------------------------
Как понятно, речь пойдет о Cuckoo, известной как "бесплатная песочница". Написано о ней много. Ну, и я свои пять копеек вставлю. Собственно эту статью можно считать свежим руководством по установке Cuckoo. И она сопровождается скриптом для автоматической установки и конфигурации песочницы, после запуска которого она точно будет работать.
Опять же это не первая такая статья. Лично я пользовался руководством размещенным на Хабре http://habrahabr.ru/post/234467/ пользователем Libert, за что ему РЕСПЕКТ и УВАЖУХА. Я не знаю является ли он первоначальным автором этого текста. Я встречал в сети английский текст (http://iteamdevelopers.org/cuckoo-sandbox-automated-analysis-laboratory-for-malicious-files-2/), принадлежащий некоему Muhammad Abdullah и совпадающий с текстом Libert практически дословно (с точностью перевода английский-русский). Этот текст является подмножеством статьи Libert, но опубликован позже. Никаких ссылок и указаний на чье-либо авторство публикаторы не делали, хотя тексты, ну очень сильно совпадают (может это один автор под разными никами). Возможно есть какой-то неизвестный мне автор, которому следует высказать благодарность. Всем спасибо.
Прежде чем устанавливать Кукушку, нужно кое что понять. Кукушка - это автоматический анализатор, который мало что находит и выдает кучу мусорной информации. Пользуясь таким анализатором вы будете иметь множество ложных сигналов и запросто не заметите что-то действительно опасное. Верить ей нельзя, как и нормальной кукушке в лесу. Так зачем она нужна? Затем, что это еще один способ визуализации зловредов и способ довольно простой и бесплатный. "Стабильная" версия Кукушки вовсе таковой не является, в ней куча багов. Я бы сказал, что это основа, на которой вы можете начать строить свою собственную версию Кукушки. Вы также можете "присоединиться" к кому-нибудь из существующих разработчиков и пользоваться его версией. Например, я читал хорошие отзывы о версии, которую ведет Brad Spengler здесь https://github.com/brad-accuvant/cuckoo-modified. Эта версия известна как Cuckoo 1.3-Accuvant. Accuvant - это компания, которая специализируется на информационной безопасности.
Я пока не занимался доработками Кукушки, но займусь непременно. Штука полезная. Пока я просто модифицировал и отладил установочный скрипт, который предложил Libert. В этой статье я описываю, какие сделаны изменения и зачем.
Начнем с вопроса о виртуализации. Изначально Кукушка сделана для установки на физической машине в среде Linux. Создатели проекта рекомендуют Ubuntu. Я ее почему-то терпеть не могу. Мой скрипт написан для Debian и отлажен на Debian 8 (Jessie). Сама операционная система должна быть установлена в минимальной конфигурации + системные утилиты + SSH сервер. Больше ничего не надо. Я использовал "сетевую установку".
Для работы машин, внутри которых будут запускаться вирусы, требуется работающая в Linux среда виртуализации. Кукушка поддерживает разные. Нужна такая, которая поддерживает снапшоты с машин в running state. Бесплатный выбор сразу сокращается. Я остановился на Oracle Virtualbox. KVM работает быстрее, но кажется единственный формат виртуального диска, с которым поддерживаются снапшоты, это qcow2. Хреновый формат. В нем под машину с диском 20ГБ выделяется именно 20ГБ. Так безумно расходовать маленький SSD своего ноутбука я не хочу. KVM отпала. Итак, выбор "внутренней виртуализации" ограничился Virtualbox.
Почему я назвал эту виртуализацию "внутренней"? Потому что я ставлю саму Кукушку на виртуальную машину, а не на физическую. В наше время физические машины - редкость. Дома я использую свой ноутбук Acer Aspire E15 с процессором AMD E2-6110 (дешевле не найдете), замечательный четырех-ядерный 64-х разрядный процессор а-ля celeron с поддержкой виртуализаии. Операционка Windows 10 (ранее 8.1). На работе полностью виртуальный ЦОД на гипервизорах ESXi. Там "чистого" железа просто нет. Что касается "внешней" виртуализации, ее следует выбирать, исходя из двух соображений. Во-первых скорости совместной работы "внутренней" и "внешней" виртуальных систем. Во-вторых, способности "внешней" системы передать "внутренней" параметры "хардверной" виртуализации от физического хоста.
Последний вопрос очень важен. Если вы посмотрите исходный текст, предложенный Libert, в нем специально отключается поддержка харверной виртуализации при настройке "внутренней" виртуальной машины:
vboxmanage modifyvm "WindowsXP" --nic1 hostonly --hostonlyadapter1 vboxnet0 --nicpromisc1 allow-all --hwvirtex off --vtxvpid off
В своем скрипте я поступаю ровно наоборот:
vboxmanage modifyvm "Windows7" --nic1 hostonly --hostonlyadapter1 vboxnet0 --nicpromisc1 allow-all --hwvirtex on --vtxvpid on
И это очень важно. Различие WindowsXP и Windows7 здесь как раз не имеет никакого значения. Дело в том, что если не включена поддержка хардверной виртуализации, то virtualbox не может запустить машину восстановленную из снапшота, сделанного в running state. То есть вы можете запустить виртуалку, и она будет нормально работать. Вы можете сделать снапшот с работающей машины, и он прекрасно сделается без ошибок, но если вы восстановите состояние машины из снапшота, она больше не запустится. Это известный баг virtualbox, который кочует из версии в версию, и его постоянно обещают как-нибудь поправить. Но, поскольку ему уже много лет, правильнее считать его не багом, а фичей.
Что касается скорости работы машин, следует понимать, что виртуалка внутри виртуалки - это тормоза. Но, в некоторых случаях, это мощные тормоза. Например, если в качестве "внешней" виртуализации выбрать тот же Virtualbox, работать вы просто не сможете. А вот если взять VMware player, все будет почти как на физическом хосте. Я использовал его для внешней машины на своем ноутбуке. На работе у меня ESXi. С ним тоже не все просто.
Не всякий ESX умеет прокидывать внутрь параметры хардверной виртуализации. В терминах ESX это называется VHV (Virtualized Hardware Virtualization). Для этого нужен ESX с поддержкой Virtual Hardware Version 9 или более поздней. В моей версии скрипта установки предварительно проверяется наличие в системе минимум двух виртуальных процессоров для которых установлены флаги vmx или svm (это виртуализация Intel и AMD соответственно). Если их нет, установка не производится.
Внимательные читатели, особенно те, кто читает не для праздного любопытства, могут обратить внимание на то, что я использую более новые версии практически всех необходимых приложений, чем использовал Libert, у которого я содрал исходный скрипт. Но вот версии cybox и maec те же самые. Новые версии существуют, но "стабильная" Кукушка об этом не знает. Она будет искать именно эти версии и, если их нет maec работать не будет.
Еще одно важное отличие оригинального скрипта от моего. Libert создает пустую заготовку для WindowsXP, в которую предлагает потом залить систему с дистрибутива и настроить ее. Я импортирую готовую виртуальную машину из файла win7-cuck.ova, которую я создал и настроил отдельно, в среде Virtualbox на своем ноутбуке. Всё необходимое для работы Кукушки с этой машиной я устанавливаю и настраиваю заранее, включая агент Кукушки agent.py, который вы можете извлечь из архива Кукушки (в скрипте есть адрес, с которого он грузится). Что именно необходимо прекрасно описано в статье Libert. Перед тем, как закончить подготовку машины и экспортировать ее в файл win7-cuck.ova, обязательно проверьте что агент запускается при старте машины, что сетевой адаптер настроен на фиксированные адреса 192.168.56.101, mask 255.255.255.0, gateway 192.168.56.1 dns лучше указать гугловский 8.8.8.8 для универсальности конфигурации, отключите от машины все использовавшиеся при установке внешние диски и общие папки. Обязательно убедитесь, что отключены уведомления UAC и автообновления не только системы, но и приложений вроде Flash, Acrobat Reader, Java, Office, Chrome и всего, что вы туда понаставили. Это не критично, но Кукушка будет регистрировать и включать в свои отчеты в том числе действия этих обновлялок. Люшний мусор вам не нужен.
Используйте старую версию java-машины или вам придется вручную править тот фрагмент кода Кукушки, в котором она ищет java-машину. Я остановился на версии 6.45.
Перед запуском скрипта убедитесь, что у вас есть:
Экспортированный образ виртуальной машины win7-cuck.ova
Установлены программы Putty и WinSCP, вы знаете зачем они нужны и умеете ими пользоваться.
Во время установки Debian вы должны выбрать создание пользователя cuckoo, чтобы создался его домашний каталог /home/cuckoo. Вы должны выбрать в качестве дополнительных пакетов "системные утилиты" и "SSH сервер". Остальное не нужно, но графику тоже можно включить, это ни чему не противоречит. Машина Dedian должна иметь не менее 2ГБ оперативной памяти, не менее 2-х процессоров и не менее 30ГБ на виртуальном диске. Должен быть включен "проброс" гипервизором хардверной виртуализации внутрь гостя.
После установки Debian необходими зайти на консоль и разрешить удаленное подключение рутом по SSH.
Для этого найти в /etc/ssh/sshd_config строчку
PermitRootLogin without-passwordи заменить на
PermitRootLogin yesПосле чего сделать /etc/init.d/ssh restart.
Затем надо пользуя WinSCP перенести в /home/cuckoo файлы win7-cuck.ova и debian_install_cuckoo.sh, на последний файл дать права execute.
Теперь можно подключиться Putty к консоли рутом и сделать:
cd /home/cuckoo ./debian_install_cuckoo.sh
Всё. Ждем завершения скрипта. Перегружаем машину и цепляемся на http://адрес_внешней_виртуалки
И кое-что еще... Есть маленький баг в cuckoo/modules/machinery/virtualbox.py
def dump_memory(self, label, path): """Takes a memory dump. @param path: path to where to store the memory dump. """ try: subprocess.call([self.options.virtualbox.path, "debugvm", label, "dumpguestcore", "--filename", path], stdout=subprocess.PIPE, stderr=subprocess.PIPE) log.info("Successfully generated memory dump for virtual machine " "with label %s to path %s", label, path) except OSError as e: raise CuckooMachineError("VBoxManage failed to take a memory " "dump of the machine with label %s: %s" % (label, e))
Нет такой подкоманды dumpguestcore в команде vboxmanage debugvm. Есть команда dumpvmcore. Эту строчку надо поправить, иначе дамп для Volatility создаваться не будет. Но при этом в лог будет записываться Successfully generated memory dump for virtual machine ... И вы будете в недоумении. Это потому, что перцы не анализируют ответ от vboxmanage, а смотрят только наличие OSError, которого нету, ведь команда не выполнялась :)