
Rete neurale convoluzionale per analizzare screenshot di pentest

Dai una rapida occhiata a quegli screenshot.
Eyeballer è pensato per test di penetrazione su larga scala in cui devi trovare target "interessanti" da un enorme insieme di host web. Usa pure il tuo strumento preferito per fare screenshot (EyeWitness o GoWitness) e poi passali attraverso Eyeballer che ti dirà cosa è probabile contenga vulnerabilità e cosa no.
Provalo dal vivo su: https://eyeballer.bishopfox.com
| Siti dall'aspetto datato | Pagine di login |
|---|---|
![]() | ![]() |
| Webapp | 404 personalizzate |
|---|---|
![]() | ![]() |
| Domini parcheggiati |
|---|
![]() |
Siti dall'aspetto datato Frame squadrati, CSS rotti, quel certo "je ne sais quoi" di un sito web che sembra progettato nei primi anni 2000. Lo riconosci quando lo vedi. I siti vecchi non sono solo brutti, sono anche tipicamente molto vulnerabili. Quando cerchi di hackerare qualcosa, questi siti sono una miniera d'oro.
Pagine di login Le pagine di login sono preziose per i test di penetrazione: indicano che esiste una funzionalità aggiuntiva a cui non hai ancora accesso. Significa anche che c'è un semplice processo successivo di attacchi di enumerazione delle credenziali. Potresti pensare di poter impostare una semplice euristica per trovare le pagine di login, ma in pratica è molto difficile. I siti moderni non usano solo un semplice tag di input che possiamo cercare con grep.
Webapp Questo ti dice che qui è disponibile un gruppo più ampio di pagine e funzionalità che possono costituire una superficie di attacco. È in contrasto con una semplice pagina di login, senza altre funzionalità. O con una pagina di default di IIS che non ha altre funzionalità. Questa etichetta dovrebbe indicare che c'è un'applicazione web da attaccare.
404 personalizzate I siti moderni amano avere simpatiche pagine 404 personalizzate con immagini di robot rotti o cani tristi. Sfortunatamente, amano anche restituire codici di risposta HTTP 200 mentre lo fanno. Spesso la pagina "404" non contiene nemmeno il testo "404". Queste pagine sono tipicamente poco interessanti, nonostante abbiano molto da offrire visivamente, e Eyeballer può aiutarti a filtrarle.
Domini parcheggiati I domini parcheggiati sono siti web che sembrano reali, ma non costituiscono una superficie di attacco valida. Sono pagine placeholder, solitamente prive di reali funzionalità, composte quasi interamente da annunci pubblicitari e di solito non sono gestite dal nostro target effettivo. È quello che ottieni quando il dominio specificato è errato o scaduto. Trovare queste pagine e rimuoverle dal perimetro è molto utile nel tempo.
Scarica i pacchetti richiesti con pip:
sudo pip3 install -r requirements.txt
Oppure se vuoi il supporto GPU:
sudo pip3 install -r requirements-gpu.txt
NOTA: Configurare una GPU per l'uso con TensorFlow va ben oltre lo scopo di questo README. Ci sono considerazioni sulla compatibilità hardware, driver da installare... È un bel po' di lavoro. Dovrai quindi cavartela da solo se vuoi una GPU. Ma almeno dal punto di vista dei pacchetti Python, il file requirements sopra ti copre.
Pesi preaddestrati
Per i pesi preaddestrati più recenti, controlla le release su GitHub.
Dati di addestramento Puoi trovare i nostri dati di addestramento qui:
https://www.kaggle.com/altf42600/pentest-screensots
Ci sono due cose che ti servono dai dati di addestramento:
images/, contenente tutti gli screenshot (ridimensionati a 224x224)labels.csv che contiene tutte le etichetteCopia entrambi nella radice dell'albero del codice di Eyeballer.
Inoltre, puoi trovare un file di pesi preaddestrati che puoi usare subito senza addestramento.
bishop-fox-pretrained-vN.h5È qui su GitHub, guarda la sezione releases per l'ultima versione.
NOTA: Per ottenere i migliori risultati, assicurati di fare screenshot dei tuoi siti web con un rapporto d'aspetto nativo di 1.6x, ad esempio 1440x900. Eyeballer ridimensionerà automaticamente l'immagine alla dimensione corretta, ma se il rapporto d'aspetto è sbagliato, la schiaccerà in un modo che influenzerà le prestazioni di previsione.
Per esaminare alcuni screenshot, esegui la modalità "predict":
eyeballer.py --weights YOUR_WEIGHTS.h5 predict YOUR_FILE.png
Oppure per un'intera directory di file:
eyeballer.py --weights YOUR_WEIGHTS.h5 predict PATH_TO/YOUR_FILES/
Eyeballer restituirà i risultati in formato leggibile (un file results.html per navigarli facilmente) e in formato machine-readable (un file results.csv).
Le prestazioni di Eyeballer sono misurate su un dataset di valutazione, che consiste del 20% degli screenshot totali scelti casualmente. Poiché questi screenshot non vengono mai usati nell'addestramento, possono essere un modo efficace per vedere quanto bene si comporta il modello. Ecco i risultati più recenti:
| Accuratezza binaria complessiva | 93.52% |
|---|---|
| Accuratezza tutto-o-nulla | 76.09% |
Accuratezza binaria complessiva è probabilmente ciò che consideri "accuratezza" del modello. È la probabilità che, data una singola etichetta, essa sia corretta.
Accuratezza tutto-o-nulla è più restrittiva. In questo caso, consideriamo tutte le etichette di un'immagine e consideriamo un fallimento se UNA QUALSIASI etichetta è sbagliata. Questo tasso di accuratezza è la probabilità che il modello preveda correttamente tutte le etichette per una data immagine.
Per una spiegazione dettagliata di Precisione e Recall, dai un'occhiata a Wikipedia.
Per addestrare un nuovo modello, esegui:
eyeballer.py train
Avrai bisogno di una macchina con una buona GPU per farlo funzionare in un tempo ragionevole. Configurarla va comunque oltre lo scopo di questo readme.
Questo produrrà un nuovo file di modello (weights.h5 di default).
Hai appena addestrato un nuovo modello, fantastico! Vediamo come si comporta con immagini che non ha mai visto prima, attraverso diverse metriche:
eyeballer.py --weights YOUR_WEIGHTS.h5 evaluate
L'output descriverà l'accuratezza del modello sia in termini di recall che di precisione per ciascuna delle etichette del programma (incluso "nessuno dei precedenti" come pseudo-etichetta).
| Etichetta | Precisione | Recall |
|---|
| 404 personalizzata | 80.20% | 91.01% |
| Pagina di login | 86.41% | 88.47% |
| Webapp | 95.32% | 96.83% |
| Aspetto datato | 91.70% | 62.20% |
| Dominio parcheggiato | 70.99% | 66.43% |