Как спрятать вирус от антивируса на kali linux

Обновлено: 05.07.2024

Многим пентестерам знакома проблема, когда при проведении аудита безопасности пейлоады перехватываются антивирусными программами. И хотя практически всегда можно обойти антивирусную защиту клиента, на создание и развертку нужных для этого решений уходит слишком много времени. При этом авторам вредоносных программ не составляет большого труда обойти защитные механизмы. Нам хотелось иметь такую же возможность при проведении своих пентестов, чтобы можно было продемонстрировать нашим клиентам более реалистичные сценарии проникновения. Так и зародился проект Veil-Evasion.

Старая истина «Время — деньги» применима и к области пентестирования, поэтому часы, потраченные на попытки обойти антивирусную защиту вручную, никак нельзя назвать проведенными с пользой. Из-за того, что антивирусы все чаще перехватывали наши пейлоады при аудите, мы теряли все больше времени. А ведь куда полезнее было бы вместо того, чтобы бороться с антивирусными решениями, непосредственно проверять уязвимости.

WARNING

Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Однако же, несмотря на обилие доступной информации, мы не нашли ни одного решения с открытым исходным кодом, которое бы позволяло генерировать пейлоады, способные обходить антивирусы. Поэтому мы решили, что нам по силам восполнить этот пробел.

Решение нашей проблемы с антивирусами началось со скромной версии Veil 1.0, состоявшей из одного-единственного Python-файла, который генерировал различные пейлоады и упаковывал их в исполняемые файлы с помощью py2exe. Участие Кристофера Трансера, одного из разработчиков Veil-Evasion, в security-подкасте Pauldotcom вызвало огромный ажиотаж вокруг нашего проекта, и вскоре члены сообщества пентестеров начали использовать Veil-Evasion и делиться с нами ценными замечаниями. Затем к команде разработчиков присоединились Майкл Райт и The_Grayhound и полностью переработали код проекта, чтобы сделать из него модульный расширяемый фреймворк без привязки к конкретным языкам и технологиям.


К настоящему времени Veil-Evasion эволюционировал из узкоспециализированного инструмента во фреймворк Veil — активный и расширяющийся проект, лишь отдаленно напоминающий свою первоначальную версию. С релиза 2.0 наша команда начала движение в сторону полностью модульного фреймворка. Кроме этого, вторая версия отличалась от предшественника новой структурой и массой добавленных возможностей:
  • меню и интерфейс Veil были спроектированы с учетом принципов юзабилити, чтобы корректно обрабатывать как можно больше ошибочных сценариев;
  • дерево пейлоадов Metasploit для Windows обходится с извлечением всех пейлоадов и их обязательных параметров. Это значит, что все генерируемые MsfVenom нагрузки с шелл-кодом Windows могут быть интегрированы в Veil. Для пейлоадов в меню выбора шелл-кода работает автодополнение по Tab в MsfVenom-формате windows/PAYLOAD ;
  • автодополнение по Tab было добавлено и в другие части фреймворка, включая большинство меню; также добавлена автоподстановка локального IP-адреса в LHOST и подстановка 4444 в LPORT ;
  • почти для всех опций были реализованы ключи командной строки, которые можно просмотреть с помощью команды ./Veil.py -h .

Что касается структуры Veil, то она стала выглядеть следующим образом:

  • пейлоад-модули, помещаемые в ./modules/payloads/[language] , автоматически загружаются в фреймворк;
  • функции общего назначения хранятся в ./modules/common/* ;
  • исходники и скомпилированные файлы сохраняются в ./output/source/ и ./output/compiled/ соответственно;
  • используемые пейлоадами внешние инструменты хранятся в ./tools/ ;
  • папка ./doc/* содержит документацию для фреймворка, сгенерированную утилитой pydoc.

Чтобы запустить Veil, необходимо воспользоваться командой $ ./Veil.py . При первоначальном запуске Veil выполнит код из ./config/update.py , который попытается определить установочные директории фреймворка, получить подробные сведения об ОС и другие важные параметры, а затем сохранить их в конфигурационный файл ./config/veil.py , который также можно в случае необходимости отредактировать и вручную.

После этого попадаем в основное меню. В нем отображается количество загруженных модулей и список полезных команд. Достаточно набрать list , чтобы вывести список всех пейлоадов, list langs — чтобы вывести список доступных языков пейлоадов, либо list [язык] , чтобы вывести список всех пейлоадов для конкретного языка. Также можно набрать list и нажать Tab для автодополнения из списка доступных языков.

Рис. 1. Список доступных пейлоадов

Рис. 1. Список доступных пейлоадов

Чтобы получить информацию по определенному пейлоаду, надо выполнить info [номер либо имя пейлоада] . После загрузки выбранного модуля попадаем в меню пейлоада.

Рис. 2. Меню пейлоада Python/Base64 Encoded

Рис. 2. Меню пейлоада Python/Base64 Encoded

В нем представлены детальные сведения и обязательные опции для выбранной полезной нагрузки, а также доступные команды. В подразделе required options (обязательные опции) для каждой опции отображается ее имя, описание и значение по умолчанию — если оно отсутствует, то для генерации пейлоада придется самостоятельно ввести значение опции. Для этого достаточно набрать set [имя опции] и указать нужное значение.

После ввода обязательных опций для генерации пейлоада необходимо выполнить команду generate . Если в пейлоаде используется шелл-код, то попадаем в меню шелл-кода, где можно выбрать MsfVenom или произвольный шелл-код. При выборе произвольного шелл-кода его необходимо будет ввести в виде \x01\x02. без кавычек и переводов строки ( \n ). Если выбран MsfVenom, то по умолчанию будет предложен windows/meterpreter/reverse_tcp . Если нужен другой шелл-код, то надо будет ввести имя любого Windows шелл-кода, используя синтаксис MsfVenom ( windows/. ), либо выбрать его из списка с помощью Tab. После выбора шелл-кода будет предложено указать обязательные опции (пользуясь автозаполнением по Tab, можно подставить в опцию LHOST локальный IP, а в LPORT — 4444 , номер порта, используемый по умолчанию в MSF). После ввода обязательных опций можно ввести значения дополнительных опций MsfVenom в формате OPTION=value .

По нажатию Enter будет сгенерирован шелл-код и собран пейлоад. После этого попадаем в меню вывода, где можно выбрать базовое имя для генерируемых файлов. Если пейлоад использует Python и была установлена опция compiletoexe, пользователю предоставляется выбор между pyinstaller (компиляцией в EXE-файл на Kali Linux) и генерацией исполняемых файлов с помощью py2exe. Последний экран отображает информацию о сгенерированном пейлоаде, включающую местоположение файлов с исходным и скомпилированным кодом. Нажатие любой клавиши вернет главное меню.

В проекте Veil-Evasion большое внимание уделяется разработке расширяемого фреймворка, в который пользователи могут быстро и с легкостью интегрировать свои собственные методы уклонения от антивирусов, пользуясь при этом всеми возможностями фреймворка для ускорения разработки. Для того чтобы создать свой пейлоад, можно воспользоваться готовым шаблоном — ./modules/payloads/template.py :

Рис. 3. Готовый шаблон для создания своего пейлоада template.py

Рис. 3. Готовый шаблон для создания своего пейлоада template.py

  • common.randomizer — различные методы рандомизации строк/переменных;
  • common.encryption — методы шифрования (AES-шифрование, подстановочные шифры и так далее);
  • common.crypters — средства для шифрования и обфускации отдельных языков (пока что доступен только Pyherion);
  • common.shellcode — наиболее часто используемый модуль, предназначенный для генерации шелл-кода;
  • config.veil — значения настроек; получаются в виде veil.CONFIG_SETTING . Импортируется командой from config import veil .

В методе __init__() обязательно нужно инициализировать следующие опции:

При необходимости можно использовать и другие опции:

  • self.shellcode = shellcode.Shellcode() — инициализируется, если требуется генерировать шелл-код;
  • self.notes — дополнительные примечания (например, инструкции по ручной компиляции), которые показываются пользователю при генерации;
  • self.required_options — опции пейлоада, для которых обязательно указывать значение. Записываются в формате . Если значение по умолчанию не указано, Veil автоматически запросит у пользователя значение опции перед генерацией пейлоада.

Метод generate() — это то место, где и творится все «волшебство». Шелл-код может быть создан внутренними методами Veil путем обращения к внутреннему объекту shellcode через вызов self.shellcode.generate() . При этом генерируется шелл-код по указанной пользователем спецификации. В строках 36 и 37 (см. рис. 3) демонстрируется использование криптора для шифрования исходного кода. В результате возвращается исходный код, который может быть использован в Veil.

Создав свой собственный модуль для генерации пейлоадов, можно сохранить его в любом месте внутри папки ./modules/payloads/ . Любой модуль, помещенный в эту папку (или одну из ее дочерних), автоматически подгружается и становится доступен в основном интерфейсе Veil, а отдельные папки для каждого языка внутри данной директории существуют просто ради удобства.

Внедрение шелл-кода

Для инъекции шелл-кода в память Veil задействует два основных метода. Первый заключается в использовании нескольких API-вызовов с помощью MARKDOWN_HASH9960df83cc4b129c52232808951f3108MARKDOWN_HASH . Второй метод — преобразование к void-указателю.

Использующий MARKDOWN_HASH9960df83cc4b129c52232808951f3108MARKDOWN_HASH метод на данный момент самый надежный способ инъекции шелл-кода в память с его последующим выполнением. Последовательность вызовов, позволяющая выполнить код пейлоада, выглядит следующим образом:

  • MARKDOWN_HASH9960df83cc4b129c52232808951f3108MARKDOWN_HASH — выделяет область памяти, равную по объему нашему шелл-коду, и «помечает» ее как исполняемую. Выделение памяти этим методом гарантирует, что она будет исполняемой и не будет замечена механизмом DEP (Data Execution Prevention), если только в нем не выставлен максимально высокий уровень защиты;
  • MARKDOWN_HASHe78d61e1f3e89e48ca0996979e4ef1d2MARKDOWN_HASH — копирует шелл-код в выделенную вызовом MARKDOWN_HASH9960df83cc4b129c52232808951f3108MARKDOWN_HASH область исполняемой памяти;
  • MARKDOWN_HASHbf9b56f528e0386e4434013f123f8c13MARKDOWN_HASH — создает на атакуемой машине поток, в котором выполняется шелл-код, внедренный в память;
  • MARKDOWN_HASH1d0e7ad368f82232484c1707bb22d23bMARKDOWN_HASH — ждет, пока поток не завершит выполнение кода.

Преобразование к void-указателю — еще один широко распространенный и подробно задокументированный метод инъекции и выполнения шелл-кода. Чтобы было понятней, как он работает, рассмотрим следующий код:

В этом примере адрес массива buffer используется в качестве указателя на функцию, выполняющую шелл-код, который хранится в этом массиве. Хотя это, вероятно, уже давно самый популярный способ инъекции шелл-кода, у него есть недостаток: память, в которую попадает шелл-код, не всегда оказывается исполняемой (и, скорее всего, не будет таковой). Поэтому такой способ внедрения прекрасно работает на XP и предыдущих версиях Windows, но начатая в Windows Vista интеграция DEP существенно ограничивает его эффективность, а вероятность вызвать ошибку доступа становится гораздо выше.

Команда Veil стремится к тому, чтобы максимально облегчить интеграцию любого метода обхода антивирусов в фреймворк. Еще на ранних стадиях разработки нас просили сделать возможной интеграцию внешних инструментов генерации. Благодаря модульной структуре пейлоадных модулей, мы с легкостью удовлетворили эту просьбу, что позволило реализовать поддержку инструментов от сторонних авторов (например, PESscrambler и Hyperion). Посмотреть, как это делается, можно в листинге ./modules/payloads/native/Hyperion.py .

Интеграции сторонних инструментов в Veil-фреймворк на примере Hyperion

Интеграции сторонних инструментов в Veil-фреймворк на примере Hyperion

Мы лишь отметим основные моменты:

  • в методе __init__() свойству self.extension нужно присвоить значение exe (строка 26);
  • следует инициализировать обязательную опцию original_exe (строка 29) примерно таким образом:
  • внешние инструменты нужно поместить в ./tools/ , а код для их вызова должен быть примерно таким, как в строке 43 ( …cwd=veil.VEIL_PATH+"tools/hyperion/"… );
  • сгенерированный бинарный код будет содержаться в возвращаемом значении PayloadCode.

Языки

Первым поддерживаемым в Veil языком стал Python. Наши первоначальные исследования были направлены на поиск методов инъекции шелл-кода в память с помощью Python, с целью выявить среди них наиболее надежные. С тех пор мы исследовали и другие языки, пытаясь заложить фундамент для их использования обоими описанными выше методами инъекции шелл-кода. Наша цель — позволить пользователям расширять фреймворк под свои нужды и, в перспективе, использовать его как базис для своих собственных пейлоадов. Вот лишь часть нагрузок, которые способен генерировать Veil.

Python

  • VirtualAlloc/Void Pointer — реализация на Си техники FlatInjection.

PowerShell

  • VirtualAlloc — реализация на PowerShell техники FlatInjection.
  • PsexecVirtualAlloc — строит файл ресурсов Metasploit для удаленного выполнения VirtualAlloc на нескольких машинах с помощью утилиты PsExec.
  • DownloadVirtualAlloc — создает файл пейлоада для размещения на веб-сервере с указанным IP-адресом. PowerShell-пейлоад соединится с указанным веб-сервером, скачает с него пейлоад и выполнит его в памяти.

На данный момент единственный доступный в Veil криптор предназначен для пейлоадов на Python. Он появился, когда мы задались вопросом, как далеко мы сможем зайти с обфускацией кода на Python. Существуют AES, DES и другие прекрасные стандарты шифрования, но дешифрующие их куски кода остаются почти одинаковыми во всех генерируемых файлах. Как мы можем максимально рандомизировать файл пейлоада?

Воспользовавшись идеями превосходного криптора Hyperion PEcrypter, сделанного ребятами из nullsecurity, мы решили зашифровать код пейлоада целиком, используя AES-шифрование со случайным ключом. Поскольку это Python, а не, допустим, Си, нам пригодился AES-режим утилиты pycrypto, позволяющий шифровать код целиком. Вызвав Python-функцию exec() , мы можем выполнить сразу весь файл, предварительно динамически дешифровав его.

Однако и после первоначальной AES-обфускации в получившемся коде даже при беглом просмотре обнаруживается немало повторяющихся фрагментов. Мы решили эту проблему, преобразовав код к Base64 и завернув результат в еще один вызов exec(), чтобы как можно больше затруднить его чтение. Результат представляет собой единственную инструкцию exec(), вызывающую переименованный метод base64.b64decode().

Этот код прекрасно работает в обычном Python-файле, но при попытке запаковать его в EXE-файл с помощью pyinstaller или py2exe возникают проблемы. Поскольку мы динамически дешифруем целый файл во время выполнения, pyinstaller не может догадаться заранее, какие библиотеки (например, AES-библиотека pycrypto ) нужны для файла. Наше решение заключается в том, чтобы удалить все директивы импорта из шифруемого файла, перемешать их и поместить в начало уже зашифрованного файла.

У нас получается набор рандомизированных import-директив, за которыми следует одна-единственная команда exec() , выполняющая преобразованную в Base64 и шифрованную AES-алгоритмом (со случайным ключом) текстовую строку, в которой содержится наш первоначальный код пейлоада. Таким образом, всякий раз при генерации мы получаем новый код, даже для одного и того же исходника (из кода, представленного на рис. 5, мы получаем представленный на рис. 6).

Рис. 5. Исходный код пейлоада Рис. 6. Зашифрованный с помощью AES и Base64 код пейлоада

Код криптора содержится в ./modules/common/crypters.py и может использоваться всеми Python-пейлоадами Veil. Чтобы включить его, надо перед генерацией пейлоада установить в меню для опции use_pyherion значение Y . Независимая от фреймворка версия криптора находится в ./tools/pyherion.py . Она принимает на вход любой (ну, почти) файл на Python и выдает его зашифрованную версию. Мы надеемся и дальше изобретать новые «крипторы» по мере появления в Veil поддержки новых языков.

Постоянные проблемы с антивирусами привели нас к созданию полноценного и постоянно расширяющегося фреймворка Veil, который уже сейчас поддерживает семь языков программирования и в который мы планируем включать все новые и новые технологии по мере их появления на свет.

С точки зрения этики мы склонны рассматривать появление фреймворка Veil и сопутствующих технологий в позитивном свете, и на то есть несколько причин. Во-первых, сообщество пентестеров как минимум на пять лет отстает от профессиональных создателей вредоносного ПО в вопросах шифрования и обфускации; нам еще очень далеко до эксплуатации 0-day-уязвимостей в антивирусах. Во-вторых, мы работаем на благо общества. Если уж мы, поначалу обладавшие только поверхностным знанием Python и фреймворка Metasploit, смогли собрать и выпустить первую версию Veil примерно за шесть месяцев, то можно быть уверенным, что и другие за это же время могли разработать свои методы (и наверняка это сделали) для достижения тех же целей. Сокрытие этих методов не поможет защитить общество от серьезных киберпреступников, которые по изощренности методов уже обогнали Veil на световые годы; все, чего мы этим достигнем, — оставим всех остальных в неведении относительно методов, с помощью которых можно обойти инструменты, используемые нами для защиты информации.

Производителям антивирусов следует поторопиться с переходом на более полные поведенческие эвристики обнаружения. Мы надеемся, что наша деятельность по популяризации описанных методов заставит их сделать это поскорее.

обход антивируса

Veil это удивительный инструмент, разработанный Крисом Транкером @ChrisTruncer, Майком Райтом @TheMightyShiv и Grayhound'ом @the_grayhound, специально для Кали Linux с целью:

  • Обходить антивирусную защиту
  • Получать полезные данные в рамках Metasploit
  • Создание функциональной части вируса т. н. payload

Хочется поговорить о Veil и привести несколько примеров о том, как обойти несколько антивирусных программ. Основные изменения в последних версиях Veil:

  • совместимость x64 — Обновлен скрипт установки для того, чтобы Veil был совместим с x86 и x64 платформами.
  • Функция обновления - Теперь Veil имеет функцию обновления. Теперь мы можем обновить Veil либо из командной строки или из меню.

Чтобы установить Veil в любой среде, вы можете использовать следующие команды:

Чтобы установить Veil в Kali, выполняем следующие команды:

apt-get install veil

После того как Veil будет установлен запускаем его из командной строки:

Далее на экране мы увидим что-то вроде этого, загружено 18 payload'ов:

вводим use в коммандную строку

Veil1

Теперь Veil предлагает нам выбрать тело вируса с которым хотим работать. В этом случае я выбрал python/b64VirtualAlloc набрав "18"

Veil2

Когда загрузка тела вируса закончиться, введите команду — generate. На данном этапе можно задать кучу специфических параметров, но в рамках этой статьи будем использовать значения по-умолчанию.

Veil3

Далее необходимо выбрать шеллкод, который будет использоваться, мы выбираем msfvenom набрав 1

Veil4

Далее указываем некоторые детали:

veil5

Enter metasploit payload: “windows/meterpreter/reverse_tcp“

Enter value for ‘LHOST’, [tab] for local IP: “192.168.69.69″

Enter value for ‘LPORT’: “443“

Ждем немного пока шеллкод сгенерируется

После этого Veil потребует ввести имя для итогового файла, я назвал его undetectable

Veil6

На следующем этапе выбираем Pyinstaller — 1

Veil7

После этого мы получим готовый исполняемый .exe файл в папке /root/Veil-master/output/compiled/

Veil8

Теперь, у нас есть исполняемый файл и нам надо проверить его через vscan.novirusthanks.org. Пожалуйста, не забудьте при проверке установить галочку "Do not distribute the sample".

Veil10

Veil11

Все выше перечисленные операции по созданию файла, можно проделать через командную строку, не используя меню.

Большая проблема многих взломов и пентестов в том, что «заряженные» исполняемые файлы, созданные с помощью Metasploit или других пентест-фреймворков, палятся практически всеми антивирусными вендорами. И поэтому вместо того, чтобы продолжать проникновение, пентестеру приходится думать, как обмануть антивирус. Проделывая эту работу от кейса к кейсу, очень много времени теряешь впустую. Поэтому постепенно начали появляться инструменты, автоматизирующие эту задачу. Сегодня мы познакомимся с одним из таких инструментов по имени Shellter.

shelter обходи антивирусов

Знакомство с SHELLTER

Для начала немного информации с официального сайта проекта. Значит, так, Shellter — это инструмент для динамического внедрения шелл-кода, да и вообще первый инструмент для динамического внедрения кода в PE-файлы (но стоит сразу отметить, что DLL-файлы не поддерживаются). Применяется для встраивания шелл-кода в нативные Windows-приложения (пока поддерживаются только 32-битные). В качестве полезной нагрузки могут выступать собственные шелл-коды или же сгенерированные с помощью какого-либо фреймворка, например Metasploit.

Основные функции SHELTER

Преимущество Shellter в том, что в своей работе он опирается только на структуру PE-файла и не применяет никаких «грязных» приемов, таких как добавление новых секций с RWE-правами, модификация прав доступа к существующим секциям и прочие вещи, которые сразу же вызывают подозрение у любого антивируса. Вместо этого Shellter использует уникальный динамический подход, основанный на потоке выполнения целевого (заражаемого) приложения.

На основе своей встроенной эвристики, движка отладчика, в динамике запускающего хост-файл и трейсящего указанное количество инструкций, Shellter находит подходящее место для безопасного размещения шелл-кода в PE-файле. Обязательные изменения в структуре PE-файла минимальны — удаляются флажки в DllCharacteristics (предотвращение релоцирования), очищаются данные о цифровой подписи.

В процессе работы Shellter трейсит только поток выполнения, происходящий в userland, то есть код внутри самого заражаемого приложения, а также «внешний» код, расположенный в системных библиотеках, в куче и так далее. Это делается для того, чтобы не пропустить функции целевого приложения, использующиеся только в качестве колбэков для Windows API. В процессе трассировки Shellter не учитывает и не логирует инструкции, находящиеся за границами памяти целевого приложения, так как на них нельзя будет сослаться при инжектировании шелл-кода.

ПОДБОР ЦЕЛЕВОГО ПРИЛОЖЕНИЯ

Немного познакомившись с принципами работы Shellter, коснемся теперь важного вопроса, как выбрать правильную цель для внедрения своего шелл-кода. Прежде всего, как уже было отмечено, приложение должно быть нативным и 32-разрядным. Еще одно условие — приложение не должно быть статически связано ни с какими сторонними библиотеками, кроме тех, что по умолчанию включены в Windows.

Так как главная задача данного инструмента — обход антивирусных решений, следует избегать также запакованных приложений, приложений, имеющих секции с RWE-правами или более одной секции кода: они изначально будут выглядеть подозрительно для антивируса.

Еще одна причина, почему следует избегать упакованных exe-шников, — это то, что большинство нормальных пакеров перед распаковкой проверят файл на наличие модификаций и, соответственно, после внедрения шелл-кода просто откажутся запуститься. К тому же практически все они напичканы антиотладочными приемами и быстро обнаружат, что Shellter пытается их оттрассировать (на данный момент Shellter умеет бороться только с PEB.IsBeingDebugged, PEB.NtGlobalFlag). Поэтому упаковывать приложение лучше всего уже после внедрения в него шелл-кода. А самый идеальный вариант — выбрать приложение, которое для антивируса выглядело бы как легитимное.

ЗАПУТЫВАЕМ СЛЕДЫ

Теперь немного о том, какие же способы применяются для одурачивания антивирусов. Два основных способа — это использование junk-кода и шифрованных/саморасшифровывающихся пейлоадов. Shellter имеет встроенный полиморфный движок, который генерирует мусорный код указанного пользователем в байтах размера. Мертвый код исполняется после точки входа в шеллкод Shellter вплоть до исполнения полезной нагрузки или ее дешифровки. Мусорный код представляет собой последовательность холостых циклов (loopd), использование реальных данных программы (чтение/запись), вхождение в пустые процедуры, код которых ищется гаджетами в оригинальной кодовой секции программы хоста шелл-кода.

обман антивируса

Шифрование полезной нагрузки Shellter позволяет проводить семью методами на основе использования Windows API (для создания саморасшифровывающегося кода без изменений в характеристиках секций исполняемого кода PE-файла):

1. VirtualAlloc.
2. VirtualAllocEx.
3. VirtualProtect.
4. VirtualProtectEx.
5. HeapCreate/HeapAlloc.
6. LoadLibrary/GetProcAddress.
7. CreateFileMapping/MapViewOfFile.

Так как утилита стремится к как можно меньшему изменению структуры заголовка PE-файла, то она предполагает использовать только имеющийся у файла импорт. Если в файле не будет ни одного из вышеперечисленных наборов API в таблице импорта, то Shellter предложит пользователю либо отказаться от шифрования полезной нагрузки, либо принудительно изменить характеристики секции PE-файла. Как ты понимаешь, без шифрования полезной нагрузки Shellter будет в большинстве случаев бесполезен (в плане обхода аверов).

Shellter

Начиная с четвертой версии, Shellter предоставляет свой собственный динамический шифровальщик. С его помощью можно обфусцировать процедуру дешифровки полезной нагрузки, вставляя при каждой генерации шелл-кода случайное количество XOR, AND, SUB, NOT операций (для этого используется ключ командной строки —polydecoder). Вызовы API-функций, используемые для переноса шелл-кода в память с доступом на запись, также могут быть обфусцированы.

скрываем полезную нагрузку от антивируса

Точка входа шелл-кода Shellter, без обфускации и полиморфизма + использование саморасшифровки полезной нагрузки (VirtualAlloc)

При работе в режиме Auto Shellter будет по умолчанию применять свой кодировщик для обфускации декодера полезной нагрузки. Эта фича может применяться как с незашифрованными пейлоадами, так и с зашифрованными, в качестве дополнительного уровня шифрования.

DYNAMIC THREAD CONTEXT KEYS

Довольно интересная фишка, которая появилась в четвертой версии, называется Dynamic Thread Context Keys. Она позволяет использовать динамическую информацию из контекста потока целевого приложения в качестве ключей шифрования. Принцип работы прост: во время трассировки логируются значения определенных регистров CPU, после чего отфильтровываются значения для потенциальных мест внедрения пейлоада, в которых по крайней мере один из регистров хранит значение, пригодное для шифрования/расшифровки во время исполнения программы. Пока это экспериментальная возможность, которая позволяет избавиться от необходимости хардкодить ключ для расшифровки. В режиме Auto она может быть включена только с помощью ключа —DTCK.

ПАРА СЛОВ О ПЕЙЛОАДАХ

Теперь немного о полезных нагрузках. В Shellter уже встроено несколько наиболее распространенных пейлоадов, поэтому в большинстве случаев их больше не потребуется генерировать вручную через Metasploit. Этот список включает в себя:

Все это адаптированные пейлоады из Metasploit, поэтому они очень хорошо известны всем антивирусам. В связи с чем настоятельно рекомендуется включить шифрование полезных нагрузок с помощью опции —encode. В случае использования режима Auto без каких-либо аргументов Shellter применит свое собственное шифрование для сокрытия полезной нагрузки. Задействовать определенный пейлоад можно из командной строки, например так:

STEАLTH-РЕЖИМ

Важно: при использовании Stealth-режима с кастомным пейлоадом (то есть не встроенным в Shellter) надо будет установить exit-функцию в значение THREAD. В противном случае, если сессия умрет или ты захочешь ее закрыть, упадет все приложение. Плюс к этому все reverse connection пейлоады из Metasploit делают ограниченное число попыток соединиться с удаленным хостом, исчерпав которые убивают процесс. Чтобы этого не произошло, Shellter использует слегка
измененные версии пейлоадов из Metasploit. Поэтому, когда тебе понадобится reverse connect, лучше воспользоваться встроенными в Shellter образцами.

РАЗБИРАЕМ НА ПРИМЕРАХ

На самом деле есть еще много интересных моментов, изложенных в официальной документации, но в рамках данной статьи они для нас не очень существенны. Как говорится, лучше один раз увидеть, чем сто раз услышать. Именно поэтому перейдем от слов к делу и проверим инструмент в реальных условиях. Начнем с установки. Все, что требуется пользователям Windows, — скачать и распаковать архив.

Как уже упоминалось, Shellter можно использовать и в Linux/Mac. Можно скачать упомянутый архив и запустить инструмент через Wine/CrossOver. Хотя пользователи некоторых дистрибутивов Linux могут установить Shellter и с помощью менеджера пакетов. Например, в Kali установка не отличается от установки прочего софта:

CALC.EXE, НАСТАЛО ТВОЕ ВРЕМЯ

Далее для экспериментов нам понадобятся две виртуальные машины, объединенные в сеть: одна с Windows (в данном случае будет использоваться XP, так как она уже установлена и настроена), где мы будем «заражать» приложение, вторая с Kali Linux — для того, чтобы взаимодействовать с reverse connection пейлоадами. Остается только определиться с пациентом, которого будем заражать. Каким критериям он должен удовлетворять, мы уже обсудили. Поэтому повторяться не будем, а для опытов выберем многострадальный калькулятор.

WINEXEC

Начнем с самого простого — попытаемся внедрить в калькулятор WinExec пейлоад, который будет запускать… блокнот. Для этого скопируем калькулятор в папку с Shellter (чисто ради удобства работы) и запустим последний. Нам сразу же будет предложено выбрать режим работы: автоматический (Auto) или ручной (Manual). Чтобы познакомиться со всеми опциями, выберем ручной (m) и укажем в качестве таргета calc.exe. После чего Shellter создаст резервную копию оригинального файла (calc.exe.bak) и начнет собирать информацию о нем и проводить необходимые изменения.

Прежде всего он проверит, не упакован ли исполняемый файл (почему следует избегать внедрения шелл-кода в упакованные файлы, мы говорили выше). Потом немного поработает над самим файлом, а конкретно над его DllCharacteristics и цифровой подписью. Затем спросит, стоит ли собирать Dinamic Thread Context Info. В дальнейшем мы будем использовать эту информацию в качестве ключа для дешифровки пейлоада, чтобы не хранить его в явном виде (помнишь Dinamic Thread Context Keys?). Поэтому отвечаем утвердительно. Количество инструкций задаем произвольно. Для примера установим равным 15 000. Чтобы не наколоться и не внедрить шелл-код в место, где живет самомодифицирующийся код, включаем проверку на его наличие
во время трассировки. Чтобы сэкономить время, останавливать трассировку при его обнаружении не будем, о чем и сообщим инструменту на следующем шаге. Real-Time Tracing покажет процесс прохождения программы в реальном времени, но никакой важной информации для нас это не несет, так что включать не будем.

Далее Shellter применит свои немногочисленные (пока) средства по борьбе с антиотладочными приемами и начнет выполнять трассировку калькулятора. По истечении которой задаст важный вопрос: стоит ли включать Stealth Mode? В принципе, даже если мы не планируем внедрять в файл несколько пейлоадов, данная опция не помешает, так что включим. После этого нам предложат выбрать между встроенными и кастомными пейлоадами (о них поговорим далее). Выбираем встроенные и в предоставленном списке останавливаем свой выбор на кандидате номер семь — WinExec. В качестве аргумента указываем ему notepad.exe.

Shellter

Включаем Stealth Mode и внедряем Meterpreter_ Reverse_TCP в калькулятор

И вот тут-то нас спросят, стоит ли зашифровывать пейлоад с помощью DTCK (Dinamic Thread Context Keys). Давай попробуем, плюс на следующем шаге согласимся еще и на обфускацию декодера. Shellter поищет в таблице импорта подходящие API для этой задачи, в нашем случае найдет только LoadLibrary/GetProcAddress связку (идет под номером 5). Затем обфусцируем IAT Handler и добавляем полиморфный код (встроенный, размер устанавливаем в 200 байт). После этого можно будет посмотреть и выбрать конкретную точку для внедрения шелл-кода. В данном случае доступен диапазон от 0 до 560 (для внедрения была выбрана первая). Это последний вопрос на выбор, далее Shellter проинжектит шелл-код и пересчитает контрольную сумму файла.
В общем, весь процесс чем-то напоминает установку программы: Next, Next, Next, и все готово. Остается только запустить полученный файл. Как и было задумано, помимо калькулятора, появилось еще и окно блокнота.

пейлоад Shellter

Внедрение кастомного пейлоада

CUSTOM PAYLOAD

Теперь немного отвлечемся и посмотрим, что делать, если вдруг встроенных в Shellter пейлоадов не хватает для решения какой-либо задачи. Если помнишь, мы говорили, что утилита позволяет использовать кастомные пейлоады, сгенерированные юзером. Поэтому идем, открываем Metasploit и выбираем подходящий нам по функциональности вариант:

Допустим, нас интересует windows/meterpreter/bind_hidden_ipknock_tcp:

обход антивируса

Прежде всего обращаем внимание на параметр EXITFUNC, выше уже говори-
лось, что его значение должно быть thread.

И настраиваем остальные параметры под себя:

Теперь смотрим параметры генерации пайлоада:

msf payload(bind_hidden_ipknock_tcp) > generate -h

И генерируем пейлоад:


После чего файл с именем custom_payload должен появиться в домашней директории. Переносим его на машину с Shellter.

STEALTH MODE

Теперь займемся Stealth-технологией и попытаемся внедрить в калькулятор сразу несколько пейлоадов. Первый будем использовать встроенный, а второй — лично сгенерированный. Запускаем Shellter в автоматическом режиме (чтобы побыстрей), указываем как цель calc.exe и ждем, когда нам предложат включить Stealth Mode. Включаем и выбираем в качестве полезной нагрузки Meterpreter_Reverse_TCP. Устанавливаем LHOST = 192.168.0.55 (адрес Kali-машины), LPORT = 4444. На этом все, далее инструмент делает все самостоятельно и сообщает об успешном внедрении. Отлично, давай проверим работоспособность. Идем в Kali и открываем Metasploit:


Shellter

А затем на соседней виртуальной машине запускаем зараженный калькулятор. И получаем:

Все замечательно работает. Теперь попытаемся запихнуть в calc.exe еще одну полезную нагрузку, которую сгенерировали на предыдущем шаге. Опять запускаем Shellter в автоматическом режиме и доходим до шага выбора пейлоада, только на этот раз указываем, что будем использовать кастомный.

На вопрос, является ли нагрузка reflective dll loader, отвечаем отрицательно и ждем, когда Shellter доделает свое дело. Теперь у нас в калькуляторе должно прятаться две нагрузки:

Проверим, так ли это. Заходим в Metasploit и повторяем указанные выше действия. Ничего удивительного, reverse_tcp отработала, как положено. А вот второй пейлоад более интересный, чтобы подключиться к нему, надо сначала постучать в порт 5555 Windows-машины с адреса 8.8.8.8. Иначе подключиться не получится. Сделать это можно, проспуфив IP-адрес с помощью
утилиты hping3:

Подождать немного и попытаться подключиться. Сначала отправляем активную сессию (ту, которая reverse_tcp) meterpreter в бэкграунд:


Выбираем другой пейлоад — meterpreter/bind_tcp — и выставляем опции:

обман антивируса при помощи Shellter

Два пейлоада в calc.exe дают нам две meterpreter-сессии

И получаем еще одну meterpreter-сессию. Как видишь, несколько пейлоадов в одном файле прекрасно уживаются. Вот и замечательно.

скрываем от антивируса с помощью Shellter

Калькулятор с двумя внедренными пейлоадами ни у кого не вызывает подозрений

ЗАКЛЮЧЕНИЕ

Первое знакомство с Shellter закончилось. За рамками нашего обзора осталось еще достаточно интересной информации, касающейся работы инструмента. С ней ты сможешь познакомиться самостоятельно, покурив этот мануал. Но все основные и интересные моменты мы рассмотрели, так что у тебя теперь достаточно информации для полноценного использования этой тулзы.

А в качестве домашнего задания можешь самостоятельно проверить, как «хорошо» детектируют антивирусы полученные после внедрения полезной нагрузки файлы.

Kali Linux

Безопасность и защита Kali Linux

Изменении пароля по умолчанию

Эта простая команда запросит у нас пароль текущего пользователя (по умолчанию, если мы его еще не изменили). Затем он запросит новый пароль и снова проверит его. Хороший пароль должен содержать как прописные, так и строчные буквы, а также символы и цифры. После проверки пароля наш пароль будет изменен. Мы видим это на следующем скриншоте:
смена пароля в Kali

Изменение пароля Kali Linux

Нам нужно помнить, что наш набранный пароль не будет отображаться по соображениям безопасности.

Учетная запись непривилегированного пользователя

Ранее пользователь root был пользователем Kali по умолчанию. Теперь все изменилось после обновления Kali Linux 2020.1. Теперь пользователем Kali по умолчанию является учетная запись пользователя без полномочий root.

Непривилегированный пользователь находится непосредственно под основным пользователем-администратором, у которого есть все права root. Аналогично семейным и родительским счетам.

Мы даже можем использовать пользователя root прямо в нашей системе, но это не годится по соображениям безопасности. Мы не должны всегда использовать пользователя root.

Обновление Kali Linux

Существует множество версий Kali Linux. Kali Developers выпускает новую версию каждый квартал. Обновленные версии Kali поставляются с обновленными ядрами. Чтобы Kali Linux был непрерывным дистрибутивом, не нужно загружать ISO-образ и снова устанавливать его во время обновления. Нам просто нужно применить несколько команд для установки обновления. Подпишитесь на нас, чтобы получать уведомления о выходе обновления.

Также мы должны обновить и обновить наш Kali Linux через несколько дней, используя следующую команду:

Вывод: нам нужно часто обновлять и обновлять Kali Linux, а также обновлять дистрибутив каждый раз, когда он выпускается.

Изменение ключей SSH по умолчанию

На вид все нормально и круто, но проблема в том, что у всех одинаковые ключи. Давайте разберемся в этом так. Если мы загружаем программное обеспечение с веб-сайта, это та же самая дистрибутивная копия, которую скачивают все. Позже мы используем наши учетные записи с программным обеспечением для персонализации, и поставщик услуг предоставляет соответствующие возможности в соответствии с подпиской для этих учетных записей. Ключи SSH имеют те же основы, но используются для проверки файлов.

Если злоумышленник совершил атаку «Человек посередине» (MITM) или кампанию социальной инженерии, это может истощить нашу безопасность.

SSH дает нам возможность аутентифицироваться без ввода паролей каждый раз. Есть два типа ключей SSH. Один публичный, а другой частный. Нам нужно изменить наши общедоступные SSH-ключи, потому что у всех дистрибутивов они одинаковые, а сгенерировать закрытый ключ будет гарантировать, что только аутентифицированные пользователи могут получить к нему доступ.

Ключи SSH по умолчанию расположены в каталоге / etc / ssh. В этом списке будут показаны все ключи внутри. Вместо того, чтобы удалять их из базы данных, мы собираемся хранить их в безопасном месте. Для этого мы используем следующие команды:

Теперь все наши старые ключи SSH перемещены в каталог с именем old_keys.

Резервное копирование ключей ssh ​​Kali Linux

Теперь мы генерируем новые ключи, используя следующую команду:

Эта команда сгенерирует для нас новые ключи SSH. Как мы видим на следующем скриншоте.

Созданы новые ключи SSH Kali Linux

Если мы столкнулись с какой-либо проблемой, мы можем использовать наши резервные копии ключей SSH.

Анонимность в сети

Во время серфинга в Интернете с помощью машины Kali Linux используйте инструменты «NIPE» или «kalitorify» для безопасного и анонимного просмотра. Хотя рекомендуется использовать macchanger для подделки нашего Mac-адреса. Мы также советуем изменить имя нашего хоста с Kali на сервер имен и добавить хост, аналогичный 8.8.8.8.

Мониторинг логов

Логи Kali Linux

Использование инструментов top (встроено прямо в систему) или htop (sudo apt install htop) показывает нам активность мониторинга в реальном времени. Даже графический инструмент xfce4-taskmanager может выполнять аналогичные действия.

htop Kali Linux

Сканирование на наличие руткитов

Нам также необходимо часто сканировать нашу систему на наличие вредоносных программ и руткитов. Мы можем запустить сканирование с помощью наборов инструментов «Chkrootkit» или «Rkhunter». Несколько дней назад мы подробно обсуждали эту тему (поиск и удаление руткитов из Linux). Поэтому мы не думаем, что нам нужно это повторять. Эти инструменты похожи на антивирусные программы для систем Linux.

Заключение

Хотя Kali Linux создан для атак, сама по себе довольно безопасная среда. Но опытные пользователи выходят за рамки повседневных задач, и необходимо соблюдать надлежащие процедуры. Новые пользователи из других операционных систем, таких как Windows, могут подумать, что запуск Kali Linux внутри VMWare или VirtualBox является самым безопасным процессом. Это действительно так, но необходимо предпринять определенные шаги.

Читайте также: