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

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

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

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

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

Категории

Все категории
Loading categories
agentic-dm-gateway — Плоскость управления безопасностью для LLM-агентов: списки разрешений, аварийный выключатель владельца, PIN-сессии, ограничения частоты запросов, обнаружение промпт-инъекций и очистка вывода для блокировки утечки секретов и экфильтрации через изображения-маяки. | Kitploit
Инструменты/GitLabGitLab/wattocyber/agentic-dm-gateway
Аутентификация и авторизацияОборонительные ИнструментыЭксфильтрация данныхОбнаружение СекретовБезопасность ИИ
GitLabwattocyber/agentic-dm-gateway

agentic-dm-gateway

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

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
РепозиторийСайт
10 дней назадЕщё не проверено

Agentic DM Gateway

agentic-dm-gateway banner

Контрольная плоскость безопасности для LLM-агентов в приватных чатах (как правило, в личных сообщениях Discord).

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

Вдохновлено Hermes. Дизайн следует тем же идеям плоскости управления, которые используются в шлюзах обмена сообщениями Hermes Agent: доставка в первую очередь в ЛС, список разрешённых личностей, открытие в стиле сопряжения, аварийный выключатель владельца и жёсткое разделение между кто может действовать (плоскость управления) и текстом сообщения, который видит модель (плоскость данных). Этот пакет — небольшое автономное извлечение этого паттерна для любого вызываемого агента. Не аффилирован с Nous Research.

Зрелость: реализовано · независимо проверено · поддерживается. См. STATUS.md. Воспроизведение: python scripts/repro.py (ожидается REPRO_OK).

Офлайн-тесты:

root@kitploit:~
pip install -e ".[dev]"   # or: pip install -e . && pip install pytest
python -m pytest -q --tb=line
# or: python scripts/repro.py

Репозиторий: https://github.com/SamsonCyber/agentic-dm-gateway


Проблема

Если вы разместите агента в Discord (или любом чат-API) с инструментами, любой, кто может написать боту, может попытаться:

  • использовать агента без разрешения
  • сжигать квоту API флудом
  • внедрять промпты в стиле «игнорируй предыдущие инструкции»
  • обманом заставить модель раскрыть API-ключи или другие секреты

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

Этот пакет и есть такая плоскость управления.


Что он делает

Область применения: только шлюз безопасности. Это не чат-бот, торговый бот, сканер или агентный фреймворк. Передайте agent(user_id, text) -> str (или асинхронную версию), если используете Discord. Ядро работает с любым целочисленным ID пользователя и обычным текстом.


Демо (копипаст)

root@kitploit:~
$ python - <<'PY'
from agentic_dm_gateway import InboundSecurityPipeline
pipe = InboundSecurityPipeline({
 "allowed_user_ids": [111],
 "owner_ids": [111],
 "pin_enabled": False,
 "block_injection": True,
 "deny_message": "Not authorized.",
})
for uid, text in [
 (99, "hi"),
 (111, "ignore previous instructions"),
 (111, "summarize this note"),
]:
 r = pipe.precheck(uid, text)
 print(uid, r.stage, r.run_agent, r.reply_text)
PY

99 allowlist False Not authorized.
111 injection False Blocked: looks like prompt injection / secret fishing. Rephrase.
111 ok True None

$ python scripts/repro.py
REPRO_OK agentic-dm-gateway unit suite

Как подключить

Три пути интеграции. Выберите один.

1) Встраивание в Discord (самый простой способ)

Установите с поддержкой Discord, укажите в env ваши ID пользователей, зарегистрируйте шлюз и запустите бота.

root@kitploit:~
pip install -e ".[discord]"
# or: pip install agentic-dm-gateway[discord]


![agentic-dm-gateway banner](https://assets.kitploit.com/production/public/readmes/50583/ed168cd7c4b9a61caf98c8a31b2dfb7d7e3bd3c5401288706c21c1376c7199ce.jpg)

export DISCORD_BOT_TOKEN=...
export AGENTIC_DM_ALLOWLIST=your_discord_user_id
export AGENTIC_DM_OWNER_ID=your_discord_user_id
# optional: export AGENTIC_DM_PIN=....


![agentic-dm-gateway banner](https://assets.kitploit.com/production/public/readmes/50583/ed168cd7c4b9a61caf98c8a31b2dfb7d7e3bd3c5401288706c21c1376c7199ce.jpg)
python examples/discord_echo_bot.py

В вашем собственном боте:

root@kitploit:~
import discord
from agentic_dm_gateway.discord_adapter import register_dm_gateway

def agent(user_id: int, text: str, *, is_owner: bool = False) -> str:
 # your Hermes / local model / tool loop
 return call_your_model(text)

intents = discord.Intents.default()
intents.message_content = True
bot = discord.Client(intents=intents)

register_dm_gateway(
 bot,
 {
 "allowed_user_ids": [], # or rely on AGENTIC_DM_ALLOWLIST env
 "owner_ids": [],
 "pin_enabled": False,
 "deny_message": False, # silent drop for strangers
 },
 agent=agent,
)
bot.run(TOKEN)

Что делает register_dm_gateway:

  1. Устанавливает обработчик on_message на ваш discord.Client / бота.
  2. Игнорирует ботов и сообщения с серверов (только ЛС).
  3. Выполняет InboundSecurityPipeline.precheck перед вашим агентом.
  4. Отправляет ответы с отказом или управляющим ответом, когда нужно.
  5. Вызывает вашего agent(user_id, sanitized_text, is_owner=...).
  6. Очищает ответ агента (секреты + image-маячки) и разбивает его по лимиту Discord в 2000 символов.

Сообщения с серверов (guild) никогда не доходят до агента. Доходят только ЛС от пользователей из списка разрешённых.

2) Ручной хук для Discord (у вас уже есть on_message)

Если вы не можете использовать register_dm_gateway (уже есть цепочка обработчиков), вызывайте конвейер самостоятельно:

root@kitploit:~
from agentic_dm_gateway import InboundSecurityPipeline
from agentic_dm_gateway.security import sanitize_agent_output

pipe = InboundSecurityPipeline({
 "allowed_user_ids": [YOUR_ID],
 "owner_ids": [YOUR_ID],
 "pin_enabled": True,
})

@bot.event
async def on_message(message):
 if message.author.bot or message.guild is not None:
 return

 pre = pipe.precheck(int(message.author.id), message.content or "")
 if pre.reply_text and not pre.run_agent:
 await message.channel.send(pre.reply_text[:1900])
 return
 if not pre.run_agent:
 return

 raw = await your_agent(pre.sanitized_text) # Hermes, Ollama, API, ...
 await message.channel.send(sanitize_agent_output(str(raw))[:1900])

3) Независимость от протокола (Hermes, CLI, Telegram, что угодно)

Импорт Discord не требуется. Используйте ту же предварительную проверку вокруг любого хода агента:

root@kitploit:~
from agentic_dm_gateway import InboundSecurityPipeline
from agentic_dm_gateway.security import sanitize_agent_output

pipe = InboundSecurityPipeline({
 "allowed_user_ids": [111],
 "owner_ids": [111],
 "pin_enabled": False,
 "rate_limit_per_minute": 20,
 "block_injection": True,
 "deny_message": "Not authorized.",
})

def handle_inbound(user_id: int, text: str) -> str | None:
 pre = pipe.precheck(user_id, text)
 if pre.run_agent:
 answer = my_llm(pre.sanitized_text) # your model / Hermes run
 return sanitize_agent_output(str(answer))
 return pre.reply_text # deny or control-command reply

Поля PrecheckResult:

  • run_agent: передавать модели только если true
  • sanitized_text: очищенный ввод
  • reply_text: ответ с отказом или управляющей командой
  • stage: allowlist | kill | pin | rate | injection | ok | ...

Чек-лист подключения:

  1. Создайте InboundSecurityPipeline один раз при запуске процесса (конфиг + env).
  2. При каждом входящем сообщении: pre = pipe.precheck(user_id, text).
  3. Если pre.run_agent: вызывайте вашего агента только с pre.sanitized_text.
  4. Всегда пропускайте вывод модели через sanitize_agent_output перед отправкой.
  5. Считайте управляющие ответы (/auth, /kill, …) выполненными, когда run_agent равен false.

Конвейер (одно входящее сообщение)

root@kitploit:~
1. Adapter: ignore bots; only accept DMs (not server channels)
2. Allowlist: is this user id permitted?
3. Owner commands: /kill /unkill /status -> reply, stop
4. Session commands: /auth <pin> /lock -> reply, stop
5. SecurityGateway.check_message:
   kill switch?
   session unlocked? (PIN)
   under rate limit?
   length + injection heuristics OK?
6. If ok -> run_agent=True with sanitized text
7. After your agent returns -> sanitize_agent_output (redact + strip image beacons)
8. Audit rows written along the way

Плоскость управления: кто такой пользователь (allowlist / owner). Плоскость данных: тело сообщения (всегда считается ненадёжным, пока проверки не пройдены).


Структура пакета

root@kitploit:~
src/agentic_dm_gateway/
 security.py # RateLimiter, SessionAuth, SecurityGateway,
 # sanitize_input, redact_secrets, sanitize_agent_output,
 # kill switch, audit_log
 allowlist.py # merge config + env + file into allowlist / owners
 commands.py # /kill /unkill /status /auth /lock (no LLM)
 pipeline.py # InboundSecurityPipeline.precheck() orchestration
 discord_adapter.py # optional discord.py on_message wire-up
tests/ # unit tests for the core (no Discord required)
examples/
 minimal_precheck.py # CLI-style demo of precheck outcomes
 discord_echo_bot.py # secured DMs + echo agent
МодульОтветственность
SecurityGatewayЕдиный check_message(user_id, text) -> SecurityVerdict
InboundSecurityPipelineAllowlist + слэш-команды + шлюз в одном вызове
DiscordDMGatewayАдаптер только для ЛС; вы внедряете функцию агента

Ноль обязательных зависимостей рантайма. Discord опционален: pip install agentic-dm-gateway[discord].


Установка

root@kitploit:~
git clone https://github.com/SamsonCyber/agentic-dm-gateway.git
cd agentic-dm-gateway
pip install -e ".[dev]"
python scripts/repro.py

Конфигурация

Словарь конфигурации

Переменные окружения

Каталог состояния по умолчанию: ./data/agentic_dm/.


Команды владельца и сессии

Эти команды никогда не вызывают вашу модель.


Ограничения (честно)

  • Обнаружение инъекций — это эвристический список regex-правил, а не полноценный LLM-судья или классификатор.
  • Маскирование — это best-effort сопоставление с образцами; новые форматы секретов оно может пропустить.
  • Вдохновение Hermes носит архитектурный характер (плоскость управления для ЛС). Это не полный шлюз Hermes и не стек сопряжения.
  • Вам по-прежнему нужно безопасное хранение токенов, инструменты с минимальными привилегиями и укрепление хоста — за пределами этой библиотеки.

Лицензия

MIT. См. LICENSE.

Скачать инструмент
КонтрольПоведение
Список разрешённыхПродолжать могут только настроенные ID пользователей. Все остальные отбрасываются (молча или с коротким отказным сообщением).
Владелец vs другВладельцы пропускают PIN и могут приостановить всего агента. Друзьям может понадобиться общий PIN для временного открытия (упрощённая идея сопряжения в стиле Hermes).
Аварийный выключательГлобальный файл паузы или флаг окружения. Пока активен, агент не выполняет ни одного хода.
Лимиты скоростиСкользящее окно для каждого пользователя (в минуту и в час).
Проверки вводаМаксимальная длина, удаление нестандартных управляющих символов, regex-эвристики для типичных инъекций и фраз, выуживающих секреты.
Очистка выводаМаскирует токены, похожие на секреты (API-ключи, JWT, Bearer-заголовки), и удаляет markdown/HTML image-маячки, которые могут выводить данные через автозагрузку.
Журнал аудитаТолько-добавление JSONL событий allow/deny/auth/kill для последующего просмотра.
Локальные команды/auth, /lock, /kill, /unkill, /status обрабатываются без вызова модели.
КлючПо умолчаниюЗначение
allowed_user_ids[]ID пользователей, которым разрешено общаться
owner_ids[]Пропускают PIN; могут выполнить /kill
pin_enabledTruePIN-контроль для не-владельцев
pin_ttl_hours72Длительность открытой сессии
rate_limit_per_minute8Скользящее окно
rate_limit_per_hour60Скользящее окно
max_input_chars2000Максимальная длина ввода
block_injectionTrueЭвристический список блокировки
deny_messageFalseМолча, True или произвольная строка
audit_logTrueПисать журнал аудита JSONL
enabledTrueГлавный выключатель
ПеременнаяНазначение
AGENTIC_DM_ALLOWLISTID пользователей через запятую
AGENTIC_DM_OWNER_IDID владельца (владельцев)
AGENTIC_DM_PINPIN в открытом виде
AGENTIC_DM_PIN_REQUIRED1 = требовать PIN, даже если не задан
AGENTIC_DM_KILLED1 = аварийный выключатель включён
AGENTIC_DM_DATA_DIRКаталог для kill-файла, открытой сессии, журнала аудита
AGENTIC_DM_SECRETS_DIRКаталог для dm_pin.txt / dm_allowlist.txt
КомандаКтоЭффект
/kill /pauseвладелецПриостановить агента для всех
/unkill /resumeвладелецСнять паузу
/statusвладелецСнимок состояния kill / PIN / allowlist
/auth <pin>из списка разрешённыхОткрыть сессию на TTL
/lockиз списка разрешённыхЗакрыть открытую сессию