Server compromesso per la 2a volta, non è in grado di individuare la fonte di attacco

12

Ho bisogno di aiuto per tracciare una vulnerabilità sul mio server. Per la seconda volta, il mio server è stato compromesso con i file che sono stati sostituiti con download di virus.

Secondo le date del filesystem, in un periodo di 45 minuti 4 file exe sul mio server sono stati sostituiti con versioni rinominate dello stesso virus.

Il mio server web esegue Ubuntu 10.4.3 LTS con la versione del kernel 2.6.32-31-generica, mantenuta completamente aggiornata e aggiornata.

L'unico modo per accedere alla shell è tramite SSH e una chiave privata protetta da password che ho con me su una penna USB. L'accesso SSH della password è disabilitato e i registri del server (che so possono essere modificati, ma ho buone ragioni per credere che non lo siano) indicano che SSH non è stato utilizzato per accedere al server.

Lo stack del software di servizio Web è molto complicato. C'è PHP (5.3.3-1) con Suhosin v0.9.29, nginx 1.0.9 (ora aggiornato alla 1.0.10), Tomcat (in una prigione e sospetto non associato) e MySQL 5.1.41.

Ammetto che, al momento del primo attacco, mi ero tranquillamente accontentato di chmod -R 777 la mia directory web per scopi di mitigazione del mal di testa. Ora eseguo un pasticcio completo di script PHP incluso ma non limitato a WordPress, vBulletin e diversi prodotti fatti in casa; i primi due sono sempre aggiornati e quest'ultimo è stato scritto con estrema cura per evitare o normalizzare qualsiasi valore immesso dall'utente.

Viste le deboli autorizzazioni dei file, ma l'accesso al server strongmente bloccato, ero strongmente tentato di sospettare una vulnerabilità in uno dei tanti script PHP che consentivano l'esecuzione di codice casuale.

Da allora ho bloccato completamente i permessi dei file. nginx / php funzionano come www-data: www-data con tutti i file dati solo autorizzazioni di esecuzione e lettura ( chmod -R 550 /var/www ).

Eppure oggi, dopo tutto questo, il mio server è stato nuovamente compromesso.

Il fatto è che i file che sono stati sostituiti hanno ancora le autorizzazioni 550 , i log SSH non indicano il log in e sono completamente perso su cosa fare o provare dopo.

Ho provato a ricreare l'attacco sui percorsi che sono stati sostituiti con uno script PHP di base:

$file = fopen('/var/www/mysite.com/path/to/file', 'w');
fwrite($file, 'test');
fclose($file)

Ma questo mi ha dato l'errore di autorizzazione appropriato negato.

Qualcuno può, per favore, consigliami dove cercare la fonte di questa vulnerabilità? Mi manca qualcosa con i miei permessi sui file?

So che il server, una volta compromesso, è praticamente "sparito" per sempre. Ma non è davvero un'opzione qui. Ho ricorsivamente aggiornato la mia intera cartella / var / log per i nomi dei file afflitti nella speranza di trovare qualcosa, ma non è venuto fuori nulla.

Ho anche cercato qualsiasi script nella cartella cron o altrove che potrebbe essere stato collocato al momento del primo attacco per attaccare di nuovo in un secondo momento, ma (a) non trova nulla e (b) non dovrebbe trovare qualsiasi cosa come i file in / etc / non sono modificabili da www-data (assumendo un punto di infiltrazione nginx / PHP).

Dovrei aggiungere che entrambe le volte ho grep'd i log di accesso di nginx (stile combinato) per i nomi dei file infetti, ma non ho trovato nulla. Capisco / capisco che esistono molti modi per oscurare i nomi dei file dalla mia greps.

    
posta Mahmoud Al-Qudsi 28.11.2011 - 06:47
fonte

6 risposte

21

Alcune tecniche per provare a scoprire come è arrivato il tuo aggressore:

  1. Guarda i timestamp su tutti i file che conosci che l'utente malintenzionato è stato modificato, quindi guarda tutti i log per le voci il più vicino possibile a ogni timestamp. Come altri hanno già detto, i registri degli accessi web e i registri degli errori web sono quelli con maggiori probabilità di contenere la prova del vettore di attacco originale, ma anche altri file di registro possono contenere indizi. I log degli errori spesso contengono gli indizi migliori. I log di tutti i demoni accessibili dalla rete sono anche dei buoni posti dove guardare.
  2. Potrebbe anche essere utile cercare altri file con data e ora simili a quelli che conosci. /etc/passwd è ovvio, ma anche i file di log possono essere sospetti se hanno un timestamp inusuale. Se logrotate viene eseguito ogni giorno alla stessa ora e uno dei tuoi file di registro ha un timestamp che non corrisponde a questa volta, probabilmente è stato modificato per coprire le sue tracce, e ora sai un po 'di più su ciò che ha fatto. Non dimenticare i file .bash_history nelle directory home dell'utente. il comando find dovrebbe essere in grado di gestirlo per te.
  3. Esegui scalp sui registri di accesso web. L'attacco originale potrebbe essere accaduto qualche tempo prima che i file apparissero. Il cuoio capelluto produrrà falsi positivi, ma dovrebbe limitare le potenziali voci del registro sospetto per consentire l'analisi manuale delle irregolarità. Potrebbe anche mancare completamente l'attacco - non è perfetto - ma potrebbe essere d'aiuto.

Non passare troppo tempo sulla scientifica nel sistema compromesso. Come altri hanno notato, l'attaccante ha avuto l'opportunità di rimuovere tutte le prove dell'attacco originale e di aggiungere un rootkit per nascondere la sua presenza continua. Se gli è sfuggito qualcosa o se non l'ha ancora provato, le attività sopra elencate potrebbero funzionare ma se si è nascosto bene allora si perderebbe tempo prezioso.

Se non riesci a trovare la fonte dell'attacco, cancella e reinstalla il server in questione ma con alcune aggiunte per catturarlo la prossima volta.

  1. Invia i tuoi registri su un server diverso utilizzando una variante di syslog. ( rsyslog e syslog- ng sono le scelte consigliate) Preferibilmente, questo server non dovrebbe fare altro che ricevere i log e non dovrebbe condividere chiavi di accesso o password con nessun altro server. L'obiettivo è assicurarsi che i registri non possano essere manomessi o eliminati.
  2. Aggiungi ulteriore registrazione oltre il valore predefinito. Jeff ha già citato AppArmor e visto che stai usando Ubuntu questa sarà probabilmente la scelta migliore. Assicurati che i suoi log siano inviati alla casella di log.
  3. Installa e attiva la audit daemon. Assicurati che i suoi log siano inviati alla casella di log.
  4. Esegui un IDS come Snort, PHP-IDS o mod_security. (o più di uno, questi strumenti non fanno tutti esattamente lo stesso lavoro) Alcuni firewall hardware sono dotati di moduli IDS / IPS. Assicurati che i log dall'IDS siano inviati alla casella di log.
  5. Aggiungi un sistema di monitoraggio dell'integrità dei file come AIDE o Tripwire . Assicurati che i log di questi strumenti siano inviati alla casella di log.
  6. Monitora i tuoi registri. A corto di un sistema SIEM commerciale, qualcosa come Splunk può essere installato gratuitamente e può analizzare una quantità limitata di log. Imposta le regole per abbinare ciò che è normale per i tuoi server e filtrale. Qualunque cosa rimanga è degna di una più attenta ispezione.

C'è molto altro che puoi fare se hai tempo e denaro, come le acquisizioni di pacchetti di rete completi, ma realisticamente si tratta di tutto ciò che un amministratore di sistema solitario può essere in grado di gestire. Se l'attaccante si presenta di nuovo, sarà molto più probabile trovare il vettore di attacco e molto più probabile che lo rilevi non appena viene effettuato l'attacco.

    
risposta data 29.11.2011 - 00:56
fonte
6

@Iszi è assolutamente corretto qui. È necessario cancellare e ricostruire completamente, poiché un buon rootkit impedirà di vedere qualsiasi prova della sua esistenza.

Altrimenti c'è una strong probabilità che qualsiasi cosa tu faccia ora sia inutile. In ogni caso, non puoi più fidarti del server.

    
risposta data 28.11.2011 - 10:56
fonte
6

Muhammad, in alcuni casi ho visto l'attacco è stato condotto da un bot che ha sfruttato una vulnerabilità sul sistema (solitamente PhpMyAdmin) e caricato file sul server (principalmente / tmp). Quello che succede è che quei file rimangono lì e l'amministratore non se ne accorgerà fino a quando l'attaccante non eseguirà i log dei bot e inizierà a costruire sul primo compromesso.

È possibile che sia stata sfruttata una vulnerabilità in PhpMyAdmin o vBulletin o in alcuni script che stai utilizzando. In seguito hai aggiornato l'app vulnerabile, ma il compromesso è già avvenuto.

Se non si esegue una ricostruzione, ciò che accade è che i file lasciati dall'hacker sono stati usati per compromettere il sistema, ancora una volta. L'installazione di OSSEC sul tuo sistema e il monitoraggio di file / cartelle critici ti aiuteranno a rilevare tale attività e ti consentiranno di agire più rapidamente.

    
risposta data 29.11.2011 - 00:48
fonte
5

Solo per aggiungere un paio di pensieri ai commenti già forniti. Come dice @symcbean, il codice di terze parti è una probabile fonte di problemi.

Se dovessi azzardare un'ipotesi, guarderei l'applicazione Wordpress e i plugin associati come una probabile fonte del tuo compromesso. Di recente sono stati rilevati numerosi problemi di sicurezza nei plugin di Wordpress e molti di essi vengono sfruttati attivamente, quindi se hai installato e non aggiornato al 100% potresti avere problemi.

Per quanto riguarda l'aspetto del problema relativo a Wordpress, puoi consultare wpscan che è uno scanner di sicurezza wordpress e anche il plug-in sicuro per wordpress

    
risposta data 28.11.2011 - 12:18
fonte
4

4 exe files on my server were replaced with renamed versions of the same virus...My web server is running Ubuntu 10.4.3

Implica che tu abbia già la funzionalità di caricamento del file sul tuo server, il che sarebbe un buon punto per iniziare a cercare buchi.

I know that server, once compromised, is pretty much "gone" forever

Non così. Se si effettuano preparativi adeguati, è sempre possibile riportare il sistema a uno stato noto (IDS e backup basati su host). Ma anche in questo caso non elimina la vulnerabilità originale. Ma eliminerebbe eventuali porte posteriori aggiuntive installate.

including but not limited to WordPress, vBulletin, and several homemade products

OMG. Solo perché qualcun altro ha scritto questo non significa che sia sicuro. Solo perché è open source non significa che sia sicuro. Anche se hai le competenze per controllare correttamente il codice, la base del codice Wordpress è enorme e anche il vbulletin è grande. Questo sarà un grande compito. Anche Wordpress e Vbulleting (IRC) supportano plug-in di terze parti, spesso di qualità molto inferiore rispetto ai prodotti core.

Se stavi usando Apache, ti suggerirei di usare mod_security per cercare di identificare il vettore di attacco. Ma anche con un livello di carico abbastanza alto dovresti essere in grado di riconciliare il file mtime sul file con il log di accesso (come hai scoperto, guardare i nomi dei file è una perdita di tempo).

    
risposta data 28.11.2011 - 12:06
fonte
4

Di solito quando le persone dicono che non possono permettersi di cancellare un server, significano che il tempo per resettare la configurazione sarà eccessivo. Tuttavia, c'è un modo per farlo e non è necessario trovare immediatamente la vulnerabilità, anche se è necessario sostituire i file compromessi. Suggerisco di implementare la sicurezza prima di esporre i tuoi file puliti a Internet. Ciò che li ha rotti una volta li spezzerà di nuovo.

Le fasi sottostanti sono focalizzate su Debian (non hai detto quale avevi, quindi ho preso le mie preferenze), ma puoi anche eseguirle sui sistemi Red Hat. Su un sistema basato su Red Hat, potresti avere un tempo più semplice sostituendo i suggerimenti di AppArmor con la configurazione SELinux corrispondente. Cambia "dpkg" per abbinare i comandi "yum".

  • Costruisci un nuovo sistema usando i pacchetti che hai già installato. dpkg --get-selections ti fornirà un elenco che può essere reindirizzato nel nuovo sistema utilizzando dpkg --set-selections .

  • Configura l'apparmor per limitare pesantemente nginx e qualsiasi altro daemon (Tomcat, ecc.) da esso utilizzato. Consenti solo la lettura di file di configurazione e di pagine Web. Potrebbe essere necessario abilitare alcune scritture nella directory web a seconda di ciò che si sta facendo. Assicurati che la tua configurazione imponga ai processi figli di ereditare le restrizioni di Apache.

  • Copia tutto il resto.

Presta molta attenzione ai tuoi registri AppArmor. Quando vedi che Apache prova a violare le sue autorizzazioni, puoi metterlo in correlazione con i tuoi log di accesso / errore HTTP e determinare cosa è anomalo.

Inoltre, dichiarerò che stabilire i controlli di accesso obbligatori attorno a qualsiasi demone è una best practice moderna e attesa. Si prega di notare che questo non scusa lasciando la vulnerabilità senza patch. La difesa a fondo è per aiutare a cogliere i difetti, non per spostare completamente il peso. Inoltre, sii molto attento all'idea che il tuo server potrebbe compromettere i visitatori del tuo sito.

    
risposta data 28.11.2011 - 16:53
fonte

Leggi altre domande sui tag