Di seguito gli interventi pubblicati in questa sezione, in ordine cronologico.
Ecco l'evoluzione di MultiFat, questo script permette di trovare vari file system annidati, di tipo FAT12, FAT16,FAT32, NTFS e EXT2/3 ;)
Si lancia così sh multifs.sh fat disco.dd oppure /dev/sdx; per NTFS: sh multifs.sh ntfs disco.dd, per ext2: multifs.sh ext2 disco.dd per ext3: multifs.sh ext3 disco.dd
#!/bin/bash # MultiFS detector and extractor by Nanni Bassetti - Blog: http://www.nannibassetti.com/dblog WEB Site: http://www.nannibassetti.com # It can detect and extract hidden file systems and partitions from the mass memory support. # It runs in this way e.g.: sh multifs.sh fat disk.dd or multifs.sh fat /dev/sda # It works only on ntfs,fat12,fat16,fat32, ext2,ext3. # Important things: # FATx: sector size; bytes 11-12 # ext2/3: Block size (saved as the number of places to shift 1,024 to the left); bytes 24-27 # NTFS: sector size bytes; from 11 to 12 # ReiserFs: sector size bytes; 12-13
file=$2 # file or dev fs=$1 # file system date # looking for the signatures sigfind -t $fs $file > sigs.txt # FAT case if [ "$fs" = "fat" ] then # taking only the sectors for i in $(cat sigs.txt | awk -F "Block:" '{print $2}'|awk '{print $1}') do offset=$(( $i*512 )) j=$(( j+1 )) # controlling the word "FAT" inside the target partition fat_flag=$(xxd -s $offset -l 512 $file| grep -i FAT) if [ "$fat_flag" ] then # looking for the sector size start_bs=$(echo $offset + 11 | bc) xxd -s $start_bs -l 2 $file | awk -F ":" '{print $2}' | xxd -p -r >bs.bin #converting in big endian dd if=bs.bin of=b1 skip=1 count=1 bs=1c dd if=bs.bin of=b2 skip=0 count=1 bs=1c cat b1 b2 > bs.dat rm b1 rm b2 rm bs.bin #calculating the sector size length lenbs=$(cat bs.dat|xxd -p | tr [:lower:] [:upper:]) # converting in decimal bs=$(echo "obase=10; ibase=16; $lenbs" | bc) # check if byte 32-35 are 0 then the fat type is fat12 start_byte_fat_len=$(echo $offset + 32 | bc) check_fat12=$(xxd -s $start_byte_fat_len -l 4 $file | awk -F ":" '{print $2}' | xxd -p -r) if [ ! "$check_fat12" ] then echo "File System chosen: FAT12" start_byte_fat_len=$(echo $offset + 19 | bc) # extracting bytes 19-20 from FAT xxd -s $start_byte_fat_len -l 2 $file | awk -F ":" '{print $2}' | xxd -p -r >lung.bin #converting in big endian dd if=lung.bin of=l1 skip=1 count=1 bs=1c dd if=lung.bin of=l2 skip=0 count=1 bs=1c cat l1 l2 > l.dat rm l1 rm l2 rm lung.bin #calculating the partition length len=$(cat l.dat|xxd -p | tr [:lower:] [:upper:]) # converting in decimal len2=$(echo "obase=10; ibase=16; $len" | bc) dd if=$file of=hidden$j.dd skip=$i count=$len2 bs=$bs rm l.dat ls -l *.dd else echo "File System chosen: $fs" echo "Sector size: "$bs start_byte_fat_len=$(echo $offset + 32 | bc) # extracting bytes 32-35 from FAT xxd -s $start_byte_fat_len -l 4 $file | awk -F ":" '{print $2}' | xxd -p -r >lung.bin #converting in big endian dd if=lung.bin of=l1 skip=3 count=1 bs=1c dd if=lung.bin of=l2 skip=2 count=1 bs=1c dd if=lung.bin of=l3 skip=1 count=1 bs=1c dd if=lung.bin of=l4 skip=0 count=1 bs=1c cat l1 l2 l3 l4 > l.dat rm l1 rm l2 rm l3 rm l4 rm lung.bin #calculating the partition length len=$(cat l.dat|xxd -p | tr [:lower:] [:upper:]) # converting in decimal len2=$(echo "obase=10; ibase=16; $len" | bc) dd if=$file of=hidden$j.dd skip=$i count=$len2 bs=$bs rm l.dat ls -l *.dd fi # end check FAT12 fi # end check if there is the FAT word done echo "File System chosen: $fs" echo "Sector size: "$bs fi # end check if fs is FAT type
# NTFS CASE if [ "$fs" = "ntfs" ] then
# taking only the sectors for i in $(cat sigs.txt | awk -F "Block:" '{print $2}'|awk '{print $1}') do offset=$(( $i*512 )) j=$(( j+1 ))
# controlling the word "NTFS" inside the target partition fat_flag=$(xxd -s $offset -l 512 $file| grep -i ntfs) if [ "$fat_flag" ] then # looking for the sector size start_bs=$(echo $offset + 11 | bc) xxd -s $start_bs -l 2 $file | awk -F ":" '{print $2}' | xxd -p -r >bs.bin #converting in big endian dd if=bs.bin of=b1 skip=1 count=1 bs=1c dd if=bs.bin of=b2 skip=0 count=1 bs=1c cat b1 b2 > bs.dat rm b1 rm b2 rm bs.bin #calculating the sector size length lenbs=$(cat bs.dat|xxd -p | tr [:lower:] [:upper:]) # converting in decimal bs=$(echo "obase=10; ibase=16; $lenbs" | bc) echo "File System chosen: $fs" echo "Sector size: "$bs # extracting bytes 40-47 from the NTFS boot sector start_byte_fat_len=$(echo $offset + 40 | bc) xxd -s $start_byte_fat_len -l 8 $file | awk -F ":" '{print $2}' | xxd -p -r >lung.bin #converting in big endian dd if=lung.bin of=l1 skip=7 count=1 bs=1c dd if=lung.bin of=l2 skip=6 count=1 bs=1c dd if=lung.bin of=l3 skip=5 count=1 bs=1c dd if=lung.bin of=l4 skip=4 count=1 bs=1c dd if=lung.bin of=l5 skip=3 count=1 bs=1c dd if=lung.bin of=l6 skip=2 count=1 bs=1c dd if=lung.bin of=l7 skip=1 count=1 bs=1c dd if=lung.bin of=l8 skip=0 count=1 bs=1c cat l1 l2 l3 l4 l5 l6 l7 l8> l.dat rm l1 rm l2 rm l3 rm l4 rm l5 rm l6 rm l7 rm l8 rm lung.bin #calculating the partition length len=$(cat l.dat|xxd -p | tr [:lower:] [:upper:]) # converting in decimal len2=$(echo "obase=10; ibase=16; $len" | bc) dd if=$file of=hidden$j.dd skip=$i count=$len2 bs=$bs rm l.dat fi done ls -l *.dd echo "File System chosen: $fs" echo "Sector size: "$bs fi
# ext2/3 case (please test it!) if [ "$fs" = "ext2" ] || [ "$fs" = "ext3" ] then # taking only the sectors for i in $(cat sigs.txt | awk -F "Block:" '{print $2}'|awk '{print $1}') do offset=$(( $i*512 )) j=$(( j+1 ))
# looking for the blocks size start_bs=$(echo $offset + 24 | bc) xxd -s $start_bs -l 4 $file | awk -F ":" '{print $2}' | xxd -p -r >bs.bin #converting in big endian dd if=bs.bin of=b1 skip=3 count=1 bs=1c dd if=bs.bin of=b2 skip=2 count=1 bs=1c dd if=bs.bin of=b3 skip=1 count=1 bs=1c dd if=bs.bin of=b4 skip=0 count=1 bs=1c cat b1 b2 b3 b4 > bs.dat rm b1 rm b2 rm b3 rm b4 rm bs.bin #calculating the sector size length lenbs=$(cat bs.dat|xxd -p | tr [:lower:] [:upper:]) # converting in decimal lenbs2=$(echo "obase=10; ibase=16; $lenbs" | bc) #Block size (saved as the number of places to shift 1,024 to the left) # "<<" is the left shift bitwise operator bs=$[ "1024 << $lenbs2" ] echo "File System chosen: $fs" echo "Sector size: "$bs echo $start_byte_fat_len # extracting bytes 4-7 from the EXT Superblock start_byte_fat_len=$(echo $offset + 4 | bc) xxd -s $start_byte_fat_len -l 4 $file | awk -F ":" '{print $2}' | xxd -p -r >lung.bin #converting in big endian dd if=lung.bin of=l1 skip=3 count=1 bs=1c dd if=lung.bin of=l2 skip=2 count=1 bs=1c dd if=lung.bin of=l3 skip=1 count=1 bs=1c dd if=lung.bin of=l4 skip=0 count=1 bs=1c
cat l1 l2 l3 l4 > l.dat rm l1 rm l2 rm l3 rm l4 rm lung.bin #calculating the partition length len=$(cat l.dat|xxd -p | tr [:lower:] [:upper:]) # converting in decimal len2=$(echo "obase=10; ibase=16; $len" | bc) # $(($i-2)) because it starts 2 sectors before the signature dd if=$file of=hidden$j.dd skip=$(($i-2)) count=$len2 bs=$bs rm l.dat rm bs.dat done ls -l *.dd echo "File System chosen: $fs" echo "Sector size: "$bs fi
date exit
Click here to DOWNLOAD
Dall'esercizio proposto da Mario Pascucci (QUI), mi è venuta l'ispirazione per scrivere questo scriptino, che non fa altro che cercare, tramite sigfind, le signature 55AA delle partizioni FATx, e poi dagli offset, ricavati dalla moltiplicazione del numero di settore, trovato da sigfind, per 512 bytes, ricava il valore dei byte 32,33,34,35 delle FATx trovate e li converte in Big Endian, per poi calcolare la lunghezza totale della partizione in settori. Infine, crea tutte le immagini dd contenenti le possibili partizioni nascoste.
Sicuramente è grezzo, però abbastanza veloce, su 2Gb di pen-drive con tre strati, ci ha messo poco più di 20 minuti.
Mi piacerebbe renderlo multi File System, ma c'è da studiarsi bene i bytes che contengono i total sectors, dei vari file systems....e poi si potrebbe espanderlo con più features...comunque è un inizio ;)
#!/bin/bash # MultiFat detector by Nanni Bassetti - http://www.nannibassetti.com # It runs in this way: sh multiFat.sh disk.dd fat (e.g.) file=$1 fs=$2 # looking for the signatures date sigfind -t $fs $file > sigs.txt # taking only the sectors for i in $(cat sigs.txt | awk -F "Block:" '{print $2}'|awk '{print $1}') do offset=$(( $i*512 )) j=$(( j+1 )) start_byte_fat_len=$(echo $offset + 32 | bc) # controlling the word "FAT" inside the target partition fat_flag=$(xxd -s $offset -l 512 $file| grep -i FAT) if [ "$fat_flag" ] then # extracting bytes 32-35 from FAT xxd -s $start_byte_fat_len -l 4 $file | awk -F ":" '{print $2}' | xxd -p -r >lung.bin #converting in big endian dd if=lung.bin of=l1 skip=3 count=1 bs=1c dd if=lung.bin of=l2 skip=2 count=1 bs=1c dd if=lung.bin of=l3 skip=1 count=1 bs=1c dd if=lung.bin of=l4 skip=0 count=1 bs=1c cat l1 l2 l3 l4 > l.dat rm l1 rm l2 rm l3 rm l4 rm lung.bin #calculating the partition length len=$(cat l.dat|xxd -p | tr [:lower:] [:upper:]) # converting in decimal len2=$(echo "obase=10; ibase=16; $len" | bc) dd if=$file of=hidden$j.dd skip=$i count=$len2 bs=512 rm l.dat fi done ls -l *.dd date exit
Non scagliate i pomodori...è solo un piccolo esercizio ;) ! (Test sono graditi)
QUI c'è l'evoluzione del programmino...
Il bravo Mario Pascucci ha pubblicato la soluzione al suo test/esercizio di computer forensics QUI :)
Il caro amico Denis Frati ha risolto meglio di tutti i partecipanti...quindi COMPLIMENTI!!!!
Ma vediamo come ho agito io, superficialmente e non dedicandomi a fondo, peccato, ma quando c'è agonismo mi faccio prendere dalla fretta , un difetto che mi porto dietro da quando ero piccolo, mi sa che mi converrebbe un corso di Yoga
Ok, vediamo le mie soluzioni:
Lancio FTK Imager da Windows è vedo subito che: La partizione visibile si chiama: data-hide seriale 48FD-A890 img_0085.jpg img_0090.jpg img_0112.jpg img_0133.jpg linux_virus.pdf ... Continua a leggere...
Non so perchè, ma mi sono dedicato all'evoluzione di BrutalStego, ho scritto, infatti, un nuovo bash script, che fa realmente una steganografia di un testo, lo cripta in AES256 e lo nasconde in esadecimale nel file vettore.
La cosa che mi interessava era poter criptare il testo, nasconderlo e poterlo rilevare tramite immissione di password, insomma un tool di steganografia reale!
Strumenti usati: grep, awk, dd, bc, wc, xxd, openssl
In sostanza funziona così: si inserisce il nome del file vettore, si inserisce il nome del nuovo file (quello contenente il messaggio segreto), si inserisce il messaggio ed infine si inserisce la password. Dopo questi input, il programmino cripta con OpenSSL in AES256 il messaggio segreto, poi lo converte in esadecimale e lo posiziona all'interno del nuovo file vettore. L'ho testato sulle JPG e sugli MP3 e non si nota alcuna perturbazione. Rilanciando il programmino, si può andare a svelare il messaggio segreto, inserendo il nome del file vettore e la password
Ecco lo script:... Continua a leggere...
Siamo ormai nel 2009, tutto si è evoluto, tutto è veloce e potente, ma la Giustizia italiana? Quella rimane lenta, lentissima, ci sono cause iniziate nel 1998, che devono ancora finire e che magari richiedono ancora delle perizie. Come attrezzarsi? Potremmo trovarci di fronte a macchine Intel 386 se non 286, senza porte USB, senza lettori di CD-Rom, senza BIOS che permettano il boot da CD-ROM, con pochissima RAM, l'unica cosa positiva sarebbe la dimensione dell'hard disk da repertare, che probabilmente sarebbe di pochi megabytes.
A volte, anche le macchine "moderne", possono avere dei problemi di incompatibilità, con le Linux Live distro, perchè qui stiamo, chiaramente, parlando di usare una Live, per svariati motivi, e non di staccare l'hard disk e collegarlo alla nostra workstation, che sarebbe la soluzione ottimale per ovviare ad ogni questione.
Quindi nel nostro zainetto da bravo consulente tecnico informatico non dovrebbero mancare mai, secondo la mia personalissima classificazione, live distro come:
LIVELLO ALTO - Boot da Cd-Rom, ideali per i sistemi moderni, dotate di ottime interfacce grafiche.
Helix 2, CAINE, FCCU 12.1, ForLex, Deft 4.1
LIVELLO MEDIO - boot da CD-ROM - sono più leggere e possono girare senza interfaccia grafica.
FCCU 11 o 10, F.I.R.E., IRItaly, PHLAK, Knoppix-STD, DSL
LIVELLO BASSO - boot da Floppy - partono da floppy disk e girano sui dinosauri informatici
SMART Linux, MuLinux, Floppix
Inoltre non sarebbe male portarsi sempre dietro il cd di GPArted e un rescue cd come Trinity, SystemRescueCd e un linux net-oriented come BackTrack.
Troppe? ;) Bhè sono convinto che nei comments ne appariranno altre
Oggi è online sul sito:
http://www.caine-live.net la nuova release di CAINE:
- Rilasciata la nuova versione 0.4! - BUG dello swap risolto - Novita! Versione 0.4 in inglese, con formattazione del rapporto finale in inglese e in italiano
Ho appena finito di leggere un interessante articolo di Mark Whitteker su ISSA Journal, che riassume alcune tecniche di base dell'anti-forensics, trovo questo genere di articoli molto costruttivi, perchè non dicono niente di nuovo, ma servono ad accorpare e sintetizzare dei concetti, cosa che è utile, specialmente in un settore così ricco di tecniche da dover ricordare.
Cos'è l'anti-forensics? Si tratta di tutti quegli escamotages, che servono a mettere in difficoltà i "digital investigators", in modo da riuscire ad occultare o a rendere estremamente diffcile il reperimento di evidenze digitali.
I tipi di anti-forensics possono suddividersi in tre grandi branche:
- Data Hiding (occultare i dati)
- Tool's weakness (debolezze note dei tool per la computer forensics)
- Investigator's weakness (debolezza dell'investigatore)
DATA HIDING
I dati possono essere nascosti in moltissimi modi e non solo sull'hard disk in esame, ma anche su siti web di storage, qui potete trovare una trattazione di Mario Pascucci in merito ad alcune tecniche, ma esaminiamo quelle più comuni e conosciute:
... Continua a leggere...
Dopo la segnalazione del bug di Caine, ci siamo tutti attivati per patcharlo il più presto possibile, ma Giancarlo Giustini ha fatto veramente miracoli....nonostante queste belle parole dette dal solito ignorante di turno, che non sa rispondere tecnicamente, ma spara insulti a vanvera....che tristezza....ma andiamo avanti.
Qui si può visionare un simpatico video, nel quale si denota come usando altre distro di controllo, il bug sussiste non solo in Caine:
video (pubblicato da Giancarlo su CFI mailing list il 28/11/2008)
Da questa osservazione il bravo ricercatore dell'Università di Modena si è dato da fare e ha rilevato risposte come questa:
"The correct way to stop swap from being activated by swapon -a is by setting it to noauto, the ro mount parameter really doesn't have anything to do with it. So I think you're right, no bug, only misunderstanding."
Quindi NON è un bug di Linux ma è una configurazione errata, bhè solo chi non lavora non sbaglia e quindi l'errore va capito e perdonato, anzi ben venga la cosa che, grazie ad Internet, si risolvano i problemi così velocemente, anche grazie allo scambio di idee....
E per concludere con un sorriso, cito il testo di qualcuno postato sulla lista di CFI ,che ha scritto questa simpatica frase:
"poi se non mettere i parametri in una riga di comando o in un file di configurazione è un bug di linux......sarebbe interessante chiedere a Torvalds come mai non ha mai corretto un simile bug..... ;-P"
La vostra affezionatissima merdaccia!
Ci è stato segnalato qui, che Caine v.03 ha un bug poichè se lanciata sui sistemi Linux, scrive nella partizione del file di SWAP, questo altera il disco sorgente... Grazie a questa segnalazione, il buon Giustini, ha già provveduto alla correzione del bug e dopo un pò di testing, su altre features, uscirà a breve la release 0.4 di CAINE. Risolto questo, ricordo che CAINE è tutta aggiornata e ci saranno anche altre novità ;)
Ieri 16/Nov/2008, ho scaricato la neonata Deft 4, Linux Live Forensics distro. Appena finito di masterizzare la ISO, provo subito a sfogliare il CD-Rom e noto la cartella Deft-Extra, che contiene molti tools per la computer forensics avviabili sotto Windows, questa è una nota positiva, dal mio punto di vista
Passo al boot da CD e subito mi appare la prima novità, infatti nella schermata di avvio, si apre automaticamente la tendina con la scelta della lingua, cosa molto comoda, poichè può capitare, che nella fretta di avviare una live distro, si tralascia la scelta della lingua, quindi i progettisti hanno pensato bene di facilitare quest'operazione all'utente, altra nota positiva (adoro le comodità).
La distro si avvia sulla console mostrando il prompt di Linux, altra cosa ben fatta, perchè se non si ha necessità della GUI (Graphic User Interface), è inutile farla caricare, al massimo, digitando deft-gui, la si può lanciare in un secondo momento.
Lancio la deft-gui, il primo impatto è buono e veloce, perchè c'è un bello sfondo scuro, che mette in evidenza tutte le icone dei tools, presenti sul Desktop, forse dà un pò l'idea di disordine, ma forse può essere più comodo per qualcuno, dato che si hanno tutti i tools in vista ed a portata di click. Non esiste un sottomenù a tendina che accorpa i tools forensi, quindi tutti sono raggiungibili dal Desktop, ma qui noto subito che manca AIR e che l'unico tool di acquisizione (GUI) è Guymager, qui avrei qualche perplessità, perchè, il caro vecchio AIR, è un'interfaccia più intuitiva e più conosciuta, comunque niente di grave, Guymager è un software validissimo.
Lancio la terminal window e provo a digitare:
mmls -i list
e noto che lo SleuthKit 3.0 NON è stato ricomplito insieme alle Afflib e alle EWFlib, infatti riconosce solo le immagini raw e split, forse questa è stata una dimenticanza, (a quanto ne so l'unica distro che, attualmente, ha il TSK 3.0 ricompilato è CAINE).... Continua a leggere...
|