Suhosin

Un article de Wikipédia, l'encyclopédie libre.
Suhosin

Informations
Créateur Stefan Esser
Première version
Dernière version 0.9.38 ()
Dépôt GitHub
État du projet Inactif
Écrit en C
Environnement PHP
Licence Licence PHP
Site web https://suhosin.org

Suhosin (수호신 en Coréen, signifiant "ange gardien", prononcé 'su-ho-shin') est un patch open source pour PHP, ainsi qu'une extension pour ce dernier, écrit par l'entreprise allemande Sektion Eins[1]. Le patch et l'extension sont deux parties distinctes, pouvant être utilisées ensemble ou séparément. "Le but de Suhosin est d'être un filet de sécurité protégeant les serveurs contre les mauvaise pratiques de code au niveau de PHP."[2]

Suhosin réduit également la surface d'attaque présentée par PHP, via un système de liste blanche pour les fonctions pouvant être appelées, des limites en termes de ressources, du chiffrement transparent de cookies de session, du filtrage de contenu binaire, de la journalisation[3]. Minimisant ainsi les risques liés au déploiement de code PHP dangereux, et protégeant d'attaques connues et inconnues.

Fonctionnalités[modifier | modifier le code]

Le patch contient des techniques de durcissement visant à empêcher les attaques par corruption mémoire, qui ne sont pas présentes dans le module. La plupart d'entre elles ont toutefois été intégrées directement dans PHP.

  • Chiffrement des cookies: afin de protéger des attaques de type XSS visant à voler des cookies, ces derniers sont chiffrés avec une clef dérivée du user-agent ainsi que d'une partie de l'adresses IP de l'utilisateur. Ce qui empêche un attaquant d'utiliser des cookies dérobés., les cookies ne se déchiffrant pas correctement avec son adresse IP.
  • Protection contre les inclusions arbitraires: les fichiers envoyés, ainsi que les fichiers distants ne peuvent pas être inclus, rendant plus difficile l'exploitation de remote File Inclusion.
  • Désactivation de vecteurs courants d’exécution de code arbitraire: le mot clef eval n'étant pas une fonction en PHP, il ne peut être désactivé via la directive disable_function. Suhosin ajoute cette possibilité, tout comme celle de désactiver le modificateur /e de la fonction preg_replace, lui aussi fréquemment utilisé à des fins malveillantes.
  • Protection contre des boucles infinies: PHP possède un comportement documenté (et accepté) entraînant une erreur de segmentation en cas de récursion infinie. Cette erreur étant due à une corruption mémoire, Suhosin va plutôt arrêter l’exécution dès qu'un certain niveau de profondeur dans la pile d'exécution est atteint.
  • Liste noire et liste blanche de fonctions : la directive disabled_function de PHP n'est pas vraiment granulaire, c'est pourquoi Suhosin fournit un mécanisme permettant d’autoriser ou d'interdire des fonctions, globalement, par virtual-host, ou encore par dossiers.
  • Liste noire de nom de variables suspects: Suhosin peut interdire des variables dans les zones GET, POST, COOKIE contenant des noms réservés, comme GLOBALS, _COOKIE, _ENV, _FILES, _GET, _POST
  • Durcissement des envois de fichiers: Suhosin permet d'appeler un script arbitraire lors de l'envoi de fichiers, permettant ainsi d'y adjoindre, par exemple, un anti-virus. Cette fonctionnalité peut également servir à empêcher l'envoi de fichiers ELF, ou de binaires.
  • Lancement d'actions arbitraires en cas de détection d’éventements: blocage de variables, envoi de code de réponse http spécifiques, d'une redirection, ou encore exécuter un script PHP particulier.
  • Journalisation détaillé: il est possible via Suhosin de loguer un grand nombre de détails en cas d’éventements, le nom du fichier, le numéro de ligne, l'adresse IP du client…

Distribution[modifier | modifier le code]

Le module ainsi que le patch furent inclus dans plusieurs distributions Linux , notamment Debian jusqu’à sa version 6.x ("Squeeze"), et fut réintégré plus tard[4], ou encore dans Gentoo Hardened. Il était également activé sur la version serveur de Mac OS X.

À partir de PHP5.4, openSuse arrêta de supporter le patch, mais continue son support du module[5].

FreeBSD maintient également le module dans sa collection de ports.

Développement et héritiers[modifier | modifier le code]

La première version de Suhosin sortit en 2006[6], et supportait PHP 5.2.0. La dernière version du patch fut publiée lieu quelques mois après la sortie du module. Le dernier article publié sur le site officiel date de 2007[6], et le développement du mode s’arrêta de à . Ce qui poussa certaines distributions à considérer le projet comme inactif, jusqu'à ce que la communauté prenne le relai, aux alentours de 2014[7]. Il n'est actuellement pas prévu[8] de pousser dans PHP les fonctionnalités de Suhosin.

En , suhosin7 vit le jour[9], afin de proposer des fonctionnalités équivalentes pour PHP7, mais n'a pour l'instant pas rencontré d'engouement[10]. Le projet Snuffleupagus vise à en être le successeur moderne, pour PHP7 et au-delà.

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]

  1. (en) « Frequently Asked Questions », sur SUHOSIN, (consulté le 6 septembre 2020).
  2. Chapter 13, Securing PHP Web Applications by Tricia Ballad; William Ballad Publisher: Addison-Wesley Professional, Web (ISBN 978-0-321-57431-2)
  3. Official Feature List
  4. Overview of package php5-suhosin in Debian sid
  5. Mailinglist Archive: opensuse-factory (418 mails)
  6. a et b « Hardened-PHP Project - PHP Security - News », sur hardened-php.net (consulté le 18 janvier 2017)
  7. (en) « sektioneins/suhosin », sur GitHub (consulté le 18 janvier 2017)
  8. « 'Re: [PHP-DEV] Suhosin patch disabled by default in Debian php5 builds' - MARC », sur marc.info (consulté le 25 février 2018)
  9. (en) « first commit · sektioneins/suhosin7@aee7faf », sur GitHub (consulté le 18 janvier 2017)
  10. (en) « sektioneins/suhosin7 », sur GitHub (consulté le 18 janvier 2017)

Liens externes[modifier | modifier le code]