
Sniffles : Générateur de capture de paquets pour l'évaluation des IDS et des expressions régulières
Sniffles est un outil de création de captures de paquets destiné à tester les IDS qui utilisent des motifs fixes ou des expressions régulières pour détecter un comportement suspect. Sniffles fonctionne très simplement. Il prend un ensemble d'expressions régulières ou de règles et en choisit une aléatoirement. Il génère ensuite un contenu basé sur cette règle ou cette expression régulière. Pour les chaînes fixes, cela signifie ajouter la chaîne directement dans les données (éventuellement avec des décalages ou d'autres options selon les règles Snort). Pour les expressions régulières, le processus est un peu plus complexe. L'expression régulière est convertie en un NFA et un chemin aléatoire est choisi dans le NFA (du début à la fin). Les données résultantes correspondront à l'expression régulière. Enfin, Sniffles peut être réglé sur correspondance complète ou partielle. Avec une correspondance complète, les données du paquet correspondront absolument à au moins une règle ou une expression régulière (certaines options Snort ne sont pas entièrement prises en compte cependant). Une correspondance partielle effacera le dernier caractère d'une séquence correspondante pour obtenir une séquence qui ne devrait pas correspondre (mais peut correspondre à une autre règle). Les règles correspondantes devraient causer la plus grande charge sur un IDS. Ainsi, il est possible de déterminer comment l'IDS gère le pire cas de trafic. Le trafic partiellement correspondant causera presque autant de charge que le trafic correspondant. Enfin, Sniffles peut également générer du trafic avec des données complètement aléatoires. De telles données aléatoires offrent un scénario optimal car il est très peu probable que des données aléatoires correspondent à des règles. Ainsi, elles peuvent être traitées à la vitesse maximale. Sniffles permet donc la création de captures de paquets pour le meilleur et le pire cas de fonctionnement de l'inspection approfondie des paquets d'un IDS.
En plus de ce qui précède, Sniffles a également la capacité de créer des captures de paquets d'évaluation. Il existe deux types de captures de paquets d'évaluation. La première capture de paquets d'évaluation créera exactement un paquet pour chaque règle ou expression régulière, en séquence. Il est donc possible de tester et de vérifier que chaque règle correspond comme prévu. L'évaluation complète va plus loin et crée un paquet pour chaque branche possible d'une expression régulière. Une seule expression régulière peut avoir des milliers de branches possibles. Cela permet de s'assurer que toutes les branches possibles d'une expression régulière sont correctement traitées. Les captures de paquets d'évaluation devraient correspondre à tous les paquets. Tout paquet qui ne correspond pas représente très probablement une défaillance de l'IDS et nécessite une enquête plus approfondie. Bien sûr, il existe toujours la possibilité que Sniffles ne crée pas le paquet correct pour un IDS donné, ou ne reconnaisse pas une option particulière d'une règle. Consultez les fonctionnalités de règles prises en charge pour plus d'informations.
Enfin, Sniffles peut également faire beaucoup pour générer du trafic réseau aléatoire. Par défaut, le trafic aléatoire est TCP, UDP ou ICMP et unidirectionnel. Cependant, il peut également générer du trafic TCP avec des ACK, des poignées de main et des fermetures pour chaque flux. Il générera des numéros de séquence et des checksums corrects. De plus, les adresses MAC peuvent être définies selon des distributions souhaitées, et les adresses réseau IP peuvent être définies par des espaces d'adresses domestiques et externes. En outre, il est possible de simuler des scans dans une capture de trafic.
NÉCESSITE : Python 3.3+ et le module SortedContainers
Sniffles se compose des fichiers suivants :
Pour installer :
python3.x setup.py install.Notes d'installation :
python3.x setup.py build pour construire localement, puis allez dans le répertoire de la bibliothèque, trouvez la lib et utilisez python3.4 -c "from sniffles import sniffles; sniffles.main()" pour exécuter localement.Snort : règles d'alerte Snort (la règle doit commencer par la directive Alert). Les balises de contenu sont reconnues et analysées correctement. Les balises PCRE sont également analysées correctement. Les balises HTTP sont traitées consécutivement, elles peuvent donc ne pas créer le paquet souhaité. Le contenu (et le contenu PCRE ou HTTP) peut être modifié par distance, within et offset. Une règle peut utiliser une option de contrôle de flux, mais seule la direction des données en est dérivée. L'option nocase est ignorée et la casse présentée est utilisée. Toutes les autres options sont ignorées. Les valeurs de l'en-tête sont analysées et un paquet sera généré en respectant ces valeurs. Si les espaces d'adresses réseau domestiques et externes sont utilisés, l'espace correct sera utilisé pour les variables $HOME_NET et $EXTERNAL_NET respectivement. Exemple :
alert tcp $EXTERNAL_NET any -> $HOME_NET 8080 (msg:"SERVER-APACHE Apache Tomcat UNIX platform directory traversal"; flow:to_server; content:"/..|5C|/"; content:"/..|5C|/"; http_raw_uri;
Expressions régulières : expressions régulières brutes, une par ligne, écrites sous forme abc ou /abc/i. Prend actuellement en charge les options i, s et m. Les autres options sont ignorées. Exemple :
/ab*c(d|e)f/i
Format de règle Sniffles décrit ci-dessous.
-a TCP Ack : envoie un accusé de réception TCP pour chaque paquet de données envoyé. Désactivé par défaut. Les paquets d'accusé de réception n'ont pas de données par défaut.
-b Données bidirectionnelles : les données seront générées dans les deux directions d'un flux TCP. Les ACK seront activés. Cette fonctionnalité est désactivée par défaut.
-B [Protocole de trafic de fond : Pourcentage] : définissez au moins un protocole avec une valeur entre 1 et 100 pour produire du trafic de fond. Cette valeur représente le pourcentage de la quantité totale de trafic. Protocoles disponibles : FTP, HTTP, IMAP, POP et SMTP. Par exemple : "http:20,ftp:30,smtp:10". Entrez un seul nombre comme valeur d'argument pour générer du trafic aléatoire. Par exemple : "80".