Archivio

Archive for the ‘forensics’ Category

punti di vista sul filesystem

Nell’ottica forense di ricercare malware sulla propria macchina linux uno dei migliori sistemi è quello di fare un’analisi comparativa tra dati visibili a runtime e gli stessi dati visibili non a runtime. Ossia a macchina sistema infetto avviato o da livecd.

Fino ad ora ci siamo occupati di effettuare analisi a runtime. Questo sistema puo’ presentare molti svantaggi ma anche qualche vantaggio. Gli svantaggi presunti sono per esempio l’impossibilità di avere una visione oggettiva dei file, device, processi e quant’altro sia presenti o assenti nel sistema. Le nostre fonti di informazioni: il kernel, i processi, le librerie potrebbero essere contaminati e addirittura contraffatti.

L’immagine del kernel potrebbe non essere quella originale del pacchetto o uno dei moduli potrebbe essere stato sostituito. Un kernel o un modulo infetto potrebbero non darci una visione oggettiva della situazione e lo stesso un binario (tipo ls o ps) o una libreria (libc).
Se da una parte il malware nascondendo o alterando qualcosa dimostra la sua forza, dall’altra è proprio il nascondere la sua debolezza. Se però non sappiamo cosa stiamo cercando e soprattutto dove, le cose possono diventare più complicate.
Gli approcci quindi devono essere molteplici. Procederemo partendo da un’analisi ad ampio spettro fino ad un’analisi dettagliata nelle varie parti del sistema.
La prima cosa da fare è una lista di tutti i file presenti nel sistema e relativo md5.

# find /bin /boot /cdrom /etc /lib /media /mnt /opt /root /sbin /selinux /srv /tmp /usr /var -type f -exec md5sum '{}' ';' -exec sha256sum '{}' ';' | awk '{print $2,$1}' | sed 's/^\///g' >> /sistema.hashes.runtime

Una volta effettuata questa operazione è necessaria la stessa scansione partendo da un live cd. Una volta che abbiamo il secondo file va confrontato tra i due e il risultato sarà una lista di file differenti e/o mancanti tra i due.

Quindi da cdlive:

# find bin boot cdrom etc lib media mnt opt root sbin selinux srv tmp usr var -type f -exec md5sum '{}' ';' -exec sha256sum '{}' ';' | awk '{print $2,$1}' | sed 's/^\///g' >> /sistema.hashes.notruntime

quindi sempre da cd:

# diff /sistema.hashes.runtime /sistema.hashes.notruntime

Come noterete gli hash prodotti sono sia md5 che sha256 questo per evitare il noto problema delle collissioni md5.
Un ulteriore vantaggio dell’utilizzo del live cd è la possibilità di utilizzare il cold boot attack per effettuare un’acquisizione fedele della memoria fisica.

Annunci
Categorie:forensics

Copiare i file/aperti e i file/cancellati di un processo

A fini di analisi forense potrebbe tornare utile copiare i file/aperti e/o i file/cancellati di un determinato processo.

Prendiamo per esempio chrome.

# lsof|grep -i chrom|grep -i deleted | awk '{print $4}'|tr -d 'u' |xargs -I{} cp -v "/proc/11682/fd/{}" proc_chrome/

Il problem naturalmente è che chrome a 1 thread per ogni tab aperta..

Categorie:forensics

Forensics parte 2

Appunti:

# tune2fs -o journal_data /dev/sda5
# mount -o remount,journal_checksum

fonti:
link1 link2

Categorie:forensics

Forensics parte 1

Consistenza fra dati ridondanti.

# lsof -i :22
# netstat -anp | grep :22
 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
 tcp 0 0 172.1.1.136:22 172.1.1.1:39967 ESTABLISHED -

In caso di kernel-rootkit potremmo avere dati discordanti tra i 2 comandi. Infatti un lkm rootkit potrebbe nascondere un processo ma non nascondere il socket. Quindi con lsof avremmo un output vuoto mentre con netstat vedremmo dei socket aperti ma il processo verrebbe sostituito con un “-”

fonte: SANS

File aperti ma cancellati

I file aperti ma cancellati (“open but unlinked file data”) sono quei file che vengono cancellati  benché il processo che li ha generati sia sempre attivo.  Questo tipo di file anche se inaccessibili continuano a occupare spazio disco. Alcuni attaccanti hanno imparato a sfruttare questo tipo di file che a macchina spenta non sono più individuabili (a meno di un undelete sul disco). Avendo a disposizione la macchina compromessa ancora accesa è possibile tentare di individuare questo tipo di file.

# lsof +L1
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/user/.gvfs
Output information may be incomplete.
COMMAND     PID  USER   FD   TYPE DEVICE SIZE/OFF NLINK    NODE NAME
init          1  root   10w   REG    8,5     2598     0 4196555 /var/log/upstart/mysql.log.1 (deleted)
init          1  root   13w   REG    8,5     1074     0 4195002 /var/log/upstart/modemmanager.log.1 (deleted)
smbd       1101  root    2w   REG    8,5      530     0 4195411 /var/log/samba/log.smbd.1 (deleted)
smbd       1101  root    8w   REG    8,5      530     0 4195411 /var/log/samba/log.smbd.1 (deleted)
mysqld     1334 mysql    4u   REG    8,5        0     0  786437 /tmp/ib5QEstp (deleted)
mysqld     1334 mysql    5u   REG    8,5        0     0  786443 /tmp/ib39LSpg (deleted)
mysqld     1334 mysql    6u   REG    8,5        0     0  786449 /tmp/ibF9ajm7 (deleted)
mysqld     1334 mysql    7u   REG    8,5        0     0  786452 /tmp/ibJ7IJwY (deleted)
mysqld     1334 mysql   11u   REG    8,5        0     0  786453 /tmp/ibnQiU0V (deleted)
plasma-de  2887 user   39r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
plasma-de  2887 user   42r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
plasma-de  2887 user   43r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
plasma-de  2887 user   44r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
plasma-de  2887 user   45r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
plasma-de  2887 user   46r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
plasma-de  2887 user   47r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
plasma-de  2887 user   48r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
mysqld     2908 user    4u   REG    8,5        0     0  797321 /tmp/ib3jRGSY (deleted)
mysqld     2908 user    5u   REG    8,5        0     0  797323 /tmp/ibVcxNRG (deleted)
mysqld     2908 user    6u   REG    8,5        0     0  797346 /tmp/ibbyrUQo (deleted)
mysqld     2908 user    7u   REG    8,5        0     0  797348 /tmp/ibxqXYQ6 (deleted)
mysqld     2908 user   12u   REG    8,5        0     0  797350 /tmp/ib3JPQRT (deleted)
krunner    2950 user   26r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
krunner    2950 user   29r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
krunner    2950 user   33r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
krunner    2950 user   34r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
krunner    2950 user   35r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
krunner    2950 user   36r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
krunner    2950 user   37r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
krunner    2950 user   38r   REG    8,5  2031549     0 5245119 /var/tmp/kdecache-user/ksycoca4 (deleted)
nautilus   8485 user   16r   REG   0,21   122704     0  420200 /home/user/.local/share/gvfs-metadata/home (deleted)
nautilus   8485 user   17r   REG   0,21    32768     0  420202 /home/user/.local/share/gvfs-metadata/home-b775d582.log (deleted)
soffice.b 13396 user   20u   REG   0,21     4096     0  423327 /home/user/.execoooFPXDvT (deleted)
firefox   14479 user   33u   REG    8,5   196632     0 4196969 /var/tmp/etilqs_YvA4Y9SchTM6Wp3 (deleted)
plugin-co 14587 user   20w   REG    8,5  1497703     0  788859 /tmp/FlashXXn9kfji (deleted)
tcpdump   15579  root  txt    REG    8,5   830920     0  790909 /tmp/tcpdump (deleted)
tcpdump   15579  root    4w   REG    8,5  3989504     0  790959 /tmp/capture (deleted)
root@user-Vostro-3500:~# ps aux|grep tcpdump
root     15579  0.0  0.3   9780  5700 pts/3    S    18:53   0:01 /tmp/tcpdump -w /tmp/capture
root     15845  0.0  0.0   4392   828 pts/3    S+   19:22   0:00 grep --color=auto tcpdump
root@luigi-Vostro-3500:~#

Le ultime 2 righe di output di lsof mostrano un processo tcpdump e il relativo file di log cancellati. Il suggessivo comando ps, mostra chiaramente che il processo sta ancora girando anche se i file risultano cancellati.

A questo punto è possibile indagare su i file sospetti accedendo direttamente a /proc.

root@user-Vostro-3500:~# cd /tmp/
root@user-Vostro-3500:/tmp# cp /proc/15579/exe .
root@user-Vostro-3500:/tmp# ./exe -h
exe version 4.2.1
libpcap version 1.1.1
Usage: exe [-aAbdDefhHIKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ] [ -y datalinktype ] [ -z command ]
[ -Z user ] [ expression ]
root@luigi-Vostro-3500:/tmp#

In questo modo abbiamo copiato direttamente l’eseguibile che sta girando mediante la sintassi /proc/pid/exe

Categorie:consistency, forensics