
Воркшоп по разработке вредоносного ПО
В эпоху 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
В исходном коде этого репозитория используются некоторые зависимости. Вы можете установить их следующим образом (после установки Go):
go mod tidy
Некоторые примеры зависят от крейта windows-sys для вызова Windows API. Поскольку мы используем Cargo, пакеты будут управляться автоматически при компиляции тестовой или релизной сборки.
Слайды воркшопа ссылаются на некоторые ресурсы, которые вы можете использовать для начала работы. Дополнительные ресурсы, такие как соответствующие блоги или фрагменты кода, перечислены в файлах README.md для каждого упражнения!