Upload
others
View
6
Download
2
Embed Size (px)
Citation preview
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
Seminarski rad u okviru predmeta „Računalna forenzika“
RAM forenzika za Linux
Agneza Šandić
Zagreb, siječanj 2018.
Sadržaj
1. Uvod ................................................................................................................................... 3
2. Forenzika RAM-a ............................................................................................................... 4
3. Prikupljanje podataka ......................................................................................................... 5
4. Prikupljanje dokaza na Linx operacijskom sustavu ........................................................... 6
4.1. Dohvaćanje slike RAM-a ............................................................................................ 6
4.2. System.map .............................................................................................................. 7
4.3. PROC datotečni sustav ................................................................................................ 8
4.4. Povijest bash ljuske ..................................................................................................... 9
4.5. DMSEG naredba ........................................................................................................ 10
5. Zaključak .......................................................................................................................... 11
Literatura .................................................................................................................................. 12
1. Uvod
Računalna forenzika je grana forenzičke znanosti koja se bavi prikupljanjem, pretraživanjem,
zaštitom i analizom dokaza u digitalnom obliku te uključuje njihovu prezentaciju kao
materijalnih dokaza u eventualnim sudskim postupcima [1].
U prošlosti se postupak stvaranja točne i pouzdane kopije podataka sa ugroženog uređaja strogo
ograničavao na podatke koji su bili pohranjeni npr. na tvrdom disku. To znači da se postupak
forenzičke analize oslanjao na dokaze pronađene u datotečnom sustavu. Ova procedura
prikupljanja dokaza je vrlo jednostavna i ne zahtijeva posebno iskustvo istražitelja. Dovoljno
je isključiti napajanje ugroženom uređaju, a zatim zaštiti mjesto zločina. Također, većina alata
dostupna na tržištu može se koristiti samo za ispitivanje datotečnih sustava. Jasno je da se mogu
izgubiti bitni dokazi za istragu ako se izostave nestalni (izbrisivi) podatci [2].
Jedna specifična grana forenzika koja dobiva sve veći zamah se bavi analizom RAM-a.
Tradicionalno, kada se obavlja forenzička istraga na ugroženom računalu, jedna od prvih stvari
koje treba učinit jest prikupiti bilo kakve „hlapljive“ informacije. Često se takva analiza kopije
sadržaja RAM-a vrši jednostavnim pretraživanjem ASCII ili Unicode stringova unutar
tekstualnog sadržaja jer postoji samo nekoliko alata i malo je ljudi osposobljeno za dublju
analizu konteksta radne memorije.
Trenutačno tipičan način analize RAM-a jer pretraživanje stringova na cijeloj memorijskoj
slici u nadi da će se pronaći informacije kao što su lozinke, jasan tekst nedavno upisane šifrirane
poruke i sadržaj datoteke. Budući da kriminalci postaju sposobniji stvoriti zlonamjerni softver,
koji može izbjeći trenutne metode digitalne forenzičke istrage tako da ne ostavlja nikakva trag
na tvrdom disku, metode forenzike se moraju razvijati kako bi zadovoljile ove izazove.
Važno je napomenuti da se najzanimljivije informacije mogu pronaći kada se ugroženi sustav
ne pokrene ponovno. Cilj ovog seminarskog rada je pobliže objasniti računalnu forenziku
RAM-a u kontekstu Linux operacijskog sustava.
2. Forenzika RAM-a
Neki od ključnih dijelova nestabilnih informacija koje traže forenzičari su trenutačno pokrenuti
procesi sustava i datoteke koje su posljednji put korištene. Učinkovita istraga RAM memorije
može dati bitne informacije koje se ne nalaze nigdje drugdje kao što su: komunikacijske poruke,
lozinke, dekriptirani i privremeni tekstovi, obilje informacija o trenutnom stanju računalnog
sustava kao što su podaci o trenutno pokrenutim procesima, korisnički podaci, informacije o
uspostavljanim mrežnim komunikacijskim vezama, tehničke informacije (brojači, pokazivači,
registri itd. ), log datoteke i slično. Iako postoje mnogi dostupni programi koji mogu prikazati
trenutno pokrenute procese, problem nastaje ako je sustav ugrožen rootkitom, zloćudnim
programom (engl. malware) koji može manipulirati izvršavanjem naredbi sustava. Osim toga,
napredne tehnike zlonamjernog softvera omogućuju ubrizgavanje zloćudnog koda izravno u
pokrenute procese, tako da niti jedan novi proces nije vidljiv standardnim alatom. Forenzičko
istraživanje fizičke memorije može izravno gledati strukture kernela [3]. Nedavni crvi, kao što
su SQL Slammer i CODE red, ne pišu nikakve podatke na disk već svi podaci ostaju u fizičkoj
memoriji. Time standardni disk postaje forenzički beskoristan što je još jedan od razloga zašto
je temeljito pregledavanje RAM-a od velike važnosti. Ovo može biti jedini način izravnog
otkrivanja prisutnosti zlonamjernog softvera i pronalaženja potpunih i točnih informacija iz
kompromitiranog sustava [2].
Temeljni cilj tehnologija korištenih u računalnoj forenzici jest konzistentnost podataka, tj.
prilikom istrage i analize ne smije se mijenjati niti jedan bit originalnih podataka. Kada su
traženi dokazi smješteni u radnoj memoriji, ovaj je cilj nemoguće provesti u djelo. Problem kod
prikupljanja podataka iz radne memorije predstavlja činjenica da ukoliko na istraživanom
računalu već nije pokrenut alat za forenzički dohvat podataka, samo njegovo pokretanje mijenja
sadržaj radne memorije. Linux i Unix sustavi jedinstveni su po tome što je moguće iskrcati
cijeli sadržaj radne memorije na neku sigurnu lokaciju korištenjem ugrađenih funkcija.
Microsoft Windows nema usporediv sustav. Pokretanjem čak i utility-a na sustavskoj razini
može prouzročiti promjenu podataka [4].
3. Prikupljanje podataka
Ukoliko je računalo nad kojim se provodi istraživanje upaljeno pri dolasku istražitelja, bitno je
prvo uzeti sliku radne memorije (eng. image file) da se ne izgube privremeni podaci koji mogu
odati sve što je korisnik radio od zadnjeg paljenja računala.
Ostavljanje računala uključenim ipak ne jamči očuvanje dokaza. Ako je računalo povezano na
računalnu mrežu, napadač može s udaljene lokacije izbrisati dnevničke zapise ili, neovisno o
vezi na mrežu, programirati njihovo automatsko brisanje. Jednako tako, dobronamjeran
korisnik radom na računalu može nesvjesno uzrokovati prepisivanje dokaza. Uništenje nije
jedina opasnost koja prijeti digitalnim dokazima. Nestručnim rukovanjem oni mogu biti
oštećeni i tako obezvrijeđeni u potencijalnom sudskom postupku. Ovo se najčešće događa zbog
neinformiranosti korisnika koji, nakon što su uočili zločin, pokušavaju otkriti što se točno
dogodilo, te tako utječu na sustav [5]. Treba se suočiti s činjenicom da neće biti moguće
prikupiti podatke u jednom dijelu sustava, a da se pri tome ne utječe na osta dijelove sustava.
Ovo načelo poznato je i kao Heisenbergov princip neodređenosti primijenjen na računalni
sustav [9].
Savršen alat za prikupljanje nestalnih podatak se ne bi trebao oslanjati na operacijski sustav.
Takva rješenja postoje i jedno od njih je Tribble (slika 1). Tribble je hardversko proširenje u
obliku kartice koja pouzdano dohvaća privremenu memoriju aktivnog računalnog susta i
zadržava kritične informacije potrebne za forenzičku analizu. Uređaj pristupa ciljanoj memoriji
direktno preko hardverskog sučelja te zato ne treba nikakav softver ili upravljački program
(engl. driver) [6]. Nažalost, to znači da posebna PCI kartica mora biti fizički instalirana u
računalu prije nego što dođe do napada. Jednostavno je nemoguće da svaki stroj na internetu
ima takvu karticu ugrađenu.
Slika 1: Izgled Tribble kartice
(Izvor: http://www.grandideastudio.com/tribble/ )
Kako bi se ranjivi dokazi očuvali potrebno ih je što prije pohraniti na siguran medij. Tvrdi disk
ispitivanog računala nije prikladan za to jer i sam može sadržavati dokaze koji bi na ovaj način
mogli biti uništeni ili oštećeni. Prilikom pohrane ranjivih dokaza potrebno je koristiti što manje
radne memorije kako bi se očuvao njezin sadržaj [5].
Najbolji način za prikupljanje ranjivih dokaza je uporaba računalne mreže. Kako bi se ispitivano
računalo zaštitilo od daljnjih napada i kako bi se prikrila istraga, računalo je po otkriću napada
potrebno isključiti sa mreže. Njegovim spajanjem na privatno čvorište (eng. hub) omogućuje
se prijenos podataka. Pri tome drugo računalo, korišteno za prikupljanje dokaza, treba
prilagoditi mrežnim postavkama ispitivanog računala. Prije svega je potrebno dohvatiti i
pohraniti sadržaj radne memorije ispitivanog računala i to umanjim paketima kako bi se
izbjeglo prepisivanje ostatka radne memorije. Nakon što je sadržaj radne memorije pohranjen
može se pristupiti dohvaćanju ostalih podataka, bez ograničenja na veličinu paketa [5].
4. Prikupljanje dokaza na Linx operacijskom sustavu
Računalno forenzičku analizu Linux operacijskih sustava moguće je provoditi alatima
ugrađenim u operacijski sustav ili specijaliziranim aplikacijama.
4.1. Dohvaćanje slike RAM-a
Jedina stvar koju istražitelj može napraviti u slučaju napada jest ograničit prikupljanje procesa
u memoriji u nekoliko koraka kako bi spriječio što više može utjecanje na ugroženo računalo.
Prvo mora dohvatiti i pohraniti sadržaj RAM-a korištenjem samo jedne naredbe. U drugom
koraku treba ukloniti ugroženi uređaj s napajanja i potom sačuvati preostale komponente koje
služe za pohranu kao što su hard disk, disketa itd. Linux-ov naredbe dd i dcfldd se mogu koristiti
za dohvaćanje slike radne memorije. Alat dcfldd je modificirana (naprednija) verzija dd alata
koji dodatno podržava izradu sažetka kopije. Ovi alati namijenjeni su kopiranju podataka bit po
bit iz jedne datoteke u drugu s time da nad njima mogu raditi razne konverzije i formatiranja,
ovisno o zastavicama koje se koriste pri njihovoj uporabi. Sliku memorije je potrebno spremiti
negdje drugo, a ne na lokalno računalo. Za to se može koristiti naredba netcat koja omogućuje
slanje podataka putem mreže na udaljeno računalo. Na Linux-u postoje dvije datoteke koje
sadržajem odgovaraju radnoj memoriji, a to su /dev/mem i /proc/kcore. Slika radne memorije u
/proc/kcore datoteci je spremljena u „ELF core“ formatu što omogućuje jednostavnu analizu
korištenjem gdb alata, ali je pri tome slika nešto veća od same radne memorije zbog ELF
zaglavlja.
Radnu memoriju je moguće spremiti sljedećom naredbom:
“dd if=/dev/mem of=whole_mem.img bs=1”.
If operanda uznačava ulaznu datoteku, a of operand definira izlaznu datoteku, tj. za ovaj
konkretan primjer je to „whole_mem.img“. Bs operand postavlja veličinu bloka, a ovdje je to 1
bajt.
Nakon toga je moguće pristupiti pretraživanju spremljene slike radne memorije u potrazi za
tragovima digitalnog zločina. Pri tome je nužno dobro poznavanje strukture radne memorije
kod Linux operacijskih sustava [2].
4.2. System.map
Tijekom digitalne istrage datoteka System.map može biti od velike koristi. Ona služi kao mapa
s adresama najvažnijih kernelskih simbola. Svaki puta kada se programski prevede (engl.
compile) novi kernel, adrese različitih simbola se mijenjaju. Simboli koji se nalaze u ovoj
datoteci su od velike koristi istražiteljima. Unutar tablice „call table“ se nalaze adrese
sistemskih poziva, a njezin sadržaj se može dobiti uz pomoć sljedeće naredbe:
„cat /boot/System.map|grep sys_call_table c030a0f0 Dsys_call_table“.
U Tablici 1 je prikazan primjer takvog ispisa:
0xc030a100: 0xc0146df0 0xc0146220 0xc0146370 0xc0120060
0xc030a110: 0xc01462c0 0xc0154510 0xc0154070 0xc0107bb0
0xc030a120: 0xc01457f0 0xc0120d40 0xc01536b0 0xc0145b70
0xc030a130: 0xc012ca00 0xc0128fa0 0xc014e910 0xc0146b40
0xc030a100: 0xc0146df0 0xc0146220 0xc0146370 0xc0120060
Tablica 1: Rezultat pokretanja gdb alata prema /proc/kcore datoteci [2].
Unosi u ovoj tablici odgovaraju nazivima funkcija pohranjenih u datoteci
/usr/include/asm/unistd.h. Primjer takvog unosa je prikazan u Tablici 2.
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
Tablica 2: Primjer sadržaja datoteke /usr/include/asm/unistd.h [2]
Npr. funkcija sys_write je na 0xc0146df0, a funkcija sys_open je na 0xc0146220 adresi.
4.3. PROC datotečni sustav
Proc je virtualni datotečni sustav za prikaz rada kernela i procesa u obliku tekstualnih i sličnih
datoteka. On je kao sučelje prema kernelu koje daje informacije o njegovom trenutnom stanju
i može služiti za komunikaciju sa njim. Ne pohranjuje se na disku već na RAM-u.
Osim proc/core, unutar datotečnog sustva proc nalaze se mnogi bitni poddirektoriji čiji sadržaj
može izuzetno pomoći prilikom forenzičke istrage, a neki su opisani u nastavku [7].
▪ /proc/1 – direktorij s informacijama o procesu broj 1. Svaki proces ima poddirektorij
unutar /proc s i imenom njegovog identifikacijskog broja.
▪ /proc/devices-lista konfiguriranih upravljačkih programa (engl. driver) unutar trenutno
pokrenutog kernela.
▪ /proc/dma-prikazuje koji DMA (engl. Direct Memory Access) kanali se trenutno
koriste.
▪ /proc/interrupts-prikazuje koji se prekidi koriste i koliko se svakog od njih pojavilo.
▪ /proc/ioports-prikazuje koji se ulazni/izlazni portovi trenutno koriste.
▪ /proc/kcore-slika fizičke memorije sustava (RAM-a).
▪ /proc/kmsg-izlazne poruke iz kernela koje se također prosljeđuju u syslog.
▪ /proc/meminfo-sadrži informacije u korištenoj memoriji, i fizičkoj i zamjenskoj (engl.
swap).
▪ /proc/modules-prikazuje koji su trenutno učitani moduli kernela.
▪ /proc/net-sadrži statusne informacije o mrežnim protokolima.
▪ /proc/uptime- vrijeme kad je sustav podignut.
4.4. Povijest bash ljuske
Linux pohranjuje aktivnosti korisnika u shell history datoteci lociranoj u direktoriju
/home/<user>. Većina Linux distribucija pohranjuje posljednjih 500 linija upisanih u
komandnu liniju. No tu su pohranjene samo naredbe koje je korisnik utipkao, ne i odziv sustava
na naredbe. Ovi podaci se trebaju koristiti u kombinaciji s ostalim podacima iz istrage kako bi
se dobila smislena slika. Pregled datoteke .bash_history se može dobiti naredbom $ cat
.bash_history ili jednostavno $ history. Bash povijest se sprema na disku te se ta opcija uvijek
može isključiti, ali svakako ostaje u RAM-u.
Slika 2: Primjer sadržaja .bash history direktorija
(Izvor: https://www.howtogeek.com/howto/44997/how-to-use-bash-history-to-improve-your-command-line-productivity/
Na Slici 2 je prikazan primjer izgleda sadržaja .bash_history datoteke. Naredba s brojem 1 je
najstarija, tj. najdavnije pokrenuta naredba.
4.5. DMSEG naredba
Dmesg naredba se koristi za ispis poruka od strane kernela na standardni izlaz. Kernel je jezgra
operacijskog sustava i prvi dio koji se učita u memoriju prilikom pokretanja računala (engl.
boot up) te kontrolira zapravo sve u sustavu. Dmesg spomenute podatke dohvaća iz spremnika
kernela (engl. kernel ring buffer) koji je dio memorije i koji privremeno čuva podatake koji su
poslani ili primljeni vanjskim uređajima kao što su hard disk drive (HDD), printer ili tipkovnica.
On je fiksne veličine tako da kada se napuni, novi podaci se upisuju preko starih. Dmesh može
biti jako koristan kako bi se prikupile informacije o hardveru [8].
Sintaksa ove naredbe je jednostavna: dmesg [options].
Rezultat naredbe dmesg je sačuvan u log datoteci /var/log/dmesg i može biti lako prikazan uz
pomoć tekstulannog editora kao što je vi ili gedit, ili uz pomoć naredbe cat:
cat /var/log/dmesg | less
5. Zaključak
Može se vidjeti da se ogromna količina podataka može oporaviti (engl. recover) iz RAM-a koji
uključuje veliku količinu podataka što se inače ne bi moglo postići iz forenzičke slike dobivene
iz tvrdog diska. Ne samo da se mogu dohvatiti podaci poput lozinki i korisničkih imena već i
drugi podaci poput zlonamjernih ili ilegalnih programa koji e mogu koristiti kao dokaz prilikom
istrage. Analiza RAM-ova postaje ključni dio forenzičkih istraga i stoga je važno da se svi
forenzički istražitelji razumiju da kako prikupiti naveden podatke. Digitalna istraga RAM-a iz
kompromitiranog stroja je vrlo novo polje u forenzičkoj analizi.
U ovom seminaru su opisani samo neki osnovni koraci u provođenju istrage fizičke memorije
unutar Linux operacijskog sustava. Za detaljniju analizu potrebno je još znati povezati podatke
iz RAM-a s sačuvanim datotekama u virtualnoj memoriji i ostatku računalnog sustava.
Literatura
[1] (http://www.cert.hr/sites/default/files/NCERT-PUBDOC-2010-05-301.pdf) .
[2] https://articles.forensicfocus.com/2011/07/10/digital-forensics-of-the-physical-memory/
[3] 06Mar_Urrea
[4] http://sigurnost.zemris.fer.hr/ostalo/2010_marceta/Diplomski.htm
[5] https://repozitorij.fpz.unizg.hr/islandora/object/fpz%3A163/datastream/PDF/view
[6] http://www.grandideastudio.com/tribble/
[7] http://www.tldp.org/LDP/sag/html/proc-fs.html
[8] http://www.linfo.org/dmesg.html
[9] http://sigurnost.zemris.fer.hr/ostalo/2007_horvat/Forenzika.htm