» »

Napadi na delovni pomnilnik

Delovni pomnilnik ali RAM (Random Access Memory) je del računalnika, v katerem se začasno shranjujejo podatki. Podatki v RAM pomnilniku naj bi se po izključitvi računalnika iz napajanja izgubili, vendar bomo v nadaljevanju videli, da to ne drži povsem.

Poleg tim. "običajnega" delovnega pomnilnika, ki se fizično nahaja v obliki polprevodniških integriranih vezij, poznamo tudi navidezni pomnilnik. Pri navideznem naslavljanju pomnilniškega prostora operacijski sistem naslavlja (uporablja) večji pomnilniški prostor, kot ga ima na razpolago v fizičnem pomnilniku RAM. Presežek podatkov se v tem primeru shranjuje na disk.

V pomnilniku RAM se shranjujejo vsi podatki in vse aplikacije, ki jih imamo trenutno naložene oz. zagnane, iz stališča varnosti pa je najbolj pomembno dejstvo, da se v pomnilniku RAM shranjujejo tudi trenutno aktivni šifrirni ključi. Če npr. uporabljamo programsko šifriranje trdega diska, se za čas, ko je trdi disk odklenjen, v pomnilniku RAM shranjujejo šifrini ključi. Z (nepooblaščenim) dostopom do delovnega pomnilnika je le-te mogoče prebrati in skopirati, s čimer napadalec lahko pridobi dostop do šifriranih podatkov na disku.

V nadaljevanju si bomo pogledali nekaj načinov s katerimi napadalec lahko dostopi do vsebine delovnega (in tudi navideznega) pomnilnika.

Zaseg podatkov iz delovnega pomnilnika RAM na živem sistemu


V sodobnih operacijskih sistemih je pomnilnik predstavljen kot virtualna (navidezna) naprava. V Windows sistemih (od Windows NT dalje) je to naprava "\Device\PhysicalMemory" (oz. "\\.\PhysicalMemory"). Za bralni dostop do te naprave so v Windows XP 64-bit, Windows 2003 Server SP1, Windows Vista in kasnejših sistemih zahtevani administratorski privilegiji.

V Linux/Unix sistemih sta virtualni napravi dve: "/dev/mem", ki je slika fizičnega pomnilnika ter "/dev/kmem", ki predstavlja sliko navideznega pomnilnika jedra (ang. kernel virtual memory). Tudi tukaj bralni dostop zahteva administratorske privilegije.

Kot rečeno napadalec za zaseg vsebine delovnega pomnilnika potrebuje administratorske privilegije, za samo kopiranje vsebine v tim. forenzično sliko (posebno datoteko) pa lahko uporabi ukaz dd (disk dump). Ukaz oz. aplikacija je del vsakega Linux sistema, v okolju Windows (od Windows 2000 dalje) pa je mogoče uporabiti Forensic Acquisition Utilities. Pri tem je pomembno vedeti, da z zagonom aplikacije dd že posežemo v sistem oz. vsebino pomnilnika RAM spremenimo, kar pa je pravzaprav relevantno le za forenzične preiskovalce (zlonamerni napadalec se s tem verjetno ne bo obremenjeval).

Primer ukaza za kopiranje vsebine pomnilnika RAM v okolju Linux (parameter conv=noerror,sync je uporaben v primeru napak pri branju - v tem primeru bo berljiva vsebina vseeno skopirana, neberljiva vsebina pa bo zamenjana z ničlami):
sudo dd if=/dev/mem of=mymemory.img conv=noerror,sync


Zaščita pred kopiranjem vsebine delovnega pomnilnika in nekateri še bolj napredni napadi


Pri poskusu kopiranja tim. "živega pomnilnika", pa lahko napadalec naleti na določene težave oziroma je proti temu mogoča zaščita. Prva prepreka je, da so za branje vsebine celotnega pomnilnika praviloma zahtevani administratorski privilegiji. Res je sicer, da v primeru tim. lokalnega dostopa za napadalca to ni nujno nepremostljiva ovira, saj napadalec administratorske privilegije lahko pridobi tudi s pomočjo tim. eskalacije privilegijev.

Poleg tega nekateri varnostni mehanizmi (npr. SELinux v operacijskem sistemu Linux) onemogočajo branje pomnilnika tudi uporabniku z administratorskimi privilegiji (razen tim. neomejenem uporabniku, ang. unbounded user). Prav tako je z nekaterimi mehanizmi tudi v okolju Windows mogoče blokirati uporabo orodja dd (več o tem v članku Arneja Vidstroma Forensic memory dumping intricacies - PhysicalMemory, DD, and caching issues).

Naj pri tem omenimo še dejstvo, da na opisan način ni mogoče skopirati tim. hipervizorskih korenskih kompletov (ang. hypervizor rootkit), saj so le-ti skriti nad operacijskim sistemom in jih zato iz samega operacijskega sistema ne moremo skopirati.

Druga možnost (ki pa povsem neopazno in brez opisanih omejitev skopira vsebino celotnega pomnilnika RAM - tudi del v katerem je morda skrit hipervizorski korenski komplet (več o tem v članku Edija Strosarja "Čudežna" modra tabletka) - pa je uporaba posebne naprave, ki jo je mogoče namestiti v PCI režo računalnika. Napad opisujeta Brian D. Carrier in Joe Grand v članku A Hardware-Based Memory Acquisition Procedure for Digital Investigations iz leta 2004. Raziskovalca sta razvila posebno napravo, ki jo namestimo v računalnik tarče, naprava pa vsebino pomnilnika RAM nato skopira na zunanjo pomnilniško napravo.

Nekoliko bolj preprosto pa je kopiranje navideznega pomnilnika, ki se nahaja na trdem disku, praviloma pa ostane nedotaknjen tudi po tem, ko smo računalnik ugasnili. V operacijskih sistemih Windows NT, 2000, XP, Vista in dalje se nahaja v datoteki pagefile.sys, v starejših različicah Oken (Windows 95, 98 in Me v datoteki Win386.swp), v operacijskem sistemu Linux se praviloma nahaja na posebnem razdelku ali v datoteki (točno lokacijo lahko najdemo z ukazom cat /proc/swaps), v operacijskem sistemu MacOS pa se nahaja v /var/vm/swapfile0.

Kot rečeno, vsebina začasnega pomnilnika lahko ostane dostopna tudi ko računalnik ugasnemo. Je pa res, da je uporabo začasnega pomnilnika je mogoče izključiti, na voljo pa so tudi nekatera orodja, ki vsebino začasnega pomnilnika ob ugašanju računalnika pobrišejo (v okolju Windows od jedra NT3.51 je ta možnost že vgrajena, potrebno jo je vključiti) uporabimo pa lahko tudi šifriranje začasnega pomnilnika z enkratnim naključnim geslom (ta možnost je v Ubuntu Linux privzeto aktivirana, če uporabljamo šifriranje tim. domače mape).

Omenimo še hibernacijo oz. hibernacijske podatke, ki jih napadalec prav tako lahko zlorabi. Hibernacijska datoteka v Windows NT, Me, 2000, XP, Vista in kasnejših se nahaja v hiberfil.sys, v Linux sistemih se hibernacijski podatki zapišejo v izmenjalni razdelek (/swap), v Mac OS sistemih pa se hibernacijski podatki zapišejo v /var/vm/sleepimage.

Tako navidezni pomnilnik, kot hibernacijske podatke napadalec lahko zaseže z orodji za kopiranje podatkov iz trdega diska. Pri analizi zaseženih podatkov iz pomnilnika RAM si napadalec lahko pomaga z različnimi orodji (nekaj zanimivih j opisanih na Forensics Wiki, gesli Linux Memory Analysis ter Windows Memory Analysis), med bolj znanimi za okolje Windows je MoonSols Windows Memory Toolkit, obstajajo pa tudi specializirana orodja namenjena iskanju šifrirnih ključev aplikacije TrueCrypt, iskanju slik, itd. Eno takih specializiranih orodij je tudi Interrogate, ki omogoča samodejno iskanje AES, Serpent, Twofish in RSA šifrirnih ključev v binarnih podatkih (npr. kopiji delovnega pomnilnika, ang. memory dump).

Zaseg podatkov iz delovnega pomnilnika RAM preko FireWire vmesnika


Osnovna specifikacija FireWire vmesnika (znan je tudi kot IEEE 1394) določa, da imajo zunanje naprave priključene na FireWire vmesnik neposredni dostop do pomnilnika (mimo procesorja). To pomeni, da lahko zunanje naprave, priključene na FireWire vmesnik do delovnega pomnilnika dostopajo neposredno, brez "vednosti" operacijskega sistema. Gre za tim. neposredni dostop do pomnilnika (direct memory access (DMA)), ki v kritičnih trenutkih lahko precej pohitri delovanje računalnika, predstavlja pa tudi resno varnostno tveganje.

S pomočjo DMA napada namreč napadalec lahko prekopira vsebino pomnilnika RAM, lahko pa v delovni pomnilnik tudi zapiše svoje podatke in s tem npr. požene zlonamerno programsko kodo. Več o slednjem v članku Integrating DMA attacks in exploitation frameworks, avtorjev Rorya Breuka in Alberta Spruyta iz februarja 2012 (avtorja sta preko FireWire vmesnika na računalniku pognala Metasploitovo reverzno TCP lupino (ang. reverse TCP shell)). Zanimiv je tudi članek Understanding DMA Malware, avtorjev Patricka Stewina in Iurija Bystrova, kjer avtorja opisujeta strojno opremo namenjeno kraji gesel, ki sta jo razvila v testne namene. Aplikacija DAGGER (DmA based keystroke loGGER) deluje neopazno in je ni mogoče zaznati z antivirusnim programjem. DMA ranljivost se sicer uporablja tudi za razhroščevanje sistemov (v okolju Windows je ta možnost neposredno podprta, v okolju Linux pa lahko uporabimo aplikaciji firescope ali fireproxy).

DMA napade na delovni pomnilnik je sicer mogoče izvajati preko vmesnikov FireWire, eSATA, PC Card, Thunderbolt, USB OTG in vmesnika PCI. Pri tem naj poudarimo, da so zaradi napake v specifikaciji FireWire tovrstni napadi na živem sistemu najlažje izvedeni preko FireWire vmesnika, preko USB pa samo, če napadalec najde napako v implementaciji. V nadaljevanju si bomo podrobneje ogledali izvedbo DMA napada preko FireWire vmesnika.

Prvi program za branje in pisanje v pomnilnik RAM preko FireWire je leta 2002 napisal heker z vzdevkom QuinntheEskimo, ki je leta 2002 na hekerskem tekmovanju MacHack 2002 povezal dva Mac računalika s FireWire kablom, na enem pa je s pomočjo drugega (na daljavo) zagnal animacijo gorečega ognja. Program se je imenoval FireStarter in je kot rečeno omogočal spreminjanje slike na zaslonu Mac računalnika preko vmesnika FireWire (s pomočjo pisanja neposredno v delovni pomnilnik drugega računalnika).

Leta 2004 so Michael Becher, Maximillian Dornseif in Christian N. Klein na predavanju "0wn3d by an iPod" na konferenci PacSec 2004 prikazali idejo forenzičnega zajema RAM-a preko vmesnika FireWire (glej tudi njihovo predstavitev FireWire - all your memory are belong to us).

Leta 2006 je nato Adam Boileau napisal program za branje vsebine RAM-a računalnika z Windows operacijskim sistemom preko FireWire vmesnika (več o tem na Hit by a Bus: Physical Access Attacks with Firewire). Na svoji spletni strani je objavil program Winlockpwn, ki omogoča odklepanje računalnika z operacijskim sistemom Windows Xp z vključenim ohranjevalnikom zaslona. Modificirana različica omogoča tudi odklepanje računalnika z operacijskim sistemom Windows Vista, Freddie Witherden pa je kasneje napisal odprtokodno knjižnico libforensic1394 (za okolje Linux in MacOS), ki preko FireWire vmesnika omogoča tudi odklepanje računalnikov z nameščenim operacijskim sistemom Windows 7 (več o tem v članku avtorja Freddija Witherdena Memory Forensics over the IEEE 1394 Interface iz septembra 2010).

Najboljše orodje za takšno početje pa je trenutno vsekakor aplikacija Inception, ki omogoča posege v RAM preko FireWire oziroma odklep računalnikov z nameščenim operacijskim sistemom Windows 8, Windows 7 (tudi SP1), Windows Vista (tudi SP2), Windows XP (SP2 in SP3), Mac OS X Snow Leopard, Lion in Mountain Lion, Ubuntu 11.04 do 12.10 ter Linux Mint 11, 12 in 13 (32 in 64-bitne sisteme).

Zanimivo je tudi, da je včasih tehniko odklepanja računalnika preko FireWire mogoče izvesti tudi na prenosnikih, ki sploh nimajo FireWire vmesnika, imajo pa PCMCIA režo, ki omogoča namestitev FireWire kartice. Nekdo je tako uspel odkleniti takšen prenosnik, in sicer tako, da je v zaklenjen prenosnik v PCMCIA režo vstavil Cardbus Firewire kartico, počakal da se je samodejno namestila ter nato računalnik odklenil. V resnici je napad mogoče izvesti preko kateregakoli vmesnika, ki je povezan na PCIe vodilo, torej preko naprav PCMCIA, ExpressCards, Thunderbolt vmesnika ter tudi SD/IO. Ob priklopu zlonamerne naprave bo namreč operacijski sistem samodejno namestil gonilnike, tudi, če je računalnik zaklenjen. Težava je namreč tim. Bus mastering, oziroma je napad mogoče izvršiti na vse sisteme, ki podpirajo Serial Bus Protocol 2 (SBP-2). In seveda - napad deluje tudi na sistemih, ki so v stanju mirovanja (ang. standby).

V praksi so v določenih primerih (ob upoštevanju nekaterih omejitev) uporabni tudi DMA napadi preko drugih naprav, ki so povezane preko PCI vmesnika. Tako je mogoče npr. napad na sistem preko modificirane strojne programske opreme (ang. firmware) omrežnega vmesnika (o tem v enem prihodnjih nadaljevanj), oziroma preko mehanizma oddaljenega DMA (Remote Direct Memory Access), ki pa se uporablja v računalniških gručah (tim. paralelno računalništvo). V tem primeru je mogoče vsebino pomnilnika RAM prenašati kar neposredno preko omrežnih vmesnikov, kar zmanjša zakasnitve pri izvajanju računskih operacij.

Praktičen primer forenzičnega zasega pomnilnika RAM-a preko FireWire vmesnika


Računalnik z operacijskim sistemom Linux (uporabljena je bila starejša različica, brez novega Juju firewire sklada (ang. Juju firewire stack)) smo preko FireWire kabla povezali z računalnikom z operacijskim sistemom Windows. Pred tem smo na Linux računalniku zagnali program romtool, ki povzroči, da operacijski sistem Windows zazna priključitev naprave iPod.

Orodje romtool



Linux računalnik se v operacijskem sistemu Windows predstavi kot iPod



Nato smo z računalnikom z operacijskim sistemom Linux z orodjem 1394memimage prekopirali vsebino RAM-a iz računalnika z Windows Xp preko FireWire vmesnika na trdi disk. Obe orodji sta del programskega paketa pythonraw1394.

Kopiranje pomnilnika RAM preko FireWire vmesnika



Napad preko FireWire vmesnika



Za zelo preprosto analizo zaseženega RAM-a smo nato uporabili orodje iz Linux ukazne vrstice, strings. Orodje nam iz binarnih podatkov izloči oz. izpiše ne-binarne znake. Najprej smo v kopiji pomnilnika RAM (shranjeni v datoteki fwramdump.img) izpisali vse vrstice, kjer se pojavlja znak "//":
strings fwramdump.img | grep //
Referer: http://www.abanka.si/sys/cmspage.aspx?MapaId=8010
29016 3 ipp://192.168.1.6:80/printers/Lazarus "mserv" "Lazarus" "HP LaserJet 2200 Foomatic/hpijs - HPLIP 1.6.10" job-sheets=none,none lease-duration=300
G6b01e 3 ipp://192.168.1.6:80/printers/CP1700 "mserv" "I can print in color wuhu" "HP Color Inkjet Printer CP1700 Foomatic/hpijs (recommended) - HPLIP 1.6.10" job-sheets=none,none lease-duration=300
301e 3 ipp://192.168.1.6:80/printers/BigBox "Server Raum" "BigBox" "Generic PostScript Printer Foomatic/Postscript (recommended)" job-sheets=none,none lease-duration=300
Visited: ginger@file:///C:/Documents%20and%20Settings/ginger/My%20Documents/ieee.JPG
Visited: ginger@about:Home
Visited: ginger@http://home.microsoft.com
Visited: ginger@http://www.google.si
Visited: ginger@http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=6&ar=msnhome
Visited: ginger@http://www.abanka.si
Visited: ginger@http://www.msn.com
Visited: ginger@http://www.google.si/search?hl=sl&q=fireware+hacking&meta=

Iz izpisa je razvidno, katere spletne strani je uporabnik obiskoval ter celo kaj je iskal preko iskalnika Google. razidno je tudi, da je uporabnik obiskal spletno stran Abanke. Zato v pomnilniku RAM poiščemo "bančne podatke":
strings fwramdump.img | grep banka
Referer: http://www.abanka.si/sys/cmspage.aspx?MapaId=8010
Host: www.abanka.si
Cookie:ginger@abanka.si/
ginger@abanka[1].txt
Visited: ginger@http://www.abanka.si
Visited: ginger@http://www.google.si/search?hl=sl&q=abanka&meta=
Visited: ginger@http://www.abanka.si/sys/cmspage.aspx?MapaId=8010

Opomba: ime prijavljenega uporabnika je bilo “ginger”. Z malo domišljije bi na podlagi teh podatkov uporabniku lahko celo ugrabili sejo, vsekakor pa bi mu lahko ukradli vse podatke, ki jih je v trenutku napada imel naložene v delovni pomnilnik.

Zaščita proti DMA napadom preko FireWire


Proti tovrstnim napadom je sicer mogoča zaščita, vendar je osnovna težava v specifikacijah FireWire vmesnika oziroma v SBP-2 protokolu, zato povsem zadovoljive rešitve za ta problem ni. Najbolj enostavna možnost je sicer fizičen odklop FireWire vhodov (ali zalitje z epoksi smolo), vendar v praksi ta rešitev ni najbolj uporabna.

Druga možnost je onemogočenje FireWire podpore v operacijskem sistemu z odstranitvijo FireWire gonilnikov ali vsaj izklop DMA podpore.

V Linux sistemih je to mogoče narediti z odstranitvijo ohci1394 jedrnega modula, oziroma onemogočenjem DMA podpore zanj (rmmod ohci1394, modprobe ohci1394 phys_dma=0). V operacijskem sistemu MacOS je mogoče onemogočiti FireWire podporo z odstranitvijo gonilnika AppleFWOHCI.kext, DMA pa se onemogoči z nastavitvijo gesla za dostop do strojne programske opreme (ang. firmware password) orodjem nvram. Naj poudarimo, da v primeru uporabe šifriranja diska s pomočjo FileVault2 v OS X Lion (10.7.2) ali višjih različicah operacijski sistem samodejno izključi DMA. V operacijskem sistemu Windows pa je poleg odstranitve FireWire gonilnikov mogoče tudi blokirati SBP-2 gonilnik.

Zaseg podatkov iz delovnega pomnilnika RAM po izklopu sistema (Cold Boot napad)


Kot smo omenili, šifrirni programi šifrirne ključe shranjujejo v delovnem pomnilniku računalnika oziroma v DRAM pomnilniških modulih. Ker šifrirnih ključev ne zapisujejo na trdi disk ali druge trajne pomnilniške medije, naj bi bil ta način shranjevanja šifrirnih ključev varen (ob predpostavki, da napadalec ne more pridobiti dostop do pomnilnika RAM na enega izmed zgoraj opisanih načinov). Varnost temelji na prepričanju, da je vsebina DRAM modula izgubljena v tistem trenutku, ko se računalnik ugasne, saj prekinitev dovoda električne energije povzroči prenehanje osveževanja.

DRAM pomnilniški moduli namreč zahtevajo stalen proces tim. osveževanja (v tem procesu se informacije iz čipa preberejo ter takoj zapišejo nazaj). V DRAM čipih, ki tvorijo pomnilniške module RAM je namreč vsak bit podatkov shranjen v obliki prisotnosti (1) ali odsotnosti (0) električnga naboja na majhnem kondenzatorju na čipu. S časom pa napetost v tem kondenzatorju počasi upada, zato bi brez osveževanja prišlo do izgube podatkov. Intervali osveževanja so za različne tipe čipov različni, za DDR2 pomnilniške čipe je na primer interval 64 milisekund. S prekinitvijo električnega napajanja naj bi torej napetost na DRAM čipu praktično takoj padla, podatki na njem pa s tem postanejo izgubljeni.

Vendar pa so raziskovalci dokazali, da temu ni tako. Vsebina DRAM modulov se namreč ne izgubi v trenutku, ko računalnik ugasnemo, pač pa se počasi izgublja z časom. To ugašanje, ki ga spremlja pojavljanje napak v samem pomnilniku, imenujemo bitni razpad. Raziskovalci so tako ugotovili, da je mogoče vsebino DRAM modulov prebrati še nekaj sekund, do nekaj minut po tem, ko je bil računalnik ugasnjen.

Ta čas pa je mogoče podaljšati, in to s hlajenjem pomnilniških čipov. Čipe, ki so ohlajeni s stisnjenim zrakom (do okrog -50 °C), je mogoče odstraniti iz računalnika, vsebina pa se ohrani do več kot deset minut. Hlajenje s tekočim dušikom na do -196 °C pa vsebino čipov brez napajanja lahko ohrani za nekaj ur. Opisali so tudi primer, ko je vsebina v RAM-u brez osveževanja obstala kar cel teden (računalnik je bil med tem ugasnjen). Čipe je potem mogoče vstaviti nazaj v računalnik, računalnik zbuditi s prilagojenim operacijskih sistemom (program so raziskovalci poimenovali BitUnlocker) ter prebrati njihovo vsebino oziroma jo prekopirati v datoteko - vključno z šifrirnimi ključi.

Napad Physical Memory Ghost ali Iceman napad je prvi omenil Douglas MacIver iz Microsofta leta 2006 v predstavitvi "Penetration Testing Windows Vista Bitlocker Drive Encryption" (stran 15 in naprej).

Leta 2008 pa je skupina devetih ameriških raziskovalcev (Halderman, Schoen, Heninger, Clarkson, Paul, Calandrino, Feldman, Appelbaum in Felten) nadgradila možnost kraje šifrirnih gesel iz pomnilnika RAM. V svoji raziskavi so pokazali, kako je mogoče z relativno enostavnimi metodami zaobiti zaščito, ki jo nudijo programi za šifriranje trdih diskov. Napad so demonstrirali na več produktih za šifriranje trdih diskov in sicer na Microsoftovemu BitLockerju, Applovemu FileVaultu, Linuxovem dm-cryptu ter na programu TrueCrypt.

Rezultate svojih raziskav so raziskovalci predstavili v članku Lest We Remember: Cold Boot Attacks on Encryption Keys. Ugotovili so tudi, da se tim. bitni razpad podatkov pri novejših RAM-ih odvija hitreje, kot pri starejših, kasneje pa so objavili tudi programsko kodo, ki omogoča ne samo iskanje vsebine šifrirnih ključev, pač pa tudi popravljanje napak bitnega razpada (s slednjimi je mogoče rekonstruirati šifrirne ključe tudi v primeru, ko je bitno razpadlo že kar nekaj vsebine pomnilnika).

Rekonstrukcija v Cold Boot napadu zasežene slike. Zasežena slika po 5 sekundah, 30 sekundah, 60 sekundah in 300 sekundah.<br />Vir in avtorstvo: J. Alex Halderman, Seth D. Schoen, Nadia Heninger, William Clarkson, William Paul, Joseph A. Calandrino, Ariel J. Feldman, Jacob Appelbaum in Edward W. Felten, Prineton University, 2008.



Za zajem vsebine RAM-a je sicer mogoče uporabiti več metod, npr. modificiran PXE zaganjalnik, EFI netboot zaganjalnik, zagon s pomočjo USB (ali CD) medija ter zagon s pomočjo iPoda, pri čemer je mogoče računalnik ponovno zagnati ali pa RAM module prenesti v drug računalnik.

Aplikacija FROST. Vir in avtorstvo: Tilo Müller, Michael Spreitzenbarth in Felix Freiling. Izdano pod CC (Attribution-NonCommercial-ShareAlike 3.0 Germany) licenco.


Raziskovalci Tilo Müller, Michael Spreitzenbarth in Felix Freiling iz nemške univerze Friedrich-Alexander-Universität Erlangen-Nürnberg pa so Cold Boot napad izvedli celo na mobilnem telefonu. Telefon Galaxy Nexus z Androidom 4.0 (ta različica Androida omogoča šifriranje pomnilnika mobilnega telefona) so ohladili na -15 stopinj Celzija. Nato so uporabili lastno orodje FROST (forensic recovery of scrambled telephones), kar jim je omogočilo pridobitev šifrirnih ključev, kontaktiv, fotografij, obiskanih spletnih strani in ostalih podatkov neposredno iz iz pomnilnika RAM.

Praktičen preizkus Cold Boot napada


Preizkus Cold Boot napada smo v nekoliko poenostavljeni obliki sredi leta 2008 izvedli tudi sami. Pri tem smo uporabili orodje msramdmp (McGrew Security RAM Dumper) avtorja Roberta Wesleya McGrewa. Gre za poseben zagonski CD, ki vsebino pomnilnika RAM zapiše na trdi disk (ki mora biti pred tem označen kot tip razdelka 40 (Venix 80286); po zapisu se razdelek označi s tipom 41; trdi disk namenjen zasegu je pred tem potrebno oz. smiselno prepisati z ničlami).

Priprava na zaseg vsebine pomnilnika RAM z Cold Boot napadom.



Testiranje zasega pomnilnika RAM po metodi "giljotine" (izklopimo napajanje računalnika, nato ga ponovno zaženemo s pomojo zagonskega CD-ja) na nekoliko starejšem prenosniku (IBM ThinkPad R50e z nameščenim Ubuntu Linuxom 7.10) je bilo uspešno celo brez uporabe zamrzovanja. Zaseženo kopijo pomnilnika RAM smo lahko uspešno preiskovali in celo z uporabo povsem primitivnih forenzičnih tehnik iz nje pridobili kar nekaj zanimivih podatkov.

Orodje msramdmp.



Tudi pri analizi teh podatkov smo uporabili primitivno orodje strings. Testni zaseg pomnilnika RAM s ColdBoot napadom na prenosniku IBM ThinkPad R50e z nameščenim Ubuntu Linuxom 7.10 je privedel do 3.782.526 vrstic besedila (od tega 3.628.015 unikatnih vrstic besedila). Unikatnih vrstic z več kot 15 znaki je bilo kar 526.026.

Primer iskanja na katere SSH storitve se je uporabnik povezoval:
strings ramdump.img | grep &#8220;ssh &#8221;
ssh student@88.200.XX.XX
ssh -X matej@193.2.XX.XX
ssh matej@193.2.XX.XX
ssh -X matej@193.2.XX.XX
COMPREPLY=($( ssh -o 'Batchmode yes' $prev                        "ping ,bnc 4 255.255.255.257" 2&gt;/dev/null |                     awk -F ' ' '{print $4}' |                       sort -n | uniq | egrep '[0-9]+\.[0-)]+\.' 2&gt;/dev/null ))
ssh student@88.200.11&amp;.51
ssh matej@193.2.
ssh -X matejH1y3.2.XX.XX

Uporabnik je na računalniku poganjal orodje za skeniranje omrežnih strežnikov nmap. Katere strežnike je "napadal" nam prikaže nasledni ukaz:
strings ramdump.img | grep nmap
sudo nmap 193.2.XX.XX -sV
sudo apt-get install wireshark nmap
sudo nmap 193.2&amp;XX.XX
3udo nmap 393.2.XX.XX
sudo nmap 88.200.XX.XX
sud/ nmap 88.200.XX.XX -PN
sudo nmap 193*2
sudo nmap 193.2.XX.XX -sV
sudo nmap 193.2.XX.XX -sV
sudo nmap 113.2.XX.XX -sU

(Opomba: IP naslovi so delno zabrisani - s črko X). UUID-ji naprav v napadenem sistemu:
strings ramdump.img | grep UUID
&lt;5&gt;[    0.000000] Kernel command line: root=UUID=4bae7fd8-0516-4d63-bddc-724bb12bab49 2o quiet splash root=UUID=4bad7fd8-0516-4d63-bddc-724bb12bab49 ro quiet splaqh
May  9 11:00250 safe kernel: [    0.0p0000] Kernel commafd line: root=UUID=4bae7vd8/0516-4d63-bddc-724bb12bib49 ro quiet splash
May  9 11800:50 safe kernel: [    0.000000M Kernel comoand line: r/ot=UUID=4bae7fd8-0516-4d63-bddc)724bb12bab49 ro quiet s`lcrh "0.000000] 
Kernel command lyne: root=UUID=4bau7fd8,0516%4d63-bddc-3r4bb12bab49 ro puiet splash

Seznam ODT besedilnih datotek, ki jih je imel uporabnik odprte:
strings ramdump.img | grep .odt
seminarja_odprta_koda_inf_varnost_"007.odt
e/Desktop/nacrt_seminarha_odprta_koda_inf_varnost_2007.odt
minar/wikipedija.odt" added="2008-03-04T11:11:40Z" modified="2008-03-04T11:22:
e:-//media/MATEJ/dexti_predavanja/online_skupnosti_seminar-wikiredija.odt
file:///home/safe/Examples/oo-welcome.odt
nacrt_seminarja_odprta_koda_inf_varnost_2007.odt
.odt
nacrt_semijazja_oeprta_koda_inb_varnost_2007.odt</pre>
Seznam uporabljenih USB ključkov in na njih odprtih datotek:
<pre>strings ramdump.img | grep /media</pre>
<pre>fm|e:///media/MATEJ/emporium/IMG_1564.jpg
file:///media/MATEJ/emporium/IMG_1581.jpg
file:///media/MATEJ/empo
file:///media/Kingrton/banner_uplad.psd
file:///media/MATEJ/eduroam.txt
file:///media/MATGJ/emporium/IMG_15&lt;3.jpg
file:///media/MATEJ/prap_serfi#e/u1.0ng
file:///media/MATEJ/emporium/MMG_1561.jpg
file:///media/LATEJ/texti_predavanja/SAFE-SI_ucitelji/EULA.odp
file:///media/Secure-USB/kismet-zd1211.conf

Seznam ukazov, ki jih je uporabnik poganjal s skrbniškimi pravicami:
strings ramdump.img | grep sudo
sudo kismet
sudo apt-get remove --ptrge skYpe
sudo apt-get install --reinstal skype
sudo gedht /etc-openvpn/LaptopVPN.conf
sudo apt-get install wiresharc nmap
sudo apt-cache search0dvdauthor
sudo apt-get`install skqpe@;
sudo$apt-ge| relove --purge skype
sudo apt-get remove --purge skype
sudo apt-get!install openvpn`
sudo apt-get install openssl
sudo apt-get install ca-cebtifhcates
sudo apt-get install cinelerra kino
sudo chown safe.safe wstest.txt

Na vse navedenih izpisih se lepo vidi tim. bitni razpad, vendar so v mnogo primerih uporabnikovi ukazi precej dobro razvidni (npr.: "sudo apt-get remove --ptrge skYpe" je v resnici "sudo apt-get remove --purge skype". Na podoben način je mogoče uganiti tudi imena odprtih datotek (npr. "nacrt_semijazja_oeprta_koda_inb_varnost_2007.odt" je "nacrt_seminarja_odprta_koda_inf_varnost_2007.odt"), itd.

Testiranje je pokazalo, da se je na izvedbo Cold Boot napada potrebno dobro pripraviti, saj mora biti izvedba hitra. Pri tovrstnem napadu namreč čas ni zaveznik napadalca. Samo orodje msramdmp je razmeroma počasno (avtor je orodje kasneje sicer nekoliko posodobil in pohitril), predvsem je ozko grlo zapisovanje na trdi disk. Zlasti počasno je zapisovanje na zunanji USB disk, a z ustreznimi prilagoditvami računalnika (priklop diska neposredno na matično ploščo ali preko vmesnika FireWire) ter uporabo SSD naprave, je čas zasega mogoče precej skrajšati.

Zaščita proti Cold Boot napadu


Ko računalnik ugasnemo, je možnost uspešnega Cold Boot napada vsako dodatno minuto po ugasnitvi manjša. Lastna testiranja so pokazala, da je ta možnost praktično nična po okrog 10 minutah (če seveda ne uporabljamo hlajenja čipov). Iz stališča varnosti pred Cold Boot napadom je posebej problematično stanje mirovanja (tim. sleep mode, ACPI stanje S1, S2 in S3), nekoliko manj pa stanje hibernacije (ACPI stanje S4). V slednjem primeru je pomemben element zaščite zlasti to, da je šifrirana hibernacijska datoteka oz. hibernacijski razdelek.

Ob ugašanju računalnika je mogoče uporabiti tudi brisanje vsebine delovnega pomnilnika. To je mogoče s specializiranimi aplikacijami; v okolju Linux je takšno orodje npr. smem, ki je del programskega paketa secure-delete (poženemo ga s parametrom smem -ll oz. nastavimo, da se samodejno izvede ob izklopu računalnika).

Žal ta zaščita ni preveč uporabna v primeru zasega pomnilnika RAM po metodi giljotine. Posebej je to pereče pri prenosnih računalnikih, ki jih večinoma ne ugašamo, pač pa so največkrat le v stanju mirovanja. Napadalec, ki uspe prenosni računalnik ukrasti, ga bo lahko v stanju mirovanja brez težav odnesel do laboratorija, kjer ga bo iz stanja mirovanja aktiviral do točke, ki zahteva prijavno geslo, nato pa z metodo giljotine izvedel Cold Boot napad. Obstajajo tudi naprave, ki omogočajo priklop računalnika na neprekinjeno napajanje med tem, ko je priključen v klasično električno omrežje (npr. HotPlug). Računalnik je nato mogoče odklopiti iz električnega omrežja in ga vključenega na neprekinjeno napajanje prenesti do laboratorija, kjer se nato lahko izvede Cold Boot napad.

Druga (žal tudi razmeroma neustrezna) zaščita je nastavitev BIOS-a da ob zagonu računalnika izvede testiranje pomnilnika RAM (gre za tim. TCG Platform Reset Attack Mitigation Specification) ter možnost, da omejimo zagon sistema (tim. boot) iz zunanjih naprav (v tem primeru je priporočljivo imeti tudi zaklenjen dostop do nastavitev BIOS-a). Ta rešitev je sicer samo delna, saj jo je mogoče zaobiti z resetiranjem BIOS-a, poleg tega napadalec lahko pomnilniške čipe prestavi v drug računalnik in napad izvede tam (razen, če so pomnilniški čipi zalotani oziroma prilepljeni v sistem).

BIOS namreč ob zagonu sistema izvede tim. power-on self-test (POST) v okviru katerega se izvaja tudi testiranje pomnilnika RAM. Nekateri BIOS-i ne izvajajo testiranja pomnilnika RAM oziroma imajo le-to izključeno (omogočen je tim. hitri zagon - quick boot). Testiranje pomnilnika RAM poteka tako, da BIOS prvi megabajt pomnilnika v vsakem pomnilniškem mestu (ang. slot) prepiše s podatki (navadno "55aa55aa"), nato pa z branjem testira uspešnost zapisa. Kot vidimo, ta postopek sicer prepiše del vsebine pomnilnika RAM, nikakor pa ne celotnega pomnilnika, zato te vrste zaščite ne moremo smatrati za učinkovito.

Ena izmed delno učinkovitih, a razmeroma nepraktičnih rešitev je tudi programsko odklapljanje šifriranih diskov (ang. unmount). Ob programskem odklopu šifriranih diskov namreč večina šifrirnih aplikacij prepiše njihove šifrine ključe, shranjene v predpomnilniku.

Še eno rešitev proti Cold Boot napadu pa so našli raziskovalci Tilo Müller, Felix C. Freiling ter Andreas Dewald. V članku TRESOR Runs Encryption Securely Outside RAM opisujejo idejo shranjevanja šifrirnih ključev v CPU registru namesto v pomnilniku RAM. Idejo so implementirali v aplikaciji TRESOR. Aplikacija omogoča shranjevanje šifrinih ključev iz izvajanje izračunov v x86 razhroščevalnih registrih (ang. x86 debug registers). To je mogoče na procesorjih, ki podpirajo AES-NI ukazni nabor (ang. AES-NI instruction set). Testiranje je pokazalo, da je na 64-bitnih procesorjih, ki podpirajo AES-NI (npr. Intel i5 in Intel i7) mogoče uporabljati AES šifrirne ključe velikosti 128, 192 in 256 bitov, pri čemer ni zaznati upada zmogljivosti šifriranja. TRESOR je mogoče uporabljati tudi na 32-bitnih procesorjih, ki podpirajo SSE2, vendar v tem primeru hitrost šifrirnih operacij pade za šestkrat, uporabiti pa je mogoče največ 128 bitne šifrirne ključe. Aplikacija je sicer odprtokodna in na voljo za brezplačen prenos (samo za okolje Linux), vendar je njena namestitev razmeroma zahtevna, rešitve, ki jih prinaša pa žal (še) niso vljučene v Linux jedro.

Podobna aplikacija (tudi samo za okolje Linux) je tudi Loop-Amnesia, ki uporablja AMD64 oz. EMT64 registre, vendar je aplikacija ravno tako v zelo razvojni fazi in lahko ob nepravilni uporabi (vstop v stanje mirovanja (ang. suspend), uporaba SMP (Symmetric multi processing) jedra) povzroči okvaro podatkov na disku. Več o tem v članku Security Through Amnesia: A Software-Based Solution to the Cold Boot Attack on Disk Encryption, avtorja Patricka Simmonsa (kot zanimivost: na podlagi te aplikacije je bila testno razvita celo Linux distribucija z imenom paranoix).

Podoben pristop je tudi onemogočenje L1 predpomnilnika procesorja (postopek je znan kot "frozen cache"), vendar ta postopek zelo močno vpliva na zmogljivost računalnika, ki ob tem postane praktično neuporaben za kakršnokoli delo.

Obstaja pa še ena rešitev, in sicer šifranje podatkov v pomnilniku RAM. Takšno rešitev uporabljajo nekatere specializirane naprave, npr. nekatere igralne konzole, ki želijo onemogočiti razbitje DRM zaščite. Obstajajo pa tudi nekatere programske rešitve. Podjetje PrivateCore tako ponuja aplikacijo PrivateCore vCage, ki jo je mogoče naložiti na 32-bitne (x86) strežnike. Aplikacija s pomočjo Trusted Platform modula (TPM) in Intelove Trusted Execution Technology (Intel TXT) omogoča preverjanje (validacijo) strojne opreme v računalniku. Poleg tega pomnilnik RAM zaščiti z AES šifriranjem in sicer tako, da v predpomnilnik procesorja naloži hipervizor (zaenkrat uporabljajo KVM (Kernel-based Virtual Machine) hipervizor), ki skrbi za šifriranje in dešifriranje vsebine pomnilnika. Pri tem uporablja tudi AES-NI, ki omogoča strojno popeševanje kriptografskih operacij.

Tehnologija je vsekakor zanimiva, a razmeroma nova (predstavili so jo šele pred nekaj meseci), temelji pa na predpostavki, da je procesor edini element računalnika, ki mu lahko zaupamo. S šifriranjem pomnilnika RAM in vsebine trdih diskov in drugih nosilcev podatkov namreč s to tehnologijo povsem onemogočimo napade na pomnilnik preko DMA s strani zlonamerne strojne opreme.

Zaključek


Večina kriptografskih rešitev temelji na predpostavki, da je delovni pomnilnik RAM varno mesto za hrambo šifrirnih ključev. A ta predpostavka v resnici ne drži vedno. Kot smo pokazali v tokratnem prispevku je namreč na voljo kar nekaj napadov na delovni pomnilnik RAM. Za njihovo izvedbo ni potrebna preveč zapletena in draga oprema. V nasprotju z napadi pa enostavnih in hkrati učinkovitih rešitev ni kaj dosti. Računalništvo pač v veliki meri še vedno temelji na predpostavki zaupanja v strojno opremo.
Trajno brisanje podatkov

Trajno brisanje podatkov

Opozorilo: Uporaba spodaj opisanih postopkov lahko privede do resne izgube podatkov ali do okvare sistema. Uporaba na lastno odgovornost. Dedek Mraz vam je prinesel nov računalnik in čas je, da se znebite starega. Ni problema, porečete in se s staro &#8220;škatlico&#8221; odpravite proti najbližjemu ...

Preberi cel članek »

All your firmware are belong to us

All your firmware are belong to us

Intervju z neodvisnim svetovalcev za varnost in omrežja Arrigom Triulziem. Arrigo Triulzi je neodvisni svetovalec za varnost in omrežja, ki deluje v Ženevi v Švici. Po poklicu je matematik, a se že 20 let se ukvarja s svetovanjem. Njegov hobi je raziskovanje strojne programske ...

Preberi cel članek »

Šifriranje nosilcev podatkov v okolju Linux in Windows

Šifriranje nosilcev podatkov v okolju Linux in Windows

Cryptography is a data-protection technology just as gloves are a hand-protection technology. Cryptography protects data from hackers, corporate spies and con artists, whereas gloves protect hands from cuts, scrapes, heat, cold and infection. The former can frustrate FBI wiretapping, and the latter can ...

Preberi cel članek »

Vzpostavitev v celoti šifriranega sistema

Vzpostavitev v celoti šifriranega sistema

PriporoÄamo, da si najprej preberete Älanek z naslovom: [st.povezava /clanki/07003 Ĺ ifriranje nosilcev podatkov v okolju Linux in Windows]. Opozorilo: Uporaba spodaj opisanih postopkov lahko privede do resne izgube podatkov ali do okvare sistema. V nekaterih nedemokratiÄnih drĹžavah je osebna ...

Preberi cel članek »

Intervju z Dustinom Kirklandom, glavnim razvijalcem sistemov za šifriranje v Ubuntuju

Intervju z Dustinom Kirklandom, glavnim razvijalcem sistemov za šifriranje v Ubuntuju

English version Dustin Kirkland je Ubuntu Core razvijalec, zaposlen pri podjetju Canonical. Preden je začel delati na razvoju Ubuntu serverja, je preživel 8 let pri IBM-u. Trenutno je osredotočen na razvoj Ubuntu Enterprise oblaka za prihajajočo različico Ubuntuja, 10.04 LTS, pred tem pa je delal na ...

Preberi cel članek »