• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Динамический анализ файлов VirtualBox+Python

Pernat1y

CPU register
Пользователь
Регистрация
19.04.2008
Сообщения
1 732
Решения
1
Реакции
1 293
Гарант сделки
1
Депозит
0.0002
Шаг нулевой. Идея.
В один прекрасный момент у меня назрела необходимость в организации тестирования софта. Автоматизации ради и был запилен данный скрипт на Питоне.
Disclaimer. Полностью готового решения для организации своего сервиса, типа dyncheck, в статье не будет. Также просьба учесть, что скрипт находится в ранней стадии разработки и в нём могут быть есть баги.


Шаг первый. Выбираем софт для виртуализации.
Тут вариантов не очень много: VMware Workstation Pro либо Oracle VirtualBox.

Выбор пал на VirtualBox, ибо:
- Бесплатную версию можно использовать в коммерческих целях
- Умеет снапшоты (бесплатный VMWare Workstation Player - нет)
- Во многих линуксах ставится/обновляется через пакетный менеджер
- Значительно удобнее управляется через консоль


Шаг второй. Выбираем способ автоматизации.
Управлять зоопарком будем при помощи Python. Причин для выбора языка было несколько:
1. Он довольно простой :)
2. Хорошая переносимость - скрипт будет работает и на Windows и на Linux.

Управлять VirtualBox’ом можно несколькими способами:
  • VirtualBox SDK (есть биндинги под несколько языков, в том числе и Python)
  • VirtualBox COM Interface
  • VBoxManage (консольная утилита)
Я выбрал последний, опять-же, из-за универсальности - результат можно запускать на чистом Питоне без дополнительных модулей, плюс совместимость со всеми поддерживаемыми ОС.


Шаг третий. Подготовка хоста.
Тип ОС на хосте значения не имеет. Работать будет как на Windows, так и на Linux (подойдёт и консоль без графики).
Потенциально должно работать и на OS X - проверить нет возможности.

  1. Ставим основной софт
    • VirtualBox. Крайне желательно использовать последнюю версию и своевременно её обновлять.
    • Python 3.7 или более новый.
  2. Устанавливаем гостевую(-ые) ОС. Рассказывать как это делать я не буду - туториалов в интернете предостаточно.
  3. Настраиваем гостевую ОС
    • Ставим гостевые дополнения VirtualBox Guest Additions. Они обязательны для манипуляций с гостевой ОС.
    • Создаём пользователей.
    • Выключаем обновления.
    • Ставим нескучные обои.
    • Ставим дополнительный софт для анализа (Wireshark, софт Sysinternals, .net framework, Java, MS Office, etc).
  4. Делаем снапшот ОС (можно выключенной).
    • Если планируется запускать несколько задач параллельно, то клонируем/устанавливаем ВМ нужное количество раз.
    • Ставим антивирусы, на которых будем проверять наш зоопарк. Последовательность простая:
      Ставим АВ -> Делаем снапшот (например, 'av1') -> откатываемся на чистый снапшот. Повторяем действие для каждого АВ.
      ВАЖНО. Снапшоты в данном шаге нужно делать в онлайне, иначе при запуске ВМ нужно будет ждать загрузки ОС (что значительно дольше, чем восстановление "живого" снапшота).
В результате получается как-то так:
virtualbox_snapshots.png



Использование скрипта
Все параметры передаются скрипту через командную строку.
Обязательные параметры:
  • file - путь к файлу для анализа
  • --vms w10_x64 w10_x86 - список ВМ
  • --snapshots av1 av2 av3 - список снапшотов
Пример:
Код:
python demo.py \
    putty.exe \ 
    --vms w10_x64 w10_x86 \
    --snapshots all

Дополнительные параметры:
  • --vboxmanage vboxmanage - путь к исполныемому файлу vboxmanage.
  • --timeout 60 - таймаут для анализа файла, секунд.
  • --info 1 - показывать/скрывать информацию о файле (sha256 и ссылки на VirusTotal/Google). Значения: 1, 0.
  • --ui gui - запускать ВМ с графикой или без. Значения: 'gui', 'headless'.
  • --login user - логин для гостевой ОС.
  • --password 12345678 - пароль для гостевой ОС.
  • --remote_folder desktop - директория, куда класть файл. Значения: 'desktop', 'downloads', 'documents', 'temp'.
  • --network keep - управление сетью на гостевой ОС. Значения: 'on', 'off', 'keep'.
  • --resolution '1920 1080 32' - зазрешение экрана. Может быть 'random' для выбора случайного разрешения из популярных, либо 'Ширина Высота Битность'.
  • --pre 'C:\start.cmd' - скрипт/программа, которая будет запущена до основного файла.
  • --post 'C:\stop.cmd' - скрипт/программа, которая будет запущена после основного файла (перед завершением анализа).
Пример:
Код:
python demo.py \
    putty.exe \ 
    --vms w10_x64 w10_x86 \
    --snapshots sn1 sn2 sn3 \
    --vboxmanage vboxmanage \
    --timeout 60 \
    --info 1 \
    --ui gui \
    --login user \
    --password 12345678 \
    --remote_folder desktop \
    --network keep \
    --resolution '1920 1080 32' \
    --pre 'C:\start.cmd' \
    --post 'C:\stop.cmd'

Функции из скрипта можно вызывать напрямую в своих скриптах. Например:
Python:
import vm_functions as vm
vm.vm_start('w10_x64')


Демо
Под Windows с многопоточностью:

Под Linux с антивирусами:


# TODO
  • Добавить возможность установить колличество потоков (одновременно запущенных ВМ).
  • Из очевидного - привинтить парсинг результатов выполнения файла. Вариантов несколько - OCR ("парсим" скриншоты), разбор логов АВ или журнала ОС (если наш авер туда пишет).
  • Добавить простой веб интерфейс.
  • Оптимизация и багфиксы.

Исходники на гитхаб
 
Последнее редактирование модератором:
Пожалуйста, обратите внимание, что пользователь заблокирован
Ох вот ето годнота.
А я топовые ав держу на VMware и каждый по отдельности тестирую, долго очень.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Устанавливаем гостевую(-ые) ОС
Это вить речь не о пользовательских правах юзера ? Я чет затупил на этом моменте. Начал тему мусолить ставлю оси.
 
Это вить речь не о пользовательских правах юзера ? Я чет затупил на этом моменте. Начал тему мусолить ставлю оси.
Поищи на ютубе что-то типа "Install Windows in VirtualBox"

А чем автору не угодил Vagrant?
Узконаправленный скрипт из пары сотен строк на Питоне проще модифицировать под свои нужды и потом поддерживать.
Если целить в продакшн, который поставил, настроил и забыл, то да, есть смысл смотреть на Вагрант.
Спасибо за идею, кстати. Совсем о нём забыл.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Поищи на ютубе что-то типа "Install Windows in VirtualBox"
Да это гон) че я винду на VirtualBox не смогу поставить... Вопрос в другом в чем отличие обычной ОС от гостевой. Есть такая фича в самой винде, вот я и спрашиваю оно это или нет.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Да это гон) че я винду на VirtualBox не смогу поставить... Вопрос в другом в чем отличие обычной ОС от гостевой. Есть такая фича в самой винде, вот я и спрашиваю оно это или нет.
Разобрался первой ссылкой в гугле: http://giperkan.ru/virtualniemashini/gostevaya-os.html :oops:
Как бы это тупо одно и то же что и ОС на ВМ...просто реально в заблуждение ввел ты меня этим) думал есть какие то заковырки о которых я не знаю.
Для меня это новая веха в понимании) Гостевая ОС и есть обычная ОС только на ВМ :D ох уж эти фразеологизмы
 
Последнее редактирование:
Pernat1y годный материал. Большое спасибо за труды. И мне как обзорщику будет крайне полезен. Ибо все тесты я делал ручками и тратил на это от суток до двух.
 
Вышел мегоапдейт (0.3):
  • Добавлена возможность отключать сеть при анализе файла
  • Возможность запускать дополнительные скрипты/программы до/после анализа основного файла (тут можно запускать Wireshark, ProcMon, ProcDump и прочее)
  • Возможность устанавливать определенное разрешение экрана у ВМ
  • Много рефакторинга для удобства чтения скрипта

Первый пост обновить не могу - берём с гитхаба
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Вышел мегоапдейт (0.3):
  • Добавлена возможность отключать сеть при анализе файла
  • Возможность запускать дополнительные скрипты/программы до/после анализа основного файла (тут можно запускать всякие Wireshark, ProcMon, ProcDump и прочее)
  • Возможность устанавливать определенное разрешение экрана у ВМ
  • Много рефакторинга для удобства чтения скрипта

Первый пост обновить не могу - берём с гитхаба
А самое главное? скрины работы софта как на динчеке за поределенное время например по 3 скрина на каждую минуту работы софта на вм. А так еще плюс от мена лови!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я если честно юзаю VMware в связке с мышкой x7 :oops: запустил, отошел покурить, мышка все прокликала, прочекала, скрины сохранила .
 
А самое главное? скрины работы софта как на динчеке за поределенное время например по 3 скрина на каждую минуту работы софта на вм. А так еще плюс от мена лови!
Там такое уже было :)
 
Отличная статья, обязательно проголосую за тебя. Побольше бы таких статей со змейкой, а то раздел питона сейчас в упадке.
 
Помню, что-то подобное было на фкаве...
/showthread.php?t=33695
Угу, видел. Только там на батниках.
У меня на питоне, кроссплатформенное и многопоточное. А так да, идея одна :)
 
как переделать скрипт под VMware ?
Вариантов 2:
Либо через консоль, как это сейчас сделано для VirtualBox - https://www.vmware.com/support/ws55/doc/ws_learning_cli_vmrun.html
Либо через веб апи - https://code.vmware.com/apis/412/vmware-workstation-pro-api#/
В обеих случаях нужна платная (Workstation Pro) версия.

Я думал добавить поддержку VMware после того, как VirtualBox окончательно допилю.
 
Опдейт 0.4 :)
Всё теперь конфигурируется через коммандную строку - не нужно редачить файл.

Минимальные требуемые аргументы:
python vm-automation.py putty.exe --vms w10_1903_x64 w10_1903_x86 --snapshots live

Все опции:
Код:
python vm-automation.py \
    putty.exe \
    --vms w10_1903_x64 w10_1903_x86 \
    --snapshots live \
    --vboxmanage vboxmanage \
    --timeout 60 \
    --hash 1 \
    --links 1 \
    --ui gui \
    --login user \
    --password 12345678 \
    --remote_folder Desktop \
    --network keep \
    --resolution '1920 1080 24' \
    --pre 'C:\Procmon\Procmon.exe /AcceptEula /Minimized /Quiet /BackingFile Procmon.pml' \
    --post 'C:\Procmon\Procmon.exe /Terminate'
 
Это, пожалуй, последнее крупное обновление данного скрипта (может ещё багфиксы будут).

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

Если у кого есть ещё какие пожелания - готов выслушать :)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх