
Réseau de neurones convolutif pour analyser les captures d'écran de pentest

Jetez un coup d'œil rapide à vos captures d'écran.
Eyeballer est conçu pour les tests de pénétration réseau à grande échelle où vous devez trouver des cibles « intéressantes » parmi un vaste ensemble d'hôtes web. Utilisez votre outil de capture d'écran préféré comme d'habitude (EyeWitness ou GoWitness) puis passez-les dans Eyeballer pour vous indiquer ce qui contient probablement des vulnérabilités, et ce qui n'en contient pas.
Essayez-le en direct sur : https://eyeballer.bishopfox.com
| Sites d'aspect ancien | Pages de connexion |
|---|---|
![]() | ![]() |
| Application web | Pages 404 personnalisées |
|---|---|
![]() | ![]() |
| Domaines stationnés |
|---|
![]() |
Sites d'aspect ancien Cadres en blocs, CSS cassés, ce certain « je ne sais quoi » d'un site web qui semble avoir été conçu au début des années 2000. Vous le reconnaissez quand vous le voyez. Les vieux sites ne sont pas seulement laids, ils sont aussi généralement très vulnérables. Lorsque vous cherchez à pirater quelque chose, ces sites sont une mine d'or.
Pages de connexion Les pages de connexion sont précieuses pour les tests de pénétration : elles indiquent qu'il existe des fonctionnalités supplémentaires auxquelles vous n'avez pas encore accès. Cela signifie également qu'il existe un processus simple de suivi par des attaques d'énumération d'identifiants. Vous pourriez penser que vous pouvez définir une heuristique simple pour trouver les pages de connexion, mais en pratique c'est très difficile. Les sites modernes n'utilisent pas simplement une balise input que nous pourrions grep.
Application web Cela vous indique qu'il existe un groupe plus large de pages et de fonctionnalités disponibles qui peuvent servir de surface d'attaque. Cela contraste avec une simple page de connexion, sans autre fonctionnalité. Ou une page d'accueil IIS par défaut qui n'a pas d'autre fonctionnalité. Cette étiquette doit vous indiquer qu'il y a une application web à attaquer.
Pages 404 personnalisées Les sites modernes adorent avoir des pages 404 personnalisées mignonnes avec des images de robots cassés ou de chiens tristes. Malheureusement, ils aiment aussi renvoyer des codes de réponse HTTP 200 ce faisant. Le plus souvent, la page « 404 » ne contient même pas le texte « 404 ». Ces pages sont généralement sans intérêt, malgré leur richesse visuelle, et Eyeballer peut vous aider à les filtrer.
Domaines stationnés Les domaines stationnés sont des sites web qui ont l'air réels, mais qui ne constituent pas une surface d'attaque valide. Ce sont des pages de substitution, généralement dépourvues de toute fonctionnalité réelle, composées presque entièrement de publicités, et généralement pas gérées par notre cible réelle. C'est ce que vous obtenez lorsque le domaine spécifié est incorrect ou expiré. Trouver ces pages et les supprimer du périmètre est très précieux à long terme.
Téléchargez les paquets requis avec pip :
sudo pip3 install -r requirements.txt
Ou si vous voulez le support GPU :
sudo pip3 install -r requirements-gpu.txt
REMARQUE : Configurer un GPU pour une utilisation avec TensorFlow dépasse largement le cadre de ce README. Il y a la compatibilité matérielle à considérer, des pilotes à installer... Il y a beaucoup de choses. Vous devrez donc vous débrouiller par vous-même pour cette partie si vous voulez un GPU. Mais du moins du point de vue des paquets Python, le fichier requirements ci-dessus couvre vos besoins.
Poids pré-entraînés
Pour les poids pré-entraînés les plus récents, consultez les releases ici sur GitHub.
Données d'entraînement Vous trouverez nos données d'entraînement ici :
https://www.kaggle.com/altf42600/pentest-screensots
Il y a deux choses dont vous avez besoin dans les données d'entraînement :
images/, contenant toutes les captures d'écran (redimensionnées en 224x224)labels.csv qui contient toutes les étiquettesCopiez les deux à la racine de l'arborescence du code Eyeballer.
De plus, vous pouvez trouver un fichier de poids pré-entraîné que vous pouvez utiliser directement sans entraînement.
bishop-fox-pretrained-vN.h5Il se trouve ici sur GitHub, regardez la section releases pour la version la plus récente.
REMARQUE : Pour de meilleurs résultats, assurez-vous de capturer vos sites web dans un format d'image natif de 1,6x. Par exemple : 1440x900. Eyeballer redimensionnera automatiquement l'image à la bonne taille, mais si le rapport hauteur/largeur est incorrect, elle sera compressée d'une manière qui affectera les performances de prédiction.
Pour examiner des captures d'écran, exécutez simplement le mode « predict » :
eyeballer.py --weights YOUR_WEIGHTS.h5 predict YOUR_FILE.png
Ou pour tout un répertoire de fichiers :
eyeballer.py --weights YOUR_WEIGHTS.h5 predict PATH_TO/YOUR_FILES/
Eyeballer vous renverra les résultats dans un format lisible par l'homme (un fichier results.html pour le parcourir facilement) et dans un format lisible par machine (un fichier results.csv).
Les performances d'Eyeballer sont mesurées sur un ensemble de données d'évaluation, qui représente 20 % de l'ensemble des captures d'écran choisies aléatoirement. Comme ces captures ne sont jamais utilisées dans l'entraînement, elles constituent un moyen efficace de voir comment le modèle se comporte. Voici les derniers résultats :
| Précision binaire globale | 93.52% |
|---|---|
| Précision du tout-ou-rien | 76.09% |
La précision binaire globale est probablement ce que vous considérez comme la « précision » du modèle. C'est la probabilité qu'une étiquette donnée soit correcte.
La précision du tout-ou-rien est plus stricte. Pour cela, nous considérons toutes les étiquettes d'une image et considérons qu'il y a un échec si UNE étiquette est erronée. Ce taux de précision correspond à la probabilité que le modèle prédise correctement toutes les étiquettes pour une image donnée.
| Étiquette | Précision | Rappel |
|---|---|---|
| 404 personnalisée | 80.20% | 91.01% |
| Page de connexion | 86.41% | 88.47% |
| Application web | 95.32% | 96.83% |
| Aspect ancien | 91.70% | 62.20% |
| Domaine stationné | 70.99% | 66.43% |
Pour une explication détaillée sur la précision et le rappel, consultez Wikipédia.
Pour entraîner un nouveau modèle, exécutez :
eyeballer.py train
Vous aurez besoin d'une machine avec un bon GPU pour que cela s'exécute dans un délai raisonnable. Toutefois, sa configuration dépasse le cadre de ce readme.
Cela produira un nouveau fichier de modèle (weights.h5 par défaut).
Vous venez d'entraîner un nouveau modèle, cool ! Voyons comment il se comporte face à des images qu'il n'a jamais vues auparavant, selon diverses métriques :