Come fare a...
Web
Come fare a...

Analisi forense di un sistema Linux

Introduzione ai sistemi Linux

Pagine: 1 di 2 AvantiTop
Autore: Andrea Ghirardini e Gabriele Faggioli - Tratto: Computer forensics - Apogeo
Acquista il libro Le distribuzioni basate su Linux sono parecchie, per questo motivo il computer forensics expert deve essere in grado di muoversi agevolmente e con una certa abilità su questi sistemi. In questo articolo che conclude il nostro speciale sulla computer forensics vedremo come procedono alle indagini di prove incriminanti su questi sistemi operativi.

Il kernel di Linux

Linux non esiste, così come Unix non esiste, almeno nella forma di un sistema. Esiste un kernel che si chiama Linux, che è in continuo sviluppo ed elaborazione, ed esistono decine di sistemi basati su questo kernel, che prendono il nome di “distribuzioni” (a un sistema operativo basato su Linux ci si riferisce di solito con il termine generico “GNU/Linux” per sottolineare l’enorme contributo dato dal progetto GNU alla realizzazione di un sistema operativo completo).
Questo rende GNU/Linux un sistema operativo polimorfico. Esistono, al momento, oltre 300 distribuzioni, con caratteristiche anche nettamente opposte. Si va da distribuzioni di tipo general-purpose come SuSE, Debian, Red-Hat, Ubuntu o Mandriva, ad altre il cui utilizzo è assolutamente verticale, come Linux-Router, GeekBox, m0n0wall, StressLinux.
Inoltre, è bene ricordare sempre che molte appliance utilizzano Linux senza dichiararlo. I lettori multimediali della KISS, per esempio, i lettori multimediali della Archos, o anche molti hard disk recorder utilizzano versioni customizzate di GNU/Linux con alcune estensioni multimediali.
È chiaro, quindi, che la diffusione di Linux è molto più capillare di quello che si potrebbe pensare.

LSB (Linux Standard Base)

Per poter portare un minimo di standardizzazione nel mondo Linux, qualche anno fa è nato il progetto Linux Standard Base, LSB. Lo scopo dichiarato era di fissare una serie di specifiche sulla quale basare lo sviluppo delle distribuzioni GNU/Linux, per garantire una certa omogeneità, così che gli applicativi (e anche gli utilizzatori) si trovassero comunque di fronte a un sistema simile, almeno a livello di layout del file system, di librerie di sistema, di comandi base, e di sistemi di sviluppo.
Il 28 gennaio 2008 sono uscite le ultime specifiche, giunte alla versione 3.2. La maggior parte delle distribuzioni GNU/Linux è basata su di esse.
Tutto questo permette di poter godere, se pur con delle differenze, di un’esperienza simile usando sistemi GNU/Linux diversi, e consente agli applicativi di funzionare senza riadattamenti sostanziali su sistemi Linux differenti.
È bene però ricordare come tali specifiche vengano spesso disattese, almeno in parte, dalle distribuzioni più specifiche e verticali il cui design, spesso, entra in contrasto con LSB (si pensi per esempio a microlinux, una distribuzione scritta per entrare su un paio di floppy: il suo scopo necessita che molte parti della LSB siano tralasciate per esigenze di spazio).
Un computer forensics expert deve quindi dimostrare una notevole dose di adattabilità per poter lavorare agevolmente su sistemi basati su Linux.

Distribuzioni

Esistono oltre 300 distribuzioni di Linux, vi sono siti appositi dove tali distribuzioni sono catalogate e recensite. Probabilmente il più comune è distrowatch.com.
Che cosa è realmente una distribuzione? Si è già detto che GNU/Linux, come sistema operativo unico, non esiste. Il sistema è infatti la somma di una serie di componenti:

  • Kernel: ogni sistema GNU/Linux deve contenere necessariamente una release del kernel di Linux. Tale kernel può essere “vanilla” (ovvero preso direttamente dal repository ufficiale) oppure può contenere delle patch ad hoc per migliorare o aggiungere alcune funzionalità. Kernel identici possono poi essere compilati con una diversa combinazione di parametri (sono centinaia) ottenendo quindi kernel binari con funzionalità differenti.
  • Librerie di sistema: il kernel è affiancato quantomeno da una serie di librerie che forniscono le funzionalità di base. Nel caso di Linux è assolutamente necessario che siano almeno presenti le glibc.
  • Tool di base: comandi fondamentali, tool di manipolazione dei file system, gestione di rete, autenticazione, shell di sistema sono solo alcuni dei programmi fondamentali per il funzionamento del sistema

Questi componenti base, oltre a una marea di software opzionale, sono sparsi per tutta la rete Internet. Lo scopo di una distribuzione è appunto quello di raccogliere tutto questo materiale, catalogarlo, compilarlo e pacchettizzarlo per consentire ai propri utilizzatori di gestire il sistema in autonomia. Inoltre, una distribuzione deve poter fornire un sistema per poter installare il sistema operativo da zero su una macchina nuova.
È evidente che non è pensabile di creare una distribuzione che possa contenere tutto il possibile software free disponibile per Linux. Chi si è incaricato di creare la distribuzione di GNU/Linux effettuerà un cernita tra quanto disponibile per poter raggiungere i propri scopi. La somma di queste tre componenti (tipo di pacchettizzazione, programma di installazione e scelta di programmi inclusi) è quella che determina il tipo di distribuzione GNU/Linux (generalista, specializzata, per neofiti, per esperti, client oriented, server oriented...).
Da tutto questo si può capire quanto Linux sia nato come un sistema scritto da “smanettoni” per “smanettoni”. Al contrario di altri Unix Free (come FreeBSD, OpenBSD, NetBSD), dove la revisione di tutto il processo di sviluppo è più controllata e rigorosa, Linux ha dalla sua una crescita molto disorganizzata e caotica, che lo dota di funzionalità avanzate e inusuali.
Le nuove distribuzioni hanno comunque variato questa situazione e ora GNU/Linux è un sistema quasi alla portata di un comune utente. Il “quasi” è d’obbligo in quanto GNU/Linux rimane un sistema operativo a base Unix e richiede, come tale, conoscenze informatiche superiori rispetto a quanto richiesto, per esempio, da un sistema Windows.
È d’obbligo dunque fare una considerazione: mediamente l’utente Linux è quello (comparato con Windows e Mac OS X) con le conoscenze più avanzate. La stessa natura “do-it-yourself ” del sistema agisce da meccanismo di selezione naturale tra gli utenti. I più convinti e appassionati vi trovano un’ottima palestra per progredire nelle loro conoscenze (e un sistema davvero versatile), gli altri di solito tornano a sistemi più semplici da gestire.
Il panorama delle distribuzioni è in continuo mutamento (qualcuno potrebbe dire “anche troppo”, e difficilmente gli si potrebbe dare torto). Esistono nomi “storici” che sono in auge da svariati anni e progetti che nascono e muoiono nel giro di qualche mese. Lo stessi dicasi per gli utenti. Si passa dagli “hard core users” pronti a discutere con chiunque non usi la distribuzione per la quale portano la bandiera, a quelli che provano almeno un nuovo GNU/Linux alla settimana. Un panorama da incubo, per un forensics expert.
Al momento della stesura di questo testo la situazione è interessante e vale la pena di approfondirla.Tutti i marchi commerciali “storici” di Linux sono passati, per esigenze economiche soprattutto, a un nuovo modello di sviluppo, del tutto simile a quello usato per Mozilla/Netscape e OpenOffice/StarOffice. Esiste quindi un progetto a sviluppo rapido portato avanti in maniera distribuita dalla community che si è sviluppata attorno a quella distribuzione, e da qui si esegue un freeze periodico per trarne la versione prettamente commerciale, visibile nella tabella 1.

Distribuzione community Distribuzione commerciale desktop Distribuzione commerciale server
openSuSE SuSE Enterprise Desktop SuSE Enterprise Server
Fedora RedHat Enterprise Linux Desktop RedHat Enterprise Linux
Mandriva Linux Corporate Desktop Corporate Server

Tabella 1: rapporto tra versioni community e versioni commerciali

Le distribuzioni “storiche” totalmente libere (non commerciali, quindi) continuano il loro sviluppo, con una new entry, Ubuntu, che, foraggiata dal magnate Mark Shuttlewoth, ha scalzato nel giro di poco tempo le distro più note dalla prima posizione. Si citano in particolare, dunque, le seguenti distro:

  • Slackware: antichissima distribuzione legata a doppio filo con il suo fondatore, Patrick Volkerding, annovera ancora schiere di zelanti sostenitori. Ottima palestra da training (non vi è alcun ausilio per sveltire anche le operazioni più comuni); risente del peso di certe scelte nel momento in cui si voglia portarla in ambito di produzione.
  • Debian: distribuzione ufficiale della FSF (Free Software Foundation), è da sempre un riferimento in merito. La versione “stable” è talmente “stable” che quando esce è quasi un evento e, nella maggior parte dei casi, i programmi in essa contenuti sono già vecchi di mesi. Difatti la maggior parte dei server installati hanno la versione di sviluppo “unstable”. Ha dalla sua un sistema di gestione dei pacchetti di assoluta eccellenza.
  • Ubuntu: nata dall’impegno di Mark Shuttlewoth, che ha voluto contribuire alla comunità Open Source dopo aver guadagnato la bellezza di 595 milioni di dollari vendendo la sua società, Thawte, a Verisign. È un progetto di reingegnerizzazione di Debian che ha ottenuto in poco tempo uno straordinario successo.

Merita un accenno il discorso delle distribuzioni Live, specialmente per l’analisi forense. Sono distribuzioni nate per mostrare il funzionamento di Linux a utenti di altri sistemi operativi. È possibile, tramite un semplice boot da CD, avere a disposizione un sistema Linux completo di tutti gli applicativi necessari. Ciò senza utilizzare l’hard disk del sistema ospitante. L’idea di base si è espansa con l’utilizzo sia di dischi flash USB di ampia capacità, sia con l’introduzione di “unionfs”, ovvero file system che permette l’overlay di due diversi file system (uno read-only, quello del CD/DVD, e uno read-write, quello del flash disk) facendone il merge e consentendo quindi un accesso virtuale in scrittura sul supporto ottico.
In questo modo è possibile avere una specie di computer virtuale in tasca. È sufficiente inserire il CD e il flash disk in un computer, effettuare un reboot e ritrovarsi con il proprio desktop agganciato come parassita sul computer che si sta utilizzando. Spegnendo la macchina ogni traccia dell’attività svolta sul computer ospite andrà irrimediabilmente perduta. Tra le distribuzioni Live il riferimento è sicuramente Knoppix Linux.

Il sistema

Si cercherà ora di affrontare l’argomento nel modo più generale possibile. Si tenga conto che se i concetti si possono applicare non solo a GNU/Linux ma a qualunque sistema Unix sul mercato, vi possono essere delle differenze di implementazione di tali concetti a seconda della distribuzione abitualmente utilizzata.
I sistemi Unix hanno una storia antica. La prima implementazione risale alla fine degli anni Sessanta- primi anni Settanta. Questo significa, da una parte, che il sistema ha avuto più di trenta anni di lento debug e affinamento, il tutto a vantaggio di una stabilità che, a confronto di Windows, è quasi leggenda. Dall’altra parte non bisogna dimenticare che i modelli di PDP-11 di allora disponevano al massimo di 28 KB di memoria centrale, e di CPU funzionanti a una manciata di MHz. Unix è stato progettato per funzionare con queste limitazioni, quindi, se certe cose appaiono assurde e poco “user-friendly”, è bene tenere conto che negli anni Settanta un terminale seriale a caratteri era decisamente più user-friendly di un pannello esadecimale o di un lettore di schede perforate.
Unix è un sistema nato per essere multiutente e multitasking. L’idea di un sistema dedicato a una singola persona (PC) non ha mai sfiorato la mente di un progettista Unix almeno per i primi dieci anni di vita del sistema. Non a caso la quasi totalità dei sistemi Linux si presenta già con una serie di 4/8 console di login collegate. È quindi possibile lavorare contemporaneamente con 4/8 ambienti differenti con utenti diversi sullo stesso terminale fisico.
La struttura del file system è rigida, nel senso che i file non possono essere messi a casaccio in tutto il disco, come dire “ogni cosa al suo posto e un posto per ogni cosa”. Il layout può variare, ma è per lo più quello di tabella 2.

Directory Contenuto
/bin Binari d’uso comune nel sistema.
/boot Kernel e file necessari al boot.
/dev Rappresentazione come file dei device fisici e logici collegati al computer.
/etc File di configurazione del sistema.
/home File degli utenti. Vi è una sottocartella per ogni utente del sistema. Nella sottocartella sono compresi anche i file di configurazione privati degli utenti.
/lib Librerie di sistema.
/mnt Punto di montaggio per media esterni.
/opt Punto dove sono installati programmi che richiedono complesse alberature per il loro funzionamento (OpenOffi ce, Oracle, KDE, Gnome ecc.).
/proc Proc file system: è la rappresentazione come file di svariate strutture del kernel.
/root Home directory dell’utente root.
/sbin Binari riservati all’uso di root.
/srv File di dati per alcuni servizi server come web e ftp server.
/sys Sys file system: è una rappresentazione delle strutture del kernel. Al contrario
di /proc è pensato per essere esaminato da programmi, non letto direttamente da esseri umani.
/tmp Locazione generale per i file temporanei.
/usr Contiene programmi non indispensabili al sistema. Storicamente questa alberatura potrebbe essere importata da un server esterno.
/usr/bin Binari dei programmi non indispensabili al sistema.
/usr/include Include file.
/usr/lib Librerie varie.
/usr/local Locazione per i programmi compilati dagli utenti.
/usr/sbin Tool ad appannaggio di root.
/usr/share Documentazione e altre amenità utili ai programmi.
/usr/src Sorgenti dl kernel e dei vari pacchetti.
/usr/X11R6 Locazione per i programmi grafici e per il sottosistema X Window.
/var Parte variabile dei programmi. Contiene log, mail, spool di stampa, database e quanto può essere utile a un programma da tenere in una directory scrivibile (file temporanei esclusi).

Tabella 2: struttura del file system

Il vantaggio di tale standardizzazione è che si trova velocemente ciò che serve e si è sicuri che non accadano disastri. Sotto Unix, per esempio, le directory /lib e /usr/lib sono gestibili solo ed esclusivamente da root. Nessun programma si sognerebbe mai di pretendere di installare qualcosa. Semmai richiederà la presenza di una certa libreria di sistema per funzionare adeguatamente. Sarà compito di root installarla correttamente. Niente sovrascrittura di librerie .dll fondamentali da parte di un wizard mal scritto. Di contro, richiede l’intervento di un amministratore di sistema competente che si prenda cura dell’intero sistema.
L’alberatura sopradescritta può essere contenuta in un singolo file system o in più file system che possono appartenere a media locali o provenire da vari server di rete. Per sapere dove giace tale albero è possibile usare il comando mount visibile nel seguente listato:

pila@muscariaII:/> mount
/dev/hda2 on / type reiserfs (rw,acl,user_xattr)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
tmpfs on /dev/shm type tmpfs (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
/dev/mapper/system-repository on /mnt/repository type reiserfs (rw,acl,user_xattr)
usbfs on /proc/bus/usb type usbfs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/fd0 on /media/floppy type subfs (rw,nosuid,nodev,noatime,fs=floppyfss,procuid)
/mnt/repository/forensi/Stato/DB/workcopy_oberegger/hd_max80/acquisizione/hdc.img on
/mnt/tmp type ntfs (ro,loop=/dev/loop0,offset=32256)
192.168.100.221:/mnt/repository2 on /mnt/net type nfs (rw,addr=192.168.100.221)
192.168.100.220:/mnt/repository/ on /mnt/net2 type nfs (rw,addr=192.168.100.220)

Nell’esempio riportato si notano file system locali (“/” o /mnt/repository) e file system provenienti da server di rete (/mnt/net e /mnt/net2).
Si noti la rappresentazione dei device di Linux (pari a quella di qualunque Unix). Essi sono visti come file contenuti nella directory /dev. In tabella 3 sono rappresentati alcuni dei device più noti.
Il vantaggio sostanziale di questo paradigma, secondo il quale tutto è un file, è che ogni cosa è quantomeno visibile su due livelli distinti. Così se il file system contenuto nella partizione /dev/hda2 è montato nella cartella /home, entrando in /home si potrà vedere il contenuto del file system della partizione; esaminando /dev/hda2 con gli strumenti appropriati si potrà invece esaminare le strutture del file system stesso.
Inoltre, è possibile usare gli stessi identici comandi per ottenere risultati diversi. Così, se grep è nato primariamente per cercare all’interno di file e directory, se usato su un device con i parametri per la ricerca in un file binario esso permetterà di trovare una stringa nelle metainformazioni di un file system o nel flusso di dati proveniente da una porta seriale.

Device Descrizione
/dev/hda Disco ATA master collegato al canale primario.
/dev/hdd Disco ATA slave collegato al canale secondario.
/dev/sda Disco SCSI con l’ID più basso collegato alla catena.
/dv/st0 Streamer tape SCSI.
/dev/hda1 Prima partizione del disco ATA master collegato al canale primario (i numeri da 1 a 4 sono riservati per le partizioni primarie o per la estesa, i numeri da 5 a n per le unità logiche nella partizione estesa, almeno per quanto riguarda l’architettura X86 e X86_64).
/dev/loop0 Loop device. Permette di far vedere al sistema un file di immagine di un medium come se fosse il mezzo fisico stesso.
/dev/mouse Il mouse collegato.
/dev/audio Canale di uscita della scheda audio.
/dev/lp0 Prima stampante collegata al sistema.
/dev/md0 RAID software generato da Linux.
/dev/eth0 Prima scheda di rete collegata al sistema.

Tabella 3: device comuni

Linux, come tutti gli Unix, ha un semplice sistema di permessi che funziona su qualunque file system nativo. Utilizza tre gruppi di tre lettere (rwx). “r” indica il permesso di lettura, “w” quello di scrittura, “x” per i file indica il permesso di esecuzione, per le directory quello di apertura. Il primo gruppo di lettere indica i permessi per l’owner (possessore) di quel file, il secondo per il gruppo di appartenenza, il terzo i permessi per tutti gli altri utenti del sistema.
Tali permessi non si applicano a root, l’amministratore di sistema. Linux, se utilizza un file system avanzato, come reiserFS o ext3, dispone anche di un sistema aggiuntivo di ACL che permettono di settare i permessi con una maggiore granularità rispetto a quanto possibile con questo semplice schema.

Continua: 1 di 2 Avanti
Condividi

Apogeo

Vedi anche...

Sempre aggiornato





Abbonati alla newsletter di Come fare a... Sottoscrivi l'RSS di Come fare a... Usi Windows Live Messenger? Abbonati ai nostri Windows Live Alerts Diventa fan di Come fare a... su Facebook Seguici su Twitter Scarica il Widget per Mac OS X