Limiter les algorithmes de cryptographie sur un serveur web

Rédigé par Alexandre le 2015-10-13

#debian #sysadmin #loisir

Ah, un audit de sécurité, rien de mieux pour vous mettre la tête dans la boue et vous expliquer après que c'est pas de la boue... Ok, introduction bizarre, mais j'avais envie, donc CHUUUT, y a bambi qui fait dodo !

Hum, hum, revenons au sujet... déjà, qu'est-ce que veut dire ce titre ? Limiter, c'est...non pardon.
Les algorithmes de cryptographie permettent à un serveur web "sécurisé" via SSL de crypter les données qui transitent entre lui et le navigateur. Grosso modo, si vous allez sur un serveur web crypté, comme google.fr par exemple, il est théoriquement impossible que quelqu'un récupère votre dernière recherche, mis à part Google et votre navigateur évidemment.
Pour reconnaitre un serveur "sécurisé", il suffit de regarder si son adresse contient https. Les navigateurs modernes ont un indicateur visuel, comme on peut le voir avec le cadena présent sur Firefox par exemple :

Capture d'écran de l'indicateur visuel de Firefox

Euh, mais pourquoi limiter les algorithmes ?
Au fil des années, les hackers, les vrais pas ceux qui téléchargent leur film sur Youtube, ont cassé un certain nombre d'algorithmes, les rendant inutiles. Le fait de casser un algorithme signifie que les données cryptées peuvent être décryptées et donc exploitées.

Passons aux choses sérieuses.

Tester le serveur

Avant de vous lancer dans des manipulations peut être inutiles, vérifions si le serveur est sécurisé ou non via le site SSL LAB.
Ci-dessous, le résultat avant sécurisation, à gauche, et le résultat après sécurisation, à droite.

Capture d'écran avant sécurisation Capture d'écran après sécurisation

Algorithmes recommandés

Evidemment, il n'est pas facile de savoir quels sont les algorithmes encore sécurisés, mais la fondation Mozilla est gentille avec nous puisqu'elle met à disposition une page de wiki fort bien faite, même si en anglais, nous donnant exactement ce qu'il nous faut.

A titre personnel, je ne m'embête pas avec les anciens navigateurs, on sécurise ou on ne le fait pas, mais jamais à moitié ! Par conséquent, je prends uniquement en compte la partie Modern compatibility. Décryptons les lignes :

  • Ciphersuite : il s'agit de ces fameux algorithmes de cryptographie
  • Versions : protocol utilisé pour le cryptage
  • RSA key size : taille minimale de la clé de cryptage
  • Certificate signature : cryptage du certificat

Il manque des lignes simplement parce-que je ne m'en suis pas servi pour atteindre la meilleure note.

Sécuriser apache2

La plupart des serveurs web de la planète fonctionnent sous Linux et apache2 même si nginx commence à prendre une bonne part de marché. Bref, sur apache2, c'est relativement simple.

On commence par créer un fichier crypto_limit.conf qui servira à tous les vhosts apache :

nano /etc/apache2/conf.d/crypto_limit.conf

Coller dans le fichier les éléments suivants :

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "AAAAAATTENTION"

Il est nécessaire de remplacer AAAAAATTENTION par la section Ciphersuite de la documentation de Mozilla, mais ne surtout pas supprimer les guillemets !

Pour finir, il suffit de recharger apache :

service apache2 reload

Sécuriser IIS

Parce-que malheureusement certains serveurs sont sous IIS, il faut également les sécuriser. Evidemment, c'est bien moins simple que sous apache et c'est pour cette raison que je vous renvoie à un script Powershell tout fait (source).
Le script a été directement lancé sur un serveur hébergeant Exchange 2010.

Une fois le script lancé sur le serveur, il faut redémarrer... merci Microsoft...

Conclusion

Une fois terminé, effectuer un nouveau test.