Tracciamento dell'origine dello script PHP dannoso

2

Sto guardando un server Linux che esegue Apache + mod_php. Durante la notte è stato caricato uno script PHP dannoso. È di proprietà dell'utente Apache e penso che sia quasi certo che lo script sia stato generato da un exploit in alcuni dei nostri codici PHP esistenti.

Ho cercato nel log di Apache gli hit nello script e da lì ho ottenuto l'IP dell'attaccante. Ho quindi cercato altre attività tramite questo IP ... niente. Ho anche cercato gli hit dallo stesso User Agent (nel caso in cui l'attacker si connettesse tramite proxy). Niente.

Quindi ho scaricato il log per i problemi POST richiesti nei pochi minuti prima del primo hit sullo script dannoso, nella speranza di trovare quale script legittimo fosse stato utilizzato da attakcer. Alcuni colpi, ma nulla che risalta. Per ognuno di questi script ho aggiunto del codice in alto per scaricare i dati POST in un file di registro.

Ho quindi cercato nel log di Apache stringhe come "lynx", "wget", "tmp" nel caso in cui l'attacco fosse stato tramite GET. Niente.

Quindi sono un po 'bloccato ora. Mi chiedo se qualcuno possa pensare a qualche modo intelligente per determinare come è stato caricato questo script malevolo, o qualsiasi altra registrazione che potrei mettere in atto? (mod_dumpio è un'opzione)

    
posta Joe Guest 27.04.2016 - 11:07
fonte

2 risposte

2

Lasciatemi rispondere con alcune osservazioni e commenti. Inizierò con l'approccio "whodunit" di aiuto nel determinare chi, cosa, quando, dove e come.

  • Che - un file che hai trovato sul tuo sistema
  • Quando - quale data è stata trovata
  • Come - come è stato caricato
  • Chi - chi lo ha caricato

Conosci già il file perché lo hai trovato. Chiamiamo questo file: malicious.php. Quello che dici di fare è determinare " chi " ha avuto accesso a questo file, ma devi capire come è stato caricato. Guardare a chi ha avuto accesso a questo file è l'approccio sbagliato. Questo perché gli attaccanti di solito usano più punti di attacco. Ad esempio, un sistema potrebbe scansionarti, un altro potrebbe comprometterti, e un altro ancora potrebbe accedere al sistema compromesso. Quindi cerchiamo di capire chi prima utilizza i metodi deduttivi:

$ ls -ltha malicious.php 
-rw-r--r-- 1 www-data www-data 0 Mar 27 10:59 malicious.php

In questo caso, vediamo che il file appartiene all'utente www-data nel gruppo www-data. Ciò non significa che un utente malintenzionato lo abbia caricato tramite http utilizzando post o get. Non c'è nulla che impedisca a qualcuno di sfruttare di dire telnet, caricare un file ed eseguire un chown sul file.

ls -ltha --time=atime malicious.php 
-rw-r--r-- 1 www-data www-data 0 Apr 27 10:09 malicious.php
ls -ltha --time=ctime malicious.php 
-rw-r--r-- 1 www-data www-data 0 Apr 27 11:00 malicious.php

Qui possiamo vedere le differenze nei timestamp. Se qualcuno ha usato dire timestomp (Metasploit) i tempi MAC possono essere cambiati. Quindi possiamo dedurre dai dati sopra, che siamo più o meno all'interno del regno dei 50 minuti. Assicuriamoci che questo utente non abbia mai effettuato l'accesso, per questo possiamo controllare i registri di wtmp, auth, ftp, ecc. Se questo utente non ha mai effettuato l'accesso, possiamo quindi dedurre che questo non è stato caricato in nessun altra moda al di fuori di HTTP.

Quando - abbiamo ridotto il periodo di tempo a un livello fino a un periodo di 51 minuti. I registri che vorrei esaminare sarebbero i log degli errori FIRST seguiti dal log di accesso. La ragione di ciò è semplice, in nessun momento un hacker sa esattamente come ottenere un file sul tuo sistema. Ciò significa che c'è stata una ricognizione di prova ed errore. Questo sarà nei tuoi log degli errori che compaiono come 404 o 403. Vorrei cercarli prima. Ora riduciamo ulteriormente la ricerca. Un'analisi di registro delle visite mostrerà ciò che è normale rispetto a ciò che potrebbe essere un'anomalia. Ad esempio, se la base del traffico va a dire index.html, rimuovere tutte quelle istanze e osservare le anomalie. Una volta determinato, hai determinato il come . Questo è completamente separato dal capire come hanno compomesso il tuo codice che sarebbe una domanda completamente diversa.

    
risposta data 27.04.2016 - 17:13
fonte
1

Complimenti per averlo trovato rapidamente, sembra che tu stia facendo qualcosa di giusto. Ma stai anche facendo un sacco di cose sbagliate. Il più ovvio è che le directory all'interno della radice del documento sono scrivibili dal server Web UID.

Sarebbe utile sapere cosa stai cercando di ottenere "tracciando l'origine" della sceneggiatura. Certo dovresti cercare la vulnerabilità che è stata sfruttata in modo da poter collegare il buco, ma qualsiasi altra cosa è solo curiosità.

grepped the log for POST requested issues in the few minutes before the first hit on the malicious script...I'd already looked at the timestamp on the file

Quindi hai usato il mtime sul file per localizzare le voci del registro e poi hai provato a usare le voci del registro per determinare il tempo di creazione? Una logica piuttosto circolare qui.

Quante voci di registro hai 1 secondo entrambi i lati del tempo di modifica del file? Quanti script PHP unici risolvono? Certamente non è possibile fare affidamento sul fatto che mtime sia una rappresentazione accurata del tempo di creazione, ma è un inizio.

Come minimo dovresti controllare tutti gli script PHP per $ _FILES e includere / include_once / require / require_once / eval con argomenti non letterali.

Per quanto riguarda la registrazione che è possibile aggiungere .... non si dice quale registrazione attualmente sia in posizione . Oltre a impedire al weserver di scrivere in qualsiasi punto della root del documento, impostare inotify per segnalare eventuali modifiche ai file. Per non parlare dei soliti passaggi per rafforzare un server PHP.

    
risposta data 27.04.2016 - 13:52
fonte

Leggi altre domande sui tag