Categories
Edukacija i školstvo Internet

Računalna sigurnost, kratki vodič (I dio)

Sažetak bloga (dolje piše kako i zašto): što prije svoje korisničke prebacite na 2FA/MFA autentikaciju, a passwordi trebaju imati minimalno 12 (optimalno 14 i više znakova). Te dvije aktivnosti će vam umanjiti šansu kompromitacije korisničkog računa za +99%.

Ovaj blog je dopunjen 19. kolovoza 2022., osvježena je ilustracija s vremenom potrebnim za “razbijanje passworda” (stara slika je ostala usporedbe radi). Te je dodan link na službene Microsoftove preporuke za passworde.

Posljednjih dana, a potaknuti aktualnim događanjima, puno se razgovaralo o računalnoj sigurnosti. Često govorim o istim ili sličnim temama, pa sam krenuo pisati ovaj vodič čiji je cilj da malo bolje razumijete protiv kakvih prijetnji se borite ali i da dobijete ideju kako umanjiti ili u cijelosti izbjeći neke od tih opasnosti. Cijelo polje računalne sigurnosti je iznimno veliko, široko i komplicirano, te jednostavno nije realno obuhvatiti sve u jednom tekstu. Svrha ovog posta je da opišem nekoliko osnovnih problema i ponudim rješenja koja bi trebala dramatično povećati razinu vaše računalne sigurnosti (po Pareto principu, 20% aktivnosti će riješiti 80% mogućih problema). Za vas koji ste malo stručniji, odmah da napomenem kako je dio teksta, čitljivosti i opće razumljivosti radi, generaliziran i pojednostavljen. Također, sva je šansa da ćete na internetu ili od prijatelja i kolega dobiti pitanja “tko vam je to rekao?” pa ću pokušati objasniti razloge pojedinih taktika, kao i razloge zašto neke druge taktike nisu nužno bolje ili čak ispravne (a s čime se možete i ne morate složiti, no ako razmislite o njima već smo napravili pomak).

Ideja je ovaj vodič napraviti u više dijelova i u prvome dijelu se bavim samo zaštitom korisničkih računa (samo i jedino time). Kako drugi dijelovi budu dostupni, na ovome mjestu će se nalaziti linkovi na njih.

Korisnički računi

U današnje doba, suma vaših online korisničkih računa i interakcija putem društvenih mreža stvara vaš digitalni identitet koji je sve češće važan ili čak kritični element funkcioniranja u društvu. Ako vam netko preotme vaše korisničke račune na društvenim mrežama (Facebook, Instagram, Twitter, Linkedin, YouTube) i email servisima (Gmail, Outlook, Yahoo i dr.). osim što može naučiti sve ili puno toga o vama, u mogućnosti je analizirati mrežu vaših poznanstava, promotriti vaše interakcije, vjerojatno će pronaći i niz korisničkih računa u raznim web dućanima, forumima i cijelom nizu drugih web servisa koje koristite a koji se potom mogu eksploatirati.

U praksi, korisnički računi najčešće imaju hijerarhiju (koje možda niste ni svjesni), a koja se svodi na to da svi servisi koji su gore nabrojani, prije ili kasnije vode do vašeg email računa (bio to vaš privatni email račun ili poslovni). Na mnogim servisima će vaša email adresa biti ime korisničkog računa, dok će neki servisi koristiti vaše email sustav (gmail) ili društvene mreže (facebook) kao login podatke. Poanta je u tome da je vaša email adresa centar/ishodište vašeg digitalnog/virtualnog identiteta i najosjetljiviji korisnički račun kojeg treba štititi koliko je god to moguće, potom dolaze sekundarni servisi koji vas čine vidljivima na internetu (društvene mreže), te naravno svi onu servisu kroz koji obavljate različite financijske i druge transakcije (web dućani, zdrastvene ustanove, eGrađani i slično).

Da bi dobro zaštitili email račun, potrebno je uvijek odabrati dobar i jedinstveni password (šifru, zaporku). Oko toga kakav password treba odabrati ima puno diskusija, ali recimo da sigurnost passworda ovisi o njegovoj dužini i fondu znakova koji se koristi. Password može imati samo slova, slova i brojeve, slova i posebne znakove (+-*,.}[~*). Svaki dodatak u passwordu za red veličine diže kompleksnost zadatka “pogađanja” passworda, a isto vrijedi i za svaki dodatni znak u passwordu. Neki servisi i neke organizacije uvjetuju obaveznu promjenu passworda nakon isteka nekog vremenskog periodadanas se ta praksa smatra pogrešnom jer neminovno vodi do pojednostavljenih passworda, učestalog ponavljanja ili kreiranja varijacija na osnovnu temu, a zbog čestih promjena nerijetko budu i zapisani na nekom očiglednom mjestu.

Generalno gledano, konsenzus je da sigurni password danas ima 14 ili više znakova, te se sastoji od kombinacija malih i velikih slova, brojeva i/ili posebnih znakova. Sigurni password možete kreirati na puno načina, jedan od njih je da ga generirate u nekom password generatoru. Problem s računalno generiranim passwordima je da su oni najčešće “lagani” računalo za pogađati (jer računalo inkrementalno mijenja znak po znak dok ne dođe do “pobjedničke” kombinacije), a istovremeno iznimno teški ljudima za zapamtiti (pa se onda ti passwordi zapisuju po postitima, rokovnicima ili u drugim digitalnim dokumentima i bilješkama).

Koliko treba računalu/softwareu iz 2021. godine da “razbije” password.
Koliko treba za razbijanje passworda u 2022. godini (uočite razliku!!!)

Kako bi se tome doskočilo, postoje i aplikacije koje su namijenjene generiranju i čuvanju passworda – tzv. password manageri. To su najčešće aplikacije na vašem mobilnom telefonu koje otvarate nekim pinom ili sličnom shemom i koje za svaki korisnički račun imaju zapisan password. Treba reći da oni značajno pojednostavljuju priču, ali isto tako ovisite o tome da je uređaj s aplikacijom uvijek pored vas (da nije npr. ukraden). A treba znati da su neki od password managera u prošlosti bili uspješno hakirani i mnogi ili svi passwordi koji su tamo pospremljeni su odjednom postali dostupni hakerima (u hashiranom obliku, o čemu malo kasnije).

Treća i vrlo efikasna moguća taktika jest da kao password koristite neku vama lako pamtljivu rečenicu (rečenicu iz omiljene knjige, stih pjesme ili nešto slično), a kojeg “začinite” nekim slučajnim velikim slovom (usred riječi), interpunkcijom, brojem ili nekim posebnim znakom. Npr. password koji glasi “IvicaimAricasuseizGubili+1” lagano je pamtljiv i sastoji se od 26 znakova što ga čini iznimno sigurnim.

Svejedno, neovisno o tome koliko god sigurni password imali, to nije uvijek dovoljno. U praksi, neće se dogoditi da će haker pogađati vaš password pokušavajući se ulogirati u vaš email račun, nego će umjesto toga hakirati neki web servis i pokušati downloadati tablicu iz baze podataka u kojoj se nalazi vaše korisničko ime i/ili email adresa te password. To također znači da imate vrlo malo utjecaja na sigurnost svojeg vlastitog korisničkog računa jer će se proboj dogoditi negdje drugdje.

Vi nemate stvarnu kontrolu niti znate kako je vaš password pohranjen na nekom web servisu, no mogu objasniti kako to (najčešće) funkcionira. Aplikacije uopće neće bilježiti vaš password u svoju bazu podataka, nego će umjesto toga zapisati hash vrijednost vašeg passworda (ako vam prilikom pokušaja resetiranja passworda servis pošalje emailom vaš aktualni password, to znači da password zapisuju kao nezaštićeno tekstualno polje i bježite od tog servisa koliko god daleko možete).

Hashiranje je jednosmjerni matematički postupak koji će iz polja (u našem slučaju password) bilo koje dužine izračunati “hash” vrijednost uvijek iste veličine, a koji je jedinstven za upravo to polje znakova. Kažemo da postupak nije reverzibilan na isti način kao što iz mljevenog mesa ne možete natrag napraviti biftek (kada bi postupak bio reverzibilan onda ne bi govorili o hashiranju nego o enkriptiranju vaših podataka).

Programer vašeg hakiranog web servisa ima mnogo opcija, no na današnji dan, najbolja praksa zapisivanja passworda u baze uključuje hash funkciju (postoje mnogobrojne, danas je najčešća SHA256, prije je to bila SHA1 ili MD5), a koja je začinjena sa “solju” (engl. salt). Salt je “začin”, najčešće sasvim slučajni slijed znakova koji je jedinstven samo vašem korisničkom računu, a koji se pridoda vašem passwordu (na početku ili kraju) kako bi se dodatno zakomplicirala hash vrijednost. Ako se baš želi otežati situacija, onda primjerice hash funkciju provrtite npr. tisuću puta (zato da kalkulacija duže traje).

U praksi to znači da ako imate password “mračniblog” MD5 hash vrijednost glasi “d66b9eb45c0a19fa5171fffe432ddec4”, ali ako to izvrtimo stotinu puta onda je rezultat “0adcac5a56774665e22cadd4941d3c0a”. Ako na password dodamo “+salt” tada će vrijednost biti “12c148ece5e82c6ae0c26ef93688efae”, a ako protjeramo takav začinjeni password stotinu puta dobijemo “1fd2d3a475aa90454c0668d49a2135a0”. Sve ovo i sami možete provjeriti na nekom od online hash generatora. Poanta, soljenja hasha je u tome da se čak i malenom razlikom u polju kojeg hashiramo, finalni rezultat drastično razlikuje – što se vidi iz gornjeg primjera.

Na web stranici Have I Been Pwned možete upisati svoje email adrese koje koristite, kao odgovor dobiti ćete popis curenja podataka u kojima se one spominju. Ovisno o tipu proboja, vjerojatno se u njima negdje nalazi i hash vrijednost passworda kojeg ste tada koristili. To još uvijek ne znači da je vaš password kompromitiran. Ako se hash vašeg passworda nalazi u nekoj od tzv. rainbow tablica tada će haker usporediti i pokušati pronaći hash vašeg passworda i passworda koji se nalaze u rainbow tablicama i ako postoji podudaranje to znači da je vaš password kompromitiran i svima dostupan. Zato je “salt” bitan jer on dodaje razinu kompleksnosti na svaki hash i uobičajene rainbow tablice tu neće pomoći, pa se umjesto toga, ako ste doista osoba od interesa, pokušava napraviti brute force koji pokušava napraviti hash od svih mogućih permutacija ili dictionary attack koji pak koristi riječnik već poznatih passworda. Ovdje dolazi do izražaja i programer aplikacije, jer ako je proces hashiranja napravljen 100x uzastopce tada će svaka operacija trajati stotinu puta duže (i toliko je manja šansa da password bude otkriven). Moderno računalo može kreirati milijune hasheva u sekundi, a ako za hashiranje koristite grafičku karticu tada možemo govoriti o desetinama ili stotinama milijuna kalkulacija u sekundi.

Možete se zaštititi dobrim passwordom (i gore je navedeno kakav bi password trebao biti), no password sam po sebi nije uvijek dovoljan i potrebno je podići razinu sigurnosti za još jednu razinu. Kako bi to postigli, koristi se princip višestruke autentikacije ili najčešće korišten 2FA. 2 (two) Factor Autentikacija koristi vrlo jednostavno načelo koje kaže da za uspješnu autorizaciju morate imati dva elementa: nešto što znate i nešto što posjedujete – i ovo je srž svake dobro implementirane sigurnosne politike. Banke vam vjeruju s milijunskim transakcijama preko interneta zato što ste prilikom prijave servisu napisali nešto što znate (PIN ili password) i zato što imate neki fizički predmet koji je jedinstven i kojeg nije moguće kopirati (bankovnu karticu, USB s certifikatom, token uređaj ili nešto treće).

Prijedlog je dakle da na svim imalo kritičnim korisničkim računima aktivirate 2FA autentikaciju, jer ako haker i posjeduje vaše korisničko ime i password, to mu i dalje neće biti dovoljno da izvrši uspješnu autentikaciju i preuzme kontrolu nad servisom (email računom, društvenom mrežom ili web dućanom). Ovo osobito vrijedi ako ste administrator nekog servisa u kojem se nalaze podaci o većem broju korisnika (gdje je veći broj korisnika svaka brojka koja je jednaka ili veća broju 2).

Gotovo svi moderni servisi posjeduju 2FA način autentikacije i smatram da u današnje doba, ako naletite na neki servis koji to ne podržava, morate ozbiljno razmisliti želite li s njima poslovati. Na internetu ima više imenika sa servisima koji podržavaju 2FA, a ovo je jedan od onih koje ja (ponekad) koristim.

Čisto da bude jasno, ima puno različitih nijansi 2FA autentikacije i iako svaka od njih je bolja od toga da nemate uključen 2FA, činjenica je da su neka od rješenja manje ili više podložna proboju (ali opet, u redovima veličina je to teže nego da zlonamjernici imaju samo vaše korisničko ime i password).

Najjednostavnija i vrlo česta forma 2FA autentikacija je autentikacija putem SMS-a. To otprilike znači da ste morali autorizirati prilikom prve prijave i svoj broj mobilnog telefona, a u času kada se pokušate ponovno ulogirati u servis, vlasnik servisa će vam nakon što ste uspješno upisali korisničko ime i password, na broj vašeg mobitela poslati jednokratnu šifru tzv. OTP (najčešće šesteroznamenkasti broj). Problem sa SMS porukama je što one nisu apsolutno sigurne jer se SMS poruka može presresti, a SIM kartica klonirati.

One Time Password je moguće generirati i putem aplikacija za autentikaciju (npr. Google ili Microsoft Authenticator, makar postoje i druga rješenja) a koje onda možete koristiti da pospremi sve korisničke račune koji mogu koristiti 2FA. Ovo je nešto sigurnija metoda od SMS-a, jer nema razmjene podataka putem interneta ili GSM mreže, no i ovdje postoji šansa kompromitacije ako je vaš mobilni uređaj zaražen nekim virusom/trojanom a koji može u pozadini pokretati aplikacije i čitati odgovore koje aplikacija daje. Fizička ekstenzija OTP autentikacije su tokeni, njih najčešće koriste banke i financijske institucije, a ponekad se koriste i kao element ulogiravanja u računala (inače, jedna od poznatijih kompromitacija token sustava je onaj kada je bio hakiran RSA).

Obitelj Yubico ključeva.

Ultimativno rješenje za sigurnost je korištenje security ključeva poput onih koje prodaje Yubico ili Hypersecu (ja koristim). Ovdje je riječ o minijaturnim računalima koja su zalivena u blok plastike i koje spajate na računalo/mobilni telefon putem USB porta (ok, postoje i NFC verzije, ali shema je ista). U trenutku autentikacije, ključ mora biti u USB portu i na traženje vaše web aplikacije morate kliknuti fizički gumbić na security ključu (što osigurava da nitko ne može aktivirati ključ s udaljene lokacije, nego to može samo korisnik napraviti). U tom času računalo USB ključu pošalje upit (challenge), USB ključ vraća odgovor (response) i ako on odgovara očekivanom odgovoru autentikacija je dopuštena. Vrijedi samo napomenuti da se security ključevi razlikuju ne samo po vrsti porta na koji se spajaju, nego i po sigurnosnim protokolima koje podržavaju tako da nije svejedno koji ključ ćete koristiti za koju namjenu (i da, jedan ključ se može koristiti za mnogobrojne servise).

Da zaključim, da bi bili sigurni – vaši passwordi moraju biti kompleksni (14 znakova i više), moraju biti jedinstveni (jer ako sigurnost jedne web stranice bude probijena onda je probijena svugdje gdje imate korisnički račun) i za pravu sigurnost morate koristiti neku od ponuđenih 2FA taktika. Izbjegavajte koristiti lagano dostupna imena iz obitelji, datume rođenja i slične očigledne passworde. Ako krenete u zonu 2FA, pokušajte izbjegavati SMS autentikaciju – no svakako je koristite ako je to jedina 2FA metoda na željenom servisu. Naučite koristiti autentikator aplikacije, a za doista mirni san počnite koristiti security ključeve (i ne zaboravite na sigurnom mjesto pohraniti backup podatke, jer ako izgubite 2FA. Svakako preporučam da vaša glavna email adresa (ona na koju su vezani svi drugi servisi) svakako bude na nekom sigurnom servisu koji omogućava sve ove oblike zaštite (primjerice Gmail, Outlook, Office365…).

p.s. ista shema funkcionira i za PIN-ove, bolje je koristiti šesteroznamenkasti PIN nego četveroznamenkasti (gdjegod ga koristili), a ako možete konfigurirajte i paswordless login na svojem računalu (to je podržano i na Windowsima i OS X).

Misao dana:
Most people are starting to realize that there are only two different types of companies in the world: those that have been breached and know it and those that have been breached and don’t know it. Therefore, prevention is not sufficient and you’re going to have to invest in detection because you’re going to want to know what system has been breached as fast as humanly possible so that you can contain and remediate.