Andmeturve: tehnoloogia, koolitus, reeglid

Selle nädalaseks blogi-temaatikaks on kirjeldada ja analüüsida üht suuremat IT-turvariski ning analüüsida, mida tuleks „Mitnick’i valemi“ kolme komponenti (tehnoloogia, koolitus, reeglid) kasutades ette võtta, et riski maandada.

Üheks kõige laialdasemalt levinud riskiks arvutimaailmas on pahavara levik, olgu selleks siis viirused, trooja hobused, nuhkvara programmid, reklaamijad või muu tarkvara, mis on loodud arvutisüsteemi töö häirimiseks, informatsiooni kogumiseks, mis toob kaasa privaatsuse kao või süsteemi ekspluateerimise, võimaldab autoriseerimata juurdepääsu süsteemi ressurssidele või muul moel võimaldab süsteemi kasutada vääralt. [2]

Nagu AV-Test (Saksamaa küberturvalisuse ettevõte) statistikast näha võib, on uute pahavara programmide kogus iga aastaga suurenenud. Kuna pahavara temaatika on lai, siis keskendun detailsema ülevaate saamiseks ainult juurkomplektidele ning käsitlen kasutaja-taseme juurkomplekti kahte peitetehnikat.

Pilt 1. Pahavara programmide kogus vahemikus 2013 - 2022.
Allikas: [1]
 

Juurkomplekt, juurkratt või käomuna, ingl. keeles rootkit, on kahjurvara, mis omab juurkasutaja õigusi ning käivitub süsteemi igal buutimisel enne operatsioonisüsteemi täielikku laadimist ja on seetõttu raskesti avastatav; sisaldab vahendeid enda failide, protsesside ja kontode varjamiseks, näiteks failihalduri töö muutmise teel; sihtkohad pesitsemiseks on enamasti BIOS, alglaadur, opsüsteemi tuum. [3].


Ajalugu

Juurkomplektide ajalugu algab 1999. aastast, kui Greg Hoglund kirjutas Windows NT OSile suunatud juurkomplekti „NT Rootkit“, mis rakendas varasemalt levinud DOS peitviiruse tehnikat, varjates ennast kasutaja ja AV poolt. Samuti esitavad mõlemad valeandmeid vaba kettaruumi ja mälu kohta. Eeldused esimese juurkomplekti loomiseks pärinevad kahest allikast. Esiteks, 1995. aastal avaldatud raamatus „Advanced Windows ja 1999. avaldatud raamatus „Programming Applications for Microsoft Windows“ selgitas Jeffrey Richter, Windowsi programmeerimisguru, tehnikaid, kuidas nö „vahelt kuulata“ süsteemikutseid ehk kuulata pöördumisi operatsioonisüsteemi tuuma poole rakendusprogrammist või muust kasutaja-ala programmist, mingi süsteemiteenuse saamiseks. Teiseks Useneti foorumites levinud uurimistöö Windowsi kerneli kohta. (Kapoor, Sallam, 2006) Greg Hoglundi uurimus avaldati e-ajakirjas PHRACK ning on tänaseni kättesaadav. [4]

Mõned allikad viitavad esimese juurkomplektina 1986. aastal loodud Brain nimelisele viirusele, mis oli ühtlasi esimene personaalarvutile loodud viirus. Pakistani päritolu vendade Basit Farooq Alvi ja Amjad Farooq Alvi viirus peitis ennast mõnedel andmetel samuti BIOS-es, ennetades skaneerimisi, lugedes eelnevalt skanneerija käsu, ning suunates selle teisele boot-sektorile. [5]

90ndatel ning 2000ndate alguses nägid päevavalgust uued juurkratid, nendest nimekamad HackerDefener (2003), WeaponX (2004, esimene Mac arvutitel), XCP-Aurora (2005), GameGuard (2005), Blue Pill (2006), HE4Hook (2007), Sinowal (2008), Stuxnet (2010), Thunderstrike (2011, Apple). [6]

 

Terminoloogiline ebaühtlus

90ndatel kasutusele tulnud IPS-id (Intrusion Prevention System) tingis asjaolu, et uued juurkratid ja varjamise tehnikaid kasutavad viirused hakkasid manipuleerima andmepakette võrgus,  ja TCP/IP mudelis, protokollis ning BIOS-es. Lisaks sellele, et juurkratid kasutasid varjamistehnikaid, hakkasid seda 2000ndatel üha enam kasutama ka muu pahavara, viirused, ussid ning ka kommertstarkvara (XCP, NProtect). IT turvalisusega tegelevas kogukonnas tekkis selle tõttu diskussioon, milline on juurkomplekti olemus ning kas sellena võib käsitleda igat tarkvara, mis kasutab varjamistehnikaid. [6] Ühtset selgust ei ole senini, kuna pahavara on pidevas muutuses ning juurkratt võib omada mitmeid ühisjooni viiruste või troojalastega.

 

Peitetehnikad ja pahavara näiteid

Nagu juba mainitud, varjavad juurkratid ennast sageli BIOS-es, boot-sektoris. Samuti varjavad nad ennast süsteemiprotsessides, nt Windowsi puhul executable failides nagu scvhost.exe või svehost.exe. [6] Lihtsamal juhul on võimalik protsessihalduri kaudu kõikide protsesside asukohta kontrollida. Kõik süsteemiprotsessid peaksid asuma Windowsi kaustas ja/või system32 alamkaustas. Kui mõni süsteemiprotsessidest seal ei asu, on tõenäoliselt tegemist mingit laadi pahavaraga.

Juurkomplektid ja ka viirused suudavad aga süsteemi faile imiteerida, paiknedes samuti vastavates kaustades. [6] Sellisel juhul tuleks võrrelda faili suurust originaaliga. Nakatunud failid või imitatsioonid on tihti suuremad originaalist. Kuivõrd teatud juurkomplektidel on võime manipuleerida mälu andmetega ning kettaruumi ja failide suurustega, ei tohiks ainuüksi seda informatsiooni usaldusväärseks pidada.

Sagedasteks rünnakuvektoriteks võivad olla spam e-post (W32/Feebs), bot-ide (FURootkit) otsesed nõrkused (exploits), P2P rakendused. [6]

Juurkratid jagunevad kaheks töötasandil; ühed töötavad juurkrati installeerinud kasutajaga samal priviligeerituse tasandil, teised töötavad süsteemi tasandil. Esimesel juhul on avastamine ja eemaldamine kergem, teisel juhul keerulisem. Kasutaja tasandi juurkratid kasutavad oma peitmiseks nn konksu otsa tõmbamise“ (hooking) tehnikat. Konksu otsa tõmmatakse rakendus, mille eest soovitakse ennast peita. Nt kasutaja-taseme juurkratt Qoolaid tõmbab konksu otsa Windows Task Manager’i, mis tähendab, et Qoolaid’i protsess ei ole WTM-is nähtav. Küll aga on see leitav viirustõrje programmide abil. Adclicker-BA Trojan tõmbab konksu otsa aga kõik rakendused, kaasa arvatud viirustõrje programmid. [7] 

DLL laetakse sihtmärgi aadress-ruumi kasutaja-taseme juurkratt püüab vahelt ja muudab API funktsiooni tulemust, luues illusiooni, et teda ja teisi objekte ei eksisteeri. „vahelt püüdmime“ võib toimuda kahe meetodi abil, ingl. k. import address table hooking (IAT) või inline function hooking meetodiga. [7] 

 

Pilt 2. Kasutaja ja kerneli moodulite jaotus ja suhestumine.
Allikas: [8]

IAT on olemuselt süsteemi kutsete tabel, mis koosneb kasutaja ruumi moodulitest (vt pilt 2). Pildil nr 3 on näha ühe suvalise töötava programmi porditava täitmisfaili struktuur. Programmis on programmi töö täitmiseks vajalikud funktsioonid, mida on vaja välja kutsuda DLL-ist. Import data section, idata, sisaldab funktsioonide importimiseks mälu aadresse. Programmi kompileerimisel ei suunata kõiki API käske teekide moodulisse, vaid suunatakse läbi IAT. [7] 

 

Pilt 3. Porditava täitmisfaili päised.
Allikas: Kapoor, Sallam, 2007. Rootkits Part 2: A Technical Primer

Windowsil töötavad täitmiskõlblikud moodulid sisaldavad ühte või rohkemat IAT tabelit oma failistruktuuris. Nt .exe faili puhul sisaldab IAT aadresse kindla library funktsioonidele impordituna DLL-ist. Üldistades ei ole süsteemikutsete tabel muud kui massiiv, mille iga element sisaldab kindla üldotstarbelise programmi API aadressi (vt pilt 4 vasakpoolset tabelit). Konksu otsa tõmbamine jaguneb omakorda neljaks osaks:

1) Asukoha määramine – leitakse kindel süsteemi kutsete tabel.

2) Varundamine – kande tegemine tabelisse.

3) Asendamine -  eksisteeriva aadressi asendamine teise, enda poolt valitud aadressiga, nn swap in – swap out

4) Taastamine – aadressi viimine manipulatsioonieelsesse staadiumisse, st vana aadressi taastamine pärast töö lõppu. [9]



Pilt 4. IAT muutmine.
Allikas: [7]

IAT tabel on seega omamoodi tübikood (stub code), mis luuakse kompilatsiooniprotsessi käigus ning sisaldab aadresse kõikide nende funktsioonide kohta, mida DLL-ist kasutatakse. Pildil nr 4 on vasakul pool näha originaalprogramm koodi ja import data sektsiooniga. API-ks programmis on FindNextFilePtr, mis leiab kaustas järgmise faili. Seda kasutavad paljud programmid, tüüpiliselt terve kausta sisu loetlemiseks. Paremal poolt on programmi normaalne töötsükkel. „Call dword“ ütleb, et protseduur tuleb täita kaudselt, kasutades DLL-i, andes aadressi pointeriks funktsiooni FindNextFilePtr. Järgmises sektsioonis on öeldud, milliselt aadressilt tuleb FindNextFilePtr importida ning viimases sektsioonis on toodud DLL-i nimi ning mäluaadressil olev tegelik funktsiooni kood (pildil lihtsustatud). 

Üldisel tasandil kirjeldatuna toimuvad eelpool välja toodud kolm sammu, IAT asukoha määramine, varundamine ja asendamine. Konksu otsa tõmbamise tulemuseks on samal pildil paremal pool olev protsessi järgnevus. Pahatahtlik koodijupp Rootkit code on lisatud protsessi lõppu. Pahatahtlikule funktsioonile MyFindNextFile määratakse mälu aadress, kus reaalne kood asub, ͉͉jmp käsuga minnakse tagasi FindNextFilePtr mälu aadressile ning toimub asendus. Tulemuseks on pahatahtliku koodi käivitamine iga kord kui Kernel32.dll FindNextFilePtr API funktsiooni kasutab.

Kuna IAT hooking ei pruugi alati töötada, näiteks kui DLL teek laetakse viimasel hetkel (nn delay imports) või DLL laetakse manuaalselt (LoadLibrary või GetProcAddress call) ja IAT tabelit ei looda, siis kasutatakse teist tehnikat.

Inline function hooking tehnikaga sisestatakse konks (juurkrati mälu aadress) DLL-i algusesse, muutes  esimesi baite, sisestades sinna jmp käsu koos juurkrati mälu aadressiga. Seda demonstreerib pilt nr 5. [7]

Pilt 5. Otsefunktsiooni muutmine (inline function modification)
Allikas: [7]

 

Muudetud koodi originaalosa salvestatakse salvestatakse „batuuti“ (trampoline), mille funktsioon on vajadusel DLL-i normaalse töö jätkamine. Sellisel juhul kutsutakse batuut uuesti välja. Üle kirjutatavate baitide arv sõltub pahavara arendajast, samuti süsteemi arhitektuurist (x32, x64, x86).

Süsteemi tasandi juurkratid kasutavad ära kerneli-tasandi mooduleid (vt pilt 1). Sellisel tasandil töötamiseks on vaja juurkrati koodi olemasolu kerneli aadress-ruumis. Tavaliselt saavutatakse see kerneli-taseme draiveri installeerimisega ning seejärel kasutatakse juba tuttavaid konksu otsa võtmise tehnikaid. Välja kutsete ning erinevate sõltuvuste tõttu kasutaja-taseme ja kerneli-taseme alamprogrammide vahel, on selle tasandi meetodid tehniliselt keerukamad ning nende meetodite üksasjalik kirjeldamine väljuks selle blogipostituse ajalistest raamidest. Kerneli-tasandi juurkrattide loomine on aga tõusuteel ning peamiseks takistuseks nende laialdasel levimisel on halb CPC (cross platform compadibility). [7]

 

Riskide maandamine - Mitnick’i valem

Siinkirjutaja töökohas järgitakse ISKE süsteemi, mis on kindlasti kasulik, kuid tavakasutajale on nõuete koguse tõttu selles orienteerumine pahatihti keerukas ja tüütu. Juurkrattide süsteemiga nakatumise vältimiseks tuleks siiski läbi viia koolitusi, mis võivad piirduda RIA teabeturbetestide lahendamisega, kuid ka nö vanaviisi auditoorselt töötajaid koolitades. Peamisteks koolituspunktideks juurkrattide kontekstis oleks (aga ka muu pahavara vältimiseks) oleks e-posti adressaatide jälgimine ning kahtlaste kirjade puhul nö „musta arvuti“ kasutamine või IT spetsialisti/osakonna olemasolul, pöördumine nende poole. Töö keskkonnas on koolitus tihedalt seotud reeglitega: töötaja X ei pruugi aru saada, miks vet-imata andmekandja ühendamine tööseadmega ei ole lubatud, kuid mõnikord piisab seadme ühendamata jätmisest teadmine, et see on töökeskkonnas rangelt keelatud.

Koduses keskkonnas võib tuttava korral saatja poole pöörduda ning küsida, kas ta on vastava kirja saatnud. Samuti aitab kodus küberhügieeni hoida kahtlaste veebisaitide mitte külastamine ja blokeerimine veebibrauseris, ainult usaldusväärse tarkvara alla laadimine ning loomulikult kaitsetarkvara ja OSi uuenduste õigeaegne paigaldamine.

Töökeskkonnas on abiks võimalusel ja ressursside olemasolul IPS-i ja teiste tulemüüride paigaldamine ja regulaarne andmeside monitooring. Sellised koolitused ja tehnoloogilised vahendid ei aita ainult juurkrattide vastu, vaid langetavad riski ka teist tüüpi pahavaraga süsteemi nakatuda.

Koduses keskkonnas soovitan IT teadlikumal isikul juurkrattide ja muude viiruste avastamiseks ja eemaldamiseks kasutada süsteemi nakatumise kahtluse korral Tronscripti. Tronscripti mitte möötamise korral võib teiseks paremaks lahenduseks olla nakatumise korral ainult OSi uuesti paigaldamine.

Linuxi peal on võimalik paigaldada chkrootkit või rkhunter. 

Tronscript: https://www.reddit.com/r/TronScript/

Nüüdisaegsematest arendustest juurkrattide kohta võib lugeda siit (link on blogspoti tõttu redirectiga):
https://securelist.com/rootkit-evolution/36222/

Avastamise kohta on youtube-is vaadatav põhjalik seeria: 
https://www.youtube.com/watch?v=ewNo_poX7bA





Viidatud allikad:

[1] AV-Test pahavara statistika.
www.av-test.org/en/statistics/malware
Kasutatud 04.05.2022

[2] T. Nash. "An Undirected Attack Against Critical Infrastructure. A Case Study for Improving Your Control System Security." US-CERT Control Systems Security Center. September 2005.
CaseStudy-002-v2.pub (cisa.gov)
Kasutatud 04.05.2022

[3] T. Sõmer, B. Lorenz, S. Mäses, T. Muulmann. Küberkaitse. Ründed ja ohud. E-õpik. https://web.htk.tlu.ee/digitaru/kyberkaitse/chapter/runded-ja-ohud
Kasutatud 04.05.2022

[4] G. Hoglund. "A Real NT Rootkit". 9. september 1999
http://phrack.org/issues.html?issue=55&id=5#article
Kasutatud 04.05.2022

[5] J. M. Haran. . "Malware in the 1980s: Looking Back at the Brain Virus and the Morris Worm". 5. november 2018 
Kasutatud 04.05.2022

[6] A. Kapoor, A. Sallam. "Rootkits, Part 1 of 3: The Growing Threat". Aprill 2006. McAfee.
http://download.nai.com/Products/mcafee-avert/whitepapers/akapoor_rootkits1.pdf
Kasutatud 05.05.2022

[7] A. Kapoor,  A. Sallam. "Rootkits Part 2: A Technical Primer". McAfee. 2007.

[8] Pilt 1. Kasutaja ja kerneli moodulite jaotus ja suhestumine.
https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/user-mode-and-kernel-mode
Kasutatud 05.05.2022

[9] Blogi "Hooking Series Part 1: Import Address Table Hooking. 26. detsember 2017"
Kasutatud 05.05.2022

A. Shevchenko. "Rootkit evolution". 28. august 2008. Securelist https://securelist.om/rootkit-evolution/36222/
Kasutatud 04.05.2022


Comments

Popular posts from this blog

Tarkvara arendus- ja ärimudel: Linuxi kernel & Adobe Creative Cloud

Kasutatavus ("usability") veebis

Rick Falkvinge ja Christian Engströmi autoriõiguse muudatusettepanekud 2012.