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).

Вот сюда выложил анализ файла в формате HTML, каким его создаёт песочница.

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.iso

Включаем
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:

image

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

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

image

Готовый скрипт установки и настройки 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
pip install pydeep
#Установим 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 и распакуем её в папку приложения.
После откроем программу:

image

Она предложит войти или зарегистрироваться, регистрируемся, логинимся(с капчей не возитесь, введите что угодно, она не работает), после загружаем и устанавливаем файлы, необходимые для интеграции песочницы с 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-а конфигурацию:

image

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

image

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

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

image

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

image

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

image

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



Ещё один бонус, книга, которую я нашёл в сети, хороший гайд по использованию 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
Поделиться публикацией
Комментарии 26
    +3
    Это очень круто. Положил в закладки, что-то мне подсказывает, что рано или поздно этот гайд спасет меня.
    Спасибо огромное.
      0
      Получается, что надо куда то постоянно отправлять свои файлы для проверки? Это же утечка информации?
        0
        Вы прочитали статью до конца?
        В том то и дело, если отправлять на Malwr или Anubis или тот-же Virustotal то по сути это утечка и с точки зрения утверждённых регламентов ИБ неприемлемо. Но когда с нуля поднимаешь свой сервис и конфигурируешь доступ к сервису только со своей сети — утечкой это не является, хост с песочницей становится по сути частью инфраструктуры организации, для большей уверенности на хост можно поставить OSSEC, например воспользовавшись материалом, предоставленным Neuronix или-же данным мануалом от Traveler и отправлять логи OSSEC в используемую в организации SIEM систему, такой подход к решению данной задачи будет комплексным и вполне приемлемым.
          0
          Прочитал, но сразу не понял :-)Спасибо!
          Еще вопрос — замеряли производительность системы? Сколько может обрабатывать файлов в минуту?

          Хотелось бы сделать так чтобы все перемещающиеся в компании файлы проходили через песочницу. Или, автоматизировать проверку всех файлов, передаваемых пользователями нашей системы друг другу через нашу систему.
            0
            На VPS Digitalocean, упомянутой в начале статьи файл анализируется минут 8-10, это с дампом памяти, если без, то пара минут, а насчёт проверки вложений, вот вам скрипт за основу, который атачи выгружает, можно его под себя адаптировать, а файлы локально проверять по крону в песочнице например
      +1
      Считать файл безопасным если эта система (да и любая другая автоматическая) сказала что он чист — нельзя.
      Ручной анализ даст более правильную картину.
        +1
        Вы абсолютно правы, но лишь в том случае, если специалист имеет достаточное количество знаний в этой узкопрофильной области, чтобы провести грамотный ручной анализ файла.
          0
          А если не имеет ему и песочница не поможет, если троян не совсем дурной.
            0
            Тут Вы тоже абсолютно правы, например просканировал в песочнице бинарник вируса BetaBot, слитого в сеть с контрольной панелью и взломанного неким исследователем с ником Xylit0l. При запуске в обычном режиме Userland вирус ничего подозрительного особо не делает, смотрит некоторые ключи реестра, но песочница считает файл «чистым», не считая только отчёта из virustotal:
            Картинка
            image

            А если запустить с драйвером zer0m0n, то появляется гораздо больше процессов и анализ вместе с песочницей полностью подвисает после запуска процесса dfrgntfs.exe
            Картинка
            image

            К сожалению мои познания в этой области пока-что малы и не позволяют мне проанализировать файл вручную.
            Буду вам крайне признателен, если порекомендуете хорошую литературу по этой теме :)
              0
              Из реестра вижу только обращение к VmWare, но черт его знает какие были фильтры, может это другой процесс лез.
              www.amazon.com/Malware-Analysts-Cookbook-DVD-Techniques/dp/0470613033 — неплохая книга, Касперы недавно на хабре книжки рекомендовали.
        0
        ПО вручную, с помощью песочниц и разных утилит, но самым простым и быстрым из всех способов проанализировать вирус оказался malwr.com – сервис автоматического анализа файла в песочнице.


        Стоит отметить ещё такой сервис, как Анубис. Пример отчёта о сканировании в PDF
          0
          Кстати да, тоже им пользуюсь. Удобная штука, если есть сомнения в результатах проверки на VirusTotal.
          +1
          malwr возвращается: blog.malwr.com/2014-08-22-status-update.html
            +2
            Собственно, по быстренькому (без длительных очередей) посмотреть, что делает исполняемый модуль можно и через вирустотал, в закладке Поведение.
              +1
              Интересно было бы почитать еще обзор самого вредоноса.
                0
                По вредоносу обзор писать не планировал, вот ссылка на его анализ
                0
                Грандиозно! Сколько времени вы писали эту статью? :)
                  +1
                  Статью написал за сутки, из них полдня составлял и обкатывал скрипт. Собрал сервис за выходные, а потом в течении месяца после работы допиливал некоторые косячки и проблемы. Изначально это был мини гайд для коллег, а после вспомнил, что на хабре не нашёл инфы и решил поделиться со всеми, да и наконец пришло время получить инвайт :)
                    0
                    Оперативно вы, по объему на неделю написания тянет )
                      0
                      так я в течении месяца пометки делал по установке, а скомпоновал за день :)
                  +5
                  Чёрт возьми, вот это классно. Думаю, придётся как-нибудь собрать такую штуку на отдельной машине =)
                  Сразу вспомнилось это:

                  image
                    0
                    А не могли бы вы заодно поделиться готовым образом DO? Насколько я помню у них с некоторых пор появилась такая возможность.

                    Благодарю.
                      0
                      Или можете спросить мой образ у хабраюзера PocketSam

                      Спрашиваю. Можете поделиться?
                      0
                      Virustotal.com
                      Постоянно пользуюсь!
                        0
                        Присоединяюсь к вышеупомянутой просьбе. Поделитесь, пожалуйста, образом подготовленной ВМ в любом удобном для Вас формате.
                          0
                          я его к сожалению уже удалил, а на рабочей песочнице уже поднято много других сервисов и она уже содержит в себе много внутренней информации. Создайте новый VPS, запустите готовый скрипт и через 15 минут, максимум час вам лишь нужно будет выполнить несложную установку Windows с последующей установкой софта, работать должно, я с нуля своим полуавтоматическим методом собрал песочницу за 2 часа (в т.ч. 40 минут установка винды и 20 минут выгрузка базы с clamav со скоростью 2-8 кб/c)
                          Или можете спросить мой образ у хабраюзера PocketSam

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое