Pagrindinis / Blogas / Apie mus sukrėtusius CityBee, OlyBet, DarniPora ir t.t... dalykus

Apie mus sukrėtusius CityBee, OlyBet, DarniPora ir t.t... dalykus

2021.03.16
#citybee #nulaužimas #slaptažodžiai

Originaliai tai buvo tiesiog postas į Facebook, bet nutariau įdėti į blog'ą tam, kad nepasimestų ir biškį SEO pakeltų 🙂

Intro

Visi iki šiol matyti informacijos šaltiniai sakė daugiau mažiau: Slaptažodžiai apsaugoti labai silpnu šifravimu, dėl to nulaužiami per kelias minutes. Kas yra labai supaprastintas ir pesimistinis teiginys (kas gal šiuo atveju ir gerai - priversti pasikeisti slaptažodžius tokiu atveju naudinga). Tiesiog tiesa nėra tokia visiškai beviltiška.
Šifras yra silpnas ne iš tos pusės, kad iš jo kažkaip lengvai būtų galima gauti paslėptą žodį. Tas silpnumas yra greitis.

Šifrafivimo algoritmas buvo kurtas taip, kad duomenis būtų galima šifruoti labai efektyviai ir greitai, kas kaip ir nėra bloga savybė. Problema šiuo atveju yra ta, kad slaptažodžius galima tikrinti labai greitai. Vaizdo plokštės čia pasiekia neregėtus greičius.

Kad ir kaip bebūtų, kombinatorika čia vis tiek pakiša savo koją 🙂 kaip tai veikia mechaniškai, detalizavau šiame video:

Atvejo Analizė: Kaip "nulaužiami" Slaptažodžiai

Trumpai tariant, jeigu nenaudojot dažnų žodžių kurie dažnai papuola į slaptažodžių žodynus, ir slaptažodžio ilgis siekia, arba viršija 12 simbolių, net ir tokiomis sąlygomis Brute Force ataka nėra efektyvi. Tiesiog per ilgai laukti, pasitenkins slaptažodžiai kuriuos gavo iki tol.

Kaip gaunamas slaptažodis iš sha-1

Kaip iš užšifruoto slaptažodžio (šiuo atveju sha-1 algoritmu) gauname realų slaptažodį, pabandysiu trumpai paaiškinti.
Pats sha-1 pats nėra toks jau blogas. Pvz. žodį “labas” pavertę sha-1, gauname “6cc9a313fd56dc22960ab21dd9383fe77c6d4a6e”. Funkcijos kuri iš “6cc9a313fd56dc22960ab21dd9383fe77c6d4a6e” gauna žodį “labas” techniškai nėra.
Ką galima padaryti, tai pabandyti parinkti atsitiktinį žodį, pvz. “tomas” ir gauti “2bc6038c3dfca09b2da23c8b6da8ba884dc2dcc2”, o tada visam CityBee vartotojų duomenų CSV faile ieškoti tokio slaptažodžio. (Fun fact: tokių yra 55)
Šitaip einama per turimą žodyną ir žiūrima ką pavyksta atspėti. Kai žodyno resursai baigiasi, tada belieka tiesiog daryti Brute Force ir tikėtis, kad kažką dar sugebės šitaip surasti.

Kaip apsaugoti savo projektą?

Šiai dienai, vienas paprasčiausių žingsinių būtų pasirinkti algoritmą kurio šifravimas užtrunka ilgiau. Kiek skeptiškai į tai žiūriu, nes kas šiandien lėtai, ateityje gali būti greitai... Na bet lengva tai įgyvendinti. Tarp rekomenduojamų (ir industrijoje naudojamų) algoritmų yra: bcrypt, PBKDF2, Argon2

Pepper

Wiki Straipsnis

TL;DR; Sugeneruoti atsitiktinį raidžių/skaičių kratinį ir jį išsaugoti projekto config faile. Jį pridėt prie VISŲ slaptažodžių.

Ką laimim? Pirminis nulaužimas su žodynine užpuolikui nepasiseks. Nulaužt galės tik tada, kai Brute Force metodu nulauš kelis slaptažodžius ir suras koks yra mūsų Pepper. Kai tai atliks, visos standartinės procedūros veiks.

Geroji dalis, kad šitai atbaidys visus skriptvaikius, nes neturės nei žinių, nei kantrybės tai atlikti.

Salt

Wiki Straipsnis

TL;DR; Sugeneruot atsitiktinį raidžių/skaičių kratinį KIEKVIENAM slaptažodžiui ir jį laikyti duomenų bazėje. Paprastuoju atveju toje pačioje lentelėje, jeigu apsauga kiek pažangesnė - kita duomenų bazė, kita lentelė.

Ką laimim? Panašiai kaip Pepper atveju, žodyninė ataka neveiks. Jeigu darysim prielaidą, kad užpuolikas turi pilną priėjimą prie kiekvieno vartotojo Salt, šiek tiek vis tiek laimim. Neveikia Rainbow Table ataka - vietoj to, kad nulaužinėtų daug slaptažodžių vienu metu, užpuolikas priverstas kiekvieną slaptažodį nulaužinėti asmeniškai. Šitaip užtempiam gumą.

Kaip apsaugoti savo slaptažodį kai esu klientas?

Kaip Stoikai sako: aplinkos nepakeisi, bet gali pasirinkti kaip į ją reguoti.

Esminės taisyklės:

  • Visur naudoti skirtingus slaptažodžius. Jeigu gaus kažkokius duomenis, jų negalės niekur panaudot
  • Slaptažodis turi būti pakankamai ilgas (šiai dienai turbūt 12 simbolių). Bus daug vargo apskritai jį gauti (nebent slaptažodžių visai nešifruoja, ghem filmai.in ghem)
  • Nenaudoti pavienių žodžių, arba tada naudoti juos kombinacijoje iš kelių. Kitaip žodyninė ataka lengvai nulauš

Ta proga xcdc komiskas ta tema:
XCDC

Jeigu pasirinkote atsitiktinio raidžių kratinio ir skiritngo slaptažodžio visur kelią, jums tikriausiai prireiks programos vadinamos Password Manager.

Mano rekomendacija: KeePass (Mobiliosiųjų programėlių tam skirtų yra daug)
Argumentai:

  • OpenSource
  • Slaptažodžiai laikomi ne pas kažką serveryje (kurį gali nulaužti), o faile. Tą failą galima lengvai įkelt į kelis kompiuterius, kokį nors cloud (dropbox, iCloud etc.).

Aišku, rinkoje yra daug daugiau patogesnių alternatyvų. Dalis jų mokamos, dalis nemokamos, čia jau patys pasieškokit 😉 Nenoriu reklamuoti, nes pats jomis tik dalinai pasitikiu.

Reziume

Visi šitie apsaugos metodai tiesiog priverčia užpuoliką ilgiau vargti. Techniškai jie neapsaugo duomenų bazės, ir skeptiškai žvelgiant - neverta visai tuo užsiimt (galima tiesiog naudot OAuth ir tegul tuo rūpinasi Google, Facebook, Apple).

Na bet yra toks geras palyginimas su užrakintomis durimis. Kam rakint duris, jeigu jas gali išlaužti? Langą išdaužti? Kam tos kameros, jeigu užpuolikas gali tiesiog su gobtuvu ant galvos ateiti? ir t.t... Esmė, kad kiekviena apsaugos priemonė sukelia papildomus rūpesčius užpuolikui ir atbaido mažiau užsispyrusius. Jeigu daugiau nėra jokios išeities, tada kaip minimum reikia šiuos žingsius atlikti.

Kiti Šaltiniai

Lietuvio parašytas straipsnis: Apie CityBee ir slaptažodžių saugumą
Computerphile:
- How NOT to Store Passwords
- How Password Managers Work

Autorius

Šarūnas Navickas
Šarūnas Navickas
Projekto iniciatorius, video autorius, puslapio programuotojas

Python ir Clojure programuotojas, dirbantis su kalbos technologijomis - natūralios kalbos apdorojimu ir generavimu. Šio projekto iniciatorius.

Komentarai
Šis puslapis naudoja sausainėlius Kam naudojami sausainėliai?