Специалистам компьютерной криминалистики часто приходится исследовать вредоносные программы, анализировать взаимодействие вирусов с операционной системой и с сетью. В этой статье я покажу, как создать виртуальную лабораторию (стенд) для анализа вредоносных программ.
Еще по теме: Где скачать вирусы для изучения
Создание лаборатории для анализа вредоносных программ
Для создания виртуальной лаборатории нам понадобится:
- Kali Linux или другой Linux-дистрибутив.
- Операционная система Windows.
- VMware Workstation Pro.
- FLARE VM.
- Inetsim.
- Ida Pro.
- Burp Suite.
Так выглядит лично мой набор. Вы можете добавить свой инструментарий.
Лаборатория для анализа вредоносных файлов будет работать на двух виртуальных машинах c IP-адресам:
- 10.10.10.1 (Kali с установленным Inetsim)
- 10.10.10.2 (Windows 10 с установленным программным обеспечением для реверс‑инжиниринга), находящихся в изолированной сети.
На виртуалке Kali будут работать разные интернет‑службы, а на виртуалке Windows мы будем анализировать малварь.
Создавать лабораторию будем в несколько этапов:
- Этап 1: Установка VMware, создание виртуальной машины из образа Kali Linux и Windows (я использую Kali Linux 2019 и Windows 10, но вы можете использовать ОС посвежее).
- Этап 2: Установка необходимого софта на виртуалку Kali Linux.
- Этап 3: Установка необходимого софта на виртуалку Windows 10.
- Этап 4: Настройка изолированной виртуальной сети.
- Этап 5: Настройка инструмента Inetsim.
- Этап 6: Тестирование работоспособности лаборатории для анализа вирусов.
Установка Inetsim
По умолчанию в Kali уже есть Inetsim, но, если вы используете другую ОС на базе ядра Linux, тогда простой процесс установки описан в документации. Достаточно прочитать инструкцию для загрузки пакета Inetsim при помощи утилиты apt либо dpkg.
Установка необходимого ПО на виртуальную машину Windows
При анализе вредоносных файлов надо иметь под рукой подходящий софт. Я использую FLARE-VM — сборник инструментов для статического и динамического анализа вредоносных программ.
До установки необходимо разрешить виртуалке с Windows подключаться к сети, а сам процесс выполняется в несколько шагов.
Шаг 1: Загрузка файлов из репозитория flare-vm:
1 |
git clone https://github.com/mandiant/flare-vm.git |
Шаг 2: Запуск PowerShell от имени администратора.
Шаг 3: Разблокирование установочного файла:
1 |
Unblock-File .\install.ps1 |
Шаг 4: Включение выполнение скрипта:
1 |
Set-ExecutionPolicy Unrestricted |
Шаг 5: Выполнение сценария установщика:
1 |
.\install.ps1 |
Подробнее об установке читайте в репозитории. После завершения установки на рабочем столе будет создана папка FLARE, в которой будет находится отсортированный по категориям сборник утилит.
Так, в папке Debuggers будет набор отладчиков, в каталоге PE — инструментарий для анализа PE-файлов, позволяющий выявлять компиляторы, упаковщики или крипторы, в директории Disassemblers, соответственно, хранятся инструменты для дизассемблирования.
В комплекте поставки есть также бесплатная версия IDA, но я рекомендую купить лицензию. Также для разработки YARA-правил стоит установить YARA Editor.
Многие вредоносные программы умеют определять, что их пытаются запустить в виртуальной среде, и сразу же прекращают свою работу. Чтобы это предотвратить, необходимо настроить виртуалку соответствующим образом.
Вредонос использует различные методы идентификации виртуалок: проверку идентификатора CPUID, проверку известных MAC-адресов, перечисление имен процессов для обнаружения виртуальной машины, а также проверку ключей реестра. Способы защиты от всех этих методов описаны здесь.
Настройка изолированной виртуальной сети
После настройки виртуальных машин необходимо создать изолированную сеть, которая будет связывать две наших виртуалки. Открываем вкладку каждой виртуальной машины, переходим к разделу VM—> Settings —> Network Adapter и создаем LAN Segment.
Настроим интерфейс на Kali, установив IP-адрес 10.10.10.1, маска сети 24.
Настроим интерфейс для Windows 10: IP-адрес 10.10.10.2, маска 255.255.255.0, основной шлюз 10.10.10.1, предпочитаемый DNS-сервер 10.10.10.1.
Проверим доступность второй машины в нашей виртуальной сети:
1 |
ping 10.10.10.1 |
Настройка ПО Inetsim
Файл конфигурации Inetsim лежит здесь:
1 |
/etc/inetsim/inetsim.conf |
Открываем его, для настройки программы.
По умолчанию Inetsim прослушивает только localhost. Сделаем его доступным для всех машин нашей виртуальной сети. Для этого в конфиге найдем строку service_bind_address и установим значение 0.0.0.0.
Настройка службы DNS
Установим DNS-порт 53 и настроим DNS таким образом, чтобы любое доменное имя разрешалось в 10.10.10.1.
Также есть возможность настройки статических DNS-записей.
Если в качестве операционной системы используется Ubuntu, необходимо отключить локальный DNS-сервер, который включен по умолчанию. Для этого используется такая команда:
1 $ sudo systemctl disable systemd-resolved.service
Настройка службы HTTP
Устанавливаем порт прослушивания 80 и на всякий случай поменяем версию HTTP.
Настройка службы HTTPS
В Inetsim поддержка SSL очень ограниченна и не позволяет генерировать сертификаты для каждого хоста на лету. Она имеет только один сертификат для хоста inetsim.org. Для корректной настройки SSL надо использовать Burp Suite на порте 443 в качестве прозрачного прокси. Для этого в конфигурации inetsim.conf устанавливаем порт 8443 для службы HTTPS.
Настройка Burp Suite в качестве прозрачного прокси-сервера
Переходим на вкладку Proxy —> Options и устанавливаем порт слушателя 443 для всех интерфейсов.
На вкладке Request handling указываем, на какой хост перенаправлять HTTPS-трафик. Мы будем перекидывать его на 10.10.10.1 (IP-адрес Inetsim) и порт 8443 (порт службы HTTPS, установленный в конфигурации Inetsim) и обязательно установим соответствующий флажок для поддержки прозрачного прокси.
Следующим этапом нужно установить сертификат Burp Suite на Windows-машину. Для этого создаем прокси на порте 8080, чтобы зайти по HTTP и установить сертификат на хост.
Правильные настройки прокси Burp Suite выглядят так:
На Windows 10 запускаем Internet Explorer от имени администратора и переходим по адресу:
1 |
http://10.10.10.1:8080 |
Нажимаем надпись CA Certificate и загружаем сертификат.
Устанавливаем сертификат для текущего пользователя и локального компьютера в хранилище доверенных корневых сертификатов.
Настройка маршрутизации
На виртуальной машине с Windows необходимо создать маршрут, который будет направлять весь сетевой трафик на IP-адрес Inetsim (10.10.10.1). Запустим PowerShell от имени администратора и выполним следующую команду:
1 |
PS C:\Windows\System32> route ADD 0.0.0.0 MASK 255.255.255.255 10.10.10.1 |
На Kali Linux с установленным Inetsim перенаправим поступающий трафик на интерфейс eth0 (10.10.10.1):
1 |
root@kali:~# iptables -t nat -A PREROUTING -i eth0 -j REDIRECT |
Тестирование работоспособности
Запустим Inetsim с помощью команды:
1 |
root@kali:~# inetsim |
Теперь пропингуем любой адрес.
Проверим работоспособность по протоколу HTTPS: для этого переходим на любой сайт, поддерживающий этот протокол, например https://yandex.ru.
В ответе видим заглушку Inetsim. Проверим, какие данные получены в Burp Suite.
На рисунке выше виден заголовок запроса, в котором обнаружен GET-запрос к хосту yandex.ru с идентификационной строкой клиентского приложения (User-Agent) Mozilla/5.0. В случае POST-запроса ниже заголовка можно увидеть полезную нагрузку.
Возможности Inetsim
Необходимо сказать несколько слов о файлах‑заглушках Inetsim. Как видно из рисунка выше, ответом от Inetsim служит страничка по умолчанию. Эти странички‑заглушки рассортированы по протоколам и хранятся в папке:
1 |
/var/lib/inetsim/ |
В файле конфигурации inetsim.conf список файлов‑заглушек выглядит следующим образом.
Многие вирусы и другие вредоносные файлы, прежде чем начать сетевое взаимодействие с управляющим сервером, проверяют подключение к интернету. Данная проверка основывается на уровне операционной системы. Для этих целей в Windows присутствует компонент NCSI, который сигнализирует пользователю и службам о доступности выхода в интернет.
Алгоритмы проверки немного различаются в зависимости от версии операционной системы. В Windows 7 компонент посылает HTTP-запрос по адресу http://www.msftncsi.com/ncsi.txt. Расположенный по этому адресу текстовый файл содержит строку Microsoft NCSI.
Далее проверяется работоспособность службы DNS, для чего NCSI пытается разрешить в IP-адрес 131.107.255.255 имя dns.msftncsi.com.
Для Windows 10 на запрос http://www.msftconnecttest.com/connecttest.txt должен поступить ответ, содержащий строку Microsoft Connect Test. Тогда операционная система считает, что доступ в интернет присутствует.
Для успешного прохождения этого теста необходимо в файл /var/lib/inetsim/http/fakefiles/sample.txt добавить строку Microsoft NCSI либо Microsoft Connect Test, а в параметре dns_static файла inetsim.conf указать следующую строку:
1 |
dns.msftncsi.com 131.107.255.255 |
Также в Inetsim имеется собственный веб‑сервер, файлы которого расположены в каталоге /var/lib/inetsim/http/wwroot. Но прежде, чем работать с веб‑сервером, необходимо в файле конфигурации inetsim.conf установить параметр http_fakemode no или https_fakemode no.
Inetsim сохраняет файлы отчетов — это текстовые файлы, содержащие информацию о попытках сетевого взаимодействия. Все отчеты записываются в папку /var/log/inetsim, данные post — в /var/lib/inetsim.
А как в такой лаборатории исследовать малварь, разработанную под Linux? Можно добавить еще одну виртуальную Linux-машину и туда установить дополнительный софт, но правильный подход — использовать Ida Pro и удаленно отлаживать вредоносный файл.
Заключение
Мы собрали лабораторию для анализа вредоносных файлов, в которой настроили эмуляцию интернет‑ресурсов и установили необходимое программное обеспечение для статического и динамического анализа малвари.
В следующей статье я расскажу, как, используя эту лабораторию, исследовать вредоносные файлы, выявлять сетевое взаимодействие и создавать собственные сигнатуры для обнаружения модуля в сетевом трафике и в файловой системе.
Еще по теме: Форензик кейс взлома серверов Linux