Svaki dan čitamo o tome da je neka web stranica ili web servis “hakiran” i da su ukradeni podaci korisnika. Pitanje je – kako web stranice drže spremljenu vašu lozinku i je li ona sigurna?
Ako ste nedavno otvorili IT portale, sigurno ste mogli pročitati vijest “XY stranica hakirana, ukradeni podaci korisnika”. Tu ne govorimo o nekim “opskurnim” web stranicama. To može biti Google, Facebook, LinkedIn, Reddit itd. Primjera radi, nedavno je hakiran LinkedIn gdje su ukradeni podaci 700 milijuna korisnika.
Jedna od najgorih stvari koje hakeri mogu saznati o vama su lozinka i korisničko ime. Posebice ako ne slijedite “sigurnosne preporuke” i na više web stranica koristite istu kombinaciju spomenutih podataka. Ali sigurnost vaše lozinke, nije samo na vama. Nego i na stranicama na kojima ste napravili korisnički račun.
Stoga se postavlja pitanje – kako web stranice pohranjuju vašu lozinku u svoju bazu podataka? Kako ju čine sigurnom? Tko ima pristup lozinkama?
Najgori scenarij: “običan” tekst (plain text)
Razmislite o ovoj situaciji: velika i popularna web stranica je hakirana. Hakeri su probili sve zaštite koje oni imaju, a možda su iskoristili i nedostatke u korištenoj arhitekturi. Vi ste korisnik te stranice. Dotična web stranica šalje email da su imali sigurnosnih problema, ali da su vaši podaci sigurni.
Osim što su lozinke pohranjene kao “običan” tekst.
Takve baze podataka, u kojima se lozinke nalaze nekriptirane, samo izazivaju probleme. Nema enkripcijskog algoritma koji ih je učinio malo sigurnijima. Hakeri samo mogu pročitati vašu lozinku i to je to.
I ovdje nema veze koliko je kompleksna vaša lozinka. Možete vi imati lozinku od 18 znakova, koristiti velika i mala slova, posebne znakove … Ako je ona kao takva upisana u bazu, onaj tko ima pristup bazi, ima vašu lozinku.
Čak to i ne moraju biti hakeri. Zašto bi zaposlenik neke firme, a ima pristup produkcijskoj bazi jer recimo radi na razvoju web stranice, mogao vidjeti vašu lozinku?
Treat your password like your toothbrush, change it regularly and don't share it!
— Anti-Bullying Pro (from charity The Diana Award) (@AntiBullyingPro) August 13, 2016
Možda mislite da je to problem koji se rijetko događa, ali nije tako. Prema nekim procjenama, oko 30% eCommerce web stranica nema zaštićene podatke. Kako ćete to najlakše znati? Kad vam pošalju email nakon registracije u kojem vidite svoje korisničko ime i lozinku. Tada se ponovno logirajte na web stranicu, promijenite lozinku ako ju i negdje drugdje koristite, te im pošaljite email da im je sigurnost katastrofalna. Dapače, preporučujemo da s takvih stranica ne kupujete i ne dajete im svoje podatke.
Naravno, to nije indikator 100 posto da spremaju lozinke u običnom tekstu, ali je jako velika šansa. Uostalom, ne bi vam smjeli mailom slati takve podatke jer netko može pročitati i vaš email.
Za kraj ovog dijela, imajte na umu da nijedan sustav nije bez greške i nije 100 posto siguran, ali neki ne slijede ni osnovne sigurnosne protokole kod izrade web stranice i zaštite korisničkih podataka.
Nije dobro kako se čini: kriptirane lozinke
Što mnoge web stranice rade kako bi dodale određenu sigurnost za vaše lozinke? Okreću se enkripciji. U biti, enkripcijski mehanizam pretvori vašu lozinku u “nečitljiv” niz znakova koji nije moguće dekriptirati bez privatnog ključa. Točnije dva ključa – jedan se nalazi kod kompanije, a drugi kod vas (on je u obliku login podataka). Stoga, ako netko i dođe do kriptirane lozinke, neće s njom moći puno toga učiniti.
Enkripciju biste trebali koristiti gdje god možete. FaceID na iPhoneu je neka vrsta enkripcije. Passcode je enkripcija. Internet počiva na enkripciji. Ali bez obzira na to što ste čuli, enkripcija nije savršena.
Ona je sigurna onoliko koliko su sigurni ključevi koji su pohranjeni na serverima kompanije koja “drži” web stranicu. Nećemo ulaziti previše u detalje, ali ako hakeri nađu na serveru oba ključa, mogu doći do vaše lozinke. To je praktički kao da je lozinka zapisana u običnom tekstu.
Zato imate web stranice kao što su PlainTextOffenders koji drži listu servisa koje koriste enkripcije koje je moguće dekriptirati.
Iznenađujuće jednostavno (ali ne uvijek efektivno): “hashing”
“Hashiranje” lozinke zvuči možda čudno, ali je sigurnija forma enkripcije. Umjesto da web stranica drži vašu lozinku u “plain” tekstu, ona ju “provuče” kroz hash funkciju (kao što su MD5, SHA-256 i druge) i tako ju spremi u svoju bazu. Ona postaje nečitljiva, odnosno opet s njom ne možete ništa učiniti.
Recimo, lozinka da vam je lozinka “PCChip123!”. Kada ju provučete kroz SHA-1 hash funkciju dobijete “1d43f94e73cc84882b8f24c97541ce3109e3a312”. I super stvar je što ona funkcionira samo u jednom smjeru. Ovaj niz znakova ne možete dekodirati i iz njega dobiti prvotni niz znakova.
Nažalost, opet, ni ovo nije najsigurnije. Bolje je od običnog teksta, ali je ovo nešto što su hakeri – djelomično – probili.
To znači da će jedan niz znakova, uvijek davati isti izlaz ako koristite određenu hash funkciju. Niz znakova “PCChip123!” će uvijek davati “1d43f94e73cc84882b8f24c97541ce3109e3a312” ako koristite SHA-1 algoritam.
Zato su hakeri razvili tzv. “Rainbow tables”. Zamislite to kao “cheet sheet”. Imaju listi hasheva i lozinki. Mogu usporediti te tablice s vašim hashom. Ako ne nađu lozinku na svojoj cheet sheet listi, mogu probati koristiti brute-force tehniku i tako naći vašu lozinku. Posebice ako znaju koji se hash algoritam koristi. Naravno, za duže i teže lozinke će im trebati duže, pa je mnogo bolje koristiti lozinku “8ErbH!234@;9k2” nego “password123” ili “qwer1234”. Ali opet, nije 100 posto sigurno.
Možda najbolja opcija danas: “salt“ i “hash”
Ništa nije nemoguće probiti. Hakeri će uvijek nalaziti načine kako da “slome” nove sigurnosne sustave. Ali ako web stranica implementira sve sigurnosne standarde i koristi “pametne” hasheve, hakerima će zagorčati život. Često do te mjere, da će odustati od pokušaja krađe podataka.
“Salted hashes” je jedna od tih sigurnosnih preporuka ili protokola koji je dobro iskoristiti ako želite stvarno zaštititi svoje korisnike. Da pojednostavnimo, kod kreiranja lozinke, web stranica za svakog pojedinačnog korisnika izgenerira dugačak i kompleksan niz znakova. Znači, za svakog korisnika unikatni niz znakova.
Onda se taj niz doda na početak ili kraj vaše lozinke, te se ona tada provuče kroz hash funkciju. Tako da maloprije spomenute “rainbow” tablice neće biti od velike pomoći hakerima.
Generalno, nije bitno je l’ taj “salt” (spomenuti niz znakova koji se generira za svakog korisnika) spremljen na serveru zajedno s lozinkama ili ne. Hakerima će probijanje takve zaštite uzeti previše vremena. Plus, ako imate kompleksnu lozinku, praktički je nemoguće da “pogode” vašu kombinaciju.
Web stranice koje brinu za sigurnost lozinku, te potom i vašu sigurnost, će koristiti provjerene i sigurne hash algoritme kao što su (MD-5, SHA-1, SHA-256)… njih je relativno lako za implementirati s programerske strane, a otežavate život hakerima.
Uz to, jako je korisno da web stranice dodaju ograničenje za logiranje. To znači da kad pogriješite lozinku, ne možete se recimo, idućih 5 sekundi ponovno logirati. Ako opet pogriješite lozinku, to vrijeme je 10 sekundi. Pa 20, pa 40 itd. To hakerima onemogućuje brute-force napade i mogućnost da probaju milijun lozinki u sat vremena.
Na kraju dana, cyber kriminalci će uvijek odvagnuti koliko vremena moraju potrošiti na hakiranje takvih web stranica i kolika im je “dobit” za to. Najčešće odustanu kada vide da imate implementirane sve sigurnosne mehanizme.
Piše: B.P.