Une nouvelle approche force un agent de pentest piloté par LLM à prouver une brèche au lieu de simplement la revendiquer, en utilisant des nonces de type défi-réponse (challenge-response) qui éliminent les faux positifs. La technique, démontrée dans le framework HALO, transforme le « on dirait qu'on a un shell » en « nous avons réellement un shell ».

Pourquoi les fausses brèches sont problématiques

Les moteurs d'exploitation automatisés basés sur les grands modèles de langage peuvent générer des dizaines de compromissions de ports « réussies » en une seule exécution. De nombreux services renvoient des chaînes telles que « uid=0 » dans leurs bannières, et une cible manipulée peut imiter ces sorties sans jamais exécuter le code de l'attaquant. Lorsque l'agent se fie à ces échos, chaque décision ultérieure — qu'il s'agisse de pivoter, d'exfiltrer des données ou de se déplacer latéralement — repose sur un mensonge. Les équipes de sécurité perdent des heures à traquer des points d'ancrage fantômes, et les intervenants en cas d'incident risquent de mal hiérarchiser les menaces réelles.

Transformer une affirmation en preuve

La solution s'inspire des techniques classiques d'authentification. Avant de lancer un exploit, le système de l'attaquant génère un jeton unique, ou nonce, et l'intègre dans la charge utile (payload). L'exploit doit renvoyer le jeton exact pour que le contrôleur accepte le résultat comme une brèche authentique. Une fausse bannière ne peut pas deviner le nonce ; elle doit exécuter le code de l'attaquant pour intégrer le jeton dans la réponse. Si les données renvoyées ne contiennent pas le nonce correspondant, la tentative est rejetée comme un faux positif.

Ce changement fait passer le modèle de vérification de « la sortie semble correcte » à « la sortie prouve l'exécution ». Cela élimine le biais d'optimisme qui affecte les outils d'attaque autonomes.

Construire une chaîne de livraison fiable

Acheminer la charge utile vers la cible nécessite toujours une chaîne de livraison solide. HALO classe trois chemins courants :

  • Reverse shells – l'hôte compromis initie une connexion vers un écouteur contrôlé par l'attaquant. Utile lorsque le trafic entrant est bloqué.
  • Bind shells – l'attaquant se connecte directement à un service en écoute sur la cible. Fonctionne lorsque les filtres de sortie sont permissifs.
  • Blind callbacks – un signal unidirectionnel (par exemple, une requête DNS) qui confirme l'exécution dans des environnements hautement restreints où aucun canal direct ne peut être ouvert.

Chaque étape de la chaîne doit préserver le nonce, sinon l'étape de preuve échouera en aval.

Garantir des exploits autonomes

Une autre source de fausse confiance est la dépendance à des bibliothèques externes qui pourraient être absentes sur la cible. HALO regroupe chaque composant requis dans un fichier unique avant l'envoi. Le bundle est ensuite testé dans un bac à sable (sandbox) qui manque délibérément des dépendances d'origine. Si l'exploit s'exécute toujours, l'artefact est véritablement autonome et peut être considéré comme fiable sur un système verrouillé.

Nettoyer les traces de développement

Lors de la préparation de la version publique, l'auteur a découvert des adresses IP réelles subsistant dans l'historique Git. Un arbre de travail propre n'efface pas ces enregistrements ; Git conserve chaque commit. L'auteur a réécrit le dépôt pour n'avoir qu'un seul commit propre et a remplacé les adresses divulguées par des plages réservées à la documentation définies par la RFC 5737 (par exemple, 192.0.2.0/24). Cela évite l'exposition accidentelle de l'infrastructure de production lors du partage de l'outil.

Règles pratiques pour les outils de sécurité

  • Utilisez des plages d'IP réservées à la documentation dans chaque fixture de test.
  • Supprimez les secrets et les fichiers de configuration (scope files) du commit initial.
  • Appliquez des nonces de type défi-réponse pour vérifier toute brèche revendiquée.
  • Validez le fichier exact qui sera envoyé, et non un script vaguement lié.

La preuve l'emporte sur l'optimisme. En forçant un agent de pentest autonome à présenter un jeton vérifiable, HALO démontre qu'une brèche n'est une brèche que lorsque la cible peut prouver qu'elle a exécuté le code de l'attaquant. La barrière est construite d'abord ; tout le reste suit.