La mascotte BSD dessinée par Tatsumi Hosokawa
  Chuck's corner (intitulé du site)

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 Logo Google

  sur le site :
  
  sur BSD en général :
  

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 :

# killall -HUP sendmail

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 :

# killall -HUP sendmail

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 :

# killall -HUP sendmail

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...


[ Drapeau anglais English version | Informations légales | Ours | Manifeste | Charte | Nous contacter | Commenter cette page ]
[ Anneau FreeBSD | Liste des sites | Aller à : 5 précédents - précédent - au hasard - suivant - 5 suivants ]