Hesla a bruteforce

Ochrana heslem spadá do kategorie Security by obscurity - pro vstup je potřeba nějaká znalost, která se předpokládá u oprávněného uživatele. Pro uživatele neoprávněného zůstává utajená. Lidi, a hackeři zvláště, mají tajemství sice rádi, ale to jen proto, aby je mohli rozlousknout.

Základním problémem, trápícím snad každého začínajícího rádobyhackera, je, jak hacknout tomu či onomu uživateli heslo k mejlu, administrátorské heslo do Windows, nebo nějaké jiné heslo. A jedním z prvních programů. se kterými se takový jedinec setká, bývá WWWhack nebo Brutus.

Pro ty méně zkušené, a pro ty, kdo se chtějí nadšeně a nekriticky vrhnout na louskání hesel pomocí svého počítače s bůhvíjak výkonným procesorem, jsem stvořil tento článek, vzniklý úpravou mých starších příspěvků na http://forum.security-portal.cz/

Takže jak na ta hesla?

Abeceda (ASCII) má 26 malých písmen. Počet hesel, která lze z písmen složit, je počet písmen na počet pozic. Jednopísmenných hesel může být 27, dvoupísmenných 27x27, třípísmenných 27x27x27.
Jenže lidi nejsou volové, v heslech se mohou vyskytovat číslice, těch je deset, nebo různé paznaky. Pokud vaše heslo nevypadá jako b`f@l#m$p~s^v&z123, není to heslo.
Občas máme systémy case sensitive, Windows k nim původně nepatřily, ale všechny UNiXy ano. Velká písmena tak rozšiřují množinu použitelných znaků. Velkých písmen je taky 27, stejně jako malých. To jest celkem 95 použitelných znaků (a to jsme nepočítali s tím, že by si tam někdo dal češtinu, pak by počet písmen byl vyšší).
Pokud jde o desetipísmenné heslo, je počet kombinací 95^10, což je číslo s devatenácti nulami (skoro šedesát triliard).

Vraťme se pro jednoduchost úvahy k tomu, že oběť používá jenom malá písmenka bez ničeho. 27 znaků.
Odkud že víme, že heslo má přesně 10 znaků? Nevíme. Rozhodneme se tedy testovat nějakou rozumnou šíři, řekněme od čtyř do dvanácti znaků. Kolik různých hesel splňujících tyto parametry existuje?

Vezmeme si na pomoc nějaký programovací jazyk.
Pro jednoduchost jsem zvolil Chipmunk Basic, který je jednoduchý a snadno pochopitelný pro začátečníky, pokročilejším pak umožní snadno si program přepsat a upravit pro svoje oblíbené vývojové prostředí (RapidQ, Perl, ...). Jeho výhodou je příjemná cena "zdarma" a multiplatformnost - Apple, Windows, Linux - www.nicholson.com/rhn/basic/ a hlavně 01d5k001 5ty13 (peklo ožívá, démon se probouzí, klasika sedmdesátých let se vrací).
Program se po vložení doChipmunk Basicu spustí povelem run.
Výpočet v ChipmunkBasicu pro obecný počet znaků a obecný rozsah hesla vypadá takto:

 

Pro 27, 4..12 je výsledek 1.5e17 (číslo se sedmnácti nulami). A to jsme se prosím vzdali všech paznaků, které v dobrém hesle ovšem očekáváme!
Zkuste si vynásobit, kolik let (století, miliónů let, miliard let, ...) budete potřebovat na vyzkoušení takového kvanta hesel. To dříve váš počítač zastará, než pár hesel lousknete.
Zkuste si do programu doplnit jiné vstupní údaje - zkuste zkracovat a prodlužovat heslo, přidávat a ubírat znaky, a sledujte, co to dělá s počtem vyhovujících hesel.

Co z toho všeho plyne?

Bruteforce je na nic.
Zvykněte si, že rozumně hacknutelní jsou jen ti, co si volí samozřejmá nebo slovníková hesla. Jakmile ale k takovému (ne)heslu přidají byť jedinou číslici nebo paznak, už nejsou dosažitelní slovníkovým útokem. U slovníkového útoku obvykle víte, kolik hesel slovník obsahuje, takže do popředí vyvstává spíš problém vhodné volby slovníku než co jiného. Časová náročnost je lineární s velikostí slovníku, takže snadno odhadnutelná. Dobrý zvyk je taky pamatovat si, jaká defaultní hesla dávají výrobci toho kterého počítače, routeru, operačního systému, případně programu (mailserver, firewall, ...), pokud nějaký nedbalý správce zapomene heslo změnit, máte u něj vstup volný. Pokud ale zvolené heslo není slovníkové (podívejte se na některé seznamy hesel z hacknutých serverů a zjistíte, že hesla ve valné většině slovníková jsou a hackují se relativně snadno), je lepší neztrácet čas a na bruteforce raději zapomenout.
Asi by se hodilo napsat, na co tedy bruteforce vlastně je.
Bruteforce je limitován rychlostí připojení, která není nekonečně rychlá, a počty kombinací.

Chci-li ho používat, pak musím:
1) obejít rychlost připojení
2) snížit počet možných kombinací hesel

Tedy, louskat hesla tak, že si stáhnu třeba soubor /etc/shadow nebo SAM soubor z Windows 2000/XP, PWL z Windows 95/98. A na lokálním počítači ho podrobit dejme tomu slovníkovému útoku. Nemusím čekat, až vzdálený počítač přijme login, heslo, a potvrdí (nebo naopak odmítne) spojení. Tím jsem získal rychlost. Zůstává ale ještě nutnost pocvičit si další schopnosti získáváním inkriminovaného souboru s hashovanými hesly.

Další možnost, na kterou je BF dělaný, je louskání částečně známého hesla.
Dejme tomu, že vidím, jak oběť ťuká desetiznakové heslo. Protože si dává pozor, abych to neviděl, všimnu si jen prvních pěti písmen, závěrečné číslice a toho, že při psaní zbylých znaků oběť mačkala dvakrát shift.

Takže si nadefinuju symbol pro neznámý znak, předdefinuju délku hesla na deset znaků, doplním znaky, kterých jsem si všimnul, obor dosazovaných znaků malá písmena + čísla bych měl obohatit (díky mačkanému shiftu) buď o paznaky nebo velká písmena. Vlastně tak hledám jen čtyřpísmenné heslo (čtyři znaky, kterých jsme si nevšimnul). To už je v nejhorším případě (všechny možné znaky) jen něco přes 80 milionů kombinací.

Zvykněte si na to, že existují i obtížně hackovatelné, relativně dobře zabezpečené počítače. Aspoň já jsem jenom rád, že existuje jednoduchý způsob, jak můžu sebe i svůj počítač ochránit před blbci s WWWhackem v ruce!
Když už je řeč o WWWhacku a příbuzných zrůdách, ukažme si generátorek "wordlistů". Přesněji, nejde o klasický slovníkový útok, kde se používají jen definovaná "smysluplná" slova, ale generátor passwordlistu pro bruteforce attack, který vygeneruje všechny kombinace hesel, které lze vytvořit ze zadané množiny znaků a se zadanými délkami. Přitom jen tak mimochodem počítá, kolik hesel dané parametry splňuje (to tu už jednou bylo).

Pokud v programu řádek "55 print p$" přepíšete na "55 print #1,p$", budou se hesla vypisovat do souboru, nikoliv na obrazovku, a vzniklý soubor pak lze použít jako wordlist při offline útoku (nebo i online, ale pak si někde sežeňte nesmrtelnost, protože to potrvá nejspíš věky).

 

Když už jsem v tom, kouknul jsem se na použití socketu v Chipmunku a napsal další program jako příspěvek k tématu "jak funguje WWWhack a podobné bruteforcery".
Program je v zásadě primitivní, měl by být pochopitelný, předvádí, jak je možné útočit na FTP server. Je postaven na tom, že FTP se po připojení na port 21 přihlašuje pomocí příkazů USER a PASS, server vám odpovídá pomocí hlášek, které jsou na začátku očíslované - 230 je OK, které vám pošle po přihlášení, 530 naopak označuje neúspěšný přihlašovací pokus.

Wordlistem se myslí textový soubor se seznamem hesel - ty lze buď najít na netu, nebo si je nechat vygenerovat předchozím programem.

 

Nakonec, ať žije OpenSource, na disku se mi válí Céčkový zdroják bruteforceru Noxious od skupiny Nexus 9, tak ho sem dávám jako ukázku, že princip je stále tentýž a i při použití různých programovacích jazyků se nemění (jenom si všimněte, jak je program v Basicu kratší a tudíž lépe pochopitelný).

 

No a to by mohlo být zatím k tématu všechno.