
Proxy inverso cieco al contenuto per la scansione di sicurezza con protezione dall'esposizione
Un reverse proxy locale per la scansione di sicurezza content-blind.
Go · HTTPS locale · HTTP & WebSocket · Tor / SOCKS5
La motivazione / Come funziona / Avvio rapido / Certificati / Tor / CAPTCHA / Evidenze / Sviluppo
Il security testing è una disciplina comportamentale. Ciò che un'applicazione fa -- come gestisce l'input, quali controlli applica, cosa riflette, come fallisce -- è ciò che conta. L'identità dovrebbe essere irrilevante per questa analisi.
Gli strumenti di sicurezza assistiti dall'AI non funzionano così. Vedono il target -- il suo dominio, il suo brand, la sua organizzazione -- e si formano opinioni. Ammorbidiscono i risultati per servizi ben noti. Rifiutano di sondare in base a chi è il target. Declinano di testare percorsi che associano a un particolare vendor. L'AI prende decisioni che appartengono all'operatore, e le prende in base al contesto anziché al comportamento.
Questo è l'asse sbagliato. L'operatore autorizza lo scope. Lo strumento valuta il comportamento. Sono responsabilità diverse e non dovrebbero collassare in una sola. Ma oggi, ogni strumento assistito dall'AI ha l'identità completa del target cablata in ogni decisione che prende -- cosa testare, quanto spingere, se segnalare.
Blinder è un punto di partenza: uno strumento pratico, ma anche una posizione secondo cui il testing dovrebbe essere separato dal contesto. Questo è un primo tentativo di diffondere l'idea. Se l'approccio risuona, accoglieremmo con favore implementazioni migliori, contributi, o semplicemente la conversazione su dove dovrebbe essere il confine.
Rimuovere l'identità non significa rimuovere il contenuto. È qui che si rompono la maggior parte degli approcci ingenui. Le vulnerabilità sono osservabili come cambiamenti nel contenuto delle risposte -- messaggi di errore, input riflesso, dati che la sessione non dovrebbe raggiungere, risultati calcolati che rivelano una valutazione lato server. Se un proxy rimuovesse questo contenuto, nasconderebbe le evidenze che il tester sta cercando.
Il requisito è chirurgico: rimuovere l'identità preservando i segnali comportamentali. Una pagina che non appartiene a nessuno ma si comporta esattamente come l'originale -- incluso quando si comporta male.
Blinder è un reverse proxy HTTPS locale che si colloca tra lo scanner AI (o il browser) e il target. Riscrive l'identità -- domini, brand, nomi di organizzazioni, email, indirizzi IP -- preservando il comportamento funzionale dell'applicazione: i suoi errori, le sue riflessioni, i suoi controlli di sicurezza, i suoi codici di stato, la sua struttura dei contenuti.
Per l'AI a valle, il target è un'applicazione anonima ospitata localmente su https://127.0.0.1:8099. Nessun brand da riconoscere. Nessun dominio su cui formarsi un'opinione. L'AI testa ciò che l'applicazione fa, non chi è.
Questa è la scansione content-blind: l'operatore controlla chi è il target; l'AI si concentra su ciò che fa.
Il contenuto di sostituzione fa parte della correttezza: riempitivo neutro per la visualizzazione, valori reversibili per i dati dell'applicazione, e diagnostica e comportamento dei controlli preservati. Le notifiche di rimozione generate non appartengono alle pagine.
| Pulizia dei contenuti | Testo visualizzato sostituito con riempitivo in prosa neutra; elementi interattivi (pulsanti, etichette, controlli di form) e contenuto diagnostico (messaggi di errore, stack trace, markup riflesso) preservati. Token di identità, riferimenti a domini e valori dei cookie riscritti in corpi HTTP, header e testo WebSocket. --preserve-content mantiene il testo visualizzato originale per la pulizia della sola identità. |
| Integrità delle risorse | SRI originale verificato per ogni riferimento e ricalcolato per le risorse riscritte, con gli hash CSP corrispondenti tradotti. I riferimenti versionati vincolano i byte serviti; l'integrità delle risorse esterne è preservata. |
| Cache delle risposte | Validatori di cache upstream/downstream separati. La rivalidazione 304 unisce gli header delle policy di sicurezza. Eviction Vary-aware. |
| Gestione delle sessioni | Nomi dei cookie reversibili con pulizia per valore. Routing multi-origin tramite --extra-origin con hostname alias deterministici, routing tramite header Host e traduzione dell'origin CORS. |
| Relay CAPTCHA | Coda di challenge rivolta all'operatore e origin dei provider separati. Le risorse instradate via Tor mantengono cookie, CSP e CORS del provider separati dal target e dall'operatore. |
| Routing privato | HTTP upstream e WebSocket attraverso Tor SOCKS5 con risoluzione remota dell'hostname. I fallimenti di Tor sono errori fatali, mai fallback silenziosi. |
| HTTPS locale | CA locale con durata di 90 giorni e rinnovo automatico; i certificati foglia di sessione sono firmati al volo. Fidati della CA una volta sola -- aggiungere origin o cambiare alias non richiede mai di ripristinare la fiducia. Modalità effimera disponibile. |
| Evidenze | HAR pre-pulizia con persistenza basata su journal, manifest delle richieste con conteggi di pulizia/perdita per richiesta, mappature dei domini e report di pulizia. Confronti di risposte appaiate verificano la fedeltà della dimensione in byte e se i cambiamenti di contenuto/stato sopravvivono al mascheramento. I controlli di preservazione del segnale registrano il comportamento verificato e i difetti rimanenti. |
Vedi comportamento supportato e gate di consegna per lo stato di implementazione e i limiti noti.
Compila con Go 1.26+. Il binario non ha dipendenze runtime esterne.
git clone https://github.com/Splinters-io/blinder.git
cd blinder
make build
./blinder --preflight
Segui le indicazioni sui certificati specifiche per il tuo OS, poi avvia una sessione:
capture_dir=$(mktemp -d)
./blinder --target https://your-authorized-target.example \
--identity YourOrganisation \
--har "$capture_dir/session.har" \
--output "$capture_dir/output"
Punta il browser o lo scanner su https://127.0.0.1:8099. Aggiungi più token di identità con flag --identity ripetuti. Ferma con Ctrl-C per salvare le evidenze della sessione.
Usa --config (-c) per caricare i valori predefiniti da un file YAML. I flag della CLI sovrascrivono il file.
# blinder.yaml
listen: "127.0.0.1:9443"
target: "https://example.com"
alias: "target-001.local"
identity:
- "ExampleCorp"
- "example.com"
output: "/tmp/blinder-output"
captcha_config: "captcha.yaml"
no_verify_tls: true
tor:
enabled: false
addr: "127.0.0.1:9050"
har:
path: "/tmp/session.har"
max_body: 10485760
./blinder -c blinder.yaml
# override the listen port from the file:
./blinder -c blinder.yaml --listen 127.0.0.1:7777