Cuckoo 2.0. Собираем лучшую опенсорсную платформу анализа вредоносных файлов

в 23:08, , рубрики: cert, CSIRT, Cuckoo Sandbox, HoneyD, honeypot, IDS, InetSim, ips, IRMA, Malware, MISP, MitMproxy, Moloch, open source, snort, SoC, SSDeep, Suricata, Teserract, TheHive, Tor, virtualbox, Volatility, антивирусная защита, виртуализация, Динамический Анализ, информационная безопасность, системное администрирование

Cuckoo Sandbox logo

4 года назад я публиковал инструкцию по сборке платформы динамического анализа вредоносных файлов Cuckoo Sandbox 1.2. За это время проект успел обрасти внушительным функционалом и огромным комьюнити, недавно обновившись до версии 2.0, которая больше полутора лет висела в стадии Release Candidate.

Я наконец-то подготовил для вас полнейший мануал по сборке Cuckoo Sandbox 2.0.5 со всеми плюшками, какие есть в проекте на данный момент, с упаковкой Cuckoo в venv и без использования root, добавив более 12-ти security утилит в песочницу! По совокупности собранного материала, не побоюсь сказать: "Это самый полный и выверенный шаг в шаг гайд из всех опубликованных в интернете на данный момент". Тем кто, осилит статью до конца — дам маленький совет, что делать, когда песочница собрана и как получить максимальный профит с автоматизации процессов ИБ своими сиилами с помощью опенсорса. Всем гикам, вирусным аналитикам, безопасникам, ребятам из SOC, CERT, CSIRT и просто любителям потыкать кнопки в терминале — добро пожаловать под кат!

За последние несколько лет в проекте Cuckoo произошло немало, добавились новые инструменты, появилась поддержка дополнительного ПО, количество сигнатур увеличилось в разы, появилась система рейтинга вредоносности проверяемого файла, был переписан весь UI и теперь можно настроить приятную глазу тёмную тему.

black UI

Позитивные изменения в проекте очевидны — песочница начала обновляться микро релизами, которые оперативно закрывают выявленные и подтверждённые баги. Обо всех небольших изменениях разработчики начали писать в блог, там можно найти и roadmap проекта. К сожалению, изменений произошло настолько много, что сводную таблицу "до" и "после" проблематично составить, сейчас это 2 платформы разных эпох, лучше сами посмотрите блог, вам понравится!

Release cycle

Советую почаще заглядывать в блог, разработчики уже который релиз обещают включить в маcтер ветку драйвер антидетекта ВМ zer0mon, однако теперь сроки сдвинудись до релиза 2.1.0, следите за новостями, вещь реально нужная!

Сам же код Cuckoo перебрался в пакетный менеджер PIP и обновляется буквально в одну команду.

Позитивной стала и новость о запуске коммерческой поддержки, для клиентов, которым необходима стабильность в работе, поскольку стабильность — главный недостаток Cuckoo с первых релизов. Очень надеюсь, что привлечённые в проект деньги помогут разработчикам добиться качественной работы приложения.

Cuckoo Enterpise

Однако проблема с установкой не изменилась с начала проекта — 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 будут установлены следующее ПО:

  1. Suricata — IDS.
  2. Snort — IDS.
  3. HoneyD — Honeypot.
  4. InetSim — Эмулятор сети.
  5. Tor — onion маршрутизация трафика гостевой ВМ.
  6. Teserract — Распознавание текста на скриншотах.
  7. MitMproxy — Анализ SSL трафика через "man-in-the-middle".
  8. Moloch — IDS (очень удобная и крутая утилита для анализа трафика).
  9. SSDeep — Fuzzy-Hashing.
  10. Volatility — Фреймворк для исследования RAM.
  11. Distorm3 — Дизассемблер.
  12. Yara — Утилита, для распознавания и классификации вредоносного ПО.

Тринадцатым пунктом должна была стать программа потокового антивирусного анализа файлов IRMA, однако при включении IRMA в Cuckoo, выгрузка отчёта в Elastic ломалась, разработчики так и не дали ответ по этой баге, а анализировать Index эластика не было времени. Поэтому в данной инструкции будет пункт про сборку IRMA, но интеграция с Cuckoo включена не будет. Возможно найдётся гуру ELK стека, готовый доблестно побороть баг и дополнить мою статью. Найти IRMA и воспользоваться ею можно будет на порте 8080.

В качестве недостатка могу отметить некорректные ссылки на Moloch в веб интерфейсе песочницы, поправить, наверное, можно, но для меня это не критично, сам сервис Moloch будет висеть на порту 8005 и этого достаточно.

moloch bug

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.

И самое главное — статья выходит в свет на несколько месяцев после инструкции по сборке, что-то уже может поменяться, что-то не работать. Если встретили баг — напишите в ЛС.

А теперь ответим на самый популярный вопрос и приступим к установке!

А что если я не силён в этих ваших Linux, а песочница очень нужна

Ответ на этот вопрос прост — используй онлайн песочницы или возись с Windows Sysinternals.

  • Сервис номер 1, "Эстонская Cuckoo". Очень грамотно собранный Cuckoo Sandbox последней версии от Эстонского CERT (Computer Emergency Response Team). Лучшая реализация песочницы из тех, что я находил в сети. Пользуясь сервисом помним, что загруженные данные могут быть разобраны на индикаторы компетенции (IoC) и с помощью ПО типа MISP переданы в другие национальные CERT в соответствии с установленными правилами передачи TLP. Поэтому внимательно подумайте, заливать вам или нет туда конфиденциальную софтину.
  • Сервис номер 2, "Hybrid Analysis". Популярная в узких кругах (или уже не в узких) онлайн песочница, стабильность и качество которой на высоте, из минусов — функционал немного ограничен, семплы вредоносов выгружать нельзя.
  • Сервис номер 3, "Вечно мёртвый Malwr" — самая популярная песочница, поддержкой которой занимаются авторы Cuckoo Sandbox, нынче снова пала под нагрузкой и пол года как лежит. Единственный сайт, откуда можно было грузить семплы вирусного ПО на анализ бесплатно, не считая этой подборки. Надеюсь на оживление, но прогноз пока не утешительный.
  • Вариант 4, "Поищу самостоятельно" — для тех кто знаком с принципами OSINT и языком поисковых запросов. Берём кусок статического текста с платформы:
    osint
    И гуглим в кавычках, находя все попавшие в индекс песочницы исключая github:
    google osint

Сборка

Итак, теоретическая часть позади, приступаем к практике!

Обновление ОС

Обновляем системные пакеты.

sudo apt update
sudo apt upgrade -y

Зависимости Cuckoo

Устанавливаем зависимости Cuckoo.

sudo apt install python python-pip python-dev libffi-dev libssl-dev libfuzzy-dev -y
sudo apt install python-virtualenv python-setuptools -y
sudo apt install libjpeg-dev zlib1g-dev swig -y
sudo -H pip install -U pip

Virtualbox

Устанавливаем Virtualbox вместе с extpack.

cd /opt
sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian xenial contrib" >> /etc/apt/sources.list.d/virtualbox.list'
sudo wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
sudo apt update && sudo apt install virtualbox-5.2 -y
VBOX_LATEST_VERSION=$(curl http://download.virtualbox.org/virtualbox/LATEST.TXT)
sudo wget http://download.virtualbox.org/virtualbox/${VBOX_LATEST_VERSION}/Oracle_VM_VirtualBox_Extension_Pack-${VBOX_LATEST_VERSION}.vbox-extpack
sudo vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-${VBOX_LATEST_VERSION}.vbox-extpack

Cuckoo Sandbox

Устанавливаем Venv, активируем и ставим Cuckoo через PIP.

sudo adduser cuckoo
sudo usermod -a -G vboxusers cuckoo
cd /home/cuckoo
su cuckoo
virtualenv cuckoo
. /home/cuckoo/cuckoo/bin/activate
pip install -U pip setuptools psycopg2 yara-python weasyprint pycrypto pydeep
easy_install distribute
pip install -U cuckoo
pip install weasyprint==0.36
pip install m2crypto==0.24.0
cuckoo
cuckoo community
deactivate
sudo apt install python-m2crypto
exit

Java для Elasticsearch

Elastic написан на Java, поэтому нам нужно установить Java.

sudo add-apt-repository ppa:webupd8team/java
sudo apt update && sudo apt install oracle-java8-installer -y
sudo bash -c "echo 'JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"' >> /etc/environment"
source /etc/environment

БД

Тут устанавливаем и настраиваем все БД, обратите внимание, переменная "db_passwd" генерирует рандомный пароль к базе Postgres, если хотите задать свой — не забудьте установить его.
Cuckoo использует морально устаревший Elastic 2-й версии, обратите на это внимание и не установите случайно 5.x+ версию.

sudo apt install mongodb -y
sudo apt install postgresql libpq-dev -y
sudo pip install psycopg2
db_passwd=$(date +%s | sha256sum | base64 | head -c 32 ; echo)
echo "CREATE USER cuckoo WITH PASSWORD '$db_passwd';" | sudo -u postgres psql
echo "CREATE DATABASE cuckoo;" | sudo -u postgres psql
echo "GRANT ALL PRIVILEGES ON DATABASE cuckoo to cuckoo;" | sudo -u postgres psql
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
sudo apt update && sudo apt install elasticsearch -y
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo service elasticsearch stop
cd /home/cuckoo/
sudo mkdir /home/cuckoo/ESData
sudo chown root:elasticsearch ESData
sudo chmod 777 /home/cuckoo/ESData
sudo usermod -a -G elasticsearch cuckoo
sudo bash -c "cat >> /etc/elasticsearch/elasticsearch.yml <<DELIM
cluster.name: es-cuckoo
node.name: es-node-n1
node.master: true
node.data: true
bootstrap.mlockall: true
path.data: /home/cuckoo/ESData
network.bind_host: 0.0.0.0
DELIM"
sudo service elasticsearch start
sudo curl -X PUT -d @'/home/cuckoo/.cuckoo/elasticsearch/template.json' 'http://localhost:9200/_template/cuckoo'

Yara + rules

Установим последнюю версию Yara и добавим правила Yara в Cuckoo.

cd /opt
sudo apt install dh-autoreconf flex bison libjansson-dev libmagic-dev -y
sudo wget https://github.com/VirusTotal/yara/archive/v3.7.1.tar.gz
sudo tar -zxf v3.7.1.tar.gz
cd yara-3.6.3/
sudo ./bootstrap.sh
sudo ./configure --with-crypto --enable-cuckoo --enable-magic
sudo make
sudo make install
sudo -H pip install -U yara-python
cd /home/cuckoo/.cuckoo/yara/
su cuckoo
sudo git clone https://github.com/lehuff/cuckoo-yara-rules.git
sudo cp cuckoo-yara-rules/cuckoo-yara-rules.py .
sudo rm -rf cuckoo-yara-rules
sudo python cuckoo-yara-rules.py
sudo chown -R cuckoo:cuckoo /home/cuckoo/.cuckoo/

SSDeep

Устанавливаем SSDeep.

cd /opt
sudo -H pip install -U ssdeep
sudo git clone https://github.com/bunzen/pySSDeep.git
cd pySSDeep
sudo python setup.py build
sudo python setup.py install
cd -

Volatility

Установить Volatility просто, но заставить Cuckoo из venv его увидеть — не очень, ставить — же в venv вместе с Cuckoo — тоже не вариант, он зависимостями меняет версии библиотек Cuckoo. С третей строчки костыль, решающий эту проблему, если у кого есть идея, как это подружить более верным способом — напишите.

sudo apt install pcregrep libpcre++-dev -y
sudo -H pip install -U git+https://github.com/kbandla/pydeep.git
sudo apt install volatility -y
cp -r /usr/lib/python2.7/dist-packages/volatility* /home/cuckoo/cuckoo/lib/python2.7/site-packages
sudo chown cuckoo:cuckoo /home/cuckoo/cuckoo/lib/python2.7/site-packages/*
mv /home/cuckoo/.cuckoo/signatures/windows/volatility_sig.py /home/cuckoo/.cuckoo/signatures/windows/volatility_sig.py.deactivate

TCPDump

Дошли до TCP dump.

sudo apt install tcpdump apparmor-utils -y
sudo aa-disable /usr/sbin/tcpdump
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
sudo chmod +s /usr/sbin/tcpdump

Teserract

Ставится просто, подключается тоже, однако прелести в работе OCR я не заметил.

sudo apt install tesseract-ocr -y

Fonts for PDF

Без этой магии PDF отчёты генерироваться не будут.

sudo -H pip install -U cairocffi
sudo apt install wkhtmltopdf xvfb xfonts-100dpi -y

MitMproxy

Очень полезная библиотека, позволяющая подглядывать в SSL трафик. Обратите внимание, Cuckoo понимает только пакет версии 0.18.2.

sudo apt install libarchive13 libxml2-dev libxslt1-dev -y
sudo -H pip install -U mitmproxy==0.18.2
su cuckoo
cd ~
mitmproxy + ctrl-c
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.p12 /home/cuckoo/.cuckoo/analyzer/windows/bin/cert.p12
sudo chown cuckoo:cuckoo /home/cuckoo/.cuckoo/analyzer/windows/bin/cert.p12
exit

Tor

Тут всё достаточно просто.

sudo apt install tor -y
sudo sh -c 'echo TransPort 192.168.56.1:9040 >> /etc/tor/torrc'
sudo sh -c 'echo DNSPort 192.168.56.1:5353 >> /etc/tor/torrc'

Suricata

Изначально я хотел написать что и где в конфиге надо править, но к моменту, когда я смог побороть Suricata и убрать все огрехи работы, правок в конфиг было внесено немало, а задокументировано — 0, поэтому публикую конфиг целиком. Тем более оригинальный файл с правилами останется нетронутым.

sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update && sudo apt install suricata -y
echo "alert http any any -> any any (msg:"FILE store all"; filestore; noalert; sid:15; rev:1;)"  | sudo tee /etc/suricata/rules/cuckoo.rules
sudo touch /etc/suricata/suricata-cuckoo.yaml

/etc/suricata/suricata-cuckoo.yaml

%YAML 1.1
---
vars:
  address-groups:
    HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
    EXTERNAL_NET: "any"
    HTTP_SERVERS: "$HOME_NET"
    SMTP_SERVERS: "$HOME_NET"
    SQL_SERVERS: "$HOME_NET"
    DNS_SERVERS: "$HOME_NET"
    TELNET_SERVERS: "$HOME_NET"
    AIM_SERVERS: "$EXTERNAL_NET"
    DNP3_SERVER: "$HOME_NET"
    DNP3_CLIENT: "$HOME_NET"
    MODBUS_CLIENT: "$HOME_NET"
    MODBUS_SERVER: "$HOME_NET"
    ENIP_CLIENT: "$HOME_NET"
    ENIP_SERVER: "$HOME_NET"
  port-groups:
    HTTP_PORTS: "80"
    SHELLCODE_PORTS: "!80"
    ORACLE_PORTS: 1521
    SSH_PORTS: 22
    DNP3_PORTS: 20000
    MODBUS_PORTS: 502
    FILE_DATA_PORTS: "[$HTTP_PORTS,110,143]"
    FTP_PORTS: 21
default-rule-path: /etc/suricata/rules
rule-files:
 - botcc.rules
 - ciarmy.rules
 - compromised.rules
 - drop.rules
 - dshield.rules
 - emerging-attack_response.rules
 - emerging-chat.rules
 - emerging-current_events.rules
 - emerging-dns.rules
 - emerging-dos.rules
 - emerging-exploit.rules
 - emerging-ftp.rules
 - emerging-imap.rules
 - emerging-malware.rules
 - emerging-misc.rules
 - emerging-mobile_malware.rules
 - emerging-netbios.rules
 - emerging-p2p.rules
 - emerging-policy.rules
 - emerging-pop3.rules
 - emerging-rpc.rules
 - emerging-scan.rules
 - emerging-smtp.rules
 - emerging-snmp.rules
 - emerging-sql.rules
 - emerging-telnet.rules
 - emerging-tftp.rules
 - emerging-trojan.rules
 - emerging-user_agents.rules
 - emerging-voip.rules
 - emerging-web_client.rules
 - emerging-web_server.rules
 - emerging-worm.rules
 - tor.rules
 - http-events.rules
 - smtp-events.rules
 - dns-events.rules
 - tls-events.rules
classification-file: /etc/suricata/classification.config
reference-config-file: /etc/suricata/reference.config
default-log-dir: /var/log/suricata/
stats:
  enabled: yes
  interval: 8
outputs:
  - fast:
      enabled: no
      filename: fast.log
      append: yes
  - eve-log:
      enabled: yes
      filetype: regular
      filename: eve.json
      types:
        - alert:
            metadata: yes
            tagged-packets: yes
            xff:
              enabled: no
              mode: extra-data
              deployment: reverse
              header: X-Forwarded-For
        - http:
            extended: yes
        - dns:
            query: yes
            answer: yes
        - tls:
            extended: yes
        - files:
            force-magic: no
        - smtp:
        - ssh
        - stats:
            totals: yes
            threads: no
            deltas: no=
        - flow
  - unified2-alert:
      enabled: no
      filename: unified2.alert
      xff:
        enabled: no
        mode: extra-data
        deployment: reverse
        header: X-Forwarded-For
  - http-log:
      enabled: no
      filename: http.log
      append: yes
  - tls-log:
      enabled: no
      filename: tls.log
      append: yes
  - tls-store:
      enabled: no
  - dns-log:
      enabled: no
      filename: dns.log
      append: yes
  - pcap-log:
      enabled: no
      filename: log.pcap
      limit: 1000mb
      max-files: 2000
      mode: normal
      use-stream-depth: no
      honor-pass-rules: no
  - alert-debug:
      enabled: no
      filename: alert-debug.log
      append: yes
  - alert-prelude:
      enabled: no
      profile: suricata
      log-packet-content: no
      log-packet-header: yes
  - stats:
      enabled: yes
      filename: stats.log
      totals: yes
      threads: no
  - syslog:
      enabled: no
      facility: local5
  - drop:
      enabled: yes
      filename: drop.log
      append: yes
  - file-store:
      enabled: yes
      log-dir: files
      force-magic: no
      force-filestore: no
  - file-log:
      enabled: yes
      filename: files-json.log
      append: yes
      force-magic: no
  - tcp-data:
      enabled: no
      type: file
      filename: tcp-data.log
  - http-body-data:
      enabled: no
      type: file
      filename: http-data.log
  - lua:
      enabled: no
      scripts:
logging:
  default-log-level: notice

  default-output-filter:

  outputs:
  - console:
      enabled: yes
  - file:
      enabled: yes
      level: info
      filename: /var/log/suricata/suricata.log
  - syslog:
      enabled: no
      facility: local5
      format: "[%i] <%d> -- "
af-packet:
  - interface: eth0
    cluster-id: 99
    cluster-type: cluster_flow
    defrag: yes
  - interface: default

pcap:
  - interface: eth0
  - interface: default

pcap-file:
  checksum-checks: auto

app-layer:
  protocols:
    tls:
      enabled: yes
      detection-ports:
        dp: 443
    dcerpc:
      enabled: yes
    ftp:
      enabled: yes
    ssh:
      enabled: yes
    smtp:
      enabled: yes
      mime:
        decode-mime: yes
        decode-base64: yes
        decode-quoted-printable: yes
        header-value-depth: 2000
        extract-urls: yes
        body-md5: no
      inspected-tracker:
        content-limit: 100000
        content-inspect-min-size: 32768
        content-inspect-window: 4096
    imap:
      enabled: detection-only
    msn:
      enabled: detection-only
    smb:
      enabled: yes
      detection-ports:
        dp: 139, 445
    nfs:
      enabled: no
    dns:
      tcp:
        enabled: yes
        detection-ports:
          dp: 53
      udp:
        enabled: yes
        detection-ports:
          dp: 53
    http:
      enabled: yes
      request-body-limit: 0
      response-body-limit: 0
      libhtp:
         default-config:
           personality: IDS
           request-body-limit: 100kb
           response-body-limit: 100kb
           request-body-minimal-inspect-size: 32kb
           request-body-inspect-window: 4kb
           response-body-minimal-inspect-size: 40kb
           response-body-inspect-window: 16kb
           response-body-decompress-layer-limit: 2
           http-body-inline: auto
           double-decode-path: no
           double-decode-query: no
         server-config:
    modbus:
      enabled: no
      detection-ports:
        dp: 502
      stream-depth: 0
    dnp3:
      enabled: no
      detection-ports:
        dp: 20000
    enip:
      enabled: no
      detection-ports:
        dp: 44818
        sp: 44818
    ntp:
      enabled: no
asn1-max-frames: 256
coredump:
  max-dump: unlimited
host-mode: auto
unix-command:
  enabled: yes
  filename: custom.socket
legacy:
  uricontent: enabled
engine-analysis:
  rules-fast-pattern: yes
  rules: yes
pcre:
  match-limit: 3500
  match-limit-recursion: 1500
host-os-policy:
  windows: [0.0.0.0/0]
  bsd: []
  bsd-right: []
  old-linux: []
  linux: []
  old-solaris: []
  solaris: []
  hpux10: []
  hpux11: []
  irix: []
  macos: []
  vista: []
  windows2k3: []
defrag:
  memcap: 32mb
  hash-size: 65536
  trackers: 65535
  max-frags: 65535
  prealloc: yes
  timeout: 60
flow:
  memcap: 128mb
  hash-size: 65536
  prealloc: 10000
  emergency-recovery: 30
vlan:
  use-for-tracking: true
flow-timeouts:
  default:
    new: 30
    established: 300
    closed: 0
    bypassed: 100
    emergency-new: 10
    emergency-established: 100
    emergency-closed: 0
    emergency-bypassed: 50
  tcp:
    new: 60
    established: 600
    closed: 60
    bypassed: 100
    emergency-new: 5
    emergency-established: 100
    emergency-closed: 10
    emergency-bypassed: 50
  udp:
    new: 30
    established: 300
    bypassed: 100
    emergency-new: 10
    emergency-established: 100
    emergency-bypassed: 50
  icmp:
    new: 30
    established: 300
    bypassed: 100
    emergency-new: 10
    emergency-established: 100
    emergency-bypassed: 50
stream:
  memcap: 64mb
  checksum-validation: yes
  inline: auto
  reassembly:
    memcap: 256mb
    depth: 0
    toserver-chunk-size: 2560
    toclient-chunk-size: 2560
    randomize-chunk-size: yes
 host:
  hash-size: 4096
  prealloc: 1000
  memcap: 32mb
decoder:
  teredo:
    enabled: true
detect:
  profile: medium
  custom-values:
    toclient-groups: 3
    toserver-groups: 25
  sgh-mpm-context: auto
  inspection-recursion-limit: 3000
  prefilter:
    default: mpm
  grouping:
  profiling:
    grouping:
      dump-to-disk: false
      include-rules: false
      include-mpm-stats: false
mpm-algo: auto
spm-algo: auto
threading:
  set-cpu-affinity: no
  cpu-affinity:
    - management-cpu-set:
        cpu: [ 0 ]
    - receive-cpu-set:
        cpu: [ 0 ]
    - worker-cpu-set:
        cpu: [ "all" ]
        mode: "exclusive"
        prio:
          low: [ 0 ]
          medium: [ "1-2" ]
          high: [ 3 ]
          default: "medium"
  detect-thread-ratio: 1.0
luajit:
  states: 128
profiling:
  rules:
    enabled: yes
    filename: rule_perf.log
    append: yes
    limit: 10
    json: yes
  keywords:
    enabled: yes
    filename: keyword_perf.log
    append: yes
  rulegroups:
    enabled: yes
    filename: rule_group_perf.log
    append: yes
  packets:
    enabled: yes
    filename: packet_stats.log
    append: yes
    csv:
      enabled: no
      filename: packet_stats.csv
  locks:
    enabled: no
    filename: lock_stats.log
    append: yes
  pcap-log:
    enabled: no
    filename: pcaplog_stats.log
    append: yes
nfq:
nflog:
  - group: 2
    buffer-size: 18432
  - group: default
    qthreshold: 1
    qtimeout: 100
    max-size: 20000
capture:
netmap:
 - interface: eth2
 - interface: default
pfring:
  - interface: eth0
    threads: 1
    cluster-id: 99
    cluster-type: cluster_flow
  - interface: default
ipfw:
napatech:
    hba: -1
    use-all-streams: yes
    streams: ["0-3"]
mpipe:
  load-balance: dynamic
  iqueue-packets: 2048
  inputs:
  - interface: xgbe2
  - interface: xgbe3
  - interface: xgbe4
  stack:
    size128: 0
    size256: 9
    size512: 0
    size1024: 0
    size1664: 7
    size4096: 0
    size10386: 0
    size16384: 0
cuda:
  mpm:
    data-buffer-size-min-limit: 0
    data-buffer-size-max-limit: 1500
    cudabuffer-buffer-size: 500mb
    gpu-transfer-size: 50mb
    batching-timeout: 2000
    device-id: 0
    cuda-streams: 2

И напоследок, поправим права.

sudo mkdir /var/run/suricata
sudo chown cuckoo:cuckoo /var/run/suricata
sudo chown -R cuckoo:cuckoo /etc/suricata
sudo chown -R cuckoo:cuckoo /var/log/suricata
sudo touch /etc/suricata/threshold.config

ETupdate

Настраиваем автообновление Community сигнатур Suricata.

cd /opt
sudo git clone https://github.com/seanthegeek/etupdate.git
sudo cp etupdate/etupdate /usr/sbin
sudo /usr/sbin/etupdate -V
sudo crontab -e
0 0 * * * /usr/sbin/etupdate -V

Snort

Добавлять правила в него не стал, так как больше доверяю Suricata.

sudo apt install snort -y

При конфигурации указываем дефолтный интерфейс и подсеть 192.168.0.0/16.

sudo chown -R cuckoo:cuckoo /etc/snort/
sudo chown -R cuckoo:cuckoo /var/log/snort/

VMcloak и Windows 7 SP1 X64

Удобнейшая программа для автоматического развёртывания ВМ Cuckoo. Существенно сокрашает время, однако автор переписывал её логику работы и конечно-же не обновил документацию. Советую посмотреть либо код утилиты на GitHub, либо почитать старую документацию, чтобы понять все прелести работы с VMcloak и разобраться с тем, что мы будем делать дальше.
Самый внимательный читатель заметит, что официальный репозиторий проекта https://github.com/jbremer/vmcloak отличается от того, что использован ниже в скрипте https://github.com/tweemeterjop/vmcloak. По отношению к форку, оригинал не умел включать vRDE — реализацию RDP протокола в настраиваемой гостевой ВМ.
Наверное правильным будет вариант — взять оригинальный код и допилить в него vRDE, однако если форк не так далеко поменялся от отригинала — можно использовать форк, как делаю я ниже. На момент настройки репозиторий и его форк практически не имели отличий.
По опыту своему скажу — vRDE нужен, бывают use cases, когда документ целевой атаки защищён паролем Word и пароль надо ввести, чтобы вирус отработал в песочнице, либо вирус склеен с установщиком, который надо проинсталлить. Без vRDE это сделать проблематично. Да и для дальнейшей настройки ОС vRDE нам тоже понадобится.

cd /opt
sudo apt install libyaml-dev libpython2.7-dev genisoimage -y
sudo git clone -b vrde https://github.com/tweemeterjop/vmcloak.git
cd vmcloak/
sudo cp /home/cuckoo/.cuckoo/agent/agent.py vmcloak/data/bootstrap/
sudo -H pip install -r requirements.txt
sudo python setup.py install
cd ..
sudo mkdir -p /mnt/win7
sudo mount -o loop,ro ~/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso /mnt/win7/
sudo vmcloak-vboxnet0
sudo vmcloak-iptables 192.168.56.0/24 ens160
cd /home/cuckoo
su cuckoo
vmcloak init --vrde --resolution 1280x1024 --ramsize 4096 --win7_x64 --product professional --cpus 2 win7x64
vmcloak install --vrde win7_x64 python27 pillow adobepdf chrome cuteftp dotnet40 flash java silverlight vcredist wic
vmcloak modify --vrde win7_x64

Настройка Windows 7

После

vmcloak modify --vrde win7_x64

запустится ВМ, подключиться к ней можно по RDP. Если вы работаете с Win10 — не используйте плиточное приложение удалённого рабочего стола, оно впадает в ступор и транс, когда подключение идёт к ВМ без логина и пароля, используйте классическое приложение, там всё ОК.

Следующие пункты моего списка не обязательны, однако, чтобы сократить количество ложных срабатываний и упростить работу вредоносному ПО — рекомендуется отключить (или включить) всё ниже перечисленное. Не лишним будет и установка в гостевую ВМ софта, который используется на работе всеми сотрудниками.

Пример лишних данных в отчёте:

False Positive

Замечу! Всё нижеперечисленное нужно проделать только для Windows 7 SP1 x64, на других ОС действия, возможно, будут другими.

Спустя некоторое время работы с новой песочницей, мой список стал включать следующие пункты:

  • Отключаем Windows Messenger broadcasts on UDP port 1900

    HKEY_LOCAL_MACHINESoftwareMicrosoftDirectPlayNATHelpDPNHUPnP ключ Name: UPnPMode Type: REG_DWORD Value: 2

  • Отключаем проверку драйверов x64, чтобы Cuckoo нормально работала с x64

    cmd — bcdedit.exe /set nointegritychecks ON

  • отключить NCSI

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNlaSvcParametersInternet ключ EnableActiveProbing Type: REG_DWORD Value: 0

  • отключить teredo.ipv6.microsoft.com

    cmd — netsh interface teredo set state disabled

  • отключаем IPv6

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpip6Parameters добавлыяем ключ DWORDDisabled DisabledComponents 8

  • Отключаем в сетевых адаптерах Tredo
  • Отключаем автозагрузку Adobe Reader, Flash player, MS Office
  • Отключаем аптдейт Chrome
  • В chrome://plugins разрешить запуск уязвимого флеша
  • В настройках Chrome разрешить всё в content settings
  • В ветке HKEY_LOCAL_MACHINESOFTWAREPoliciesGoogle удаляем Update
  • Отключаем сервисы FP,UPnP, SSDP
  • Устанавливаем хром браузером по умолчанию
  • Устанавливаем пустую стартовую страницу хрома
  • Отключаем настройки приватности Chrome
  • Устанавливаем FileZilla
  • Отключаем синхронизацию с NTP
  • Отключаем защищенный просмотр office (Data execution prevention mode)
  • Разрешаем автозапуск макросов во всех приложениях в офисе

Последовательность составления собственной инструкции под собственную ОС:

  1. Проверяем легитимный исполняемый файл в песочнице;
  2. Смотрим, где и в каких вкладках появилась лишняя инфа, например, обращение к time.microsoft.com;
  3. Открываем Google и смотрим, как нам это отключать;
  4. Записываем, отключаем.

Добавление VM в Cuckoo

Создаём снапшот свежесконфигурированной гостевой ОС и добавляем в Cuckoo заодно удалив предустановленную ВМ cuckoo1 из конфига.

vmcloak snapshot win7_x64 win7_x64node1 192.168.56.101
. /home/cuckoo/cuckoo/bin/activate
cuckoo machine --add win7x64node1 192.168.56.101 --platform windows --snapshot vmcloak
cuckoo machine --delete cuckoo1
deactivate

Moloch

Наикрутейший инструмент для работы с сетевым трафиком. В отличии от других сетевых анализаторов — ставка в Moloch сделана на инструментарий для аналитика с кучей возможностей, временными шкалами, графами и прочим. Очень сожалею, что узнал о нём так недавно и пользовался до этого менее удобным MalCom. Одно из ключевых преимуществ Moloch — возможность объединить и проанализировать одним разом все сетевые пакеты всех сканирований из Cuckoo. Ну а работа в связке с Elasticsearch позволяет Moloch обрабатывать огромное количество данных.

Вот так выглядит эта красота (скрин из официального репозитория):

Moloch ГШ

Ну и его тоже проинсталлим.

sudo apt install libjson-perl -y
cd /opt
sudo wget https://files.molo.ch/builds/ubuntu-16.04/moloch_0.20.2-2_amd64.deb
sudo dpkg -i moloch_0.20.2-2_amd64.deb
sudo /data/moloch/bin/Configure

Далее необходимо указать интерфейс vboxnet0, логин и пароль Moloch, IP адрес Elasticsearch.

sudo /data/moloch/db/db.pl http://localhost:9200 init
sudo /data/moloch/bin/moloch_add_user.sh cuckoo cuckoo cuckoosandbox --admin

InetSim

Устанавливаем виртуальную локальную сеть, чтобы вирусу не было одиноко в песочнице. Настройки эмулируемых сервисов оставил дефолтные, 18 эмулированных служб получилось, не считая веба.

sudo su
echo "deb http://www.inetsim.org/debian/ binary/" > /etc/apt/sources.list.d/inetsim.list
wget -O - http://www.inetsim.org/inetsim-archive-signing-key.asc | apt-key add -
apt update
apt install inetsim
exit

В конфиге /etc/inetsim/inetsim.conf нужно закомментировать сервисы веба HTTP и HHTPS, чтобы не конфликтовали с Cuckoo:

#start_service http
#start_service https

IRMA

IRMA

C песочницей IRMA не интегрирована из-за проблемы выгрузки отчётов в Elasticsearch. Но это не мешает нам развернуть и протестировать утилиту. IRMA собрана в Vagrant и деплоится автоматически через Ansible строго версии 2.2.1.0.

sudo apt install vagrant -y
cd /opt
sudo wget https://releases.hashicorp.com/vagrant/2.0.2/vagrant_2.0.2_x86_64.deb
sudo dpkg -i vagrant_2.0.2_x86_64.deb
sudo -H pip install -U ansible==2.2.1.0

Загрузим IRMA:

sudo git clone https://github.com/quarkslab/irma
cd irma/ansible

Добавим переадресацию из VM на порт 8080 добавив в файл /opt/irma/ansible/Vagrantfile
строчку 19:

config.vm.network "forwarded_port", guest: 80, host: 8080

И установим IRMA:

sudo vagrant up

HoneyD

HoneyD — старейший и крайне функциональный ханипот. Минус его только в одном — он перестал обновляться несколько лет назад. Навыки поиска годных форков были применены успешно, после чего был найден относительно свежий вариант установки HoneyD через Ansible, которым я и поспешил воспользоваться. В ханипоте я настрил всего один хост, можете сконфигурировать хоть целую подсеть, воспользовавшись официальным мануалом.

cd /opt/
sudo git clone https://github.com/Bifrozt/honeyd-ansible.git
cd honeyd-ansible/
sudo ansible-playbook honeyd.yml
sudo touch /usr/share/honeyd/config.conf

Сохраняем конфиг.

/usr/share/honeyd/config.conf

create default
set default default tcp action filtered
set default default udp action filtered
set default default icmp action filtered

create windows
set windows personality "Microsoft Windows XP Professional SP3"
set windows uptime 1728650
set windows maxfds 35
set windows default tcp action reset
add windows tcp port 135 open
add windows tcp port 139 open
add windows tcp port 445 open
set windows ethernet "08:00:27:81:1d:0c"
bind 192.168.56.103 windows

Веб сервер

Установим Nginx, сгенерируем сертификат и даже включим поддержку http2.

sudo add-apt-repository ppa:nginx/development
sudo apt update
sudo apt install nginx -y
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
sudo -H pip install -U uwsgi
cd /home/cuckoo/
sudo mkdir /var/log/uwsgi/
sudo mkdir /etc/uwsgi
sudo chown cuckoo:cuckoo /var/log/uwsgi/
sudo chown cuckoo:cuckoo /etc/uwsgi/
su cuckoo

Далее добавим конфиг UWSGI.

/etc/uwsgi/cuckoo.ini

[uwsgi]
plugins = python
socket = /tmp/uwsgi.sock
chmod-socket = 664
master = true
processes = 4
virtualenv = /home/cuckoo/cuckoo
module = cuckoo.web.web.wsgi
uid = cuckoo
gid = cuckoo
static-map = /static=/home/cuckoo/cuckoo/local/lib/python2.7/site-packages/cuckoo/web/static
env = CUCKOO_APP=web
env = CUCKOO_CWD=/home/cuckoo/.cuckoo

И конфиг nginx, поменяв IP и название сайта:

/etc/nginx/sites-available/cuckoo-web

upstream _uwsgi_cuckoo_web {
    server unix:/tmp/uwsgi.sock;
}

server {
 listen 80;
 listen [::]:80;

 server_name cuckoo.test.ru;
 return 301 https://10.0.0.3$request_uri;

 server_tokens off;
}

server {
 listen 443 ssl http2;
 listen [::]:443 ssl http2;

 server_name cuckoo.test.ru;

 ssl_certificate /etc/nginx/ssl/nginx.crt;
 ssl_certificate_key /etc/nginx/ssl/nginx.key;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;
 ssl_session_timeout 1d;
 ssl_session_cache shared:SSL:50m;
 ssl_session_tickets off;
 ssl_protocols TLSv1.2;
 ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
 ssl_prefer_server_ciphers on;
 add_header Strict-Transport-Security "max-age=15768000";
 ssl_stapling on;
 ssl_stapling_verify on;

 server_tokens off;

 location / {
    client_max_body_size 1G;
    proxy_redirect off;
    proxy_set_header X-Forwarded-Proto $scheme;
    uwsgi_pass  _uwsgi_cuckoo_web;
    include     uwsgi_params;
    }
}

Теперь добавим пользователя www-data в группу cuckoo и симлинком включим наш конфиг.

sudo adduser www-data cuckoo
sudo ln -s /etc/nginx/sites-available/cuckoo-web /etc/nginx/sites-enabled/
sudo systemctl reload nginx

Конфиги cuckoo

И, наконец, самое главное — объединяем всё собранное в песочницу. Объяснять что тут к чему долго, бессмысленно и 85% параметров интуитивно понятны, предлагаю воспользоваться официальной документацией начиная с 96 страницы, если есть сложности с пониманием некоторых параметров. Либо основное подглядеть в моей прошлой статье. Не самым плохим будет и вариант скопировать и использовать мои файлы приведённые ниже, но на свой страх и риск.

/home/cuckoo/.cuckoo/conf/auxiliary.conf

[sniffer]
enabled = yes
tcpdump = /usr/sbin/tcpdump
bpf = 
[mitm]
enabled = yes
mitmdump = /usr/local/bin/mitmdump
port_base = 50000
script = mitm.py
certificate = bin/cert.p12
[services]
enabled = yes
services = honeyd
timeout = 0
[reboot]
enabled = yes

/home/cuckoo/.cuckoo/conf/cuckoo.conf

[cuckoo]
version_check = yes
delete_original = no
delete_bin_copy = no
machinery = virtualbox
memory_dump = yes
terminate_processes = no
reschedule = no
process_results = yes
max_analysis_count = 0
max_machines_count = 0
max_vmstartup_count = 10
freespace = 1024
tmppath = 
rooter = /tmp/cuckoo-rooter
[feedback]
enabled = no
name = 
company = 
email = 
[resultserver]
ip = 192.168.56.1
port = 2042
force_port = no
upload_max_size = 134217728
[processing]
analysis_size_limit = 134217728
resolve_dns = yes
sort_pcap = yes
[database]
connection = postgresql://cuckoo:Supersecretpassword4habr@localhost:5432/cuckoo
timeout = 60
[timeouts]
default = 120
critical = 60
vm_state = 60

/home/cuckoo/.cuckoo/conf/memory.conf

[basic]
guest_profile = Win7SP1x64
delete_memdump = yes
[malfind]
enabled = yes
filter = yes
[apihooks]
enabled = no
filter = yes
[pslist]
enabled = yes
filter = no
[psxview]
enabled = yes
filter = no
[callbacks]
enabled = yes
filter = no
[idt]
enabled = yes
filter = no
[timers]
enabled = yes
filter = no
[messagehooks]
enabled = no
filter = no
[getsids]
enabled = yes
filter = no
[privs]
enabled = yes
filter = no
[dlllist]
enabled = yes
filter = yes
[handles]
enabled = yes
filter = yes
[ldrmodules]
enabled = yes
filter = yes
[mutantscan]
enabled = yes
filter = yes
[devicetree]
enabled = yes
filter = yes
[svcscan]
enabled = yes
filter = yes
[modscan]
enabled = yes
filter = yes
[yarascan]
enabled = yes
filter = yes
[ssdt]
enabled = yes
filter = yes
[gdt]
enabled = yes
filter = yes
[sockscan]
enabled = yes
filter = no
[netscan]
enabled = no
filter = no
[mask]
enabled = no
pid_generic =

/home/cuckoo/.cuckoo/conf/processing.conf

[analysisinfo]
enabled = yes
[apkinfo]
enabled = no
decompilation_threshold = 5000000
[baseline]
enabled = no
[behavior]
enabled = yes
[buffer]
enabled = yes
[debug]
enabled = yes
[droidmon]
enabled = no
[dropped]
enabled = yes
[dumptls]
enabled = yes
[extracted]
enabled = yes
[googleplay]
enabled = no
android_id = 
google_login = 
google_password = 
[memory]
enabled = yes
[misp]
enabled = no
url = 
apikey = 
maxioc = 100
[network]
enabled = yes
whitelist_dns = no
allowed_dns = 
[procmemory]
enabled = yes
idapro = no
extract_img = no
extract_dll = no
dump_delete = no
[procmon]
enabled = yes
[screenshots]
enabled = yes
tesseract = /usr/bin/tesseract
[snort]
enabled = yes
snort = /usr/sbin/snort
conf = /etc/snort/snort.conf
[static]
enabled = yes
pdf_timeout = 60
[strings]
enabled = yes
[suricata]
enabled = yes
suricata = /usr/bin/suricata
conf = /etc/suricata/suricata-cuckoo.yaml
eve_log =  eve.json
files_log = files-json.log
files_dir = files
socket = 
[targetinfo]
enabled = yes
[virustotal]
enabled = yes
timeout = 60
scan = yes
key = тут ключ virustotal
[irma]
enabled = no
timeout = 300
scan = yes
force = yes
url = http://172.16.1.30

/home/cuckoo/.cuckoo/conf/reporting.conf

[feedback]
enabled = no
[jsondump]
enabled = yes
indent = 4
calls = yes
[singlefile]
enabled = yes
html = no
pdf = yes
[misp]
enabled = no
url = 
apikey = 
mode = maldoc ipaddr hashes url
[mongodb]
enabled = yes
host = 127.0.0.1
port = 27017
db = cuckoo
store_memdump = yes
paginate = 100
username = 
password = 
[elasticsearch]
enabled = yes
hosts = 127.0.0.1
timeout = 300
calls = no
index = cuckoo
index_time_pattern = yearly
cuckoo_node = 
[moloch]
enabled = yes
host = 10.0.0.3:8005
insecure = no
moloch_capture = /data/moloch/bin/moloch-capture
conf = /data/moloch/etc/config.ini
instance = cuckoo
[notification]
enabled = no
url = 
identifier = 
[mattermost]
enabled = no
url = 
myurl = 
username = cuckoo
show_virustotal = no
show_signatures = no
show_urls = no
hash_filename = no
hash_url = no

/home/cuckoo/.cuckoo/conf/routing.conf

[routing]
route = none
internet = ens160
rt_table = main
auto_rt = yes
drop = no
[inetsim]
enabled = yes
server = 192.168.56.1
[tor]
enabled = yes
dnsport = 5353
proxyport = 9040
[vpn]
enabled = no
vpns = vpn0
[vpn0]
name = vpn0
description = Spain, Europe
interface = tun0
rt_table = tun0

/home/cuckoo/.cuckoo/conf/virtualbox.conf

[virtualbox]
mode = headless
path = /usr/bin/VBoxManage
interface = vboxnet0
machines = win7_x64node1
[win7_x64node1]
label = win7_x64node1
platform = windows
ip = 192.168.56.101
snapshot = vmcloak
interface = 
resultserver_ip = 192.168.56.1
resultserver_port = 2042
tags = 
options = 
osprofile = Win7SP1x64
[honeyd]
label = honeyd
platform = linux
ip = 192.168.56.103
tags = service, honeyd
options = nictrace noagent

Автозагрузка Cuckoo и сервисов

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

Установим supervisor и добавим в него конфигурацию автозапуска Cuckoo.

sudo apt install supervisor -y
sudo systemctl stop supervisor

Cоздаём файлы supervisor:

/etc/supervisor/conf.d/vmcloak-internet.conf

[program:vmcloak-vboxnet0]
command=vmcloak-vboxnet0
directory=/usr/local/bin/
[program:vmcloak-ifconfig]
command=vmcloak-iptables 192.168.56.0/24 ens160
directory=/usr/local/bin/
[group:vmcloak-internet]
programs = vmcloak-vboxnet0, vmcloak-ifconfig

/etc/supervisor/conf.d/cuckoo.conf

[program:cuckoo-rooter]
command = /home/cuckoo/cuckoo/bin/cuckoo rooter --sudo
autorestart = true
[program:cuckoo-daemon]
command = /home/cuckoo/cuckoo/bin/cuckoo -d -m 10000
user = cuckoo
startsecs = 30
autorestart = true
[program:cuckoo-process]
command = /home/cuckoo/cuckoo/bin/cuckoo process p%(process_num)d
process_name = cuckoo-process_%(process_num)d
numprocs = 4
user = cuckoo
autorestart = true
[group:cuckoo]
programs = cuckoo-rooter, cuckoo-daemon, cuckoo-process
[program:distributed]
command = /home/cuckoo/cuckoo/bin/python -m cuckoo.distributed.worker
user = cuckoo
autostart = false
autorestart = true
environment = CUCKOO_APP="worker",CUCKOO_CWD="/home/cuckoo/.cuckoo"

/etc/supervisor/conf.d/uwsgi.conf

[program:uwsgi]
user = cuckoo
directory = /usr/bin
command = bash -c 'sleep 5 && uwsgi --ini /etc/uwsgi/cuckoo.ini'
autorestart = true
stderr_logfile = /var/log/uwsgi/uwsgi-err.log
stdout_logfile = /var/log/uwsgi/uwsgi-out.log
stopsignal = QUIT

И применяем:

sudo systemctl restart supervisor
sudo supervisorctl -c /etc/supervisor/supervisord.conf reload

Создаём скрипт для запуска остальных сервисов (можно было и через supervisor настроить, но была какая-то бага, не давшая мне применить то элегантное решение):

/opt/serv.sh

sleep 30
sudo systemctl start molochcapture.service
sudo systemctl start molochviewer.service
sudo inetsim
cd /opt/irma/ansible/
sudo vagrant up
sudo honeyd -f /usr/share/honeyd/config.conf -i vboxnet0

И добавляем в крон:

sudo chmod +x serv.sh
sudo crontab -e 
@reboot /bin/sh /opt/serv.sh

Есть ли жизнь после кукушки? или "Собрал кукушку! А дальше что делать?"

Собрали с нуля на работе новый ИБ сервис и не знаете что делать?
Самый простой ответ, когда кукушка собрана — надо ручками анализировать найденное подозрительное ПО и быть молодцом.
Для небольшой конторы это вполне приемлемое решение, для студента ИБ ВУЗа — очень приемлемое. А вот для компаний побольше, увы, нет. И скорее всего данным вопросом задаются люди из компаний побольше.
Мой вам совет — выстраивайте с нуля или модернизируйте бизнес-процесс мониторинга и реагирования на инциденты информационной безопасности доводя обработку инцидентов до полного автоматизма. Это самый прямой путь к улучшению скорости и качества работы департамента ИБ или групп ИБ, следовательно и к сокращению издержек, снижению рисков.

Вот самый минимум для старта — всего 3 класса ПО и почти всё можно найти с открытым кодом:

  1. ИБ системы. То, что генерирует или собирает данные, например, Cuckoo Sandbox, IDS, UEBA, USM, SIEM и так далее;
  2. Системы реагирования на инциденты (Incident Response Platform, IRP);
  3. Системы киберразведки. (Threat intelligense Platform, TIP).

Одна из лучших систем ИБ с открытым кодом, которая поражает меня своей простотой, удобством и функциональными возможностями — IRP стек TheHive Project. Сам стек состоит из нескольких элементов, нас интересуют 2.

  1. TheHive — платформа реагирования на инциденты.
  2. Cortex — система обогащения данных по инцидентам.

TheHive Project stack.
TheHive

TheHive — платформа реагирования на инциденты, имеющая под капотом внушительную архитектуру и поразительную гибкость, позволяющую подстроить процесс реагирования на инциденты под любой уже устоявшийся бизнес-процесс в компании. TheHive создана для управления инцидентами на всём жизненном цикле. Каждый инцидент (case) делится на таски, например, кейс "DDoS сайта" делится на таски:

  • "Определить уровень, L7 или канал забивают?"
  • "Сменить IP приложения"
  • "Маршрутизация в blackhole"

По каждому таску пишется отчёт, каждый таск назначен персонально на ответственного, а когда таск закрыт — директор подразделения ИБ решает, можно или нельзя этой информацией делиться с другим офисом компании, согласно правилам TLP или ещё с кем.

TheHive UI.
TheHive UI

В TheHive поступают данные, из любых систем, посредством API TheHive4Py, например, из SIEM, либо вбиваются безопасником вручную. У каждого инцидента есть важная составляющая — индикаторы компрометации. Это ссылки, IP, домены, семплы вредоносных файлов, хэши, названия процессов и так далее. По сути то, что безопасник счёл угрозой. И вот тут появляется второй элемент стека — Cortex. Он, используя API десятков сервисов (коммерческих и не очень) обогащает данные инцидента.
Вот примерный кейс — антивирус на рабочем компьютере находит подозрительный файл, безопасник вносит файл в TheHive и регистрирует инцидент (Case). Инцидент делится на задачи (Tasks), например, "Отключить АРМ от сети", "Проверить рабочую почту Петрова" и так далее. И вот пока этими задачами занимается сотрудник ИТ, аналитик ИБ с помощью Cortex определит количество антивирусов обнаруживших файл на VirusTotal, вредоносную компанию, в которой файл учувствовала и попал в пульс AlienVault OTX, точную дату вредоносной компании, метаданные файла, отправит файл в Cuckoo Sandbox и осуществит ещё 8-10 проверок. Нажав при этом одну кнопку. Да-да, всего одну кнопку. А Cortex сделает всё остальное и сам добавит данные в TheHive.

MISP
MISP

Данные по закрытым подтверждённым инцидентам из TheHive и Cuckoo попадают в MISP и сразу отправляются в территориально удалённые подразделения компании, где происходит превентивная блокировка индикаторов компрометации в системах защиты информации: на Firewall IP адрес управляющего сервера вируса, на рабочей станции — блокировка файла по хешу антивирусом.
Кроме того, у вас остаётся структурированная база всех инцидентов, семплы всех вредоносных файлов, и в разы более подробная информация об инциденте, собранная моментально. А встроенные в TheHive механизмы метрик позволят анализировать работу групп мониторинга и реагирования на инциденты обозначив им в последствии справедливый KPI.

MISP, ко всему прочему, имеет 47 предустановленных фидов, включение которых позволяет получать индикаторы компрометаций от других CERT, эти индикаторы можно проверять в логах уже имеющихся систем ИБ и ИТ. Например в MISP попал домен, а скрипт, который сделал сисадмин компании — проверяет все ссылки с корпоративного Proxy в MISP, и в случае совпадения — отключает от сети пользователя и угроза может быть предотвращена даже до заражения пользователя.
И вишенка на торте: всё перечисленное выше ПО — open source, который дружит друг с другом, хорошо документирован и умеет работать с Cuckoo Sandbox. Красота, не правда-ли?

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

Полезные ссылки

В этом разделе далеко не все полезные ссылки, выписывал в этот список то, что пригодилось в работе, большую часть я знал по памяти или из опыта, поэтому если есть чем дополнить — пишите в ЛС.

Автор: Libert

Источник

Поделиться