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.
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.
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.
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]
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]
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:
www.av-test.org/en/statistics/malware
Kasutatud 04.05.2022
CaseStudy-002-v2.pub (cisa.gov).
Kasutatud 04.05.2022
Kasutatud 04.05.2022
http://phrack.org/issues.html?issue=55&id=5#article
Kasutatud 04.05.2022
http://download.nai.com/Products/mcafee-avert/whitepapers/akapoor_rootkits1.pdf
Kasutatud 05.05.2022
Kasutatud 05.05.2022
https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/user-mode-and-kernel-mode
Kasutatud 05.05.2022
Comments
Post a Comment