
Scanner SYN sans état plus rapide et plus efficace et grabber de bannière grâce à l'utilisation de la pile TCP/IP en espace utilisateur.
RÉSUMÉ
polarbearscan est une tentative de réaliser un banner grabbing et un scan de ports plus rapides et plus efficaces. Il combine deux idées différentes qui, espérons-le, le rendront digne de votre attention et de votre temps.
La première de ces idées consiste à utiliser un scan SYN sans état en utilisant des cookies cryptographiquement protégés pour analyser les accusés de réception entrants. Au meilleur de la connaissance de l'auteur, cette technique a été initiée par Dan Kaminsky dans scanrand. Scanrand faisait lui-même partie de Paketto Keiretsu, une collection d'utilitaires de scan, et a été publié aux alentours de 2001-2002. Un miroir de ce code peut être trouvé sur Packet Storm [1].
La deuxième idée consiste à utiliser une pile TCP/IP en espace utilisateur patchée de sorte que le scanner puisse restaurer l'état immédiatement après avoir reçu un paquet cryptographiquement vérifié avec les drapeaux SYN et ACK activés. La pile en espace utilisateur utilisée ici par polarbearscan s'appelle libuinet [2]. Contrairement à d'autres piles TCP/IP en espace utilisateur existantes, celle-ci est très mature car il s'agit simplement d'un port de la pile TCP/IP de FreeBSD.
En patchant la pile libuinet, on peut alors construire une socket et terminer la poignée de main TCP standard en 3 étapes en répondant avec un ACK approprié. En procédant ainsi, une connexion TCP pleinement fonctionnelle est immédiatement établie. Ceci contrairement à d'autres scanners (tels que nmap) qui, après avoir noté qu'un port TCP est ouvert, devraient effectuer une connexion TCP complète via le noyau pour faire des choses comme le banner grabbing ou le scan de version. Une connexion TCP complète entraîne une toute nouvelle poignée de main TCP en 3 étapes. Cela rejette complètement l'état implicite qui a été construit par les deux premiers paquets échangés entre les hôtes. En évitant cela, on peut réduire l'utilisation de la bande passante et passer immédiatement de la détection d'un port ouvert à la connexion à celui-ci. Cette connexion peut alors simplement se contenter de recevoir des données en mode banner grab ou envoyer une requête HTTP.
Veuillez noter que le scanner ne prend actuellement en charge que le scan basé sur IPv4 et ne fonctionnera correctement que sur des interfaces de type Ethernet (filaire ou sans fil). Il n'y a pas de projets pour prendre en charge IPv6 ou différentes interfaces dans un avenir proche.
INSTALLATION
La compilation du code est assez simple. Il suffit d'une connexion fonctionnelle au réseau et git doit être installé pour que les dépendances nécessaires puissent être téléchargées. Outre cela, des utilitaires de développement standard (gcc, make, patch), des éditions de développement de bibliothèques (pthread, pcap, OpenSSL). Sur les distributions basées sur Debian, on peut simplement installer tous les paquets listés dans le fichier DEPENDENCIES. Ensuite, on devrait pouvoir taper 'make' et les dépendances externes seront extraites via git et l'ensemble du scanner sera construit. Ce binaire peut ensuite être copié dans /usr/bin ou /usr/local/bin ou similaire.
Si la compilation échoue, veuillez envoyer un e-mail à l'auteur (coordonnées ci-dessous) et inclure la sortie d'erreur, la version du noyau, la version de libc et tout autre élément pouvant aider à reproduire et corriger le problème. Votre aide est grandement appréciée.
UTILISATION
L'utilisation de l'outil devrait être assez simple. Vous aurez besoin des privilèges root. L'option -h affiche de brèves informations d'utilisation et les options expliquées. Dans la plupart des cas, il suffit de spécifier le type de scan à effectuer, les listes de ports à scanner et l'IP cible ou les plages IP. La notation CIDR est prise en charge pour les plages IP.
Il existe quatre types de scan différents spécifiés avec -s.
-sB : Cela effectue un banner grab standard. Le scanner n'enverra aucune donnée car il attendra simplement et recevra des données et les affichera jusqu'à la première nouvelle ligne ou retour chariot reçu.
-sH : Ce mode envoie une requête "GET / HTTP/1.1" à chaque connexion établie avec succès. C'est très utile pour identifier rapidement les serveurs HTTP.
-sT : Le mode de scan TLS envoie une sonde NULL TLS1.0 avec zéro option et zéro algorithme spécifié. Cependant, s'il y a un serveur TLS valide à l'autre bout, il analysera et tentera de déterminer s'il s'agit d'une réponse d'erreur TLS valide qui sera ensuite affichée.
-sC : Scan personnalisé qui charge une charge utile depuis un fichier (spécifié avec -d) et envoie cette charge utile à chaque socket établie avec succès. Peut être utile pour sonder rapidement des protocoles très spécifiques.
-p : La liste des ports TCP à scanner peut être une plage de ports ou des ports uniques avec des plages et des ports uniques séparés par des virgules. Quelques exemples : -p22,80,8080-9000,143 scannera les ports 22, 80, 143 et la plage de 8080 à 9000.
-b : La limite de bande passante à appliquer pour les sondes sortantes. Cela ne s'applique pas aux données envoyées et reçues sur les sockets, donc uniquement aux sondes SYN réellement envoyées. Exemples : -b300k, -b67m, -b500b donneraient des limites de bande passante respectives de 300kbps, 76mbps et 500bps.
-d : Nom du fichier contenant la charge utile utilisée pour le scan personnalisé. L'intégralité du fichier sera envoyée jusqu'à un maximum de 128 kB, ce qui devrait être suffisant pour la plupart des usages.
-t : Cela spécifie le nombre de secondes pendant lesquelles le scanner attendra après avoir envoyé toutes les sondes pour recevoir des données sur les sockets toujours connectées. En supposant qu'il y en ait, sinon il se terminera dès qu'il n'y aura plus de travail à faire.
-x : Cela force l'outil à toujours afficher la sortie reçue en notation hexadécimale. Sinon, il n'affichera les données en hexadécimal que si des caractères non imprimables sont trouvés.
-v : Cela spécifie une sortie verbeuse. C'est surtout utile pour le débogage.
-i : L'interface à utiliser pour sélectionner l'IP source et configurer le backend pcap. Cela ne devrait pas être nécessaire sur les machines standard avec une seule carte réseau correctement configurée, mais avec plusieurs cartes réseau, cela peut être nécessaire.
-r : La graine aléatoire à utiliser pour le RNG. Surtout utile pour le débogage et pour s'assurer que l'on peut reproduire exactement la même séquence de paquets. L'argument est un entier et peut être spécifié en notation hexadécimale et décimale.
-T : Remplace la valeur TTL IP par défaut à utiliser dans les sondes SYN. Pas vraiment nécessaire pour quoi que ce soit, mais inclus pour être complet.
-W <fenêtre> : Remplace la valeur de la fenêtre TCP par défaut à utiliser dans les sondes SYN. Pas vraiment nécessaire pour quoi que ce soit, mais inclus pour être complet.
-I : Remplace la valeur ID IP par défaut à utiliser dans les sondes SYN. Pas vraiment nécessaire pour quoi que ce soit, mais inclus pour être complet.
-n : Cette option ne doit être utilisée que si vous savez ce que vous faites. Elle garantit que l'outil ne définit PAS la règle de pare-feu pour supprimer tous les paquets RST sortants. Si cette option est utilisée, le scanner ne forkera pas et vous avez la responsabilité de définir cette règle manuellement, car sinon le noyau enverra des paquets RST en réponse à chaque paquet SYNACK reçu. Cela rendra l'outil tout simplement inopérant. La règle telle qu'elle est définie sous Linux est la suivante :
$ /sbin/iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
-o : Cette option ne fait pas la redirection I/O, donc vous verrez plus de sortie des internes de uinet. Elle n'est ajoutée que pour être complet ou pour des scénarios de débogage, car elle n'est pas très utile autrement.
-h : Les informations d'utilisation.
Quelques exemples d'utilisation de l'outil. Pour faire un banner grab du port 22 sur une plage /24, utilisez :
./pbscan -sB -p22 x.x.x.x/24
Pour faire un scan HTTP sur plusieurs ports HTTP courants pour une seule IP avec la sortie en mode hexadécimal, utilisez :
./pbscan -sH -x -p80,8080-9000 x.x.x.x
Pendant le scan, lorsque vous appuyez sur une touche de l'entrée standard, vous verrez quelques statistiques imprimées, telles que le nombre de ports ouverts identifiés, le nombre d'accusés de réception TCP valides reçus, le nombre de connexions actuellement actives et combien de sondes SYN sur le total ont déjà été envoyées. Cela ressemblera à ceci :
sent: 1.97% (of 254), open: 0, active: 2, acks: 2
AUTEUR
Cet outil a été écrit par Vincent Berg. Contactez-moi par e-mail à [email protected] ou visitez mon site Web http://santarago.org pour les mises à jour/nouvelles versions de ce scanner.
REMERCIEMENTS
Beaucoup d'appréciation pour plusieurs personnes qui ont aidé à tester, porter ce projet et signaler des bugs. Merci à Ehab, Joseph, Alejandro, Julian et Diego.
RÉFÉRENCES
[1] http://packetstormsecurity.com/files/30489/paketto-1.10.tar.gz.html