Jelszavak – legjobb és legrosszabb gyakorlat 2. rész
Az első részben tárgyalt általános jelszóválasztási hibák és téveszmék után most a kombinált szótáralapú támadás, a megfelelő jelszóválasztási gyakorlat, majd a felhasználó, támadó és üzemeltető lehetőségeiről esik szó.
Továbbfejlesztett szótár alapú támadás
Mivel a nyers erő módszere általános esetben – a támadó szempontjából – elég reménytelen, ezért érdemesebb mással kísérleteznie. Így tehát, ha a támadó bármilyen előzetes tudással rendelkezik a megtippelendő jelszóval kapcsolatban (célzott támadás), vagy ha nagy mennyiségű felhasználói fiók közül a könnyebben törhetőeket szeretné megkaparintani, optimalizálni tudja erőfeszítéseit. Ezt – sajnos – jelentősen megkönnyíti néhány, széles körben elterjedt jelszókészítési módszer. A továbbiakban feltételezzük, hogy az alap jelszavak és a szóba jöhető kapcsolatok kipróbálásán a támadó túl van.
Az egyik általánosan javasolt módszer szerint négy közönséges szót fűzzünk össze, és az erős jelszót fog eredményezni, hiszen 20-30 betű hosszúságú lesz. Ez még akkor is túl nagy falat nyers erővel, ha csak kisbetűket tartalmaz (~10^15 év). Egy ilyen példa a „correct horse battery staple”. Sőt, még a Stanford egyetem is ezt a módszert ajánlja1.
A HP egy egyszerű program használatát javasolja2: két bemenő adata a kiszolgálónév és egy, akár nagyon egyszerű jelszó. A kettőt összefűzi, MD5 hash-t számol belőle, és azt levágja 12 karakternél. Ez egy véletlenszerűnek látszó, vegyes összetételű karaktersorozat, és nyilván a mai követelményeknek megfelelően akár hosszabbra is hagyható.
Ezen módszerek könnyen megjegyezhető, erős, vagy annak tűnő jelszót eredményeznek. DE! Ha a támadó feltételezheti, hogy a négyszavas módszert vagy a HP programját használják, akkor nem szükséges a nyers erő módszerével – reménytelenül – próbálkoznia. Ehelyett a nyelv általános szógyakorisági statisztikája, illetve az eddig napvilágra került jelszavak alapján összeállít egy szólistát, és ezen listából veszi a négyszeresen összetett szavakat. Egy 8.000 szavas szólista esetében az összes négyszavas kombináció kipróbálásának időigénye alig több egy óránál a fentebb feltételezett próbálgatási sebességgel. Hasonlóképpen: ha oka van feltételezni a HP programjának használatát, akkor a kiszolgáló nevét a legvalószínűbb, egyszerű jelszavakkal párosítva állítja elő a kipróbáláshoz használt jelszavakat, feltehetően a siker nagy valószínűségével.
Ezen módszerek tehát a biztonság hamis illúziójában ringatják a felhasználót és az üzemeltetőt egyaránt. Hasonlóképpen alkalmatlan az ún. leet ábécé használata, hiszen könnyen programozható. Ugyancsak nem érdemes olyan jelszavakat választani, amelyek 4-8 kisbetűből és az elején vagy a végén 2, vagy 4 számjegyből állnak. Ezek olyan gyakran előforduló szerkezetek, hogy egy támadó előbb fogja kipróbálni a leggyakoribb jelszavakat kombinálva a megfelelő 2-4 jegyű számokkal, mint hogy nekikezdene a nyers erős törésnek.
Általánosítva: nem szerencsés olyan jelszóelőállítási módszer, amelyik (könnyen) algoritmizálható. Az olyan módszerek, amelyek – mondjuk – versrészlet szavainak kezdőbetűit még tovább variálják, általában túl bonyolultak megjegyezni. Újabb kutatások szerint léteznek olyan memorizálást segítő technikák, amelyek segítségével hosszú véletlen karaktersorozatok is megjegyezhetőek, a tesztalanyok 94%-a képes volt rá 12 perces gyakorlással. Képzeljük el, amikor havonta jelszóváltoztatásra kötelezik a felhasználókat, 8-10 különböző helyen…
Végül, de egyáltalán nem utolsósorban ne felejtkezzünk el a kerülő út lehetőségéről sem: hiába a legjobb jelszó, ha van a mennyezetben egy apró kamera, a gép hátuljában egy billentyűnaplózó, vagy a felhasználót be lehet ugratni egy adathalász emillel stb.
A felhasználó lehetőségei
Mindezek után hogyan lehet jó jelszót választani? Úgy, hogy figyelembe vesszük a továbbfejlesztett szótár alapú támadás lehetőségét is: nemcsak a szótári alapszavak nem alkalmasak, de azok egyszerű összetételei és toldalékolásai sem. A Stanford és az xkcd.com javaslatát önmagában elfogadhatatlannak kell minősíteni, de ha a négy szó összetételét mondjuk a három szóhatárnál még egy-egy max. kétjegyű számmal megfejeljük, az még akkor is 130 évre növeli a törés időigényét, ha a támadó tudja, hogy evvel a módszerrel éltünk. Ugyan ez nem valami sok, lehet 2015-ben már a mosógép-processzorok is lazán lenyomják majd egy-két óra alatt a törést, de az egy órához képest jelentős a javulás. Ha azonban nincs ennyi előismerete a támadónak, és a jelszó elejét-végét is figyelembe kell vennie, akkor már további egy nagyságrendet (az öt kézenfekvő toldalékolási helyből hármat kiválasztani tízféleképpen lehet) javul a helyzet. És mi van, ha nem pont szóhatárokra illesztjük a toldalékolást, vagy nem csak kétjegyű számokban gondolkozunk?
Iskolapélda: válassz egy tetszőleges, könnyen megjegyezhető szövegelemet. Legyen ez pl. a nagyon közismert „Talpra magyar”. Toldalékoljunk pl. így: „48TalpraIIImagyar15!”. Még mindig megjegyezhető, 20 karakter hosszúságú, tehát a nyers erő módszerével reménytelen a törése, toldalékolása pedig nagy valószínűséggel ellenáll a továbbfejlesztett szótár alapú törési kísérleteknek is. De vizuális típusú emberek választhatnak a billentyűzetről nem kézenfekvő geometriai mintákat is.
Alapszabály, hogy ugyanazt a jelszót nem használjuk különböző – fontos – helyeken. Kérdés azonban, hogy milyen időközönként kell megváltoztatni a jelszót.
A bejelentkezési jelszavak rendszeres megváltoztatásának nincs különösebb értelme. Ha egy támadó megszerzi a jelszót, akkor azonnal leemeli a számláról az összes pénzt, vagy hátsó kaput nyit a hálózaton/gépen. Általános esetben elég kicsi a valószínűsége annak, hogy a megszerzett jelszót a támadó a jogos felhasználóval párhuzamosan, titokban és hosszú távon akarná használni, bár nem elképzelhetetlen. („A feleségem szerint betegesen kíváncsi vagyok. Legalábbis valami ilyesmiről firkálgat a titkos naplójában.”)
Technikai háttér
Vegyük szemügyre az üzemeltetői oldalt! Nyilván tárolni kell a jogosított felhasználók jelszavait valamilyen módon ahhoz, hogy el lehessen dönteni: helyes jelszót adott-e meg a felhasználó a bejelentkezéshez. Ha magukat a jelszavakat tárolnánk, nyílt formájukban, az kirívóan súlyos felelőtlenség. Ha ugyanis ezekhez egy támadó – akárhogyan – hozzáfér, akkor az illető „egy ütéssel mindent vitt”, mind a tíz, ötezer, vagy háromszázmillió felhasználó jelszavát. A jelszavak titkosítva való tárolása nem megoldás, hiszen azt akár meg is lehet fejteni, mint történt a közelmúltban az Adobe-től ellopott, titkosítottan tárolt jelszavak esetében. A Telenor (Magyarország legalábbis) ugyancsak ezt a helytelen gyakorlatot követi, sajnos.
Már a kezdet kezdetén kitalálták a jó megoldást: nem szabad a nyílt jelszót tárolni, hanem annak egy olyan transzformáltját, amiből az eredeti jelszót képtelenség kiszámolni, azaz ennek a transzformáció-függvénynek nincs inverze. Az ilyen transzformáltat nevezzük árnyékjelszónak. Ha ezekhez valaki hozzájut, akkor nincs más lehetősége, mint sorra venni a lehetséges jelszavakat, kiszámolni a transzformáltat, és megnézni, hogy az megegyezik-e valamelyikkel a tároltak (és ellopottak) közül.
A kezdetekkor nem volt olyan számítási teljesítmény, ami ezt reálisan lehetővé tette volna, mára azonban a helyzet jelentősen megváltozott, nem utolsósorban a nagy számítási teljesítményű grafikus processzorok elterjedésével.
A támadó lehetőségei
Az árnyékjelszavak birtokában a saját rendelkezésére álló számítási teljesítménnyel akár roppant hatékony törést valósíthat meg a támadó. 2012 végén a Jeremi Gosney által összerakott rendszer – messze nem teljes kiépítésben – 25 AMD Radeon grafikus kártyával másodpercenként 350 milliárd (!) NTLM-hasht tud számolni, azaz mintegy öt és fél óra alatt minden 8 karakteres, vegyes összetételű jelszót – tipikus vállalati előírás – végig tud próbálni. A Microsoft LM-algoritmusával (XP, kompatibilitás) védett jelszavak ellenállási ideje maximum 6 perc (!).
A támadó általános esetben azonban nem valamennyi jelszót akarja megtörni, hanem amennyit csak lehet, de reális időn belül, hiszen ezeket csak addig tudja felhasználni, amíg fel nem fedezik az árnyékjelszavak ellopásának tényét. A tapasztalatok szerint az idő múlásával a sikeresen megtalált további jelszavak mennyisége egyre csökken.
Az egyik problémát az „egységsugarú felhasználók” jelentik, akik egyrészt nagyon egyszerű jelszavakat választanak (szótár alapon igen gyorsan megtalálhatók), a másik probléma pedig az, hogy ennélfogva számos olyan jelszó lesz a rendszerben, amelyek több – akár sok – felhasználóéi. Azaz, ha száz felhasználó választotta magának a Pistike jelszót, akkor az árnyékjelszavak listájában ennek megfelelően száz azonos hash lesz, és ennek a jelszónak a sikeres megtalálása nem egy, hanem száz darab felhasználói fiókot érint.
Az üzemeltető lehetőségei
Az árnyékjelszavak általános védelme – nyilvánvalóan. Ezen túl azonban van még számos lehetősége az üzemeltetőnek, hogy jelentősen megnehezítse az esetleges támadó dolgát. Legelsősorban is az árnyékjelszó előállítására használt hash függvény legyen erősen számításigényes. Nagyon nagy különbség, hogy másodpercenként 350 milliárd (LM) jelszót tud kipróbálni a támadó, vagy csak 70.000-et (Bcrypt).
További lehetőség annak elkerülése, hogy az azonos jelszavaknak az árnyékjelszava is azonos. Ezt úgy lehet megoldani, hogy a nyílt jelszóhoz a transzformáció elvégzése előtt hozzáfűzünk egy egyedi szövegelemet, akár pl. a felhasználói nevet. Mivel bármely rendszerben a login név egyedi, így a tárolt hash is egyedi lesz, akkor is, ha ugyanazt a jelszót többen is választották. Így a támadó egyszerre csak egy jelszót tud megtalálni.
Könnyen elérhetjük, hogy a kirívóan gyönge jelszavakat a felhasználók ne is tudják választani: jelszóváltoztatáskor ellenőrizni kell, hogy a felhasználó újonnan választott jelszava szerepel-e a nagyon gyönge jelszavak feketelistájában. Ne felejtsük el ehhez hozzávenni az egyszerű alapszavak egyszerű (könnyen algoritmizálható) továbbképzéseit is.
Figyelhetjük a bejelentkezés helyét, idejét és egyéb körülményeit, gyanús esetben további biztonsági intézkedéseket lehet tenni.
A vállalati jelszavak rendszeres, konkrét ok nélküli megváltoztatási gyakorlatának általános esetben nincs értelme, ellentétben egy biztonsági incidens után azonnal és mindenkinek célszerű jelszót változtatnia.
Írta: Keszthelyi András – egyetemi docens -Óbudai Egyetem