Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
GraphStrike — Cobalt Strike HTTPS-биконинг через Microsoft Graph API | Kitploit
Инструменты/GitHubGitHub/redsiege/graphstrike
Фреймворки для пентестаФреймворки для эксплойтовБезопасность облачных средКомандование и УправлениеRed TeamingБезопасность API
GitHubredsiege/graphstrike

GraphStrike

Cobalt Strike HTTPS-биконинг через Microsoft Graph API

Репозиторий
6359932 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

GraphStrike

gscolor

Блог о релизе: GraphStrike: Использование Microsoft Graph API для исчезновения трафика Beacon
Блог разработчика: GraphStrike: Анатомия разработки наступательных инструментов

Введение

GraphStrike — это набор инструментов, который позволяет HTTPS Beacon от Cobalt Strike использовать Microsoft Graph API для связи C2. Весь трафик Beacon будет передаваться через два файла, созданные на сайте SharePoint атакующего, и все коммуникации от Beacon будут направляться на https://graph.microsoft.com:

image

GraphStrike включает в себя провизионер для создания необходимых ресурсов Azure для Cobalt Strike HTTPS через Graph API:

image

GraphStrike не создает платных ресурсов в Azure, поэтому использование GraphStrike или его провизионера не влечет дополнительных затрат.

Зачем?

Была опубликована информация об угрозах, касающаяся нескольких различных APT, использующих Microsoft Graph API и другие сервисы Microsoft для наступательных кампаний:

BLUELIGHT - APT37/InkySquid/ScarCruft
  • Graphite - APT28/Fancy Bear
  • Graphican - APT15/Nickel/The Flea
  • SiestaGraph - UNKNOWN
  • Злоумышленники продолжают использовать легитимные сервисы в нелегитимных целях. Использование домена с высоким рейтингом, такого как graph.microsoft.com, для связи C2 чрезвычайно эффективно и желательно, но часто сложно и трудоемко. Большинство C2-фреймворков не поддерживают методы получения или ротации токенов доступа, что не позволяет им использовать Graph API. Это может затруднить для красных команд воспроизведение этих техник и лишает защитников возможности наблюдать и разрабатывать сигнатуры для такого рода активности. GraphStrike стремится облегчить это бремя и предоставить надежный и повторяемый процесс использования Microsoft Graph API, сохраняя при этом знакомство и надежность пользовательского опыта Cobalt Strike.

    Это External C2?

    Технически нет. Ранее создав настоящий External C2 с использованием Graph API (который отправлял трафик Beacon в виде сообщений Microsoft Teams), бремя разработки, поддержки и интеграции пользовательского импланта, соответствующего спецификации External C2 и выполняющего задачу, слишком знакомо. GraphStrike вместо этого использует открытый User Defined Reflective Loader(UDRL) под названием AceLdr от Кайла Эйвери (адаптированный как 'GraphLdr' в этом проекте) для перехвата вызовов библиотеки WinINet, которые обычно делает Beacon, и манипулирования ими по мере необходимости для использования Graph API. Нет никакого пользовательского импланта или дополнительного процесса, о котором стоит говорить, просто процесс Beacon с парой перехваченных Windows API. На стороне сервера есть программа на Python3, которая переводит трафик Cobalt Strike Team Server в трафик Graph API и обратно.

    Возможности

    GraphStrike поддерживает почти все обычные действия Cobalt Strike, включая:

    1. Использование Proxychains через SOCKS-прокси Cobalt Strike (хотя это очень медленно...)
    2. Загрузка/выгрузка больших файлов
    3. BOFs, execute-assembly и т.д.

    Это также включает интеграцию GraphStrike команд sleep, exit и remove для согласования времени сна GraphStrike Server с Beacon, а также удаление файлов в SharePoint при выходе или удалении Beacon.

    GraphStrike также включает все функции и возможности оригинального AceLdr, а также некоторые дополнительные API для использования подделки стека вызовов.

    Требования

    GraphStrike требует следующего перед началом работы:

    1. Клиент Microsoft Azure с назначенной лицензией SharePoint/O365 и созданным сайтом. Стандартный сайт подойдет.
    2. Учетная запись Azure с правами глобального администратора в этом клиенте.
    3. Python 3.8-3.11Примечание №4 (и дополнительные зависимости, которые будут установлены в процессе настройки)

    Правила брандмауэра

    1. Убедитесь, что каждая машина, на которой запущен клиент Cobalt Strike, может подключаться к машине Cobalt Strike team server на портах 443 и 5000.

    Настройка

    Обратите внимание на следующее перед началом процесса настройки:

    1. Некоторые компоненты используют относительные пути для поиска других ресурсов. Пожалуйста, переходите в каталоги, как указано ниже.
    2. Профиль Cobalt Strike можно редактировать ТОЛЬКО ДО шага 5 в процессе настройки нижеПримечание №1.

    На машине, которая будет запускать Cobalt Strike team server:

    1. Клонируйте репозиторий.
    2. Из каталога репозитория выполните sudo setup/install_dependencies.sh для установки необходимых системных зависимостей.
    3. Выполните python3 -m venv virtual, а затем source virtual/bin/activate для создания и входа в виртуальное окружение.
    4. Перейдите в каталог setup и выполните pip3 install -r requirements.txt.
    5. Запустите ./provisioner.py new и завершите процесс настройки.
    6. Запустите Cobalt Strike team server, используя graphstrike.profile в качестве изменяемого профиля C2.
    7. Запустите экземпляр клиента Cobalt Strike (это можно сделать на клиентской машине или на машине TS и затем завершить его) и создайте HTTPS-прослушиватель Cobalt Strike на порту 443 с graph.microsoft.com в полях HTTPS Hosts и HTTPS Host(Stager).
    8. Вернитесь в основной каталог репозитория и запустите GraphStrike Server с помощью ./GraphStrike.py.

    На ВСЕХ машинах, которые будут запускать клиент Cobalt Strike:

    1. Скопируйте каталог GraphStrike/client с машины TS на клиентскую машину. Это должно быть сделано ТОЛЬКО ПОСЛЕ завершения провизионирования!
    2. Импортируйте GraphStrike.cna в Cobalt Strike через Script Manager.
    3. Создайте полезные нагрузки Cobalt Strike, будь то сырой шелл-код или скомпилированные артефакты с помощью Artifact Kit или альтернативного фреймворка генерации полезных нагрузок. Пользователи Artifact Kit смотрите ниже!
    4. Профит.

    Пользователи Artifact Kit

    Из-за размера GraphLdr пользователям Artifact Kit потребуется перекомпилировать его с конкретными параметрами, чтобы GraphStrike был совместим с полезными нагрузками, созданными Artifact Kit. В частности, поля 'Stage Size' и 'RDLL Size' должны быть указаны для использования размера RDLL 100K. Ниже приведены два примера рабочего синтаксиса:

    ./build.sh pipe VirtualAlloc 505029 100 false false none /opt/cobaltstrike/artifacts
    ./build.sh peek HeapAlloc 492376 100 false true indirect /opt/cobaltstrike/artifacts

    Очистка

    На машине, на которой запущены TS + GraphStrike Server:

    1. Остановите GraphStrike server
    2. Вернитесь в каталог setup и выполните ./provisioner.py delete для удаления созданных ресурсов Azure.

    Примечания

    В произвольном порядке приведены несколько советов и наблюдений, которые помогут использовать GraphStrike в полной мере.

    1. Включенный в GraphStrike профиль очень минималистичен; это сделано намеренно. Изменение любых СУЩЕСТВУЮЩИХ полей в профиле может/сломает GraphStrike! Вы должны иметь возможность добавлять дополнительный язык/поведение профиля в другие разделы, которые еще не определены (например, настроить имя канала, поведение инъекции и т.д.). Любые правки профиля ДОЛЖНЫ быть сделаны ДО запуска провизионера!
    2. Приложение Azure, используемое для связи C2 как Beacon, так и GraphStrike Server, имеет ограничение скорости 1200 запросов в минуту. GraphStrike Server использует 120 запросов в минуту в качестве базового уровня для функционирования. Чем меньше время сна Beacon, тем больше запросов он будет делать; кроме того, каждый Beacon, созданный с помощью GraphStrike, будет использовать часть этого лимита в 1200 запросов в минуту. Работа в интерактивном режиме с одним Beacon возможна, но работа в интерактивном режиме с более чем одним Beacon, вероятно, нет. Если вы столкнулись с проблемами ограничения скорости, рассмотрите возможность увеличения времени сна ваших Beacon, уменьшения количества работающих Beacon или и то, и другое.
    3. Хотя время сна GraphStrike Server изменяется для каждого Beacon в соответствии с выданными командами сна, это на самом деле означает, что GraphStrike Server будет спать указанное время перед проверкой наличия задач у TS. Это НЕ означает, что Beacon немедленно получит и обработает задачи, как только они будут получены от TS сервером GraphStrike. Beacon будет спать указанное время перед обращением к SharePoint для получения задач TS, но из-за асинхронной природы C2 это не будет синхронизировано с моментом загрузки этих задач сервером GraphStrike.
    4. Если Beacon умирает без корректного завершения (антивирус, сбой и т.д.), Beacon будет казаться все еще обращающимся к TS, и факт его смерти станет очевиден только после того, как вы отдадите ему команду. На самом деле к TS подключается / создает видимость, что Beacon все еще обращается, сервер GraphStrike, поэтому это не отражает состояние Beacon. Такова природа асинхронного C2.
    5. GraphStrike работает по модели 1:1:1; 1 сайт SharePoint связан с 1 сервером GraphStrike, который связан с 1 TS. У вас возникнут проблемы, если вы попытаетесь подключить два сервера TS/GraphStrike к одному сайту SharePoint. Вы, конечно, можете подключить несколько клиентов Cobalt Strike к одному серверу TS / GraphStrike, каждому клиенту просто нужна копия папки 'client', созданной в процессе провизионирования.
    6. Существует известная проблема относительно совместимости утилиты az, используемой GraphStrike, и Python 3.12.
    7. Я рекомендую вам ознакомиться с документацией AceLdr, так как все примечания из этого проекта применимы и здесь.

    Ограничения

    В GraphStrike существуют следующие ограничения:

    1. Поддерживаются только x64 Beacon.
    2. Staged Beacon не поддерживаются.
    3. GraphStrike совместим только с библиотекой WinINet; новая опция библиотеки WinHTTP для Beacon не поддерживается.
    4. Нет поддержки отправки команды сна через контекстное меню Beacon. Используйте параметр командной строки для сна Beacon.
    5. GraphStrike поддерживается только на Linux-экземплярах Cobalt Strike. Поддержка Windows, безусловно, возможна для реализации и на самом деле сводится к изменению некоторых путей в файлах Python и скрипте Aggressor.

    Благодарности

    GraphStrike был бы невозможен без вклада следующих лиц:

    1. Kyle Avery for AceLdr
    2. Didier Stevens for cs-decrypt-metadata.py
    3. Майк Сондерс, Кори Оверстрит, Крис Трансер и Джастин Палк из команды Red Siege, которые любезно протестировали GraphStrike и выявили множество проблем, исправленных до релиза.
    Скачать инструмент