
Un framework de test pour les solutions de sécurité et de filtrage des e-mails.
Un cadre de test pour les solutions de sécurité et de filtrage des courriels.
IMPORTANT : Ne faites rien de malveillant avec cela ! Les tests de solutions cloud ou hébergées doivent toujours être approuvés par le fournisseur testé. Utilisez uniquement vos propres comptes de test et n'ennuyez personne avec une multitude de courriels de test.
Le cadre de test de sécurité des courriels fonctionne avec Python >=3.5. Il suffit de cloner ce dépôt et de commencer. Aucune autre dépendance n'est requise.
Le script mail-tester.py exécute les tests. Lisez le message d'aide avec ./mail-tester.py --help et consultez la liste des
modules de test et d'évasion avec ./mail-tester.py -l pour obtenir un aperçu des capacités et de l'utilisation du
script. Quelques conseils :
--smtp-server et --to doivent être fournis pour une exécution de test minimale.--. Ces fichiers de configuration peuvent être
utilisés en invoquant ./mail-tester.py @tester.conf (configuration contenue dans tester.conf).--to pour tester différentes configurations de filtrage.--auto-delay pour un réglage automatique du débit des
courriels. Cela peut être affiné avec --delay-step, --delay-max et --delay.--spam-folder et --malware-folder. Les échantillons ne sont pas inclus dans ce dépôt (et ne le seront pas).
De bons endroits pour obtenir des malwares sont theZoo, Das Malwerk ou
d'autres collections. Les spams peuvent être exportés directement depuis votre dossier Spam, mais doivent être au format EML.--blacklist et sont utilisées comme adresses d'expéditeur.--evasion content-disposition. Elles étaient utilisées
par le passé pour tromper les solutions d'analyse antivirus/sandbox et leur laisser passer des courriels malveillants.--log. Les fournisseurs de filtrage de courriels rejettent souvent les courriels lors du dialogue SMTP,
ce qui est reflété dans le journal généré.--output sous forme de fichiers simples dans un répertoire, au format MBox (--mbox) ou MailDir (--maildir).
Cela est utile pour tester les clients de messagerie sans envoyer de courriels, pour documenter ou examiner les cas de test générés.Les tests personnalisés peuvent être implémentés avec une classe dans l'un des fichiers Python existants ou nouvellement créés dans le répertoire tests/.
La classe doit être une sous-classe de MailTestBase située dans le module tests.base de ce projet. Les tests nouvellement
implémentés sont découverts automatiquement lorsque la variable de classe active est définie à True. De plus (si vous prévoyez
de contribuer des tests au dépôt principal), les variables de classe identifier, name et description doivent être
définies de manière appropriée.
Les classes de base suivantes existent avec des méthodes ou des variables de classe destinées à être surchargées :
MailTestBase : Classe de test pour les tests génériques.
generateTestCases() : Génère des messages de test. Ceux-ci doivent être générés avec les classes MIME* des packages
email.mime.* de Python ou avec la classe Message de email.message pour garantir des messages électroniques valides.active : Valeur booléenne indiquant si le test doit être actif.identifier : Identifiant court du test. Celui-ci est utilisé pour activer ou désactiver les tests dans les paramètres.name : Titre court du test.description : Description plus longue du test, doit tenir dans environ 100 caractères.delivery_sender et delivery_recipient : Valeurs booléennes, False par défaut. Normalement, l'expéditeur et les destinataires sont définis dans le
message et le module SMTP de Python les reprend à partir de là. Parfois, il est souhaitable de les définir explicitement dans
la bibliothèque SMTP, ce qui peut être configuré en définissant ces valeurs sur True.finalizeMessage(msg) : Par défaut, la classe de test de base définit les en-têtes From et To en conséquence. Ce
comportement peut être surchargé si nécessaire pour le cas de test.MailAttachmentTestBase : Classe de test pour les cas de test de pièces jointes. Cela génère un courriel complet valide avec un sujet
et une partie texte et y attache le cas de test. Dérivé de MailTestBase, donc les méthodes/variables de celui-ci peuvent
être surchargées ici aussi.
generateAttachments() : Génère des cas de test sous forme de tuples (description, pièce jointe).subject : Définit le sujet. L'espace réservé {} est remplacé par la description générée par
generateAttachments().generateTestCases() : est déjà surchargée avec une implémentation de la génération de messages décrite ci-dessus, mais peut être adaptée
davantage si nécessaire.Il est fortement recommandé de définir les sujets des messages générés afin de pouvoir reconnaître les tests dans la boîte de réception destinataire.
Les classes d'évasion implémentent des techniques pour éviter la reconnaissance de propriétés particulières des courriels par les solutions de sécurité des courriels. Actuellement, une technique d'évasion qui tente de cacher les pièces jointes à ces solutions en utilisant des en-têtes Content-Disposition intentionnellement cassés est implémentée.
Les évasions sont implémentées par un modèle de classe d'usine. La classe DeliveryBase instancie une classe d'usine dérivée de
la classe BaseEvasionFactory. Le constructeur de l'usine reçoit un indicateur qui signale si l'évasion est activée. L'instance
de l'usine d'évasion est ensuite passée à la classe de test et stockée dans son attribut evasions qui contient un dict
avec les identifiants d'évasion comme clés. À l'intérieur du test, une classe d'évasion (basée sur EvasionBase) est instanciée avec
getEvasionGenerator(). Les paramètres du constructeur sont définis individuellement par technique d'évasion.
Les classes de base suivantes sont utilisées pour implémenter les évasions :