Web Security 1/2: Come effettuare il Check-Up del proprio Sito Web

[Voti: 24    Media Voto: 4.5/5]

sherlock holmes

Se pensate che il vostro sito web sia sotto attacco questo articolo fa per voi. Vedremo infatti come capire se il sito è stato attaccato, chi l’ha attaccato e come. Vedremo inoltre che contro misure adottare nell’immediato, come ripulire il server e, nell’articolo Web Security 2/2: 7 Script Linux per Monitorare lo stato di salute del proprio Server, come renderlo sicuro.

Supponiamo di essere nel seguente scenario:

  • Il sito web si avvale di script PHP (es. è stato implementato con CMS come Joomla!, WordPress, ecc.);
  • Il servizio di hosting è composto dallo stack LAMP: Linux, Apache, MySQL, PHP;
  • Il sito web è stato attaccato;

Di seguito vediamo il tipo di attacco più comune.

Come identificare l’attacco

Per prima cosa vanno analizzati i file di log del web server che, nel caso di Apache, sono access_log e error_log.

Solitamente questi file sono presenti nella directory var/log/apache2 anche se ogni distribuzione può fare diversamente.

All’interno dell’access_log cerchiamo tutte le volte che è stata fatta una POST con esito positivo (200) aiutandoci per esempio con il seguente comando:


server:/var/log/apache2 # grep "POST.* 200 " access_log >POST_200.txt

Nel file POST_200.txt troveremo tutte le POST andate a buon fine.

Perché una POST? Perché le POST vengono utilizzate per inviare parametri agli script PHP e vengono preferite dagli hacker poiché, a differenza delle GET, non resta traccia dei parametri inviati nei file di log.

A questo punto il colpo d’occhio e l’intuito dovrebbero farci capire se c’è qualcosa di sospetto o meno.

Come?

Rispondendo a queste domande:

  1. Ci sono request ripetute o molto simili?
  2. Provengono sempre dallo stesso IP o da un gruppo di IP ristretto?
  3. Riguardano file strani o dal nome generico (es. phpinfo.php) posizionati in directory insolite (es. nella directory delle immagini)?
  4. Lo user agent invece che essere i soliti Mozilla, Gecko, Internet Explorer, ecc. contiene keyword come BOT, ma non si tratta di Google, Yahoo e company (es. “BOT/0.1 (BOT for JCE)”)

Se la risposta è sì ai punti 1,2 e 4 significa che probabilmente l’attaccante è riuscito a sfruttare qualche vulnerabilità nota e probabilmente è riuscito a installare una backdoor.

Se la risposta è sì ai punti 1,2 e 3 significa che probabilmente l’attaccante sta già utilizzando la backdoor installata precedentemente per fare chissà cos’altro.

Un esempio di request (reale) sospetta è la seguente:


213.238.171.17 - - [09/Sep/2014:10:54:34 +0200] "POST /j/index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager&method=form&cid=20&6bc427c8a7981f4fe1f5ac65c1246b5f=cf6dd3cf1923c950586d0dd595c8e20b HTTP/1.1" 200 52 "-" "BOT/0.1 (BOT for JCE)"

L’attaccante ha sfruttato una vulnerabilità nota del CMS o di una delle sue estensioni (moduli, plugin, ecc.)

Uno dei casi più comuni tra quelli che abbiamo analizzato è lo sfruttamento di una vulnerabilità legata all’upload di file utilizzando il Rich Text Editor JCE per Joomla!.

L’attaccante, utilizzando degli script preconfezionati, sfrutta tale exploit per depositare sul server, nella cartella delle immagini, delle shell PHP per poterle poi utilizzare in un secondo momento come backdoor.

Identificazione degli script PHP malevoli

Tali shell PHP e in generale gli script PHP malevoli (malware), possono differire nel funzionamento, ma hanno tutti qualcosa in comune: utilizzando funzioni del PHP come base64_decode per decodificarne il codice che non è in chiaro, ma codificato appunto in base 64.

Aprendo tali script, hanno tutti da qualche parte, magari dopo qualche centinaia di spazi e su un’unica riga, il seguente codice:


eval(base64_decode("8y984e8kdf93..."));

Il codice tra doppi apici è il vero codice dello script malevolo, quello cioé che fa, mentre base64_decode serve per decodificarlo e eval lo esegue.

Per sapere quindi se sul nostro server sono presenti script di questo genere basterà lanciare una ricerca come la seguente:


server:/srv/www/htdocs # find . -type f -exec grep "base64_decode" {} + >base64_decode.txt

Terminata la ricerca, nel file base64_decode.txt troveremo tutti i file in cui è stata trovata tale keyword. Da notare che non ho incluso filtri sul tipo di file come l’estensione, poiché mi è ancora capitato che il codice malevolo venisse nascosto addirittura nell’header di un file JPEG, in altri termini in un’immagine.

Una volta accertata la natura maligna di tali file basterà eliminarli.

Altre funzioni analoghe comunemente utilizzate dagli hacker per lo stesso scopo possono essere str_rot13, gzinflate e shell_exec. Un elenco esaustivo di tali funzioni lo si può trovare con una semplice ricerca su Internet.

Messa in sicurezza del server

Per mettere in sicurezza il server le misure adottate per casi simili possono essere:

  1. Aggiornamento, sostituzione o disinstallazione del componente vulnerabile (in questo caso si è preferito disinstallare completamente JCE);

  2. Rimozione del permesso di esecuzione a tutte le directory e a tutti i file presenti sotto /srv/www/htdocs col comando seguente:


server:/srv/www/htdocs # chmod 664 -R *

  1. Modifica del file .htaccess per impedire l’esecuzione di script PHP presenti in cartelle in cui non dovrebbero esserci (es. la cartella delle immagini) aggiungendo il codice seguente:

<Directory "/srv/www/htdocs/joomla/images/*">
    <FilesMatch "\.php$">
        Order deny,allow
        Deny from all
    </FilesMatch>
</Directory>

Conclusione

Conoscere il proprio server, mantenerlo aggiornato e monitorato, come vedremo nell’articolo Web Security 2/2: 7 Script Linux per Monitorare lo stato di salute del proprio Server, è la migliore forma di prevenzione per gli attacchi informatici. Comunque sia, nel caso in cui si subisca un attacco, è bene sapere come comportarsi per ristabilire la normale operatività del proprio server nel minor tempo possibile.

Hai qualche domanda a cui non abbiamo dato risposta? Contattaci senza impegno!

Garda Informatica

Garda Informatica

Garda Informatica sviluppa software su misura nella forma di Web Application, App Ibride per iOS/Android/Windows Phone, Crawler Web, Gestionali Web o semplici Connettori per l'integrazione tra software di terze parti.
Garda Informatica