Szótári támadás ( angol szótártámadás ) - a biztonsági rendszer elleni támadás a hitelesítéshez használt jelszavak teljes felsorolásának ( angol brute-force ) módszerével , amelyet az összes szó ( jelszavak tiszta formájában vagy titkosított formájában ) egymás utáni ellenőrzésével hajtanak végre. képek) bizonyos típusú és hosszúságúak a szótárból , hogy később feltörjék a rendszert és hozzáférjenek a minősített információkhoz . [1] Ez az esemény a legtöbb esetben negatív jellegű, ellentétes az erkölcsi és törvényi normákkal.
A valószínűségszámítás szempontjából a jelszó megválasztása determinisztikus és logikus. A jelszó lehet: születési dátum, név, tárgy, számkészlet, a billentyűzeten szorosan elhelyezett betűsorozat. Általános esetben a fentiek összefűzve vannak.
Ezeknek a feltételezéseknek az eredménye, hogy a jelszóválasztás előre meghatározottsága kulcsszerepet játszik a szótári keresési módszer alapjául szolgáló algoritmusok kiválasztásában .
Kétféle támadás létezik:
Lehetőség van a jelszó erősségi pontszámának kiszámítására, különösen a sikeres szótári támadások arányának meghatározására . A siker valószínűségi pontszáma a szótári támadás során feltört jelszavak számának és a kísérletek teljes számának arányaként határozható meg .
Az Internet Worm 1988-as használata a jelszavak feltörésének jól dokumentált esetét szolgáltatja. [2] A féreg egy sor szótárral próbálta feltörni a jelszavakat. A támadás első szakaszában a Unix rendszer jelszófájljából vett felhasználóneveket tartalmazó szavakat használtak. Ha ez nem járt sikerrel, egy belső szótárt használtak, amely 432 általánosan használt internetes zsargon szót tartalmazott. Ha a második lépés nem járt sikerrel, egy 24474 szóból álló Unix szótárat használtunk. A féreg üres jelszót is keresett. A megtámadott webhelyek arról számoltak be, hogy a jelszavak körülbelül 50%-át sikeresen feltörték ezzel a stratégiával.
A következő lépés Daniel Klein munkája volt . [3] Eredményeinek bemutatása érdekében titkosított Unix rendszerjelszófájlokat gyűjtött össze . Ez a gyűjtemény körülbelül 15 000 különböző felhasználónév/jelszó párost ( bejelentkezés/jelszó ) tartalmazott . Klein egy sor szótárat és egy sor mechanizmust készített a permutációk lehetővé tételére. Az általa biztosított szótár körülbelül 60 000 tételből állt. Ez a lap neveket, helyeket, fiktív utalásokat, bibliai kifejezéseket, kifejezéseket W. Shakespeare verseiből stb. tartalmazott. Egy permutációs stratégia alkalmazása után (nagybetűk használata, nyilvánvaló helyettesítések, számok permutációi) több mint 3,3-es jelszóteret kapott. millió lehetőség. A szótár használata segített Kleinnek bizonyos szervereken az összes jelszó 24,2%-át feltörni.
1991-1992-ben. Eugene Spafford( eng. Eugene Spafford ) a statisztikák alapján egy olyan szótárt sikerült összeállítania, amellyel a kiválasztott szervereken a jelszavak 20%-a feltört. [négy]
2000-ben a Cambridge-i Egyetem kutatócsoportja végzett egy tanulmányt, amelyben 195 kivonatolt jelszót támadtak meg, amelyek 35%-át sikeresen feltörték. [5]
Kutató(k) / projekt | Idő | A jelszavak ellenőrizve | A megtalálás százaléka, [%] |
---|---|---|---|
Internetes féreg [2] | 1988 | ezrek | ~50 |
Klein tanulmánya [3] | 1990 | 15000 | 24.2 |
Spafford tanulmánya[négy] | 1992 | 13787 | 20.0 |
A Cambridge-i Egyetem kutatói [5] | 2000 | 195 | 35.0 |
A legtöbb jelszóban hangzásbeli hasonlóság van a természetes (angol) nyelv szavaival; ennek az az oka, hogy egy adott jelszóval kapcsolatos ilyen jellegű információkat könnyű megjegyezni. Ezt a tulajdonságot a Markov-láncon alapuló "Markov-szűrők" veszik figyelembe , amely a természetes nyelvi feldolgozás szabványos technikája. A nem alfabetikus karakterek jelenléte a jelszóban értelmezhető úgy, mint egy állapotgépet egy adott elemkészletre.
Az ember által generált alfabetikus jelszó egyenlőtlenül oszlik el az alfabetikus sorozatok között. Ez a feltétel nagy pontossággal figyelembe vehető a nulla és elsőrendű "Markov-szűrőkben": [6]
Matematikailag
a Markov-modell nulla sorrendje:
a Markov modell első rendelése:
ahol egy karaktersorozat eloszlásának valószínűsége, ennek a sorozatnak a karaktere, egy egyedi karakter vagy digram gyakorisága a szövegben.
A valószínűtlen karakterláncok kiküszöbölésére a szótárban a valószínűségi diszkretizálást használják - egy kétszintű rendszert vezetnek be küszöbértékkel :
a Markov-modell nulla sorrendje:
a Markov modell első rendelése:
Megjegyzések
Az állapotgépek létrehozásához a feltört jelszóval kapcsolatban bevezetünk néhány korlátozást és feltételezést:
A determinisztikus véges automaták ideális eszközök a javasolt megszorításokkal rendelkező kifejezésekhez. [6]
A véges automatákon alapuló szótár felépítésének első lépése reguláris kifejezések sorozatának létrehozása ( \" kisbetűk" , \"nagybetűk a kisbetűk előtt" , \"minden nagybetű a kisbetű előtt jön" stb.).
A szótár a Markov-szűrőknek megfelelő szavak halmaza és a rájuk alkalmazott véges számú reguláris kifejezés .
A szótár felépítéséhez használt algoritmus kissé eltér a nulla szintű Markov-szűrőtől (ebben az esetben a szótár különböző szóhosszúságaihoz más küszöbértéket használunk ). [6]
A módosított szótár meghatározása:
Írd át a szűrőt (szótárat) additív formában!
ahol .
Hadd . Ezután meghatározzuk a részszótárakat . Vegye figyelembe, hogy ez azért van meghatározva , mert ezért nem függ a választásától .
Bármely előtag esetén a részszótár tartalmazza az összes lehetséges karaktersorozatot, amely az előtaghoz csatolható , így az eredményül kapott karakterlánc megfelel minden Markov-tulajdonságnak.
Általában részleges szótár írható
Rekurzív algoritmus egy részszótár méretének kiszámításához [6]
részleges_méret1 ( jelenlegi_hossz , szint ) { if level >= threshold : return 0 if total_length = current_length : return 1 sum = 0 minden egyes karakterhez az ábécében sum = sum + partial_size1 ( jelenlegi_hosszúság + 1 , szint + mu ( karakter ) ) return sumRekurzív algoritmus kulcs keresésére egy szótárból (bemenetként egy indexet vesz a kulcstérben, és visszaadja a megfelelő kulcsot ) [6]
get_key1 ( jelenlegi_hossz , index , szint ) { if total_length = jelenlegi_hossz : return "" sum = 0 az ábécé minden egyes karakterére new_level = level + mu ( char ) // kinézett az előre kiszámított tömbből size = partial_size1 [ current_length + 1 ][ new_level ] if sum + size > index // '|' karakterlánc-összefűzésre utal, visszatérési karakter | get_key1 ( jelenlegi_hossz + 1 , index - összeg , új_szint ) összeg = összeg + méret // a vezérlő nem ér ide print "index nagyobb, mint a kulcstér mérete" ; kilépés }Megjegyzések
A nulla sorrendű módszerhez hasonlóan a részleges szótárak is definiálva vannak .
Miután megkeresett egy karakterláncot a részleges szótárban , aggódnia kell az utolsó karakter miatt (figyelembe véve a digramot és annak eloszlását)
részleges_méret2 ( jelenlegi_hossz , előző karakter , szint ) { if level >= threshold : return 0 if total_length = current_length : return 1 sum = 0 minden karakterhez az ábécében if current_length = 0 new_level = mu ( char ) else new_level = level + mu ( prev_char ) , karakter ) összeg = összeg + részleges_méret2 ( jelenlegi_hossz + 1 , karakter , új_szint ) } get_key2 ( jelenlegi_hossz , index , előző karakter , szint ) { if total_length = current_length : return "" sum = 0 a karakterhez az ábécében if current_length = 0 new_level = mu ( char ) else új_szint = szint + mu ( előző karakter , karakter ) méret = részleges_méret2 ( jelenlegi_hossz + 1 , karakter , új_szint ) if összeg + méret > index return char | get_key2 ( jelenlegi_hossz + 1 , index - összeg , karakter , új_szint ) sum = összeg + méret // a vezérlő nem éri el ide print "index nagyobb, mint a kulcstér mérete" ; kilépés }Megjegyzés
Számos módja van az online szótártámadások elleni küzdelemnek :
Megjegyzések
Feltételezzük, hogy a megfelelő bejelentkezési/jelszó kombinációt a fiók felhasználója adja meg , míg a szótártámadást egy automatikus program hajtja végre. Szükséges, hogy a helyes jelszó megadásának kísérlete "számításilag egyszerű" legyen az emberek számára, és "számításilag nehéz" legyen a gépek számára.
A protokoll egy teszt, amely lehetővé teszi a szerver számára, hogy megkülönböztesse az embert a bottól . Először M. Naor ( eng. Moni Naor ) javasolta, és fordított Turing-tesztnek ( Reverse Turing-teszt (RTT) ) hívják, másik neve pedig CAPTCHA . A fordított Turing-tesztnek a következő feltételeknek kell megfelelnie: [7]
A képteszt minden fenti feltételnek eleget tesz.
1. protokoll (a Turing-féle fordított teszt kombinációja bármely hitelesítési rendszerrel) [8]
A felhasználót felkérik, hogy válaszoljon egy RTT üzenetre a hitelesítés megkezdése előtt (a bejelentkezés/jelszó megadása előtt ).
Megjegyzés
Ez a módszer nem optimális nagy rendszerek számára, mivel a felhasználó számára meglehetősen irritáló és pszichológiailag nehéz minden hitelesítés előtt megadni a választ az RTT-tesztre . [nyolc]
2. protokoll (felhasználói bejelentkezési protokoll, az 1. protokoll módosított változata) [8]
Ha a felhasználó sikeresen bejelentkezett, a szerver egy cookie -t küld a felhasználó számítógépére , amely tartalmazza a felhasználó hitelesítésének rekordját és az üzenet érvényességi idejét (feltételezve, hogy a süti információinak a szerver értesítése nélkül történő megváltoztatásának képtelensége (ez egy MAC ( üzenet hitelesítési kód ) hozzáadásával garantálható , amelynek kiszámítása egy csak a szerver által ismert
kulccsal történik).
Megjegyzések
Az offline szótári támadásokat a következő módokon lehet megelőzni vagy megnehezíteni:
A Trusted Platform Module (TPM) egy hardveres chip, amely lehetővé teszi a számítógépek számára az adatok biztonságának megőrzését. A TPM-kulcsok eléréséhez és használatához titkos információk (a továbbiakban - authData ) birtoklása szükséges .
A támadás során a kriptoanalitikus megtanulhatja: [9]
Az offline szótártámadások során a kapott információk alapján szótárakat állítanak össze az authData meghatározására .
Harcmódszerek - módosított SPEKE kriptográfiai módszerrel( Simple Password Exponential Key Exchange ), amely a Diffie-Hellman kulcscsere algoritmuson alapul (lehetővé teszi, hogy két fél közös titkosságot hozzon létre ( eng. erős megosztott titok ), gyenge megosztott titok alapján ( eng. gyenge titok ), amelyet megosztanak).
Protokoll (módosított kriptográfiai metódus SPEKE)
1. a felhasználó végrehajtja a jogosultsághoz szükséges parancsot authData -val ;
2. a felhasználói folyamatot és a TPM -et a SPEKE protokoll tartalmazza
, gyenge megosztott titokként használva ;
3. A felhasználói folyamat kiválaszt egy véletlenszerűt, és elküldi a TPM -nek , ahol a hash függvény ;
4. A TPM véletlenszerűen választ egyet , és elküldi a felhasználói folyamatnak;
5. mindegyik kiszámít egy titkot ;
6. helyébe a HMAC kulcs lép .
Megjegyzések