Miért lehet jó egy kis só a jelszavakhoz (de nem bors!)

Rövid megjegyzés - ez a cikk a hash jelszavak feltörésének elméletéről szól. A számítógépes bűnözők támadásainak megértése rendkívül fontos ahhoz, hogy megértsük, hogyan lehet a rendszereket ilyen típusú támadások ellen biztosítani.

De a nem önálló rendszer feltörésének kísérlete valószínűleg jogellenes az Ön joghatósága területén (ráadásul a saját rendszerei feltörése [és gyakran meg is sérti] az adott termékre vonatkozó garanciát).

Ez a cikk feltételezi a kivonatolási funkciók és az alapvető jelszavak feltörési technikák ismeretét - ha nem érti ezeket a témákat, nézze meg ezeket a cikkeket.

Tehát megszerzett egy kivonatolt jelszót. A hash erőteljes kényszerítése nagyon sokáig fog tartani. Hogyan lehet ezt a folyamatot felgyorsítani?

Várj, azt gondoltam, hogy a hash funkciók egyirányúak! Hogyan lehet feltörni a hash funkciókat?

Sajnos a jelszavak kivonatolásához használt kivonatolási funkciók nem mindig olyan biztonságosak, mint az általánosan elfogadott kivonatolási funkciók. Például a régi Windows-eszközökhöz használt hash funkciót LM Hash néven ismerik, amely annyira gyenge, hogy néhány másodperc alatt feltörhető.

Ezenkívül nem kell a kivonatot visszafejteni. Ehelyett használhatja az előre kiszámított egyszerű szöveges jelszavak és a megfelelő hash értéket (,). Ez megmondja egy hackernek, hogy a sima szöveg értéke egy adott kivonatot hoz létre.

Ezzel megtudhatja, hogy a sima szöveg értéke előállítja-e a kivonatot. Ha megad egy jelszót, a számítógép kivonja ezt az értéket, és összehasonlítja a tárolt értékkel (ahol egyezni fog), és akkor hitelesíteni tudja. Így valójában nem kell kitalálni valakinek a jelszavát, csak egy értéket, amely ugyanazt a kivonatot hozza létre.

Ezt hívják ütközésnek. Lényegében, mivel a kivonat bármilyen hosszúságú vagy tartalmú adatot képes befogadni, korlátlan lehetőségek vannak az adatok kivonatolására.

Mivel a kivonat ezt a szöveget rögzített hosszúságú tartalommá alakítja (például 32 karakter), a kivonatnak véges számú kombinációja van. Nagyon sok lehetőségről van szó, de nem végtelenről.

Végül két különböző adatsor ugyanazt a kivonatolási értéket adja.

Az előre kiszámolt táblázatok nagyon hasznosak ennek elérésében, mivel jelentős időt és számítási energiát takarítanak meg. Egy előre kiszámított kivonatkészlet használatát a jelszó kivonatának megkereséséhez „look-table támadásnak” nevezzük. Ezeket a táblázatokat a rendszergazdák használják felhasználói jelszavak erősségének tesztelésére, és gyakran online vagy megvásárolhatók. Ezeket azonban aljas hackerek is használhatják.

Ha egy jelszó nem biztonságos (tegyük fel, hogy valaki egy 5 karakter hosszú jelszót használ), akkor az viszonylag könnyen feltörhető. Például egy 5 kisbetűs jelszó csak 11 881 376 különböző jelszó létrehozására használható (26 ^ 5).

Ennek a jelszónak a kivonata esetén, még ha a hash kriptográfiailag biztonságos is (megfelelő algoritmust használ), akkor is nagyon egyszerű lenne kiszámolni az összes lehetséges jelszót és a hozzájuk tartozó hasheket. A keresőtáblák nagyon jól működnek az ilyen típusú jelszó-kivonatoknál.

A jelszavak hosszának növekedésével azonban az összes lehetséges jelszóhoz és a megfelelő hashhoz szükséges tárhely (és ennélfogva a tárolási költség) exponenciálisan növekszik.

Például, ha a feltörni kívánt jelszó 8 karakter hosszú, de számokat (10 számjegy), kisbetűket (26), nagybetűket (26) és néhány speciális karaktert (10) használ, a lehetséges jelszavak száma 722,204,136,308,736 - ami SOK Tárhely, ha rájössz, hogy mindegyik hash funkcióval van elválasztva, mint az SHA-256.

A szivárványos táblák csökkentett tárolási igények felajánlásával kezelik ezt a problémát, de több időbe telik a lehetséges jelszavak kiszámítása. A legalapvetőbb szinten ezek lényegében előre kiszámított keresőtáblák, amelyek segítségével gyorsan megtalálhatja a hash-nak megfelelő sima szöveget. Ha a hash és a sima szöveg szerepel a táblázatban - hasonlóan a szótári támadásokhoz -, akkor csak arra kíváncsi, hogy a jelszó szerepel-e a rendelkezésére álló táblázatban. Ha nem, akkor nem tudja feltörni a jelszót. Ezeket online ingyen vagy megvásárolhatja.

Nézze meg ezt a cikket a saját szivárványos táblázatok készítéséhez.

Még mindig érdekel. Hogyan működnek a szivárványos asztalok?

Ha el akarja hagyni ezek működésének részletes magyarázatát, görgessen lefelé a "Hogyan védekezzünk ezek ellen a támadások ellen" szakaszig.

Annak érdekében, hogy megóvja magát az egyes lehetséges sima szövegek kivonatolásától és tárolásától, amíg meg nem találja a szükséges hash-t (például egy keresőtáblát), kivonatolja az egyes sima szövegeket, és az eredményt egy táblázatban tárolja, hogy később utánanézhessen anélkül, hogy újrateremtené őket. Ez hosszabb időt vesz igénybe, de memóriát takarít meg.

A táblázat előállításához kivonat és egyszerű szöveg "láncait" hozza létre egy kivonatoló és egy redukciós függvény segítségével. A redukciós függvény csak sima szöveget hoz létre egy kivonatból (nem változtatja meg a kivonatot, hanem a sima kivételtől eltérően). Ez egyirányú funkció is.

Így a táblázat kiszámításához az egyik hash-t (h1) használja az R () redukciós függvényében a p1 sima szöveg létrehozásához.

R (h1) = p1.

Ezután a H () hash függvényt használja a p1 segítségével egy új hash létrehozásához.

H (pl) = h2.

Korábbi példánk segítségével:

Ha a sima szöveg halmaza [abcdefghijklmnopqrstuvwxyz] {5} (egy szivárványos táblázatot keresünk az összes jelszóból, amelyek 5 hosszúságú kisbetűkből állnak), és MD5-et (hash algoritmust) használunk:

A hash lehet ab56b4d92b40713acc5af89985d4b786 (h1). Most alkalmazzuk a redukciós függvényt, amely olyan egyszerű lehet, hogy az utolsó 5 betűt a kivonatba vesszük.

R (ab56b4d92b40713acc5af89985d4b786) = cafdb

H (cafdb) = 81a516edabf924cd0f727d329e855b1f

Miért hívják szivárványos asztaloknak?

Minden oszlop más és más redukciós függvényt használ. Tehát ha minden oszlop színes lenne, nagyon hosszú, sovány szivárvány lenne.  

Különböző redukciós funkciók használata csökkenti a láncolvadások (ütközések) számát, amelyek gyakran történtek a hash-láncokkal, a szivárványos táblák elődjével. Ez lényegében azt jelenti, hogy ha továbbra is ugyanazt a redukciós funkciót használja, akkor van esély arra, hogy két különböző láncot kapjon, amelyek ugyanazon a sima szöveggé konvergálnak. Különböző redukciós funkciók használata csökkenti ennek az esélyét, bár nem lehetetlen.

Remek, hogyan hozhat létre láncot?

Lánc létrehozása érdekében a redukciós és a hash funkciót használja (mindkettő egyirányú) hashek és sima szöveg "láncának" létrehozásához. Ezeknek a „láncoknak” mindegyike folytatódna k lépésenként, és amikor a lánc véget ér, csak az első sima szöveget és az utolsó hash-t tárolja a lánc.

Tehát egy mintalánc így néz ki:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

Az egyes redukciós funkciók különbözőek (R1, R2, R3 stb. Ábrázolva). A láncok mintatáblázata (minden sor 5 hosszúságú lánc) a következőképpen néz ki. Ne feledje, hogy ez hamis adatokkal van feltöltve, csak hogy példát adjon neked - a hash függvény nem hash függvény, amelyet a hash jelszavakhoz szokott használni.

Az R1 és R2 redukciós függvényeket a következőképpen definiáljuk: R1 a kivonat első 3 számjegyét veszi fel, az R2 pedig a kivonat utolsó 2 betűjét:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

2 -—> abdu2934 -—> 293 -—> 83kdnif8 -—> if -—> ike83jd3

15 -—> dks2ne94 -—> 294 -—> ld932nd9 -—> ld -—> ldie938d

20 -—> ld93md8d -—> 938 -—> lxked93k -—> lx -—> 93mdkg8d

A szivárványos táblázatokban csak az első kiindulási pontot és a végpontot menti a tárolás mentése, így:

kiindulópont (sima szöveg) végpont, miután k lépi át a láncot (hash)

p1 -—> h1k

p2 -—> h2k

p3 -—> h3k

Aztán amikor van egy hash (h), ahol nem ismeri a sima szöveget (?), Összehasonlítja azt a láncokkal.

  1. Először ellenőrizni kell, hogy a hash szerepel-e a végső kivonatok listájában (h1k, h2k stb.). Ha igen, akkor léphet a 3. lépésre.
  2. Ha nem, akkor csökkentheti a kivonatot különböző sima szöveggé (R1), majd kivonatolhatja ezt a sima szöveget (a hash függvény és a következő következő redukciós függvény használatával), és összehasonlíthatja a végső kivonatok listájával (h1k, h2k, h3k stb.). Ha egyezik az egyik utolsó kivonattal, akkor az a lánc valószínűleg az eredeti kivonatot fogja tartalmazni.
  3. Annak érdekében, hogy megtalálja az eredeti hash-ot a láncban, vegye be az adott lánc kezdő sima szövegét (tehát ha megegyezik a h1k-vel, kezdje a p1-gyel), és alkalmazza a hash és a redukció függvényeket a lánc mentén történő mozgáshoz, amíg el nem éri az ismert hash-t és a hozzá tartozó sima szöveget. Így áthaladhat a lánc hash-jain, anélkül, hogy azok lefoglalnák a gépen a tárhelyet.

Bár nem lehet biztos abban, hogy a láncok tartalmazzák-e a szükséges kivonatot, minél több láncot generált (vagy hivatkozik), annál biztosabb lehet. Sajnos minden lánc előállítása időigényes, és a láncok számának növelése megnöveli a szükséges időt.

Hogyan védekezhet az ilyen típusú támadások ellen?

Először az összes rendszer réteges védelme. Ha más módszerekkel megakadályozhatja a rendszereinek veszélyeztetését (így a támadó nem kaphat másolatot a kivonatolt jelszavakból), akkor a támadó nem tudja feltörni őket.

Használhatja a sózást is, amely véletlenszerű értéket ad a jelszónak a titkosítás előtt. Ez azt jelenti, hogy a megtalált előre kiszámított érték (amely megegyezik a kivonattal) nem fog működni. A titkosított szöveg nem kizárólag a titkosítatlan szövegen alapul. Mivel a só minden jelszónál különbözik, mindegyiket külön-külön kell feltörni.

A sózás ma már opcióként a legtöbb fő hash típusba tartozik. Bár a Windows jelenleg nem használ sózást, a „SYSKEY” eszköz használatával titkosíthatják a tárolt kivonatokat.

Használhatja a „köröket”, vagy a jelszó többszörös kivonatolását is. A fordulók használata (különösen, ha az egyes felhasználók számára véletlenszerűen kiválasztják a körök számát) megnehezíti a hacker munkáját. Ez a sózással kombinálva a leghatékonyabb.

Sajnos egy hacker, aki rendelkezik hash jelszavakkal, hozzáférhet a felhasznált körök és a felhasznált sók számához is (mert a lista megszerzéséhez valószínűleg veszélyeztetettek. A felhasznált sót és a felhasznált körök számát a jelszó tárolja hash, ami azt jelenti, hogy ha a támadónak van egy, akkor a másik is, azonban nem fogják tudni használni az online elérhető előre kiszámított szivárványos táblákat, és ki kell számolniuk saját táblázataikat (ami rendkívül időigényes).

A jelszó feltörésének nehézségeit növelő másik módszer a bors használata. A bors hasonló a sóhoz, de bár a só nem titkos (a kivonatolt jelszóval tárolják), a borsot külön tárolják (például egy konfigurációs fájlban), hogy megakadályozzák a hackerek hozzáférését. Ez azt jelenti, hogy a paprika titkos, és hatékonysága ettől függ.

A borsnak különbözőnek kell lennie minden alkalmazáshoz, és elég hosszúnak kell lennie ahhoz, hogy biztonságos legyen. Legalább 112 bitet ajánl az Országos Szabványügyi és Technológiai Intézet.

Bár a paprika használata bizonyos esetekben hatékony lehet, vannak hátrányai is. Először: egyetlen jelenlegi algoritmus sem támogatja a paprikát, ami gyakorlatilag azt jelenti, hogy ezt lehetetlen méretben megvalósítani. Vagyis, hacsak nem saját algoritmusokat készít. Hallgassa meg Bruce Schneier-t. Ne csináld.

Ha hosszabb cikket szeretne a paprikával kapcsolatos problémákról, nézze meg ezt a szálat.

Végül használjon erős (legalább 12 karakteres), összetett jelszavakat, és valósítson meg erős jelszószabályokat az összes rendszerben. Ez magában foglalhatja a felhasználók kényszerítését erős jelszavak létrehozására, rendszeres tesztelésüket, a jelszókezelők használatát vállalati szinten, a 2FA használatának kikényszerítését stb.

Zavart abban, hogy mitől lehet erős jelszó?

Nagyon könnyűnek tűnik feltörni. Aggódnom kellene?

A hackeléssel kapcsolatban a legfontosabb megjegyezni, hogy senki sem akar több munkát végezni, mint amennyit meg kell tennie. Például a szivárványos asztalok kiszámítása sok munka. Ha van egy egyszerűbb módja a jelszavának megszerzésére, akkor valószínűleg egy aljas színész megpróbálja először (például az adathalászat!).

Ez azt jelenti, hogy az alapvető kiberbiztonsági bevált gyakorlatok engedélyezése valószínűleg a legegyszerűbb módja annak, hogy megakadályozzák a feltörést. Valójában a Microsoft nemrégiben arról számolt be, hogy a 2FA engedélyezése pusztán az automatizált támadások 99,9% -át blokkolja.

Boldog hackelést!

További olvasmányok:

További részletek a hash-láncokról

A szivárványos asztalok újabb magyarázata

A szivárványos asztalok listája online