Cuckoo – собственная автоматизированная лаборатория анализа вредоносных файлов

от автора

image
Месяц назад портал на моей новой работе был взломан. Руководство задалось вопросом «Как?». В ходе недолгих поисков и анализу подключений к серверам, был найден ПК сотрудника, с которого устанавливалось подключение примерно в то самое время. Сотрудник ничего о взломе не знал, но в ходе беседы вспомнил один случай, ему незадолго до взлома пришёл документ от «сотрудника фирмы», который не открылся. Файл был в формате exe, с этого и началась вся история.

Начальство дирекции поставило задачу проанализировать файл и понять, что он делает и какие данные могли уйти злоумышленнику. С темой анализа вредоносных файлов я раньше не сталкивался, и самым логичным делом было найти немного информации в гугле.

За несколько дней я нашёл и прочёл огромное количество мануалов по анализу вредоносного ПО, почти все мануалы предлагали проанализировать ПО вручную, с помощью песочниц и разных утилит, но самым простым и быстрым из всех способов проанализировать вирус оказался malwr.com – сервис автоматического анализа файла в песочнице. Зарегистрировался, загрузил вирус, встал «в очередь» и стал ждать, лишь спустя сутки на главной странице появилась новость:

image

24-го июля днём, сервис прекратил свою работу на неопределённое время в связи с увеличивающейся нагрузкой.

Посмотрев страницы сайта и описание, я наткнулся на упоминание об используемой платформе анализа – Cuckoo Sandbox — и решил узнать о программе побольше.

Что же это за зверь такой «Кукушка»?

Cuckoo Sandbox — система для автоматического исследования вредоносного ПО, эксплоитов, вредоносных скриптов, документов, архивов и ссылок. Система способна проверять документы pdf, doc, xls, rtf, скрипты Python, JS, DLL библиотеки, бинарники, jar и многое другое.

Как оно работает?

В специально подготовленной виртуальной системе устанавливается Python 2.7, добавляется на автозагрузку агент Cuckoo, который будет взаимодействовать с песочницей, специальным образом настраиваются интерфейсы сети, для перехвата и дальнейшего анализа сетевого трафика. После всех манипуляций делается снимок файловой системы, он же Snapshot. Песочница загружает тестируемый файл, определяет его тип и в соответствии с типом файла производит необходимые манипуляции, все изменения внутри песочницы фиксируются в отчёт. После работы система восстанавливает снапшот и виртуальная система возвращается к своему исходному состоянию.

Cuckoo Sandbox способна на:

  • Мониторинг вызовов win32 API функций
  • Дамп сетевой активности
  • Дамп и анализ памяти
  • Создание скриншотов в ходе выполнения анализа
  • Сохранение копий всех созданных файлов и загруженных в процессе проверки
  • Трассировка инструкций, выполняемых вредоносным процессом
  • Создание удобного отчета в json, mmdef, maec, html-форматах
  • Абсолютная изолированность среды, в которой производится запуск вредоносных программ

Подогревая интерес публики, выложу небольшой скрин тех сигнатур, что песочница определила у одного файла, приложенного к спам письму:

image

Согласитесь, это даёт гораздо больше информации о любом файле, нежели классическое антивирусное срабатывание «Trojan.Gen» (можно считать это «камнем в огород» Symantec).

Cuckoo Sandbox неплохо задокументирована и её установка в том числе, на некоторых сайтах выложены инструкции по её установке, но в данный момент ни одна инструкция не работает ровно так, как написано. В ходе настройки я столкнулся с немалым количеством проблем, после чего решил написать сюда полный и актуальный гайд по установке и настройке, со всеми нюансами, дополнениями и модификациями. Для самых ленивых я подготовил скрипт, который настроит и установит песочницу автоматически, приступим.

Установка и настройка Cuckoo, со всеми тонкостями и дополнительными утилитами.

Вся последующая установка проводилась на VPS Digitalocean (2GB Ram/40GB SSD/Ubuntu 14.04 x32).
Примечание: если вы решили попробовать собрать песочницу на том же хостинге — не стоит выбирать лондонский ДЦ, у вас возникнут проблемы с доступом к некоторым ссылкам.

Ubuntu выбран по рекомендации разработчиков, как система, на которой непосредственно и тестировалась песочница.

План установки будет выглядеть следующим образом:

  1. Установка зависимостей и пакетов, необходимых утилитам и песочнице
  2. Установка утилит и Cuckoo Sandbox
  3. Настройка Cuckoo Sandbox
  4. Установка и настройка Virtualbox
  5. Установка или загрузка виртуальной системы, её настройка
  6. Веб интерфейс
  7. Автозагрузка
  8. Дополнительные «плюшки» и возможности Cuckoo
  9. Готовый скрипт установки и настройки Cuckoo
  10. Бонус

Установка зависимостей и пакетов, необходимых утилитам и песочнице

Если вам лень делать это самостоятельно или читать, переходите сразу к пункту Готовый скрипт. Прошу заметить, скрипт тестировался и собирался только под Ubuntu 14.04 LTS x32, работа на других ОС не гарантирована. Если решили разобраться сами, то следующая глава для вас.

Установим все зависимости:

cd /tmp apt-get update apt-get install  git automake mongodb mingw32 dkms unzip wget python python-sqlalchemy python-bson python-pip python-dpkt python-jinja2 python-magic python-mysqldb python-gridfs python-libvirt python-bottle python-pefile python-chardet -y apt-get install python-dev libxml2-dev libxslt1-dev libevent-dev libpcre3 libpcre3-dev zlib1g-dev libtool libpcre++-dev –y apt-get install mariadb-server -y 

Следующие установки желательно делать по одному, как я и написал:

pip install lxml pip install cybox==2.0.1.4 pip install maec==4.0.1.0 pip install django pip install py3compat pip install pymongo 

Примечание: Pymongo ставить только через PIP, если установить его через APT – веб интерфейс работать не будет.

Установка утилит и Cuckoo Sandbox

SSDEEP

(ssdeep — инструмент для рекурсивного вычисления и сравнения контекстных частичных хешей, больше известного как нечёткое хеширование)

apt-get install ssdeep python-pyrex subversion libfuzzy-dev -y svn checkout http://pyssdeep.googlecode.com/svn/trunk/ pyssdeep cd pyssdeep python setup.py build python setup.py install pip install pydeep 
YARA

(YARA – инструмент, помогающий вирусным аналитикам опознавать и классифицировать примеры вредоносных программ)

cd /tmp wget https://github.com/plusvic/yara/archive/v2.1.0.tar.gz tar xzf v2.1.0.tar.gz cd yara-2.1.0 chmod +x build.sh ./build.sh make install cd yara-python python setup.py build python setup.py install 
Distorm3

(Distorm3 – дизассемблер)

cd /tmp wget http://distorm.googlecode.com/files/distorm3.zip unzip distorm3.zip cd distorm3 python setup.py build python setup.py install 
Установим Volatility

(Volatility — фреймворк на Python, созданный для изучения дампов памяти операционной системы)

add-apt-repository ppa:pi-rho/security apt-get update apt-get install volatility 

Примечание: Не собирайте пакет из исходников (как описано в некоторых мануалах по установке 2012-2013 годов), ставьте из репо как в этой статье, иначе web ui не будет работать, собранный Volatility из любых источников и любой версии ломает выгрузку отчётов в MongoDB (без Mongo новый веб интерфейс не заработает), с версией из репозитория такой проблемы нет.

Установим Cuckoo Sandbox

Сначала добавим пользователя:

useradd cuckoo usermod -a -G vboxusers cuckoo  id cuckoo 

Теперь установим:
Стабильная

cd /opt wget http://downloads.cuckoosandbox.org/1.1/cuckoo_1.1.tar.gz tar xzf cuckoo_1.1.tar.gz 

Dev

cd /opt git clone https://github.com/cuckoobox/cuckoo.git 

Примечание: В примере далее была использована стабильная версия, рекомендую так же использовать стабильную.

Настройка Cuckoo Sandbox

Настроим сигнатуры Cuckoo community

cd /opt/cuckoo ./utils/community.py --signatures --force 

Теперь настраиваем БД Cuckoo:

mysql -u root -p > create database cuckoo; > grant all privileges on cuckoo.* to cuckoo@localhost identified by 'cuck00pass' ; > flush privileges; > quit; 

Настраиваем cuckoo

  1. Файл /opt/cuckoo/conf/cuckoo.conf
    Включаем запись дампа памяти:
    memory_dump = on

    Настраиваем подключение к бд:

    connection = mysql://cuckoo:cuck00pass\@localhost/cuckoo

    Сервер слабый, поэтому увеличиваем временные лимиты:

    default = 240 critical = 1200 vm_state = 600
  2. Файл /opt/cuckoo/conf/memory.conf
    На сервере всего 40 гб, поэтому отключаем сохранение дампов памяти:
    delete_memdump = yes
  3. Файл /opt/cuckoo/conf/processing.conf
    Включаем анализ оперативной памяти:
    memory = yes

    Примечание: в параметр key можете вписать собственный API ключ сервиса virustotal.com

  4. vim /opt/cuckoo/conf/virtualbox.conf
    Меняем режим работы Virtualbox:
    mode = headless 

    Меняем названия виртуальной машины с cuckoo1 на WindowsXP:

    machines = WindowsXP 	[WindowsXP] 	label = WindowsXP 
  5. Файл /opt/cuckoo/conf/reporting.conf
    Включим импорт отчётов в MongoDB для работы веб интерфейса
    [mongodb] 	enabled = yes 

На этом настройка Cuckoo закончена, теперь приступим к Virtualbox и гостевой ОС.

Установка и настройка Virtualbox

Virtualbox и все необходимые компоненты

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add – sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian trusty contrib" >> /etc/apt/sources.list.d/virtualbox.list' apt-get update apt-get install virtualbox-4.3 cd /tmp VBOX_LATEST_VERSION=$(curl http://download.virtualbox.org/virtualbox/LATEST.TXT) wget http://download.virtualbox.org/virtualbox/${VBOX_LATEST_VERSION}/Oracle_VM_VirtualBox_Extension_Pack-{VBOX_LATEST_VERSION}.vbox-extpack vboxmanage extpack install /tmp/Oracle_VM_VirtualBox_Extension_Pack-${VBOX_LATEST_VERSION}.vbox-extpack cd /opt wget http://dlc.sun.com.edgesuite.net/virtualbox/${VBOX_LATEST_VERSION}/VBoxGuestAdditions_${VBOX_LATEST_VERSION}.iso 

Установка или загрузка виртуальной системы, её настройка

У нас есть 2 варианта установки ОС:

  1. Загрузить её с сайта
  2. Установить вручную

Первый вариант самый быстрый, но так же и не самый стабильный. Использование данной ОС в некоммерческих целях разрешено и не будет проблем с лицензией.
Второй вариант более долгий и надёжный, я выбрал последний, но опишу оба по порядку.

Загрузка виртуальной ОС с сайта

wget https://az412801.vo.msecnd.net/vhd/VMBuild_20131127/VirtualBox/IE6_WinXP/Linux/IE6.WinXP.For.LinuxVirtualBox.sfx chmod +x IE6.WinXP.For.LinuxVirtualBox.sfx ./IE6.WinXP.For.LinuxVirtualBox.sfx vboxmanage import IE6\ -\ WinXP.ova --vsys 0 --unit 10 --disk=/root/VirtualBox\ VMs/WindowsXP/WindowsXP.vmdk --memory 1024 --vmname WindowsXP 

Установка ОС вручную

vboxmanage createvm --name "WindowsXP" --ostype WindowsXP --register vboxmanage modifyvm "WindowsXP" --memory 1000 --acpi on --boot1 dvd vboxmanage createhd --filename "WindowsXP.vdi" --size 20000 vboxmanage storagectl "WindowsXP" --name "IDE" --add ide --controller PIIX4 vboxmanage storageattach "WindowsXP" --storagectl "IDE" --port 0 --device 0 --type hdd --medium "WindowsXP.vdi" 

Примечание: Следующие инструкции одинаково приемлемы к обеим методам.

Настраиваем сеть

vboxmanage hostonlyif create vboxmanage modifyvm "WindowsXP" --nic1 hostonly --hostonlyadapter1 vboxnet0 --nicpromisc1 allow-all --hwvirtex off --vtxvpid off 

Настраиваем общие папки

mkdir -p /opt/cuckoo/shares/setup mkdir -p /opt/cuckoo/shares/WindowsXP vboxmanage sharedfolder add "WindowsXP" --name "WindowsXP" --hostpath /opt/cuckoo/shares/WindowsXP --automount vboxmanage sharedfolder add "WindowsXP" --name setup --hostpath /opt/cuckoo/shares/setup --automount --readonly vboxmanage modifyvm "WindowsXP" --nictrace1 on --nictracefile1 /opt/cuckoo/shares/WindowsXP/dump.pcap 

Включаем доступ по RDP

vboxmanage modifyvm "WindowsXP" --vrdeport 5000 --vrde on 

Порт можете указать любой

На этом конфигурация виртуальных контейнеров полностью закончена, осталось настроить iptables, tcpdump и если вы выбрали установку с нуля — собственно и установить Windows.

Правила iptables и изменение параметра ядра

iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT   iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT   iptables -A POSTROUTING -t nat -j MASQUERADE   sysctl -w net.ipv4.ip_forward=1 

tcpdump

setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump getcap /usr/sbin/tcpdump 

Поднимем интерфейс

ifconfig vboxnet0 192.168.56.1 

Теперь переходим непосредственно на саму гостевую ОС:

Установка Windows
Загрузите свой образ на сервер и подключим его к виртуальной машине:

vboxmanage storageattach "WindowsXP" --storagectl "IDE" --port 0 --device 1 --type dvddrive --medium /patch/to/licensed/windows 

Включаем

vboxmanage startvm "WindowsXP" --type headless 

После этой команды можно подключиться к виртуальной ОС по RDP на порт 5000 и установить её. После установки подключим и установим VBoxGuestAdditions:

vboxmanage storageattach "WindowsXP" --storagectl "IDE" --port 0 --device 1 --type dvddrive --medium /opt/VBoxGuestAdditions_4.3.14.iso 

Примечание: версия ваших аддонов может быть другая
Если вы загрузили готовую виртуальную систему, то в любом случае обновить GuestAdditions необходимо.
После установки перезагружаемся.

Настаиваем гостевую ОС

  1. Следующим образом настрои подключение к сети (dns можете указать любой):

    image

  2. Установим VboxTools с диска, который подключен к системе.
  3. Устанавливаем Pyton 2.7: http://python.org/download/
  4. Устанавливаем http://www.activestate.com/activepython
  5. Устанавливаем PIL Python модуль, для создания скриншотов: http://www.pythonware.com/products/pil/
  6. Отключаем автоматическое обновление Windows.
  7. Отключаем брандмауэер.
  8. Копируем агент из сетевой папки setup в папку C:\Python27,
    Ставим агент на автозагрузку, для этого добавляем в ветку реестра(пуск->выполнить->regedit) HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run строковый параметр
    Имя:’Agent’
    Тип:’REG_SZ’
    Содержание:«C:\Python27\agent.pyw»

    image

  9. Включаем IE, в настройках ставим домашней страницей пустую вкладку, по желанию в свойствах обозревателя выключаем все защитные механизмы.
  10. Отключаем SSDP: пуск->выполнить->msconfig и в разделе службы отключаем «Служба обнаружения SSDP», чтобы в отчётах не фигурировали сетевые запросы этой службы.

    image

  11. Перезагружаемся и в появившемся при загрузке окне выбираем «При перезагрузке не выводить это сообщение» и ОК.
  12. После перезагрузки гостевой ОС, пуск->выполнить->cmd и в консоли набираем netstat –na и смотрим есть ли агент на 8000-ом порту

    image

  13. По желанию устанавливаем различное уязвимое ПО старых версий (браузеры, Flash player, Java, Acrobat Reader…): http://www.oldapps.com
    Примечание: если у вас имеется лицензия на офис, лучше его установить, да и лучше установить всего побольше, скайп, ICQ, почтовый клиент, так или иначе некоторое вредоносное ПО пытается собрать данные из этих приложений или же эксплуатировать их. Например хакер, взломавший наш сайт, после нескольких неудачных попыток снова попасть в сеть собрал вирус, эксплуатирующий уязвимость CVE2012-0158, без Microsoft Office вычислить бы это не удалось.

На этом установка гостевой ОС закончена.
Делаем снапшот (не выключая гостевую ОС)

vboxmanage snapshot "WindowsXP" take "WindowsXPSnap01" --pause 

И выключаем:

vboxmanage controlvm "WindowsXP" poweroff 

Веб интерфейс

У Cuckoo Sandbox есть 2 веб интерфейса, новый и старый. Тот что постарее менее информативен, имеет меньше возможностей и гораздо менее удобен, чем новый:
Старый интерфейс:

image

Новый интерфейс:

image

Старый интерфейс поднимается без БД, без Django, просто запуском скрипта web.py из папки utils, поэтому если вам этого достаточно — используйте его, но я рекомендую потратить 5 минут вашего драгоценного времени и поднять новый веб интерфейс.
Устанавливаем Apache:

apt-get install apache2 

Apache выбрал т.к. лучше его знаю и дольше с ним работал, по желанию можете настроить Nginx или Unicorn.
Файл /etc/apache2/sites-enabled/000-default.conf удаляем
Создаём файл /etc/apache2/sites-enabled/cuckoo.conf следующего содержания:

<VirtualHost *:80> 	ServerName cuckoo.local 	ServerAdmin webmaster@localhost 	DocumentRoot /opt/cuckoo/web 	ErrorLog ${APACHE_LOG_DIR}/error.log 	CustomLog ${APACHE_LOG_DIR}/access.log combined 	WSGIScriptAlias / /opt/cuckoo/web/web/wsgi.py 	<Directory /opt/cuckoo/web/web> 		<Files wsgi.py> 			Require all granted 		</Files> 	</Directory> 	Alias /static /opt/cuckoo/web/static 	<Directory /opt/cuckoo/web/static/> 		Require all granted 	</Directory> </VirtualHost>  

В файле /opt/cuckoo/web/web/wsgi.py находим:

import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web.settings") 

И меняем на:

import os, sys sys.path.append('/opt/cckoo') sys.path.append('/opt/cuckoo/web') os.chdir('/opt/cuckoo/web/') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web.settings") 

поправим права:

chown -R cuckoo:cuckoo /opt/cuckoo/ 

Меняем пользователя, от которого будет запускаться apache в файле /etc/apache2/envvars

APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data 

на

APACHE_RUN_USER=cuckoo APACHE_RUN_GROUP=cuckoo 

Устанавливаем модуль поддержки wsgi:

aptitude install libapache2-mod-wsgi -y 

Автозагрузка ПО

Автозагрузка интерфейсов

В файл /etc/rc.local до строчки exit 0 вписать:

VBoxManage list vms > /dev/null ifconfig vboxnet0 192.168.56.1 
Автозагрузка песочницы

apt-get install supervisor 

Создаём файл /etc/supervisor/conf.d/cuckoo.conf следующего содержания:

[program:cuckoo] command=python cuckoo.py directory=/opt/cuckoo  [program:cuckoo-api] command=python api.py directory=/opt/cuckoo/utils 

Выполняем:

supervisord -c /etc/supervisor/supervisord.conf supervisorctl -c /etc/supervisor/supervisord.conf reload 
Автозагрузка правил iptables

apt-get install iptables-persistent 

Готово, теперь после перезагрузки все службы запустятся и всё будет работать.

Дополнительные «плюшки» и возможности Cuckoo

Сигнатуры PEID

Установим новую базу сигнатур, в новой базе их в 2 раза больше:

cd /tmp wget http://research.pandasecurity.com/blogs/images/userdb.txt mv userdb.txt /opt/cuckoo/data/peutils/UserDB.TXT 
Правила ClamAV в Yara + сигнатуры угроз APT от AlienVault Labs

Примечание: при попытке загрузки скрипта конвертации правил ClamAV-Yara с лондонского дц digitalocean возникает ошибка “Request not allowed from your country That’s all we know.”

apt-get install clamav -y wget http://db.local.clamav.net/main.cvd wget http://db.local.clamav.net/daily.cvd sigtool -u main.cvd sigtool -u daily.cvd wget http://malwarecookbook.googlecode.com/svn-history/r5/trunk/3/3/clamav_to_yara.py python clamav_to_yara.py -f main.ndb -o main.yar python clamav_to_yara.py -f daily.ndb -o daily.yar  mkdir /opt/cuckoo/data/yara/clamav mv *.yar /opt/cuckoo/data/yara/clamav/ 

Сконвертированная база будет выдавать ошибку, ссылаясь на неверную сигнатуру EOL_0_94_2, удалим её:
из файла /opt/cuckoo/data/yara/clamav/main.yar удалить строчки

«rule EOL_0_94_2 { strings: $a0 = { This ClamAV version has reached End of Life! Please upgrade to version 0.95 or later. For more information see www.clamav.net/eol-clamav-094 and www.clamav.net/download }^M  condition: $a0 }» 

Или просто выполнить следующие команды:

RM_EOL=$(sed -n '/EOL_0_94_2/{=}' main.yar) for n in {1..8}; do sed -i "${RM_EOL}d" main.yar; done 

Далее установим правила угроз APT от AlienVaults:

git clone https://github.com/AlienVault-Labs/AlienVaultLabs.git  mv AlienVaultLabs/malware_analysis/ /opt/cuckoo/data/yara/ 

И подключим эти правила к Cuckoo:
Впишем в файл /opt/cuckoo/data/yara/index_binary.yar строчки:

include "clamav/main.yar" include "clamav/daily.yar" include "malware_analysis/CommentCrew/apt1.yara" include "malware_analysis/FPU/fpu.yar" include "malware_analysis/Georbot/GeorBotBinary.yara" include "malware_analysis/Georbot/GeorBotMemory.yara" include "malware_analysis/Hangover/hangover.yar" include "malware_analysis/KINS/kins.yar" include "malware_analysis/OSX_Leverage/leverage.yar" include "malware_analysis/TheMask_Careto/mask.yar" include "malware_analysis/Urausy/urausy_skypedat.yar" 
Zer0m0n или прячем нашу песочницу

Любой вредоносный файл может попытаться перед выполнением проверить наличие отладчиков или виртуальной среды, результат будет неутешителен. Вот что показывает тест Paranoid Fish при загрузке его исполняемого файла на проверку:

image

Это можно легко поправить с помощью Zer0m0n.
zer0m0n это драйвер для Cuckoo Sandbox, который будет выполнять анализ ядра во время исполнения вредоносного ПО. Он способен практически полностью скрыть «виртуальность» ОС и позволяет обойти обнаружение Cuckoo вредоносными файлами.

Установим его:

cd /tmp git clone https://github.com/conix-security/zer0m0n.git cd zer0m0n/bin cp cuckoo.patch /opt/cuckoo cd /opt/cuckoo patch -p1 < ./cuckoo.patch cp /tmp/zer0m0n/bin/logs_dispatcher.exe /opt/cuckoo/analyzer/windows/dll/ cp /tmp/zer0m0n/bin/zer0m0n.sys /opt/cuckoo/analyzer/windows/dll/ cp -rf /tmp/zer0m0n/signatures/* /opt/cuckoo/modules/signatures/ 

Поправим права:

chown -R cuckoo:cuckoo /opt/cuckoo/ 

После этого в веб интерфейсе появится возможность выбора сканирования в дополнительных опциях, по дефолту — Userland или с zer0m0n Kernelland:

Если вы запускаете скан через консоль — используйте опцию kernel_analysis=yes

Запустим проверку ещё раз:

Готовый скрипт установки и настройки Cuckoo

Как и обещал, выкладываю готовый скрипт. Он автоматически настроит всё, кроме гостевой ОС. После того, как скрипт отработает, вам нужно будет вернуться на пункт по настройке гостевой ОС и сконфигурировать её.

setup_cuckoo.sh

#!/bin/bash #-------------------------------------------# # Устанавливаем Cuckoo Sandbox  # Тестировалось только под Ubuntu 14.04 #-------------------------------------------# #Установим зависимости cd /tmp apt-get update apt-get install  git automake mongodb mingw32 dkms unzip wget python python-sqlalchemy python-bson python-pip python-dpkt python-jinja2 python-magic python-gridfs python-mysqldb python-libvirt python-bottle python-pefile python-chardet -y apt-get install python-dev libxml2-dev libxslt1-dev libevent-dev libpcre3 libpcre3-dev zlib1g-dev libtool libpcre++-dev -y debconf-set-selections <<< 'mariadb-server-5.5 mysql-server/root_password password supersecretpassw0rd' debconf-set-selections <<< 'mariadb-server-5.5 mysql-server/root_password_again password supersecretpassw0rd' apt-get install mariadb-server -y #Установим компоненты pip install lxml pip install cybox==2.0.1.4 pip install maec==4.0.1.0 pip install django pip install py3compat pip install pymongo #Установим SSDEEP apt-get install ssdeep python-pyrex subversion libfuzzy-dev -y svn checkout http://pyssdeep.googlecode.com/svn/trunk/ pyssdeep cd pyssdeep python setup.py build python setup.py install #Установим Yara cd /tmp wget https://github.com/plusvic/yara/archive/v2.1.0.tar.gz tar xzf v2.1.0.tar.gz cd yara-2.1.0 chmod +x build.sh ./build.sh make install cd yara-python python setup.py build python setup.py install #Установим Distorm3 cd /tmp wget http://distorm.googlecode.com/files/distorm3.zip unzip distorm3.zip cd distorm3/ python setup.py build python setup.py install #Устанавливаем Volatility add-apt-repository ppa:pi-rho/security -y apt-get update apt-get install volatility -y #Устанавливаем Cuckoo useradd cuckoo usermod -a -G vboxusers cuckoo  cd /opt wget http://downloads.cuckoosandbox.org/1.1/cuckoo_1.1.tar.gz tar xzf cuckoo_1.1.tar.gz #Устанавливаем сигнатуры Cuckoo (https://github.com/cuckoobox/community) cd /opt/cuckoo ./utils/community.py --signatures --force #-------------------------------------------# # Устанавливаем и настраиваем Virtualbox #-------------------------------------------# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add - sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian trusty contrib" >> /etc/apt/sources.list.d/virtualbox.list' apt-get update apt-get install virtualbox-4.3 -y cd /tmp VBOX_LATEST_VERSION=$(curl http://download.virtualbox.org/virtualbox/LATEST.TXT) wget http://download.virtualbox.org/virtualbox/${VBOX_LATEST_VERSION}/Oracle_VM_VirtualBox_Extension_Pack-${VBOX_LATEST_VERSION}.vbox-extpack vboxmanage extpack install /tmp/Oracle_VM_VirtualBox_Extension_Pack-${VBOX_LATEST_VERSION}.vbox-extpack cd /opt wget http://dlc.sun.com.edgesuite.net/virtualbox/${VBOX_LATEST_VERSION}/VBoxGuestAdditions_${VBOX_LATEST_VERSION}.iso #конфигурируем Виртуальную машину vboxmanage createvm --name "WindowsXP" --ostype WindowsXP --register vboxmanage modifyvm "WindowsXP" --memory 1000 --acpi on --boot1 dvd vboxmanage createhd --filename "WindowsXP.vdi" --size 20000 vboxmanage storagectl "WindowsXP" --name "IDE" --add ide --controller PIIX4 vboxmanage storageattach "WindowsXP" --storagectl "IDE" --port 0 --device 0 --type hdd --medium "WindowsXP.vdi" vboxmanage hostonlyif create vboxmanage modifyvm "WindowsXP" --nic1 hostonly --hostonlyadapter1 vboxnet0 --nicpromisc1 allow-all --hwvirtex off --vtxvpid off #Настраиваем общие папки mkdir -p /opt/cuckoo/shares/setup mkdir -p /opt/cuckoo/shares/WindowsXP vboxmanage sharedfolder add "WindowsXP" --name "WindowsXP" --hostpath /opt/cuckoo/shares/WindowsXP --automount vboxmanage sharedfolder add "WindowsXP" --name setup --hostpath /opt/cuckoo/shares/setup --automount --readonly vboxmanage modifyvm "WindowsXP" --nictrace1 on --nictracefile1 /opt/cuckoo/shares/WindowsXP/dump.pcap cp /opt/cuckoo/agent/agent.py /opt/cuckoo/shares/setup/agent.pyw #включаем доступ по RDP на 5000 порт vboxmanage modifyvm "WindowsXP" --vrdeport 5000 --vrde on #настраиваем iptables iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A POSTROUTING -t nat -j MASQUERADE   sysctl -w net.ipv4.ip_forward=1   #Настраиваем tcpdump setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump getcap /usr/sbin/tcpdump #настраиваем БД Cuckoo mysql -uroot -psupersecretpassw0rd -e "create database cuckoo" mysql -uroot -psupersecretpassw0rd -e "grant all privileges on cuckoo.* to cuckoo@localhost identified by 'cuck00pass'" mysql -u root -psupersecretpassw0rd -e "flush privileges" #Настраиваем конфиг Cuckoo sed -i -e "s@connection =@connection = mysql://cuckoo:cuck00pass\@localhost/cuckoo@" /opt/cuckoo/conf/cuckoo.conf sed -i -e "s@memory_dump = off@memory_dump = on@" /opt/cuckoo/conf/cuckoo.conf sed -i -e "s@default = 120@default = 240@" /opt/cuckoo/conf/cuckoo.conf sed -i -e "s@critical = 600@critical = 1200@" /opt/cuckoo/conf/cuckoo.conf sed -i -e "s@vm_state = 300@vm_state = 600@" /opt/cuckoo/conf/cuckoo.conf sed -i -e "s@delete_memdump = no@delete_memdump = yes@" /opt/cuckoo/conf/memory.conf sed -i -e "s@enabled = no@enabled = yes@" /opt/cuckoo/conf/processing.conf sed -i -e "s@enabled = no@enabled = yes@" /opt/cuckoo/conf/reporting.conf sed -i -e "s@enabled = no@enabled = yes@" /opt/cuckoo/conf/processing.conf sed -i -e "s@mode = gui@mode = headless@" /opt/cuckoo/conf/virtualbox.conf sed -i -e "s@cuckoo1@WindowsXP@" /opt/cuckoo/conf/virtualbox.conf #Настраиваем Веб сервер apt-get install apache2 -y mv /etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-enabled/000-default.conf.bak cat > /etc/apache2/sites-enabled/cuckoo.conf <<DELIM <VirtualHost *:80> ServerName cuckoo.local ServerAdmin webmaster@localhost DocumentRoot /opt/cuckoo/web ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2//access.log combined WSGIScriptAlias / /opt/cuckoo/web/web/wsgi.py <Directory /opt/cuckoo/web/web> <Files wsgi.py> Require all granted </Files> </Directory> Alias /static /opt/cuckoo/web/static <Directory /opt/cuckoo/web/static/> Require all granted </Directory> </VirtualHost> DELIM aptitude install libapache2-mod-wsgi -y mv /opt/cuckoo/web/web/wsgi.py /opt/cuckoo/web/web/wsgi.py.bak cat > /opt/cuckoo/web/web/wsgi.py  <<DELIM import os, sys sys.path.append('/opt/cuckoo') sys.path.append('/opt/cuckoo/web') os.chdir('/opt/cuckoo/web/') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application() DELIM chown -R cuckoo:cuckoo /opt/cuckoo/ #Настраиваем автозагрузку интерфейса vboxnet0 sed -i -e "s@exit 0@@" /etc/rc.local echo 'VBoxManage list vms > /dev/null' >> /etc/rc.local echo 'ifconfig vboxnet0 192.168.56.1' >> /etc/rc.local echo 'exit 0' >> /etc/rc.local #Настраиваем автозагрузку Cuckoo apt-get install supervisor -y cat > /etc/supervisor/conf.d/cuckoo.conf <<DELIM [program:cuckoo] command=python cuckoo.py directory=/opt/cuckoo  [program:cuckoo-api] command=python api.py directory=/opt/cuckoo/utils DELIM supervisord -c /etc/supervisor/supervisord.conf supervisorctl -c /etc/supervisor/supervisord.conf reload #Автозагрузка правил Iptables cat > /etc/network/if-up.d/00-iptables  <<DELIM #!/bin/sh iptables-restore < /etc/firewall.conf DELIM iptables-save >/etc/firewall.conf #Дополнительные сигнатуры PEiD cd /tmp wget http://research.pandasecurity.com/blogs/images/userdb.txt mv userdb.txt /opt/cuckoo/data/peutils/UserDB.TXT #ClamAV  сигнатуры для Yara cd /tmp apt-get install clamav -y wget http://db.local.clamav.net/main.cvd wget http://db.local.clamav.net/daily.cvd sigtool -u main.cvd sigtool -u daily.cvd wget https://malwarecookbook.googlecode.com/svn-history/r5/trunk/3/3/clamav_to_yara.py python clamav_to_yara.py -f main.ndb -o main.yar python clamav_to_yara.py -f daily.ndb -o daily.yar #фикс, в ClamAV есть сигнатура EOL_0_94_2, которая конвертируется, но не валидна для Yara RM_EOL=$(sed -n '/EOL_0_94_2/{=}' main.yar) for n in {1..8}; do sed -i "${RM_EOL}d" main.yar; done mkdir /opt/cuckoo/data/yara/clamav mv *.yar /opt/cuckoo/data/yara/clamav/ git clone https://github.com/AlienVault-Labs/AlienVaultLabs.git mv AlienVaultLabs/malware_analysis/ /opt/cuckoo/data/yara/ mv /opt/cuckoo/data/yara/index_binary.yar /opt/cuckoo/data/yara/index_binary.yar.bak cat > /opt/cuckoo/data/yara/index_binary.yar <<DELIM include "signatures/embedded.yar" include "signatures/vmdetect.yar" include "clamav/main.yar" include "clamav/daily.yar" include "malware_analysis/CommentCrew/apt1.yara" include "malware_analysis/FPU/fpu.yar" include "malware_analysis/Georbot/GeorBotBinary.yara" include "malware_analysis/Georbot/GeorBotMemory.yara" include "malware_analysis/Hangover/hangover.yar" include "malware_analysis/KINS/kins.yar" include "malware_analysis/OSX_Leverage/leverage.yar" include "malware_analysis/TheMask_Careto/mask.yar" include "malware_analysis/Urausy/urausy_skypedat.yar" DELIM #Zer0m0n git clone https://github.com/conix-security/zer0m0n.git cd zer0m0n/bin cp cuckoo.patch /opt/cuckoo cd /opt/cuckoo patch -p1 < ./cuckoo.patch cp /tmp/zer0m0n/bin/logs_dispatcher.exe /opt/cuckoo/analyzer/windows/dll/ cp /tmp/zer0m0n/bin/zer0m0n.sys /opt/cuckoo/analyzer/windows/dll/ cp -rf /tmp/zer0m0n/signatures/* /opt/cuckoo/modules/signatures/ chown -R cuckoo:cuckoo /opt/cuckoo/ 

Бонус

В качестве бонуса я выложу инструкцию по интеграции Cuckoo Sandbox с программой Maltego.
Интегрировать систему мы будем с REST API сервисом песочницы, который запускается у нас на порту 8090.
Я работаю на макинтоше и следующие действия проводил на mac os 10.9.4, но на любой Linux системе всё точно так же должно устанавливаться и работать без проблем:
Для начала загрузим с сайта Maltego и распакуем её в папку приложения.
После откроем программу:

Она предложит войти или зарегистрироваться, регистрируемся, логинимся(с капчей не возитесь, введите что угодно, она не работает), после загружаем и устанавливаем файлы, необходимые для интеграции песочницы с Maltego с репозитория разработчика:

sudo -s git clone https://github.com/bostonlink/cuckooforcanari.git cd cuckooforcanari python setup.py install canari create-profile cuckooforcanari 

Теперь необходимо импортировать в Matlego конфиг cuckoo:
Кликаем на значок программы в левом верхнем углу -> import -> Import Configuration и выбираем из папки, загруженной с github-а конфигурацию:

Ипортируем всё:

Готово, теперь открываем конфигурационный файл, вписываем хост, порт и папку, куда вы будете складывать вредоносное ПО:

vim ~/.canari/cuckooforcanari.conf 

Готово, теперь в программе создаём новый график, перетаскиваем на график иконку Cuckoo Malware Sample, переименовываем файл в название вашего вируса и загружаем его через Submit File For Analisys:

После загрузки вы увидите номер задания:

По завершении сканирования, вы сможете получать любые данные в виде графиков:

Подробнее об этом можете посмотреть в офицальном видео, от разработчика:

Ещё один бонус, книга, которую я нашёл в сети, хороший гайд по использованию Cuckoo Sandbox для анализа вредоносных файлов.

И если вы используете на работе антивирус Symantec Endpoint Protection 12.1, то можете воспользоваться консольной утилитой под Windows SEPQuarantineTool.zip которая официально не поддерживается Symantec-ом, но ссылку на неё я нашёл в их саппорте. Этой утилитой можно вытаскивать и восстанавливать файлы с карантина, через curl для Windows выгружать файлы на сервер для сканирования, используя REST API и той же утилитой класть файлы обратно на карантин. Таким образом автоматизировав анализ угроз и составив чёрные списки сайтов и серверов, куда ломятся вирусы.

В заключении хочу сказать, что этот инструмент помог выполнить все поставленные задачи, а логи и вредоносные файлы того хакера, который упоминался в самом начале статьи теперь анализируются буквально в считанные минуты и позволяют понять всю картину работы используемого хакером вредоносного ПО:

Спасибо за внимание.

Список использованных источников

docs.cuckoosandbox.org
xakep.ru/articles/57409/
lanswer.blogspot.ru/2012/11/add-cucksandbox-to-ubuntu-service.html
reverselab.info/page/cuckoo-sandbox
www.alienvault.com/blogs/tag/yara
www.securitylab.ru/analytics/441524.php
www.modern.ie/ru-ru/
www.aldeid.com/wiki/PEiD
blog.prowling.nu/2014/08/cuckoo-sandbox-django-interface-with.html
github.com/conix-security/zer0m0n
github.com/bostonlink/cuckooforcanari
santi-bassett.blogspot.ru/2013/01/installing-cuckoo-sandbox-on-virtualbox.html

ссылка на оригинал статьи http://habrahabr.ru/post/234467/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *