INFN CSIRT

NOTE SULL'ANALISI FORENSE

Premessa

L’analisi forense di un incidente di sicurezza informatica consiste nelle operazioni che permettono di analizzare i sistemi per capire cosa sia successo. Occorre assolutamente notare che qualunque operazione effettuata a caldo su un sistema, ne modifica come minimo i metadati del filesystem della macchina su cui viene eseguita. Esse sono dunque distruttive e compromettono l’utilizzabilità delle proprie scoperte in ambito legale, per esempio in caso si vogliano effettuare denunce alle autorità competenti. Per semplicità la guida che segue non tiene conto di queste considerazioni in molti casi. Se si pensa di agire per vie legali, si consiglia di effettuare snapshot dei sistemi prima di analizzarli, e al minimo montare i filesystem in modalità read-only, disattivare la history della bash (mettere HISTFILE a /dev/null). Se possibile, evitare di entrare in macchine compromesse o sospette tali, utilizzando password e account validi anche su altri nodi della struttura. Qualora ciò non sia possibile, tale password dovà essere considerata compromessa e cambiata.

Informazioni di base

Come primo passo, occorre raccogliere informazioni di base sul sistema. A tale scopo, occorre eseguire i seguenti comandi e salvarne l’output:

netstat -apn
ps auxfwww
pstree -lap
w
last
lastlog
lsof -b -l -P -X -n -o -R -U
lsof -b -l -P -X -n -o -R
cat /proc/mounts
cat /proc/modules
ls /sys/module
			

Si può notare che le stesse informazioni sono riportate più volte. Il confronto tra i vari output è utile per notare omissioni o differenze. Gli output ottenuti vanno esaminati alla ricerca di anomalie o “stranezze”. Non è possibile definire a priori cosa sia o non sia anomalo in un dato sistema, ma le seguenti situazioni sono solitamente indicatrici di problemi e quindi richiedono ulteriore analisi.

  • Processi in ascolto su porte inusuali
  • Processi sconosciuti
  • Processi figli di processi che normalmente non dovrebbero avere figli
  • Processi con attività di rete “sospetta”

Per ognuno di questi processi, determinarne il PID ed eseguire le seguenti operazioni:

  • Ottenere copia dell’eseguibile (/proc/$PID/exe)
  • Sospendere il processo (kill -STOP $PID)
  • Ottenere elenco dei file aperti (lsof -np $PID)
  • Ottenere copia dei file aperti. Qualora questi siano cancellati, usare /proc/$PID/fd/$FDNUM dove FDNUM viene dall’output di lsof. Si consiglia di conservare il nome corretto quando vengono salvati.
  • Copiare tutto il contenuto di /proc/$PID
  • Fare un core dump del processo (gcore $PID)