Traduzione autorizzata da Sucuri che detiene il copyright dell’articolo. Leggi l’articolo originale (in Inglese)
Gli hacker scansionano costantemente Internet per cercare siti da colpire, per questo motivo anche piccoli siti nuovi (si certo anche il tuo!) dovrebbero essere completamente patchati e protetti. Allo stesso tempo, non è possibile scansionare l’intero Internet con più di330 milioni di domini e miliardi di pagine web. Anche Google non può farlo, ma gli hacker stanno facendo passi da gigante.
Il tuo sito è stato compromesso? Contattaci
chiama 339 848 3250
Nonostante queste limitazioni, la scansione dell’1% di Internet consente agli attaccanti di scoprire migliaia di siti vulnerabili. Ci sono scansioni mirate che compilano elenchi di siti web con componenti software specifici;
Ad esempio, siti realizzati con Magento o con un certo plugin di WordPress. Ci sono anche campagne che eseguono scansioni più ampie di ogni dominio noto, cercando di trovare alcuni CMS, plugin o addirittura backdoor.
Quando gli aggressori trovano un sito vulnerabile, potrebbero attaccarlo subito. D’altra parte, questo processo di scansione aiuta a compilare set di dati specializzati per scansioni successive più veloci – quando saranno interessati solo a siti con un certo software installato.
Quindi, quanto a fondo possono andare queste scansioni?
Possiamo avere un’idea usando uno script che gli hacker installano sui siti compromessi per eseguire la ricerca di altri siti che dispongono di script di gestione dei database Adminer pubblicamente accessibili.
Abbiamo trovato uno script nel file at.php su un sito che Sucuri ha pulito.
A prima vista, si nota una richiesta curl ad un sito russo hackerato, insieme ad un elenco di 14 tipi di file tipici dello script adminer:
- _adminer.php
- ad.php
- adminer-4.2.5-en.php
- adminer-4.2.5-mysql.php
- adminer-4.2.5.php
- adminer-4.3.0-en.php
- adminer-4.3.0-mysql-en.php
- adminer-4.3.0-mysql.php
- adminer-4.3.0.php
- adminer-4.3.1-en.php
- adminer-4.3.1-mysql-en.php
- adminer-4.3.1-mysql.php
- adminer-4.3.1.php
- Adminer.php
Allora, che cosa fa questo script?
Lotti di nomi dominio
Quando abbiamo fatto una richiesta curl per quel sito russo, ha restituito un elenco di 10.000 nomi di dominio.
Fatta eccezione per l’ordine alfabetico dell’elenco, non si è visto alcun modello apparente nel modo in cui l’elenco è stato compilato. I siti utilizzavano tutti i tipi di CMS ospitati su diversi server.
Quando abbiamo fatto un’altra richiesta a tale URL, è stato restituito un nuovo elenco di 10.000 nomi di dominio. Ancora una volta, l’elenco è stato ordinato in ordine alfabetico.
Lo stesso accadeva ad ogni richiesta successiva.
Stima della copertura della scansione
In questo modo, su richiesta, questo singolo script può ricevere un numero significativo di nomi di dominio. Cerchiamo di stimare questo numero.
Un batch tipico di 10 mila domini è costituito da domini che iniziano con la stessa lettera. La differenza tra i numeri # 1 e # 10.000 potrebbe apparire solo nella quarta lettera (ad esempio # 1. brucksclub.com … # 10.000. Brunermotorsblog.com).
Per le combinazioni meno comuni, la differenza potrebbe accadere alla seconda lettera (ad esempio 1. bklynr.com … 10.000. Bladerollermovie.com).
Nel complesso, lo script ha restituito oltre 300.000 domini che hanno iniziato con la lettera “b”.
Secondo Wikipedia, “b” è la prima lettera di circa il 4,4% delle parole inglesi – che la rende abbastanza media in un alfabeto di 26 lettere. Se assumiamo una frequenza simile per i nomi a dominio (che non devono essere parole inglese o parole) e ignorando domini che iniziano con cifre o con lettere non ASCII, arriviamo a circa 7,5 milioni di domini (o circa il 2,5% di tutti i domini attivi) come stima più bassa per il set di dati che questo attacco tenta di eseguire la scansione.
Domini di primo livello nell’elenco
Mentre esistono oltre 200 diversi TLD nell’elenco, solo cinque di essi hanno azioni più grandi dell’1%.
Solo dieci di essi rappresentano circa il 97% dell’intera lista:
.com (68%)
.ru (11%)
.net (8%)
.org (6%)
.info (2%)
.biz (0,6%)
.mobi (0.5%)
.me (0.4%)
.ua (0,3%)
.de (0,3%)
Questa lista non corrisponde all’elenco dei dieci principali TLD, dove .cn è # 2 (rispetto a # 48 con 0,001%) e .uk è # 5 (rispetto a # 13 con circa lo 0,1%). Questo probabilmente ha qualcosa a che fare con la metodologia di come l’elenco è stato compilato. Sospettiamo che un elenco di domini .ru e .ua venisse compilato separatamente e unito all’elenco globale.
Come funziona lo scanner?
Ora vediamo come vengono elaborati questi grandi elenchi di domini. Innanzitutto, sappiamo che lo script dello scanner li richiede in blocchi di 10.000 domini. Questo è un numero abbastanza grande quando hai bisogno di fare richieste a siti web esterni.
Come si potrebbe ricordare, per ogni dominio lo script deve sondare 14 file di adminer. Ciò significa che ci sono 140.000 richieste per batch (o circa 100 milioni di richieste per campagna). Naturalmente, non si può pretendere che uno script completi un compito così grande in una sola volta.
Per aggirare questo problema, lo scanner utilizza il seguente approccio:
- Salva l’elenco di 140.000 URL nel file “s” e la posizione corrente in quella lista nel file “c”.
- Lo script legge l’URL dalla posizione “c” e fa richieste fino a 3.000 secondi (50 minuti). Per farlo, hanno le seguenti impostazioni:ini_set ( ‘max_execution_time’, 3000);… e questa condizione:Se ((tempo () – $ t)> 3000) {exit (); }
- Per accelerare le cose, lo script esegue 20 richieste asincrone contemporaneamente usando la funzione “curl_multi_ …”, invece di regolare curl.
- Una volta che un gruppo di 20 richieste è completo, lo script esegue altre 20 richieste e ripete questa routine finché non esaurisce il tempo di esecuzione.
- Ogni 100 richieste, una nuova posizione nell’elenco viene salvata nel file “c” in modo che la prossima volta quando gli attentatori attivino lo script inizierà dove è stato interrotto.
La prossima domanda è che cosa succede quando questo scanner trova uno script Adminer accessibile a livello pubblico?
Siti con Adminer
Lo script riferisce di qualsiasi URL che ha trovato uno script Adminer. Questo viene memorizzato nello stesso script che fornisce batch di domini per la scansione, ma questa volta utilizza il parametro “r” per specificare che l’URL contiene uno dei 14 nomi dei file di amministrazione.
Gli attaccanti che fanno con questa lista?
Accesso ai database da IP locali
Alcune campagne di malware richiedono l’accesso al database. Molti webmaster ricordano ancora gli attacchi massicci del 2014, in cui una vulnerabilità in un popolare plugin di WordPress ha permesso a chiunque di visualizzare i contenuti del file wp-config.php – un file altamente sensibile in quanto contiene credenziali di database. Gli aggressori possono compromettere il database e aggiungere utenti malintenzionati, creare messaggi spam, iniettare i contenuti in messaggi esistenti, ecc.
Per farlo, gli attaccanti devono avere accesso al database ma molti provider di hosting bloccano l’accesso ai server di database da IP esterni. Quindi, per utilizzare le credenziali di database rubate e hackerare un sito, l’attaccante deve essere in grado di eseguire i propri script su quel server. Ma per eseguire gli script qui, devono prima hackare il sito. Tuttavia – se è un server condiviso e l’hacker ha già accesso ad un solo sito – possono utilizzare un unico sito per accedere al database per altri siti vicini (dato che hanno le credenziali). Questo è il motivo per cui gli hacker vogliono avere almeno un sito sotto il loro controllo per server.
Ciò non è sempre possibile, quindi gli script Adminer pubblicamente accessibili funzionano come Piano B – dando loro l’accesso al server di database dagli indirizzi IP del proprio host.
Forza bruta
Gli hacker non devono fare affidamento esclusivamente sulle vulnerabilità per rivelare le credenziali di database. A volte è sufficiente indovinare.
I server privati e VPS (server privati virtuali) sono molto popolari. I loro proprietari di solito installano tutto il software da soli, e come con tutto il resto, alcuni amministratori del server semplicemente non seguono le migliori pratiche di sicurezza. Potrebbero dimenticare di cambiare la password di root di MySQL (che è vuota per impostazione predefinita) dopo l’installazione – o modificarla in una comune parola di dizionario o una combinazione di caratteri come “12345”.
È molto comune per gli amministratori amatoriali utilizzare script con una GUI, come phpMyAdmin o Adminer, per lavorare con il database e quindi dimenticare di rimuovere gli script quando hanno finito.
Se gli aggressori trovano uno script di gestione del database pubblicamente disponibile su un tale server, potrebbero semplicemente tentare di indovinare la password di root MySQL utilizzando tattiche di forza bruta.
Caricamento dati locali
C’è un altro vettore di attacco. Non è necessario contare su password deboli o la presenza di software terze parti vulnerabili per leggere le credenziali dai file di configurazione.
Come ha sottolineato il mio collega, John Castro, l’accesso allo script Adminer potrebbe essere sufficiente.
A causa del funzionamento di MySQL, un utente malintenzionato può utilizzare la query “LOAD DATA LOCAL INFILE” per leggere i contenuti di tutti i file leggibili sul server in cui funziona lo script Adminer.
Tutto quello che dovete fare è collegarsi al proprio server remoto e scegliere un nome file da leggere, ad esempio, / etc / passwd o file di configurazione di qualsiasi sito su quel server (ci sono molti modi per capire i percorsi assoluti).
Conclusione
In questo articolo abbiamo mostrato come gli hacker utilizzano siti compromessi nelle loro scansioni di milioni di siti web e come gli strumenti legittimi relativamente innocui e lasciati nel sito possono compromettere la sicurezza di tutto il server.
Per ridurre al minimo i rischi, procedere come segue:
- Non aspettatarti che gli hacker evitino il tuo sito perché è piccolo, nuovo o utilizza un CMS sconosciuto. Prima o poi, ogni sito verrà scansionato dagli hacker. Questo articolo lo dimostra.
- Tieni aggiornato ogni software. Non lasciare che gli hacker trovino un vecchio software vulnerabile sul tuo sito. È inoltre possibile utilizzare un firewall che praticamente mette in sicurezza il tuo sito.
- Rimuovi gli script temporanei dopo l’uso. Se utilizzi gli script per la manutenzione del sito (ad es. Gestione del database, caricamenti, ricerca e sostituzione, installazioni, backup, ecc.), assicurati di rimuoverli immediatamente dopo aver terminato l’operazione e di limitare l’accesso a determinati IP o la password proteggerli (P.S. – la schermata di login nell’Adminer non è una protezione dello script Adminer stesso)
- Se condividi un server con altri utenti, agisci come se il sito di un tuo vicino fosse compromesso. Assicurati che tutti i file con password (ad esempio i file di configurazione CMS come wp-config.php o configuration.php) non possano essere letti da altri account utente, anche se vengono individuati i percorsi assoluti dei file. Impostazione delle autorizzazioni di tali file importanti a 400 (solo per il proprietario, niente a chiunque altro) è una buona idea.
- Le password forti sono obbligatorie. Sempre. Soprattutto se si installa tutto (compreso il database). Non dimenticare di modificare le credenziali di root / admin predefinite come primo passo dopo l’installazione del software!
Articolo di Denis Sinegubko, fondatore di Unmask Parasites e Senior Malware Researcher presso Sucuri.
Contattaci per informazioni
chiama 339 848 3250
Lascia un commento