lunedì , dicembre 11 2017
Ultime Notizie
Home / Hacking & Sicurezza / Sito Web attaccato? Strategie di Difesa

Sito Web attaccato? Strategie di Difesa

Ciao Ragazzi,

oggi ho deciso di affrontare un argomento interessante.

La maggior parte dei siti web php based oggi utilizza un CMS (Content Management System) come Joomla, WordPress, phpBB, siti di ecommerce etc.

Questi hanno semplificato di molto la vita degli utenti ma hanno anche aperto le porte ad attacchi di cracker sempre più frequenti.

Molto spesso il nostro sito è sotto attacco e noi non ce ne accorgiamo nemmeno!

Vediamo un po’ come accorgersi se un sito web è stato attaccato e quindi compromesso!

ATTENZIONE: questa guida presuppone che voi possiate accedere ai log del vostro server web e soprattutto al terminale.

Possiamo cominciare.

Per prima cosa si cercano i file .php che sono stati modificati negli ultimi giorni:

find . -type f -name '*.php' | xargs grep -l "eval *(" --color
find . -type f -name '*.php' | xargs grep -l "base64_decode *(" --color
find . -type f -name '*.php' | xargs grep -l "gzinflate *(" --color

In genere gli autori degli script utilizzati per attaccare i siti li mascherano per evitare eventuali antivirus o software capaci di identificare codice maligno.

In questo modo i file che verranno restituiti saranno al 90% sicuramente compromessi (a meno che non abbiate acquisto un qualche script php che non viene fornito con codice sorgente ma viene mascherato!)

Vediamo un esempio pratico che cerca nella cartella wp-content di WordPress:

find wp-content -type f -name '*.php' | xargs grep -l "gzinflate *(" --color

In alcuni casi, dove gli script sono in chiaro alcune delle opzioni che usano sono quelle di aprire dei socket oppure lanciare comandi per eseguire operazioni sul server: Ecco come cercare questo tipo di files:

find . -type f -name '*.php' | xargs egrep -i "(mail|fsockopen|pfsockopen|stream_socket_client|exec|system|passthru|eval|base64_decode) *\("

Ma chi attacca i siti queste cose le sa bene, per cui spesso maschera questo tipo di operazioni utilizzando direttamente la codifica Esadecimale (HEX)

In questo modo noi non troveremmo niente eppure il sito rimane compromesso…

Ecco come fare:

find . -type f -name '*.php' | xargs egrep -i "preg_replace *\((['|\"])(.).*\2[a-z]*e[^\1]*\1 *," --color

Con il codice che ho scritto sopra si vanno a cercare tutti i preg_replace dove si cerca di inserire del codice esadecimale!

Continuiamo con l’esempio di WordPress.

Mettiamo il caso di avere il sospetto o la certezza che il sito sia stato compromesso.

Possiamo effettuare un upload sul server di una versione “pulita” di wordpress( o un altro cms) in un’altra cartella ed effettuare un diff per notare eventuali differenze (Attenzione perchè in questo caso le versioni del CMS devono essere uguali!)

diff -r wordpress-ok/ wordpress-hack/ -x wp-content

Inoltre la maggior parte degli attacchi prolificano su server dove vengono concessi (volontariamente o meno) i permessi di scrittura sulle cartelle.

Di seguito un breve script per aiutare a capire i file .php presenti nelle cartelle con permessi 777:

#!/bin/bash
 
search_dir=$(pwd)
writable_dirs=$(find $search_dir -type d -perm 0777)
 
for dir in $writable_dirs
do
    #echo $dir
    find $dir -type f -name '*.php'
done

Reso eseguibile lo script è possibile verificare i file in questo modo:

./search_php777 > results.txt

Questo script può essere variato nel seguente modo (in base a quanto abbiamo detto prima):

#!/bin/bash
 
IFS=$'\n'
 
while read php_file
do
    egrep -i "(mail|eval|base64_decode|str_rot13|chmod|fwrite|exec|passthru|shell_exec|system|proc_open|popen|curl_exec|curl_multi_exec|show_source|fsockopen|pfsockopen|stream_socket_client) *\(" "$php_file"
done < php_in_writable.txt

Da eseguire in questo modo:

./find_malicious

Ultima ma non meno importante delle cose da verificare, è la possibilità che del codice php sia “nascosto” dentro una immagine:

find wp-content/uploads -type f -iname '*.jpg' | xargs grep -i php

Per chi preferisce avere un unico script che fa tutto, può utilizzare NeoPI che racchiunde gran parte delle analisi che vi ho mostrato solo scritte in Python!

Buona analisi a tutti.

Enjoy!

Tags

Info Paolo Daniele

Ingegnere delle Telecomunicazioni, appassionato di informatica fin da piccolo ho trasformato la passione in lavoro. Con il PHP faccio tutto (o quasi…) ma non disprezzo altri linguaggi all’occorrenza. Se vi piace il mio sito, o vi è utile, o vi sto simpatico, offritemi una birra!

Ti potrebbe interessare

Mikrotik – Visualizzare password Winbox

Ciao Ragazzi, quante volte è capitato di dimenticare una password? Winbox (il tool sviluppato da …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *