Gesla iz vdora v Ashley Madison zaradi hude malomarnosti že zlomljena

Matej Huš

11. sep 2015 ob 12:15:24

Vdor v Ashley Madison je že tako ali tako imel precej resne posledice za vse vpletene, sedaj pa se seznamu njihovih težav pridružujejo še razkrita gesla. Ker so upravljavci strani shranjevali zgoščene vrednosti gesel (hash) po algoritmu bcrypt, smo spočetka napak predpostavili, da jih ne bo mogoče zlomiti. A pisci strani so zagrešili dve ogromni napaki, ki sta v nekaj tednih omogočili razbitje 90 odstotkov od 15 milijonov prizadetih gesel.

V pobeglem arhivu je bila namreč tudi datoteka, ki je vsebovala spremenljivko z imenom $loginkey za 15 milijonov uporabnikov. Izkazalo se je, da gre za zgoščeno vrednost iz uporabniškega imena in gesla, ki je verjetno služila hitrejši večkratni prijavi, da ni bilo treba vsakokrat vpisovati gesla. Spremenljivko so tvorili tako, da so združili uporabniško ime in geslo, oboje pretvorjeno v male tiskane črke in ločeno z dvema dvopičjema. Ta niz so potem shranili v zgoščeni vrednosti MD5. Algoritem MD5 odlikuje visoka hitrost in ni namenjen shranjevanju gesel, saj lahko pri razbijanju preizkušamo milijarde nizov na sekundo. Krajša gesla lahko zlomimo kar s surovo silo, daljša pa s pametnejšimi slovarskimi napadi. Nekatere vrednosti spremenljivke $loginkey so tvorili nekoliko drugače, a z isto varnostno luknjo.

Za analizo gesel imamo torej pred seboj sorazmerno enostaven problem, ki je rešljiv vsaj milijonkrat hitreje, kot bi bil neposredni napad na bcrypt. Uporabniško ime preberemo iz baze, algoritem za tvorjenje niza tudi poznamo (ime::plaintextgeslo), tako da lahko enostavno z izčrpavanje možnosti ugotovimo del $loginkey, ki predstavlja geslo z malimi tiskanimi črkami. Dostikrat je konec že tu, saj 90 odstotkov gesel ne vsebuje velikih tiskanih črk. V preostalih primerih je treba ugotoviti še pravilno razporeditev velikih in malih črk, kar izvedejo s primerjanjem z zgoščeno vrednostjo bcrypt, kar je obvladljiv problem.

Ni jasno, kako so si pri Ashley Madison mogli privoščili tako resno varnostno napako. Kaže tudi, da so se je očitno zavedli, saj so za novejša gesla pravilno poskrbeli - torej so v MD5 poslali združeni niz uporabniškega imena in bcrypt vrednosti gesla (namesto plaintext). Zakaj tega niso storili za vsa gesla, ostaja neznanka.