Accueil
Bienvenue !
Who's that Chuck ?
Articles
Investigation numérique
Virtual-to-Remote-Physical
Prométhée, intranet éduc.
Frenzy, mini CD live
Sécu. Open/Closed Source
Installer FreeBSD 5
Powered by Unknown !
FreeBSD / Nmap (1/2)
FreeBSD / Nmap (2/2)
telnetd
ftpd
Apache
Bind
Lukemftpd
OpenSSH
PHP
Qpopper
Sendmail
Sendmail / Smtpscan
Sendmail / Smtpmap
En cours d'élaboration :
Analyseurs d'empreintes
Logiciels
Portages
Projet HeV
Liens
Sites BSD en français
Liste systèmes BSD
Projets à l'honneur
Recherche
avec
|
Powered by Unknown !
Sendmail contre Smtpscan
Dans cet article, nous allons examiner comment contrer l'analyseur d'empreintes réseau Smtpscan (version 0.3.1 - l'auteur ayant tenu compte de certaines des parades proposées ici dans la version 0.4), d'abord pas à pas (car pour identifier un serveur SMTP, smtpscan a recours à un jeu de 15 tests), puis globalement.
Afin de mieux comprendre l'influence du paramétrage de Sendmail sur l'empreinte déterminée par Smtpscan, nous allons réinitialiser à blanc le paramètre "PrivacyOptions" (normalement positionné à "authwarnings,noexpn,novrfy" sur le Sendmail 8.12.6 du FreeBSD 5.0-RC1 sur lequel j'ai réalisé les tests). On obtient alors l'empreinte suivante :
250:501:501:250:553:451:503:214:250:250:502:502:502:250:250
|
Ces différents chiffres sont les codes retournés par le serveur SMTP en réponse aux demandes effectuées par Smtpscan pour chacun des 15 tests.
Test 1
Dans ce qui suit, les demandes de Smtpscan sont affichées en italique et les tests sont réalisés de manière indépendante (c'est-à-dire, sans tenir compte des modifications de configuration proposées au fur et à mesure).
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:02 +0100 (CET)
MAIL FROM: test@yahoo.com
250 2.1.0 test@yahoo.com... Sender ok
|
Il y a plusieurs façons d'altérer la réponse donnée par Sendmail, par exemple :
1.1) En ajoutant l'option "needmailhelo" (ou son sur-ensemble, l'option "goaway") en regard de la ligne "O PrivacyOptions=" du fichier /etc/mail/sendmail.cf afin d'insister pour avoir une commande HELO ou EHLO avant la commande MAIL, puis en indiquant à Sendmail de relire sa configuration :
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Sat, 28 Dec 2002 00:11:00 +0100 (CET)
MAIL FROM: test@yahoo.com
503 5.0.0 Polite people say HELO first
|
1.2) En filtrant les messages provenant de test@yahoo.com (cette adresse est codée en dur dans le code source du produit) :
# cd /etc/mail
# echo "test@yahoo.com REJECT" >> access
# make access.db
# killall -HUP sendmail
|
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Sat, 28 Dec 2002 00:11:04 +0100 (CET)
MAIL FROM: test@yahoo.com
550 5.7.1 test@yahoo.com... Access denied
|
Test 2
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:04 +0100 (CET)
HELO
501 5.0.0 HELO requires domain address
|
La réponse à ce test est correcte (d'après la nouvelle proposition de standard SMTP, le code 501 indique une erreur de syntaxe sur les paramètres ou arguments).
On pourrait décider de l'altérer en partant du principe qu'une telle erreur ne pourrait être commise que par un utilisateur manuellement connecté sur le serveur.
On pourrait également décider de ne pas l'altérer en partant du principe que la stricte conformité aux standards est un bon moyen pour lutter contre les analyseurs d'empreintes réseau... lorsque lesdits standards sont bien entendu exempts d'ambiguïtés :-)
Sauf mention contraire, ce choix sera possible pour toutes les réponses correctes indiquées ci-dessous.
Test 3
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:06 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
MAIL FROM test
501 5.5.2 Syntax error in parameters scanning "FROM"
|
La réponse à ce test est correcte.
Test 4
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:09 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
MAIL FROM: <>
250 2.1.0 <>... Sender ok
|
Hors cas particuliers, la réponse à ce test est correcte (afin d'éviter les boucles infinies lors des notifications de messages non délivrés) et l'on ne souhaite pas l'altérer.
Test 5
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:12 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
MAIL FROM: <test@yahoo.com
553 5.0.0 <test@yahoo.com... Unbalanced '<'
|
La réponse à ce test est correcte (le code 553 indiquant une erreur de syntaxe sur une boîte à lettres).
Test 6
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:15 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
MAIL FROM: <impossibleaddress@thisdomaindoesnotandmustnotexists.com>
451 4.1.8 Domain of sender address impossibleaddress@thisdomaindoesnotandmustnotexists.com \
does not resolve
|
Il y a plusieurs façons d'altérer la réponse donnée par Sendmail, par exemple :
6.1) En rendant résolvable le domaine "thisdomaindoesnotandmustnotexists.com" :
# cat >> /etc/hosts << EOF
127.0.0.1 thisdomaindoesnotandmustnotexists.com
127.0.0.1 thisdomaindoesnotandmustnotexists.com.
EOF
|
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Sat, 28 Dec 2002 00:12:00 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
MAIL FROM: <impossibleaddress@thisdomaindoesnotandmustnotexists.com>
250 2.1.0 ... Sender ok
|
6.2) En filtrant les messages provenant de impossibleaddress@thisdomaindoesnotandmustnotexists.com (cette adresse est codée en dur dans le code source du produit) :
# cd /etc/mail
# echo "impossibleaddress@thisdomaindoesnotandmustnotexists.com REJECT" >> access
# make access.db
# killall -HUP sendmail
|
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Sat, 28 Dec 2002 00:11:17 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
MAIL FROM: <impossibleaddress@thisdomaindoesnotandmustnotexists.com>
550 5.7.1 <impossibleaddress@thisdomaindoesnotandmustnotexists.com>... Access denied
|
Test 7
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:18 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
MAIL FROM: <test@yahoo.com>
250 2.1.0 test@yahoo.com... Sender ok
RCPT TO: test
503 5.0.0 Need MAIL before RCPT
|
La réponse à ce test est correcte (le code 503 indiquant une mauvaise séquence de commandes).
Test 8
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:22 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
HELP
214-2.0.0 Disabled.
214 2.0.0 End of HELP info
|
Il y a plusieurs façons d'altérer la réponse donnée par Sendmail, par exemple :
8.1) En supprimant le fichier d'aide de Sendmail (faites en une copie avant :-)) :
# rm /etc/mail/helpfile
# killall -HUP sendmail
|
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Sat, 28 Dec 2002 00:11:24 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
HELP
502 5.3.0 Sendmail 8.12.6 -- HELP not implemented
|
Mais, comme on peut le voir, le remède est pire que le mal !
8.2) Pour éviter cela, je propose d'appliquer un patch comblant ce type de fuites d'informations dans Sendmail :
# cd /usr/src
# patch < sendmail-helpfile-leaks.patch
# cd usr.sbin/sendmail
# make clean
# make depend
# make
# make install
# sh /etc/rc.sendmail stop
# sh /etc/rc.sendmail start
|
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Sat, 28 Dec 2002 00:11:24 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
HELP
502 5.3.0 HELP not implemented
|
8.3) Ou bien, dans la logique du rejet des connexions manuelles, en débrayant la commande HELP au moyen d'un autre patch introduisant deux nouvelles PrivacyOptions : nonoop et nohelp. Puis en ajoutant cette dernière option en regard de la ligne "O PrivacyOptions=" du fichier /etc/mail/sendmail.cf :
# cd /usr/src
# patch < sendmail-nohelp-nonoop.patch
# cd usr.sbin/sendmail
# make clean
# make depend
# make
# make install
# sh /etc/rc.sendmail stop
# sh /etc/rc.sendmail start
|
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Sat, 28 Dec 2002 00:15:27 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
HELP
502 5.7.0 Sorry, we do not allow this operation
|
Test 9
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:25 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
VRFY root
250 2.1.5 Charlie Root <root@herisson.maison>
|
La réponse donnée par Sendmail peut être altérée en ajoutant l'option "novrfy" (ou son sur-ensemble, l'option "goaway") en regard de la ligne "O PrivacyOptions=" du fichier /etc/mail/sendmail.cf afin de débrayer la commande VRFY, puis en indiquant à Sendmail de relire sa configuration :
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:57:00 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
VRFY root
252 2.5.2 Cannot VRFY user; try RCPT to attempt delivery (or try finger)
|
Test 10
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:28 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
EXPN root
250 2.1.5 Charlie Root
|
La réponse donnée par Sendmail peut être altérée en ajoutant l'option "noexpn" (ou son sur-ensemble, l'option "goaway") en regard de la ligne "O PrivacyOptions=" du fichier /etc/mail/sendmail.cf afin de débrayer la commande EXPN, puis en indiquant à Sendmail de relire sa configuration :
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:57:10 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
EXPN root
502 5.7.0 Sorry, we do not allow this operation
|
Test 11
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:31 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
TURN
502 5.5.1 Command not implemented: "TURN"
|
La réponse à ce test est correcte (le code 502 indiquant une commande non implémentée).
Test 12
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:34 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
SOML FROM: <test@yahoo.com>
502 5.5.1 Command not implemented: "SOML FROM: <test@yahoo.com>"
|
La réponse à ce test est correcte (le code 502 indiquant une commande non implémentée).
Test 13
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:37 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
SAML FROM: <test@yahoo.com>
502 5.5.1 Command not implemented: "SAML FROM: <test@yahoo.com>"
|
La réponse à ce test est correcte (le code 502 indiquant une commande non implémentée).
Test 14
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:40 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
NOOP
250 2.0.0 OK
|
La réponse à ce test est correcte (le code 250 indiquant le succès de l'opération demandée).
Toutefois, dans la logique du rejet des connexions manuelles, il est possible de débrayer la commande NOOP à l'aide du patch présenté au §8.3, puis en ajoutant l'option "nonoop" en regard de la ligne "O PrivacyOptions=" du fichier /etc/mail/sendmail.cf.
La réponse de Sendmail à Smtpscan devient alors :
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:58:29 +0100 (CET)
HELO test.com
250 herisson.maison Hello localhost [127.0.0.1], pleased to meet you
NOOP
502 5.7.0 Sorry, we do not allow this operation
|
Test 15
220 herisson.maison ESMTP server ready at Fri, 27 Dec 2002 18:55:43 +0100 (CET)
EHLO test.com
250-herisson.maison Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-DELIVERBY
250 HELP
|
La réponse à ce test est correcte (le code 250 indiquant le succès de l'opération demandée).
Approche globale
A ce stade des opérations, on constate qu'avec de simples modifications de paramétrage, il est possible d'obtenir au moins 72 empreintes pour un Sendmail 8.12.6, et au moins 144 empreintes en s'aidant d'un patch.
Mais il y a (pour le moment :-)) beaucoup plus simple pour contrecarrer Smtpscan : on remarque également que 13 tests sur 15 reposent sur l'utilisation du domaine "test.com" dans les commandes HELO et EHLO (ce domaine est codé en dur dans le code source du produit).
A l'aide d'un ultime patch, il est possible de déconnecter Smtpscan dès présentation de ce domaine et de journaliser la tentative de balayage :
# cd /usr/src
# patch < sendmail-antiscan.patch
# cd usr.sbin/sendmail
# make clean
# make depend
# make
# make install
# sh /etc/rc.sendmail stop
# sh /etc/rc.sendmail start
|
Combiné à la technique de filtrage proposée au §1.2, le résultat de Smtpscan devient alors :
# smtpscan localhost
smtpscan version 0.3.1
Scanning localhost (127.0.0.1) port 25
...............
Result --
550:501:0:0:0:0:0:0:0:0:0:0:0:0:0
No exact match. Nearest match :
- Exim 3.35 (13) (with source email address checking - rbl, ...)
To help improving smtpscan database, if you know which soft is used there,
please send a mail to zejames@greyhats.org, giving the output of smtpscan -v
and the remote server version.
|
Derniers avertissements
Notez que l'identification du serveur reste toujours possible par le biais de ses messages de réponse SMTP (l'outil smtpmap tenant compte de manière rudimentaire de leurs spécificités). Un complément possible consisterait à réaliser un patch facilitant la modification de tous ces messages...
|