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

Статья Создание локального Runtime чекера антивирусами.

merdock

X-pert
Эксперт
Регистрация
09.06.2019
Сообщения
335
Реакции
259
Статья не новая(год ей), но как автор перепубликую ее тут.

Создание локального Runtime чекера антивирусами.

Все привет, наконец то я нашел время и как обещал выкладываю стать о том как сделать чекера на динамические детекты антивирусов (Runtime Detect Checker) на локальной машине.

Я сделал этот проект два годна назад, т.к. мне было жалко платить подобным сервисам, да и редко надо. Писал я для себя на питоне со своими нюансами, в нашем же случаи для статьи я сделал проще на bat-никах. И самое интересно мне друзья дали еще чужие исходники на php, где написан сервис на подобии как у меня на Python'е с тем же принципом, что в статье.
И так все по порядку.

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

1. Ставим виртуальную машину.
Мы будем использовать виртуальную машину Virtual Box версии 5.28.8 x64 (обращаю ваше внимание, что API может отличаться в зависимости от релизов) на в операционной системе Windows(можно и на Linux, но локалка у меня виндовская).
1.png
oxWC0XT.png

Выбираем х64 версия для Windows, скачиваем VirtualBox тут http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html

2. Создаем шаблон ОС
Я делал виртуальную машину на Win7x64 и на Win10x64 потому что многие антивирусы ниже семерки уже не поддерживаются, да и с Win7 недавно
натолкнулся на проблемы. Если машина позволяет рекомендую Windows 10 x64. Хотел бы обратить внимание на то что процессор должен поддерживать
аппаратную виртуализцию VT-x/AMD-V (https://ru.wikipedia.org/wiki/Аппаратная_виртуализация) и Hyper-threading (https://ru.wikipedia.org/wiki/Hyper-threading),
проверьте чтобы было включено в Bios'e. У меня Intel i7 на 3800Гц 8 ядер.
Если у вас нету хардварной виртуализции, то думаю статья эта вам не поможет, т.к. ВМ и сам компьютер будут ужасно тормазить и смысла ставить ВМ нету.
Так же стоит заранее позаботиться о свободном месте на жестком диске HDD(идеально конечно SSD), я рекомендую не менее 300Гб и желательно на
отдельном жестком диске от основной операционной системы (иначе есть шанс ВМ будут "давить" на жесткий диск, что будет отдавать на основную ОС). Про оперативную память - должно хватить 8Гб, но желательно иметь 16Гб.
Настраиваем месторасположения всем ВМ
2.png
v4AdXsH.png


3.png
0isgTVk.png


Для создания ВМ(виртуальной машины) надо запустить VirtualBox и нажать на иконку
4.png
dBbttRH.png


Выставляем название основного шаблона AV_main на нем мы настроим ОС и потом клонируем на шаблоны для антивирусов.
5.png
UwNXoh2.png


Ничего не трогаем, жмем Создать. После создания ВМ, находим ее в списке, выбираем и правой клавишей мышки на ней переходим в Настройки ВМ.
6.png
hMN2wGN.png


7.png
2zq63Ak.png


В настройках выбираем носители и в IDE контроллере выбираем Оптический привод, находим iso образ с установщиком Windows (в нашем случае это будет Win7x64)
8.png
TeI84ei.png


В настройках выбираем сеть и оставляем Не подключен, чтобы ОС не смогла обновиться и не смогла отсылать данные. Жмем ОК, настройка самой ВМ готова.
9.png
qEzFIEE.png


Запускаем ВМ
10.png
Sl96Pvr.png


3. Настраиваем шаблон ОС
Должно появиться окно ВМ с установкой Windows, ставим как обычно, НО:
ВАЖНО!!! Имя юзера Admin пароль 12345
После установки, необходимо ввести лицензию/кряк/кейген - на ваше усмотрение, но чтобы приложение которое лицензирует не висело в памяти, а то АВ его прихлопнут.
Для ускорения работы ВМ отключаем всякий трешь.
Отключаем службы: обновления, индексации файлов, кэширования и т.д.
11.png
480fCyR.png


В альтернативных настройка, отключаем бэкапы
12.png
Zxkj5qF.png


Ставим ускорение графики GUI
13.png
JGAAi14.png


Убиваем удаленного помощника
14.png
YtPOeKq.png


Монтируем iso образ с VirtualBox Addons, устанавливаем драйвера и приложение VirtualBox Agent, если установка не началась то запустите вручную 17.png
aDfh5B8.png

15.png
iFe6HHp.png


После установки и перезагрузки у вас появится значок приложения, значит вы все правильно сделали
16.png
0TmjAdb.png


Я еще установил Chrome для того чтобы потом на образах ВМ было легче антивирусы качать, только не забудте отключить службу обновления Хрома. Для скачивания
я настроил
18.png
I3Dbf9G.png


и подключил сеть
19.png
Ae7hfwn.png


После всех установок надо отключить сеть, чтобы данные не утекали. Ну вот в принципе и готов шаблон ВМ с ОС, отключаем ВМ в Сохраненном состоянии, это даст нам существенное ускорение при запуске.
20.png
QEsMPAW.png


21.png
KSsLUX9.png


4. Клонирование шаблона
Выбираем наш шаблон и правым кликом мыши жмем Клонировать.
22.png
QOSZxTo.png


Подписываем новую ВМ (AV_avg, AV_avira, AV_kis и т.д.)- это будет шаблон ВМ с антивирусом, в нашем случае я выбрал AVG.
23.png
Kuwa8cu.png


24.png
G4rbsWi.png

И так создаем все шаблоны ВМ для каждого антивируса который нам надо.

5. Установка АВ на шаблоны
После создания запускаем по очереди все виртуальные машины и на каждую ставим антивирус.
ВАЖНО!!!: Незабываем включить сеть и после установки отключить, а ТАКЖЕ выключить ВМ с АВ в Сохраненном состоянии.

6. Создание срезов
После подготовки шаблонов ВМ с АВ надо создать срезы (snapshot) - это фиксирование состояния ВМ для создания Связанной копии. Что это дает, это дает
нам быстрое создание копии ВМ из шаблона с нужным нам АВ, быстрый старт АВ, проверку ехе и быстрое удаление ВМ без нагрузки на HDD/SDD
Срезы надо делать после обновления АВ в шаблонах.
ВАЖНО!!! Перед созданием среза, убедитесь что остальные срезу удалены, иначе будут ошибки. На каждом шаблоне ВМ с АВ должен быть один срез с названием - "main"

Срезы можно создать руками или автоматом.
руками: выберете шаблон ВМ с АВ и создайте срез
25.png
eLXNoFA.png


26.png
1dqFaEJ.png


27.png
V3jTy2M.png


автоматом: для этого я создал bat файт _create_snapshot.bat(перед созданием ВСЕ АВ должны быть выключены) и для удаления всех срезов _del_snapshot.bat(перед удалением ВСЕ АВ должны быть выключены)
Т.е. еще раз повторюсь, срезы надо пересоздавать когда вы обновите антивирусы на шаблонах ВМ с АВ, должен быть только один срез с названием "main", перед пересозданием все ВМ должны быть выключены.

7. Первый запуск
Все шаблоны с АВ созданы, настроены, обновлены антивирусы, инет на них отключен, они выключены в Сохраненном состоянии, срезы сделаны.

Переходим к самой важной части - тестированию
Я подготовил bat файлик _start.bat как пример тестирования, тестировать мы будем hello.exe (мессажебокс)

Код:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonevm AV_avg --snapshot main --name AV_avg_tmp  --register --options link
TIMEOUT 5
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm AV_avg_tmp
TIMEOUT 40
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol AV_avg_tmp copyto "C:\dynamic_check\hello.exe" --target-directory "C:\Users\Admin\AppData\Local\Temp" --username "Admin" --password "12345" --verbose
TIMEOUT 3
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol AV_avg_tmp start --exe "C:\Users\Admin\AppData\Local\Temp\hello.exe" --username "Admin" --password "12345" --verbose
TIMEOUT 3
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp screenshotpng "src_avg_1.png"
TIMEOUT 3
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp screenshotpng "src_avg_2.png"
TIMEOUT 3
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp screenshotpng "src_avg_3.png"
TIMEOUT 3
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp screenshotpng "src_avg_4.png"
TIMEOUT 1
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp poweroff
TIMEOUT 5
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" unregistervm AV_avg_tmp --delete

Теперь поясню каждую строку
clonevm AV_avg --snapshot main --name AV_avg_tmp --register --options link
делаем связанное клонирование шаблон ВМ с АВ с именем AV_avg используя срез "main" название новой одноразовой ВМ AV_avg_tmp

startvm AV_avg_tmp
старт одноразовой ВМ AV_avg_tmp

guestcontrol AV_avg_tmp copyto "C:\dynamic_check\hello.exe" --target-directory "C:\Users\Admin\AppData\Local\Temp" --username "Admin" --password "12345" --verbose
копируем наш тестовый файл "C:\dynamic_check\hello.exe" указанием полного пути в гостевую одноразовую ВМ AV_avg_tmp в папку "C:\Users\Admin\AppData\Local\Temp" использую учетную запись Admin

guestcontrol AV_avg_tmp start --exe "C:\Users\Admin\AppData\Local\Temp\hello.exe" --username "Admin" --password "12345" --verbose
запускаем наш "hello.exe" на одноразовой гостевой ВМ AV_avg_tmp использую учетную запись Admin

controlvm AV_avg_tmp screenshotpng "src1.png"
создания скриншотов гостевой одноразовой ВМ AV_avg_tmp

controlvm AV_avg_tmp poweroff
отключаем принудательно питание гостевой одноразовой ВМ AV_avg_tmp

unregistervm AV_avg_tmp --delete
удаляем гостевую одноразовую ВМ AV_avg_tmp из списка с удалением файла ВМ

Если все сделали правильно у вас в консоли будет такой лог и появятся скриншоты, а на экране одноразовой ВМ AV_avg_tmp будет такое окно
30.png
YGrPsre.png



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

Консольный лог
Код:
C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonevm AV_avg --snapshot main --name AV_avg_tmp  --register --options link
Machine has been successfully cloned as "AV_avg_tmp"

C:\dynamic_check>TIMEOUT 5

Время ожидания 5 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"  startvm AV_avg_tmp
Waiting for VM "AV_avg_tmp" to power on...
VM "AV_avg_tmp" has been successfully started.

C:\dynamic_check>TIMEOUT 40

Время ожидания 40 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" guestcontrol AV_avg_tmp copyto "C:\dynamic_check\hello.exe" --target-directory "C:\Users\Admin\AppData\Local\Temp" --username "Admin" --password "12345" --verbose
Creating guest session as user 'Admin'...
Waiting for guest session to start...
Successfully started guest session (ID 1)
Copying from host to guest ...
Directory "C:\Users\Admin\AppData\Local" already exists
Source: C:\dynamic_check\hello.exe
Copying "C:\dynamic_check\hello.exe" to "C:\Users\Admin\AppData\Local\Temp" ...
Closing guest session ...

C:\dynamic_check>TIMEOUT 3

Время ожидания 3 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"  guestcontrol AV_avg_tmp start --exe "C:\Users\Admin\AppData\Local\Temp\hello.exe" --username "Admin" --password "12345" --verbose
Creating guest session as user 'Admin'...
Waiting for guest session to start...
Successfully started guest session (ID 1)
Starting guest process ...
[4076 - Session 1]
Process successfully started!
Guest session detached

C:\dynamic_check>TIMEOUT 3

Время ожидания 3 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp screenshotpng "src1.png"

C:\dynamic_check>TIMEOUT 3

Время ожидания 3 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp screenshotpng "src2.png"

C:\dynamic_check>TIMEOUT 3

Время ожидания 3 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp screenshotpng "src3.png"

C:\dynamic_check>TIMEOUT 3

Время ожидания 3 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp screenshotpng "src4.png"

C:\dynamic_check>TIMEOUT 1

Время ожидания 1 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm AV_avg_tmp poweroff

C:\dynamic_check>TIMEOUT 5

Время ожидания 5 сек., нажмите любую клавишу для продолжения ...

C:\dynamic_check>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" unregistervm AV_avg_tmp --delete

Так же вкалдываю сонсольны хелп
Код:
Usage:

VBoxManage guestcontrol     <uuid|vmname> [--verbose|-v] [--quiet|-q]
                              [--username <name>] [--domain <domain>]
                              [--passwordfile <file> | --password <password>]

                              run [common-options]
                              [--exe <path to executable>] [--timeout <msec>]
                              [-E|--putenv <NAME>[=<VALUE>]] [--unquoted-args]
                              [--ignore-operhaned-processes] [--profile]
                              [--no-wait-stdout|--wait-stdout]
                              [--no-wait-stderr|--wait-stderr]
                              [--dos2unix] [--unix2dos]
                              -- <program/arg0> [argument1] ... [argumentN]]

                              start [common-options]
                              [--exe <path to executable>] [--timeout <msec>]
                              [-E|--putenv <NAME>[=<VALUE>]] [--unquoted-args]
                              [--ignore-operhaned-processes] [--profile]
                              -- <program/arg0> [argument1] ... [argumentN]]

                              copyfrom [common-options]
                              [--dryrun] [--follow] [-R|--recursive]
                              <guest-src0> [guest-src1 [...]] <host-dst>

                              copyfrom [common-options]
                              [--dryrun] [--follow] [-R|--recursive]
                              [--target-directory <host-dst-dir>]
                              <guest-src0> [guest-src1 [...]]

                              copyto [common-options]
                              [--dryrun] [--follow] [-R|--recursive]
                              <host-src0> [host-src1 [...]] <guest-dst>

                              copyto [common-options]
                              [--dryrun] [--follow] [-R|--recursive]
                              [--target-directory <guest-dst>]
                              <host-src0> [host-src1 [...]]

                              mkdir|createdir[ectory] [common-options]
                              [--parents] [--mode <mode>]
                              <guest directory> [...]

                              rmdir|removedir[ectory] [common-options]
                              [-R|--recursive]
                              <guest directory> [...]

                              removefile|rm [common-options] [-f|--force]
                              <guest file> [...]

                              mv|move|ren[ame] [common-options]
                              <source> [source1 [...]] <dest>

                              mktemp|createtemp[orary] [common-options]
                              [--secure] [--mode <mode>] [--tmpdir <directory>]
                              <template>

                              stat [common-options]
                              <file> [...]

VBoxManage guestcontrol     <uuid|vmname> [--verbose|-v] [--quiet|-q]

                              list <all|sessions|processes|files> [common-opts]

                              closeprocess [common-options]
                              <   --session-id <ID>
                                | --session-name <name or pattern>
                              <PID1> [PID1 [...]]

                              closesession [common-options]
                              <  --all | --session-id <ID>
                                | --session-name <name or pattern> >

                              updatega|updateguestadditions|updateadditions
                              [--source <guest additions .ISO>]
                              [--wait-start] [common-options]
                              [-- [<argument1>] ... [<argumentN>]]

                              watch [common-options]

8. Ошибки и литература
Если по какой то причине вы не смогли удалить срез - значит он еще привязан к ВМ, удалите ВМ который был клонирован связанно, в нашем случае все ВМ с названием *_tmp - их не должно быть.

ВАЖНО!!! Бывает по какойто причине ВМ *_tmp завершиласть некоректно, тогда надо удалить все ВМ *_tmp и удалить их файлы в папке где они храняться с названием *_tmp.
Иногда когда все удалено и ВМ выключены, пересоздать срез или ВМ *_tmp не возможно надо руками удалить носитель. Будте окуратнее :)


28.png
3Yuw0i6.png


29.png
kwjxIEl.png


Если вы что то сделали не так смотрите ошибки и перечитывайте статью. Полное описание всех команд вы найдете на официальном сайте https://www.virtualbox.org/manual/ и https://www.virtualbox.org/manual/ch08.html.

9. Пояснения
Азм постарался сделать как можно проще статью и примеры, чтобы было понятна сама методика Runtime проверки антивирусами, создания шаблонов и использования быстрого запуска.
Я не делал контроля запуска ВМ и ОС, так же не делал работу с сетью и запуск с использованием окружения - мне было лениво.

10. Подарок
Мне друзья для этой стать скинули исходники полноценного сервиса последовательной проверки на php, сервис использую примерно такую же методику, что я описал в статье. Если вы серьезный программист и вам понравилась статья, то можете поиграться с этим сервсим и реализовать свой.
Я правда считаю что пример в стать делать в виде массового сервиса не целесообразно, будет слишком огромное потребление ресурсов, для создания полноценного сервиса надо измениить подход и возможно использовать другие виртуальные машины к пример qemu, но суть методики останется та же.

11. Файлы
Ссылка: https://mega.nz/#!IVgn0SDT!TLpiWj11SLanT57u6YOVI4bzupg63THIkrgZCM2IyIw
Пароль: exploit.in

12. Дополнения
Хотелось бы немного сказать про антидетект виртуальной машины, а то мне тут целую истерику устроили, что такой проект и методику может любой сделать, и что я слишком много внимания уделил простым вещам, надо было про антидект лучше написать - смешно. По антидетекту все в инте есть, а вот подобных статей НЕТУ!
По антидетекту
- есть замечательный опенсорс проект который чекает вм и показывает детекты https://github.com/a0rtega/pafish , там же есть бинарнник.
- есть замечательный проект с патчером vbox для антиэмуляции, он и мышку эмулирует и имена устройств меняет, реестр правит, куча всего для того чтобы софт не мог детектить вашу виртуалку https://github.com/hfiref0x/VBoxHardenedLoader
- есть отличное сообщество http://www.kernelmode.info/forum/viewtopic.php?f=11&t=3478 где ребята обсуждают и дорабатывают патчер

В принципе больше по этой теме обсуждать нечего, все есть в наличии и в исходниках, но для их использования надо иметь скилл или делать еще одну статью.

Я много чего еще в этой статье не указал, потому что невозможно все охватить за раз, поэтому в задницу ваши претензии без внипетов и примеров.

PS: народ пожалейте мою психику, не задавайте в ЛС мне вопросы
 
Статья почти ничем не отличается от концепта Пернатого. Только на битниках сделано против питона у Пернатого.
Спасибо за труды.
Ага, только этой статье год, она была на конкурсе на экспе :) Т.е. у пернатого статья ничем не отличается от моей - так будет правильней выразить твою мысль. И вот еще я сделал тоже на питоне, а батники выложил для лучшего понимания сути. Техника такая же, только задачи разные.
 
Последнее редактирование:
Фигасе :D
это не я сказал, а арес, все претензии к нему, почему он так решил :D
 
Можно взять твою инфу, чет допилить и мутить свой сервис?
В принципе да, но еще доработать много и долго надо. Поэтому в названии статьи фигурирует слово Локальный.
 


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