Archives pour Vendredi 13 mars 2009

Packet Filter : protection d'attaque SSH par brute force

La technique pour éviter les attaques SSH par brute force avec PacketFilter consiste à ajouter les IP fautives dans une table et d’exclure les IP qui y sont contenues pour les connexions SSH ou de façon globale (petit vilain).

Procédure chef :

  1. déclarer la table qui va contenir les IP bannies
  2. bloquer en début de filtrage les connexions entrantes de ces IP.
  3. ajouter les options de collecte des états des connexions sur les règles que l’on souhaite protéger du bruteforce.
  4. vider la table, en tâche cron par exemple.

Exemple d’un parefeu PF rudimentaire, fait main (70% main droite), autorisant le trafic ICMP et les connexions SSH :

#
# pf.conf
#

# macros
ext_if = "re0" # ou mi0, fa0, sol0 çà dépend
myip = "XX.XX.XX.XX" # comme c'est trop secure

# tables
table <bruteforce> persist {}

# options
set block-policy drop
set skip on lo0 # non ce n'est pas la0
set limit { states 20000, frags 5000, src-nodes 2000 }

# normalization
scrub in all fragment reassemble
scrub all reassemble tcp
scrub in all random-id

#
# rules
#

block all
block quick from <bruteforce>
antispoof quick for lo0

pass out inet proto tcp all flags S/SA keep state
pass out inet proto udp all keep state

pass in on $ext_if inet proto icmp from any to any keep state
pass out on $ext_if inet proto icmp from any to any keep state

pass in on $ext_if inet proto tcp from any to any port 22 flags S/SA keep state (source-track rule, max-src-nodes 8, max-src-conn 8, max-src-conn-rate 10/60, overload <bruteforce> flush global)

Dans le cas où un client se  connecte 10 fois par minute, il est banni et bloqué pour toute nouvelle connexion. Il ne reste plus que de lancer la commande permettant de supprimer les adresses IP enregistrées, ici pour le jour précédent :

# /usr/local/sbin/expiretable -t 24h bruteforce

Certificat SSL multi-domaines gratuit signé par CACert.org

Un certificat multi-domaines (à ne pas confondre avec un certificat wildcard) permet d’utiliser un certificat SSL pour différents noms de domaines et sous-domaines. Ceux-ci peuvent alors être hébergés sur un même serveur Web à adresse IP unique. Pour rappel, lors de l’établissement de la connexion sécurisée, le serveur Web envoie  le certificat SSL alors même que le client n’a pas encore envoyé sa requête. Les certificats au standard X509 ne présentant qu’un unique nom de domaine ou sous-domaines (cas d’un certificat wildcard) par le biais du champ CN (Common Name) : le serveur Web ne peut donc que se mapper  localement à un unique site Web.

Pourtant, une extension existe depuis quelques années (pour ma part je l’ai appris en 2005) et permet de déclarer dans le certificat plusieurs domaines. Celle-ci associe au certificat une liste de domaines : le champ SubjectAltName. Le serveur Web est alors capable de gérer plusieurs domaines, le certificat pouvant être mappé aux hôtes virtuels de cette liste. Seul bémol, la liste des domaines est présente en clair dans le certificat (il n’y aurait pas de magie).

Action ! Pour obtenir un certificat SSL gratuit multi-domaines signé par l’autorité CACert (http://www.cacert.org/) :

  1. créez votre compte sur le site CACert en déclarant votre mailbox et votre nom de domaine
  2. générez la demande de certificat (CSR) grâce à ce script : http://svn.cacert.org/CAcert/Software/CSRGenerator/csr .
  3. copiez la demande sur le formulaire du site et enregistrez le certificat.
  4. installez le certificat racine de CACert si votre navigateur ne l’intègre pas : http://www.cacert.org/index.php?id=3.

Exemple d’exécution du script pour mon domaine hbis.fr (notez bien que je répète le domaine pour l’extension) :

Private Key and Certificate Signing Request Generator
This script was designed to suit the request format needed by
the CAcert Certificate Authority. www.CAcert.org

Short Hostname (ie. imap big_srv www2): hbis
FQDN/CommonName (ie. www.example.com) : hbis.fr
Type SubjectAltNames for the certificate, one per line. Enter a blank line to finish
SubjectAltName: DNS:hbis.fr
SubjectAltName: DNS:www.hbis.fr
SubjectAltName: DNS:admin.hbis.fr
SubjectAltName: DNS:mail.hbis.fr
SubjectAltName: DNS:smtp.hbis.fr
SubjectAltName: DNS:
Running OpenSSL...
Generating a 2048 bit RSA private key
.......................+++
..........................+++
writing new private key to '/root/hbis_privatekey.pem'
-----
Copy the following Certificate Request and paste into CAcert website to obtain a Certificate.
When you receive your certificate, you 'should' name it something like hbis_server.pem

Plus d’informations sur le support de l’extension SubjectAltName par les navigateurs Web : http://wiki.cacert.org/wiki/VhostTaskForce.

Haut de page