Un nuovo approccio costringe un agente di pentest guidato da LLM a dimostrare una violazione invece di limitarsi a dichiararla, utilizzando nonce di tipo challenge-response che eliminano i falsi positivi. La tecnica, dimostrata nel framework HALO, trasforma il "sembra che abbiamo ottenuto una shell" in "abbiamo effettivamente una shell".

Perché le violazioni con falsi positivi sono un problema

I motori di sfruttamento automatizzati basati su grandi modelli linguistici possono generare decine di compromissioni di porte "riuscite" in un'unica esecuzione. Molti servizi restituiscono stringhe come "uid=0" nei banner, e un target configurato ad hoc può imitare tali output senza mai eseguire il codice dell'attaccante. Quando l'agente si fida di questi echi, ogni decisione successiva — che si tratti di effettuare un pivot, esfiltrare dati o muoversi lateralmente — si basa su una menzogna. I team di sicurezza perdono ore a inseguire punti di accesso fantasma, e gli esperti di incident response potrebbero dare priorità errata alle minacce reali.

Trasformare una dichiarazione in una prova

La soluzione si ispira ai classici trucchi di autenticazione. Prima di lanciare un exploit, il sistema dell'attaccante genera un token unico, o nonce, e lo inserisce nel payload. L'exploit deve restituire l'esatto token affinché il controller accetti il risultato come una violazione autentica. Un banner falso non può indovinare il nonce; deve eseguire il codice dell'attaccante per inserire il token nella risposta. Se i dati restituiti non contengono il nonce corrispondente, il tentativo viene scartato come falso positivo.

Questo cambiamento trasforma il modello di verifica da "l'output sembra corretto" a "l'output dimostra l'esecuzione". Elimina il bias di ottimismo che affligge gli strumenti di offesa autonomi.

Costruire una catena di consegna affidabile

Far arrivare il payload al target richiede comunque una catena di consegna solida. HALO classifica tre percorsi comuni:

  • Reverse shells – l'host compromesso avvia una connessione verso un listener controllato dall'attaccante. Utile quando il traffico in entrata è bloccato.
  • Bind shells – l'attaccante si connette direttamente a un servizio in ascolto sul target. Funziona quando i filtri in uscita sono permissivi.
  • Blind callbacks – un segnale unidirezionale (ad esempio, una richiesta DNS) che conferma l'esecuzione in ambienti altamente restrittivi dove non è possibile aprire alcun canale diretto.

Ogni passaggio della catena deve preservare il nonce, altrimenti la fase di verifica fallirà a valle.

Garantire exploit autonomi

Un'altra fonte di falsa sicurezza è la dipendenza da librerie esterne che potrebbero mancare sul target. HALO raggruppa ogni componente necessario in un unico file prima dell'invio. Il pacchetto viene quindi testato in una sandbox che manca deliberatamente delle dipendenze originali. Se l'exploit viene eseguito correttamente, l'artefatto è realmente autonomo e può essere considerato affidabile su un sistema blindato.

Pulire la traccia di sviluppo

Durante la preparazione al rilascio pubblico, l'autore ha scoperto indirizzi IP reali rimasti nella cronologia di Git. Un working tree pulito non cancella tali record; Git conserva ogni commit. L'autore ha riscritto il repository in un unico commit pulito e ha sostituito gli indirizzi trapelati con intervalli riservati alla documentazione definiti dalla RFC 5737 (ad esempio, 192.0.2.0/24). Ciò evita l'esposizione accidentale dell'infrastruttura di produzione quando lo strumento viene condiviso.

Regole pratiche per gli strumenti di sicurezza

  • Utilizzare intervalli IP riservati alla documentazione in ogni test fixture.
  • Rimuovere segreti e file di ambito dal commit iniziale.
  • Applicare nonce di tipo challenge-response per verificare qualsiasi violazione dichiarata.
  • Validare l'esatto file che verrà inviato, non uno script solo vagamente correlato.

La prova batte l'ottimismo. Obbligando un agente di pentest autonomo a presentare un token verificabile, HALO dimostra che una violazione è tale solo quando il target può provare di aver eseguito il codice dell'attaccante. Prima si costruisce il cancello; tutto il resto segue.