mercredi 21 janvier 2009

Distrib Forensics

http://www.deftlinux.net/

jeudi 21 août 2008

PF et attaques ssh

Vous avez surement déja vu dans vos logs de connexion des tentatives de connexion par attaque bruteforce (sshd, httpd, ftpd…). C'est chiant, ca remplit vos logs, et ca fait loader votre serveur qui n'avait pas besoin de ca.

Heureusement, l'ami Daniel Hartmeier pense à vous, et a ajouté des options convi à son fameux firewall PacketFilter, affectueusement surnommé PF. Il s'agit de 'max-src-conn-rate' et de 'max-src-conn', a utiliser en combinaison avec 'overload'. Ces options sont disponibles dans PF à partir d'OpenBSD 3.7, FreeBSD 6.0 et NetBSD 2.0.

Ca se passe donc dans le fichier de conf de pf, /etc/pf.conf. Je donne l'exemple pour ssh, mais le principe est le même pour les autres ports.

Avant, pour autoriser les connexions ssh de l'extérieur, on avait une ligne ressemblant à cela (avec $external le nom de son interface réseau externe) :

pass in quick on $external inet proto tcp from any to any port ssh flags S/SA keep state 

Il suffit de remplacer ces lignes par:

table <ssh-bruteforce> persist
block in quick from <ssh-bruteforce>
pass in quick on $external inet proto tcp from any to any port ssh flags S/SA keep state \
( max-src-conn-rate 2/10, overload <ssh-bruteforce> flush global)

Dans l'ordre :

  • on crée une table qui va conserver les ip des attaquants
  • on bloque tout ce qui provient de ces ips
  • on autorise les connexions ssh si il y a moins de 2 tentatives de connexion en 10 secondes
  • sinon on enregistre l'ip dans la table, et on détruit toutes les connexions correspondant à cette ip.

Évidemment, on peut personnaliser la fréquence des tentatives de connexion, et utiliser aussi 'max-src-conn' pour limiter le nombre total de connexions provenant d'une ip.

Voila, à vous la tranquillité, et adieu les attaques bêtes et méchantes !!

mercredi 20 août 2008

Sécuriser commande SMTP Sendmail

Pour interdire les commandes expn et vrfy, restreindre l'accès à la queue de messages et forcer l'identification du client : ajouter la ligne suivante dans /etc/sendmail.mc :

define('confPRIVACY_FLAGS', authwarnings novrfy noexpn restrictmailq neddmailhelo)

Une fois le fichier /etc/sendmail.mc ainsi modifié il convient de générer le nouveau fichier de configuration de Sendmail :

m4 /etc/sendmail.mc > /etc/sendmail.cf

Puis relancer le démon avec ce nouveau fichier de configuration :

/etc/rc.d/init.d/sendmail restart

Sendmail paramètres anti-DOS

De nombreux de paramètres peuvent être configurés dans le fichier /etc/sendmail.mc afin d'offrir une résistance plus importante aux attaques visant à saturer les ressources du système. Il est donc intéressant de fixer les variables suivantes dans le fichier /etc/sendmail.mc :

Variables du fichier /etc/sendmail.mc Signification
define('confMIN_FREE_BLOCKS','100') Nb. minimum de bloques libres dans la queue pour accepter de nouveaux messages
define('confMAX_MESSAGE_SIZE','5000000') Taille maximale des messages acceptés (en bits)
define('confAUTO_REBUILD','False') Recompilation automatique des alias
define('confQUEUE_LA,'10') Valeur : 8*nb_processeurs
define('confREFUSE_LA','8') Valeur : 12*nb_processeurs
define('confMAX_DAEMON_CHILDREN','40') Nb. max de processus fils autorisés par le démon Sendmail (par défaut : infini ; 40 pour 128 MB RAM). Au-delà, les connexions sont refusées.
Attention : fixer cette variable peut constituer une source de déni de service !
define('confMAX_HEADERS_LENGTH','64') Taille maximale de la somme des en-têtes
define('confMAX_MIME_HEADER_LENGTH','1024') Taille maximale de certaines valeurs dans les en-têtes MIME
define('confMAX_RCPTS_PER_MESSAGE','100') Nombre maximal de destinataires d'un message (par défaut : infini).
Si ce nombre est dépassé, les destinateurs suivants reçoivent un code d'erreur 452 et la livraison du message est effectuée à la prochaine connexion.

Message d'accueil Sendmail

Par défaut, Sendmail envoie un certain nombre d'information lorsque l'on se connecte sur le serveur de messagerie :

telnet localhost 25
220-mail.domaine.fr ESMTP Sendmail 8.9.3/8.8.7 Tue, 20 Feb 2001 23:30:58 +0100

Ces informations permettent de découvrir sans effort la version de Sendmail utilisée (ici 8.9.3) ainsi que la version du fichier sendmail.cf (ici 8.8.7).
Pour éviter cela, il convient d'éliminer les options $v et $Z du fichier /etc/sendmail.mc :

define('confSMTP_LOGIN_MSG',$j Sendmail; $b)

FreeBSD blowfish et message d'acceuil

Conversion des password à Blowfish

Pour se protéger contre les exploits locaux, il peut etre interessant de pouvoir changer l'algorithme utilisé par défault.

Blowfish est rapide et sûr. Pour implémenter les hash Blowfish, éditez /etc/login.conf et changez la ligne suivante :

:passwd_format=blf:\

Sauvegardez, puis recompiler la base des logins avec la commande suivante :

cap_mkdb /etc/login.conf

Il va falloir à présent changer tous les mot de passe des utilisateurs pour avoir un nouveau hash Blowfish.
Pour vérifier si cela à bien fonctionner, éditez (en root) le fichier /etc/master.passwd Les mots de passe doivent commencer par $2.
Pour terminer, configurez l'utilitaire adduser pour utiliser Blowfish par défault, éditez /etc/auth.conf file :

crypt_default=blf

Changer le message d'accueuil

Quand vous vous loggez, vous avez un message vous rappelant que vous êtes sous FreeBSD, la verson et le nom du kernel... Vous ne voulez pas forcément faire partager ces informations sensibles.

Editez le fichier /etc/motd avec ce que vous voulez ;-)
Enlevons à présent le copyright. Créez un fichier de copyright vide en lançant la commande :

touch /etc/COPYRIGHT 

Puis pour changer le texte qui apparait au prompt, editez le /etc/gettytab . Trouvez la ligne dans la section default:\ qui commence avec :cb:ce:ck:lc

Prudement, changez le texte entre \r\n\ \r\n\r\nr\n: avec ce que vous voulez.
Re-vérifier bien que vous avez le bon nombre de \rs et \ns et sauvegardez.
Testez en vous re-loggant.
Finalement, FreeBSD va rajouter ses informations à chaque fois que vous vous loggerez. Pour éviter cela, ajoutez la ligne suivante à /etc/rc.conf , puis rebootez

update_motd="NO"