DMA põhistest rünnetest

FireWire pilt Wikimedia Commons-ltMinu eelmine artikkel kettakrüpto lahti muukimise teemal tuletas lugejatele meelde, et  tegelikult on võimalik mälus ja ketastel olevatele andmetele ligi pääseda ka arvuti töö ajal. Ning seda lausa nii, et operatsioonisüsteem sellest midagi ei tea. See tähendab, et arvutist andmetele ligipääsu saamiseks tuleb ründajal ühendada oma arvuti (või spetsiaalselt programmeeritud kettaseade) rünnatava arvutiga näiteks FireWire või eSata liidese vahendusel (või ühendada Express Card, PCI card, vms.) rünnatava arvutiga.

Rünnak põhineb teadmisel, et FireWire, eSata ja Express Card saavad otse rääkida mälukontrolleriga, mis annab neile võimaluse teha pöördusi mäluseadmete poole kesksest protsessorist (CPU) ja/või operatsioonisüsteemist mööda minnes (sellest ka nimetus Direct Memory Access ehk DMA). Seega on tegemist operatsioonisüsteemist sõltumatu ründega (vaata ka Adam Boileau esitlust siinipõhiste rünnete kohta), peaaegu.

Taust

Arvuti komponendid ja lisaseadmed on tavaliselt ühendatud kas paisutussiiniga (Expansion Bus) või välissiiniga (Peripheral Bus). Paisutussiiniga on ühendatud kõik arvutisse käivad lisakaardid (nt. graafikakaart) ja see on tavaliselt ilma korpust avamata füüsiliselt ligipääsmatu. Erandiks on PC Card (PCMCIA), Express Card, FireWire ja eSATA liidesed, mis on lihtsalt ligipääsetavad ka ilma arvuti korpust avamata. Välissiiniga on ühendatud enamik lisaseadmeid, sealjuures USB liidesega ühendatud seadmed. Välissiiniga suhtlemine toimub kontrollitult (tavaliselt operatsioonisüsteemi poolt) klient-server mudeli põhjal, paisutussiinil on aga kõik seadmed võrdsed (suhtlemine käib vaba adresseerimisega kõigi seadmete vahel). Seega saavad kõik paisutussiini seadmed suhelda kõigi teiste sealsete seadmetega ilma operatsioonisüsteemi juhtimiseta. Sealjuures saavad nad ligi ka muutmälule ja teistele mäluseadmetele (nt. kõvaketastele), mis on selle siiniga ühendatud.

Kaitse rünnaku vastu

Õnneks ei ole rünnaku vastu kaitsmine võimatu. Nimelt peab operatsioonisüsteem (milleks võib olla ka BIOS) FireWire kontrollerile ütlema, mis seadmed on ühendatud ja millised on nende volitused (nt. millises aadressivahemikus tohib seade tegutseda). Tihtipeale operatsioonisüsteem seadmetele piiranguid ei tee (ja vanemate FireWire kontrollerite puhul ei saagi teha), mistõttu on rünnak tihti lihtne. Uuemad operatsioonisüsteemid (sh. Windows XP ja uuemad) aga otsustavad näiteks piirata DMA ligipääsu seadmetel, kuid mõnel juhul annavad seadmetele ka lihipääsu mälule ja teistele seadmetele. Üks levinumaid seadmeid, millele peaaegu piiramatu adresseerimisõigus antakse, on välised kettaseadmed, mille kasutamise kiirus tänu DMA-le tõuseb tohutult.

Seega saab seda sorti rünnete eest end kaitsta, kui keelata vastavaid liideseid kasutavate seadmete kasutamine. Näiteks on mõistlik sülearvutis keelata FireWire ning lülitada see sisse ainult siis, kui te seda ise kasutada soovite (nt. video kaamerast arvutisse tõmbamiseks või oma meediapleieri sünkroniseerimiseks).

Windows

FireWire kontrolleri välja lülitamineWindowsis saab FireWire välja lülitada järgmiselt:

  1. Avage Seadmehaldur (Device Manager). Selle leiate juhtpaneelilt (Control Panel) Süsteemi (System) dialoogist.
  2. Otsige üles IEEE 1394 siinihosti kontrollerid ja laiendage menüü, vajutades plussile selle ees.
  3. Sealt valige vastav kontroller (IEEE 1394 Host Controller) ja võtke kontekstimenüüst (avatav parema hiireklõpsuga) “Disable” .

Seadme tagasi sisse lülitamiseks tuleb sarnaselt “Disable” valimisele valida menüüst “Enable“.

Märgin veel juurde, et “Disable” asemel “Uninstall” valimine ei ole tõhus kaitse rünnaku vastu, sest Windows paigaldab vaikimisi draiveri uuesti niipea kui seda draiverit kasutav seade ühendatakse arvutiga.

Linux, BSD ja MacOS

Linuxi kaitsmine on keerulisem, sest tihtipeale on FireWire draiver kompileeritud tuuma sisse. MacOS-i kaitsmine on mõnevõrra lihtsam, sest seal on probleemi juba pikemat aega uuritud (FireWire on Apple’i bränd, Sony vastav brand on iLink, standard on IEEE 1394). Seevastu pakuvad Linux, BSD ja MacOS tavaliselt võimalust keelata DMA kasutamine FireWire poolt. Alternatiivselt saate te FireWire draiveri eemaldada, võttes süsteemist maha vastava mooduli või ümberkompileerides tuuma. MacOS-i kaitsmise teemal on pikemalt juttu Thought Palace blogi postituses.

BIOS

Tavaliselt on võimalik FireWire või FireWire DMA ära keelata juba arvuti BIOS-s. Vastav juhend peaks tulema arvutiga kaasa (tihti osana emaplaadi juhendist).

Olukorrast

Ründe teeb huvitavaks selle lihtsus ja arvutite poolne peaaegu olematu kaitse, sest tegemist on jõudlust suurendava arhitektuuri värkasutusega (st. tegemist ei ole arhitektuuri, riistvara ega tarkvara veaga). Kaitse puudumine on mõnevõrra seletatav sellega, et vaikimisi eeldatakse, et ründajatel ei ole füüsilist ligipääsu rünnatavatele arvutitele. Samuti puudus pikka aega lihtne ligipääs paisutusiinile – FireWire ja laienduskaardid on võrdlemisi uued tehnoloogiad, mis on eriti laialdaselt hakanud levima just mobiilsetel arvutitöökohtadel (nt. süle- ja tahvelarvutitel). Samas tähendab nende laialdane levik, et enamik kasutuses olevaid mobiilseid arvuteid on lihtsalt rünnatavad. Kui praegu veel võib juhtmega askeldamist arvuti juures keegi tähele panna, siis tulevik on veelgi hämaram, sest FireWire on nüüd ka juhtmevaba.

One thought on “DMA põhistest rünnetest”

  1. Ärge võrrelge Windowsit linuxi kerneliga, eks?!
    Tänapäeval kasutavad linuxi distributsioonid ka linuxi tuuma kõrval tulemüüri ja kontodel saab lisaseadete kasutusõigused ära võtta..

    Kui linux töötab, siis kõik tegevustest tehakse logi.

    Lisaks veel see, et soovitav on oma arvuti silme all hoida. See on parim kaitse.

Lisa kommentaar

Sinu e-postiaadressi ei avaldata. Nõutavad väljad on tähistatud *-ga