Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
agentic-dm-gateway — Plan de contrôle de sécurité pour agents LLM : listes d'autorisation, interrupteur d'arrêt d'urgence du propriétaire, sessions PIN, limites de débit, détection d'injection de prompt et nettoyage des sorties pour bloquer les fuites de secrets et l'exfiltration par balises image. | Kitploit
Outils/GitLabGitLab/wattocyber/agentic-dm-gateway
Authentification et AutorisationOutils DéfensifsExfiltration de DonnéesDétection de SecretsSécurité de l'IA
GitLabwattocyber/agentic-dm-gateway

agentic-dm-gateway

Plan de contrôle de sécurité pour agents LLM : listes d'autorisation, interrupteur d'arrêt d'urgence du propriétaire, sessions PIN, limites de débit, détection d'injection de prompt et nettoyage des sorties pour bloquer les fuites de secrets et l'exfiltration par balises image.

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôtSite web
il y a 10 joursPas encore vérifié

Agentic DM Gateway

agentic-dm-gateway banner

Plan de contrôle de sécurité pour les agents LLM sur chat privé (généralement les messages privés Discord).

Il se place devant votre agent. Il décide qui peut parler, si la session est déverrouillée, si le processus est en pause et si ce message est suffisamment sûr pour être transmis. Votre modèle et vos outils restent derrière cette porte. La bibliothèque n'appelle pas de LLM. Elle n'implémente pas de fonctionnalités produit au-delà de la sécurité.

Inspiré d'Hermes. La conception suit les mêmes idées de plan de contrôle utilisées dans les passerelles de messagerie Hermes Agent : livraison en message privé d'abord, listes blanches d'identités, ouverture de type appairage, interrupteur d'arrêt du propriétaire et une séparation stricte entre qui peut agir (plan de contrôle) et le texte du message que le modèle voit (plan de données). Ce paquet est un petit extrait autonome de ce modèle pour tout agent appelable. Non affilié à Nous Research.

Maturité : implémenté · validé indépendamment · maintenu. Voir STATUS.md. Reproduire : python scripts/repro.py (attend REPRO_OK).

Tests hors ligne :

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

En direct : https://github.com/SamsonCyber/agentic-dm-gateway


Le problème

Si vous placez un agent sur Discord (ou toute autre API de chat) avec des outils, toute personne pouvant envoyer un message au bot peut tenter de :

  • utiliser l'agent sans autorisation
  • épuiser le quota API avec des inondations de messages
  • injecter des invites de type « ignore les instructions précédentes »
  • piéger le modèle pour qu'il divulgue des clés API ou d'autres secrets

Vous avez besoin d'un plan de contrôle (contrôles d'identité et de processus) distinct du plan de données (texte du message que le modèle voit).

Ce paquet est ce plan de contrôle.


Ce qu'il fait

Périmètre : passerelle de sécurité uniquement. Pas un chatbot, un bot de trading, un scanneur ou un framework d'agents. Fournissez un agent(user_id, text) -> str (ou async) si vous utilisez Discord. Le cœur fonctionne avec n'importe quel identifiant d'utilisateur entier et du texte brut.


Démo (copier-coller)

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

Comment l'intégrer

Trois chemins d'intégration. Choisissez-en un.

1) Discord prêt à l'emploi (le plus simple)

Installez avec le support Discord, pointez l'environnement vers vos identifiants d'utilisateur, enregistrez la passerelle, lancez le bot.

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

Dans votre propre bot :

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)

Ce que fait register_dm_gateway :

  1. Installe un gestionnaire on_message sur votre discord.Client / bot.
  2. Ignore les bots et les messages de serveur (messages privés uniquement).
  3. Exécute InboundSecurityPipeline.precheck avant votre agent.
  4. Envoie les réponses de refus / de contrôle si nécessaire.
  5. Appelle votre agent(user_id, sanitized_text, is_owner=...).
  6. Nettoie la réponse de l'agent (secrets + balises d'image) et la segmente pour respecter la limite de 2000 caractères de Discord.

Les messages de serveur n'atteignent jamais l'agent. Seuls les messages privés des utilisateurs de la liste blanche le peuvent.

2) Branchement Discord manuel (vous avez déjà on_message)

Si vous ne pouvez pas utiliser register_dm_gateway (chaîne de gestionnaires existante), appelez le pipeline vous-même :

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) Indépendant du protocole (Hermes, CLI, Telegram, tout autre)

Aucun import Discord requis. Utilisez le même précontrôle autour de chaque tour d'agent :

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

Champs de PrecheckResult :

  • run_agent : transmettre au modèle uniquement si vrai
  • sanitized_text : entrée nettoyée
  • reply_text : réponse de refus / de commande de contrôle
  • stage : allowlist | kill | pin | rate | injection | ok | ...

Liste de vérification du branchement :

  1. Construisez InboundSecurityPipeline une fois au démarrage du processus (configuration + environnement).
  2. À chaque message entrant : pre = pipe.precheck(user_id, text).
  3. Si pre.run_agent : appelez votre agent avec pre.sanitized_text uniquement.
  4. Faites toujours passer la sortie du modèle par sanitize_agent_output avant l'envoi.
  5. Considérez les réponses de contrôle (/auth, /kill, …) comme traitées lorsque run_agent est faux.

Pipeline (un message entrant)

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

Plan de contrôle : qui est l'utilisateur (liste blanche / propriétaire). Plan de données : corps du message (toujours non fiable tant que les vérifications n'ont pas réussi).


Structure du paquet

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
ModuleResponsabilité
SecurityGatewayUn unique check_message(user_id, text) -> SecurityVerdict
InboundSecurityPipelineListe blanche + commandes slash + passerelle en un seul appel
DiscordDMGatewayAdaptateur messages privés uniquement ; vous injectez la fonction agent

Zéro dépendance d'exécution requise. Discord est facultatif : pip install agentic-dm-gateway[discord].


Installation

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

Configuration

Dictionnaire de configuration

Environnement

Répertoire d'état par défaut : ./data/agentic_dm/.


Commandes propriétaire et session

Ces commandes n'appellent jamais votre modèle.


Limites (honnêtement)

  • La détection d'injection est une liste heuristique de regex, pas un juge LLM complet ni un classifieur.
  • Le masquage est une correspondance de motifs au mieux ; il manquera les nouveaux formats de secrets.
  • L'inspiration Hermes est architecturale (plan de contrôle des messages privés). Ce n'est pas une passerelle Hermes complète ni une pile d'appairage.
  • Vous avez toujours besoin d'un stockage sécurisé des jetons, d'outils au privilège minimal et d'un durcissement de l'hôte en dehors de cette bibliothèque.

Licence

MIT. Voir LICENSE.

Télécharger l’outil
ContrôleComportement
Liste blancheSeuls les identifiants d'utilisateur configurés peuvent continuer. Tous les autres sont écartés (silencieusement ou avec un court message de refus).
Propriétaire vs amiLes propriétaires n'ont pas besoin de PIN et peuvent mettre en pause tout l'agent. Les amis peuvent avoir besoin d'un PIN partagé pour une ouverture limitée dans le temps (idée d'appairage de style Hermes, simplifiée).
Interrupteur d'arrêtFichier de pause global ou drapeau d'environnement. Aucun tour d'agent tant qu'il est actif.
Limites de débitFenêtre glissante par utilisateur (par minute et par heure).
Contrôles d'entréeLongueur maximale, suppression des caractères de contrôle étranges, heuristiques regex pour les phrases courantes d'injection / de pêche de secrets.
Nettoyage de sortieMasque les jetons de type secret (clés API, JWT, en-têtes Bearer) et supprime les balises d'image markdown/HTML qui peuvent exfiltrer des données via le chargement automatique.
Journal d'auditJSONL à ajout uniquement des événements allow/deny/auth/kill pour examen ultérieur.
Commandes locales/auth, /lock, /kill, /unkill, /status gérées sans appeler de modèle.
CléDéfautSignification
allowed_user_ids[]Identifiants d'utilisateur autorisés à discuter
owner_ids[]Sans PIN ; peut /kill
pin_enabledTrueVerrou PIN pour les non-propriétaires
pin_ttl_hours72Durée d'ouverture
rate_limit_per_minute8Fenêtre glissante
rate_limit_per_hour60Fenêtre glissante
max_input_chars2000Longueur d'entrée maximale
block_injectionTrueListe de blocage heuristique
deny_messageFalseSilencieux, True ou chaîne personnalisée
audit_logTrueÉcrit le journal d'audit JSONL
enabledTrueInterrupteur principal
VariableObjectif
AGENTIC_DM_ALLOWLISTIdentifiants d'utilisateur séparés par des virgules
AGENTIC_DM_OWNER_IDIdentifiant(s) du propriétaire
AGENTIC_DM_PINPIN en clair
AGENTIC_DM_PIN_REQUIRED1 = exige le PIN même s'il n'est pas défini
AGENTIC_DM_KILLED1 = interrupteur d'arrêt activé
AGENTIC_DM_DATA_DIRRépertoire pour le fichier d'arrêt, le fichier d'ouverture, le journal d'audit
AGENTIC_DM_SECRETS_DIRRépertoire pour dm_pin.txt / dm_allowlist.txt
CommandeQuiEffet
/kill /pausepropriétaireMet l'agent en pause pour tout le monde
/unkill /resumepropriétaireLève la pause
/statuspropriétaireInstantané kill / PIN / liste blanche
/auth <pin>liste blancheOuvre la session pour la TTL
/lockliste blancheFerme la session ouverte