lundi, décembre 30, 2024
Nom d'utilisateur : Mot de passe :
[NEWS]
Envoyé par unreal
Introduction

Un serveur httpd (Apache, ou autre) peut servir à délivrer uniquement un contenu statique, mais plus souvent que non il sert aussi comme serveur de contenu dynamique. Beaucoup de langages utilisés pour générer du HTML dynamique (PHP, Perl, Python…) offrent une possibilité intéressante mais potentiellement très dangereuse ; il s'agit de la possibilité d'accéder au shell depuis le script. En effet : une faille de programmation dans le script peut permettre à une personne malveillante d'exécuter le code de son choix sur le serveur. Ce code tournera forcément avec les droits du serveur httpd (du moins dans un premier temps, lisez la suite), mais comme l'utilisateur httpd ne subit aucune restriction particulière, il peut lancer d'autres processus, ouvrir des ports en écoute, émettre des paquets vers le Net, ainsi de suite. Les conséquences peuvent être tout à fait catastrophiques, surtout qu'on découvre de temps en temps des failles au niveau des kernel *nix permettant escalader les privilèges sur un système vulnérable.

Pour protéger un serveur, il existe plusieurs options à l'administrateur :

  • Mettre à jour régulièrement son système d'exploitation (y compris son kernel).
  • Mettre à jour régulièrement les applications Web hébergées (et notamment les applications populaires qui attirent l'attention des pirates : forums, portails php, ainsi de suite).
  • Monter les dossiers temporaires (souvent /tmp et /var/tmp) avec le flag "noexec".
  • Pour le PHP : si les utilisateurs n'ont pas besoin de pouvoir lancer du shell, il convient d'activer le safemode ou de désactiver l'accès shell.
  • Utiliser un script d'audit comme celui que je propose ici.


Script Audit, comment ça fonctionne ?

Le script doit se lancer régulièrement (toutes les 5 minutes, par exemple) ; on utilisera pour cela le crontab root :

# Audit stuff
*/5 * * * *        /usr/local/bin/httpd_audit.sh


Note : sous FreeBSD, Cron lance les scripts avec le shell sh, pour utiliser bash il convient d'ajouter la ligne suivante tout en haut du crontab :

SHELL=/usr/local/bin/bash


A chaque lancement, le script repère s'il existe des processus tournant sous l'utilisateur httpd sans être le serveur httpd (en clair, il vérifie s'il existe des processus shell lancés par des applications Web).

S'il y'en a pas alors le script Audit quitte directement. Sinon, le script va lister l'activité réseau de chacun des processus détectés.

Si aucun des processus ne communique (pas de socket en écoute ou en émission), alors le script envoie un mail d'avertissement à l'administrateur avec un listing détaillé pour qu'il puisse évaluer s'il y'a un risque ou non. Si un ou plusieurs des processus communique sur un port non autorisé (le script dispose d'une liste de ports autorisés par l'administrateur) alors le script détruit le processus (kill -9) et envoie un mail (avec listing détaillé) à l'administrateur pour signaler l'incident.

Cela va permettre à l'administrateur de constater que le serveur a été compromis pour réagir le plus rapidement possible.

Configuration requise

  • Machine Linux ou FreeBSD
  • Accès root
  • Crontab configuré pour lancer les scripts avec bash


Téléchargement

Pour télécharger ce script, rendez-vous dans sa rubrique téléchargement.

Historique de ce document

07/04/2006 -- version initiale.

Posté le 03/04/06 à 11:47 - 0 Commentaires...