
Воркшоп по разработке вредоносного ПО
В эпоху EDR операторам красных команд больше не обойтись использованием предварительно скомпилированных полезных нагрузок. В связи с этим разработка вредоносного ПО становится жизненно важным навыком для любого оператора. Начать работу с maldev может показаться пугающим, но на самом деле это очень просто. Этот воркшоп покажет вам всё, что нужно для начала!
Этот репозиторий содержит слайды и сопутствующие упражнения для воркшопа «MalDev для чайников», который проходил/будет проходить на Hack in Paris 2022 и X33fcon 2023. Хотя слайды были разработаны для очного представления, материалы и упражнения останутся здесь, чтобы вы могли выполнять их в своём темпе — процесс обучения никогда не стоит торопить! Приветствуются вопросы и предложения через Issues и Pull requests к этому репозиторию.
⚠ Отказ от ответственности: Разработка вредоносного ПО — это навык, который можно и нужно использовать во благо, для развития сферы (наступательной) безопасности и поддержания нашей защиты в тонусе. Если вы когда-либо используете этот набор навыков для действий, на которые у вас нет разрешения, вы больший «чайник», чем рассчитано на этот воркшоп, и вам следует убираться отсюда.
С каждым днём антивирусные (AV) и корпоративные системы обнаружения и реагирования (EDR) становятся всё более зрелыми, что заставляет красные команды опережать их. Времена execute-assembly и сброса немодифицированных полезных нагрузок на диск прошли — если вы хотите, чтобы ваши операции длились дольше недели, вам придётся повысить уровень создания полезных нагрузок и разработки вредоносного ПО. Однако начать в этой области может быть непросто, и найти подходящие ресурсы не всегда легко.
Этот воркшоп ориентирован на новичков и проведёт вас через первые шаги в роли разработчика вредоносного ПО. Он в первую очередь предназначен для практикующих специалистов по атакам, но защитники также приветствуются — для расширения своих навыков.
В ходе воркшопа мы рассмотрим теорию, после чего настроим вам лабораторную среду. Будут различные упражнения, которые вы сможете выполнить в зависимости от вашего текущего уровня навыков и комфорта с темой. Однако цель воркшопа — учиться, а явно не выполнить все упражнения. Вы можете свободно выбирать предпочитаемый язык программирования для разработки вредоносного ПО, но поддержка во время воркшопа предоставляется в первую очередь для языков C# и Nim.
На воркшопе мы обсудим ключевые темы, необходимые для начала создания собственного вредоносного ПО. Это включает (но не ограничивается):
Чтобы начать разработку вредоносного ПО, вам понадобится машина для разработки, чтобы вас не беспокоили защитные инструменты, работающие на вашем основном компьютере. Я предпочитаю Windows для разработки, но Linux или MacOS тоже подойдут. Установите редактор/IDE по своему выбору (я использую VS Code почти для всего, кроме C#, для которого использую Visual Studio), а затем установите инструментарий для выбранного языка MalDev:
Не забудьте отключить Защитник Windows или добавить соответствующие исключения, чтобы ваша работа не была помещена в карантин! Позже мы сможем протестировать на отдельной машине с включенными защитными средствами, такими как AV.
ℹ Примечание: Часто менеджеры пакетов, такие как apt, или инструменты управления программным обеспечением, такие как Chocolatey или Winget (теперь встроенный!), можно использовать для автоматизации установки и управления зависимостями удобным и повторяемым способом. Однако помните, что версии в менеджерах пакетов могут отставать от реальных на несколько версий! Ниже приведён пример команды для установки всех упомянутых инструментов за один раз.
choco install -y nim choosenim go rust vscode visualstudio2019community dotnetfx
Языки, которые мы будем обсуждать на этом воркшопе, являются компилируемыми языками, то есть компилятор используется для преобразования вашего исходного кода в двоичные исполняемые файлы выбранного формата. Процесс компиляции различается для каждого языка.
Код C# (файлы .cs) можно компилировать либо напрямую (с помощью утилиты csc), либо через саму Visual Studio. Большая часть исходного кода в этом репозитории (кроме решения бонусного упражнения 3) может быть скомпилирована следующим образом.
ℹ Примечание: Убедитесь, что вы запускаете приведённую ниже команду в «Командной строке разработчика Visual Studio», чтобы она знала, где найти
csc. Рекомендуется использовать «Командную строку x64 Native Tools» для вашей версии Visual Studio. Флаг/unsafeпотребуется для большинства скриптов, где мы напрямую обращаемся к низкоуровневым функциям.
csc filename.exe
Вы можете включить оптимизации во время компиляции с помощью флага /optimize. Вы также можете скрыть окно консоли, добавив /target:winexe, или скомпилировать как DLL с помощью /target:library (но убедитесь, что структура вашего кода подходит для этого).
Код Nim (файлы .nim) компилируется командой nim c. Исходный код в этом репозитории можно скомпилировать следующим образом.
nim c filename.nim
Если вы хотите оптимизировать сборку по размеру и удалить отладочную информацию (что гораздо лучше для OPSEC!), вы можете добавить следующие флаги.
nim c -d:release -d:strip --opt:size filename.nim
При необходимости вы также можете скрыть окно консоли, добавив --app:gui.
Код Golang (файлы .go) компилируется командой go build. Исходный код в этом репозитории можно скомпилировать следующим образом.
GOOS=windows go build
Если вы хотите оптимизировать сборку по размеру и удалить отладочную информацию (что гораздо лучше для OPSEC!), вы можете добавить следующие флаги.
GOOS=windows go build -ldflags "-s -w"
Код Rust (файлы .rs) компилируется через команду cargo. Cargo может использоваться для управления зависимостями и сборки проекта. Исходный код в этом репозитории можно скомпилировать, перейдя в папку проекта и выполнив следующую команду.
cargo build
Если вы хотите оптимизировать сборку по размеру и удалить отладочную информацию, вы можете добавить следующие флаги. Также обратитесь к разделу [profile.release] в каждом файле Cargo.toml для некоторых опций OPSEC во время компиляции.
cargo build --release
Большинство решений можно скомпилировать без зависимостей. Если зависимости требуются, предоставляется проект Visual Studio, который ссылается на соответствующие пакеты NuGet.
Большинство программ на Nim зависят от библиотеки «Winim» для взаимодействия с Windows API. Вы можете установить библиотеку с помощью менеджера пакетов Nimble следующим образом (после установки Nim):
nimble install winim