Forenzní analýza šifrovaných dat
Kryptograficky zabezpečený obsah je asi největším strašákem forenzních expertů. Za šiframi se ale často skrývají ty nejzajímavější stopy. Lze to nějak řešit? Ano. V tomto článku si ukážeme postupy pro automatizovanou kryptoanalýzu šifrovaného obsahu a dostupné nástroje, včetně těch, které vyvinuli výzkumníci z Fakulty informačních technologií VUT v Brně.
kryptoanalýza šifrovaného obsahu GPU distribuovaný výpočet forenzní analýza
Při dohledávání digitálních důkazů dnes vyšetřovatelé stále častěji narážejí na obsah, který je chráněn heslem. Může jít o webové služby a systémy, dokumenty, archivy, disky či mobilní zařízení. Kryptografické zabezpečení dat představuje značnou překážku a dokáže zkomplikovat, ne-li znemožnit, jejich další zkoumání. Není-li vlastník dat ochoten heslo poskytnout a nelze-li je jinak odvodit, je často jedinou možností útok silou s cílem takové zabezpečení prolomit. Tento proces se nazývá lámání hesel (password cracking) nebo též obnova hesel (password recovery).
Lámání hesel
Proces lámání hesel sestává ze dvou opakujících se fází:
- generování kandidátních hesel (candidate passwords) nebo též hádání hesel (password guessing),
- jejich ověřování (password verification).
Způsob, jakým hesla hádáme, udává typ prováděného útoku: hrubou silou, s použitím slovníků, pravidel, gramatik apod. Ověřování hesla pak může probíhat „online“, kdy se na správnost hesla dotazujeme jiného subjektu, např. vzdáleného serveru. Zde však často narážíme na časové prodlevy a omezený počet pokusů. Druhou možností je útok „offline“, kdy máme k dispozici samotný zabezpečený obsah a nejsme tedy závislí na externí službě. Ověřování hesel můžeme provádět:
- Na základě heše – pokud máme k dispozici kryptografický otisk (např. SHA-3) správného hesla. V tomto případě vezmeme kandidátní heslo, spočítáme jeho heš a porovnáme jej s uloženým. Tento způsob se používá při ověřování hesel operačních systémů Windows a Unix nebo šifrovaných dokumentů PDF či Office Open XML.
- Dešifrováním – známe-li část obsahu v otevřené podobě, můžeme z hesla zkusit odvodit šifrovací klíč a provést útok typu „known-plaintext attack“. Takto lze ověřovat např. hesla disků šifrovaných pomocí TrueCrypt a Vera- Crypt. Zde stačí dešifrovat hlavičku oddílu a hledat řetězce „TRUE“ či „VERA“.
- Kontrolním součtem – pokud neznáme heš hesla ani část obsahu. Příkladem jsou archivy ZIP šifrované starší proudovou šifrou PKZIP stream cipher. Každý soubor má v archivu hlavičku, kde je k dispozici jeho kontrolní součet CRC. Stačí proto vzít jeden soubor, provést dešifrování, dekompresi, přepočítat kontrolní součet a porovnat jej s uloženým.
Akcelerace pomocí grafického procesoru (GPU)
Pokud hádání i ověřování hesel zautomatizujeme, závisí rychlost lámání pouze na použitém algoritmu a dostupných výpočetních kapacitách. Popsaný proces lze naštěstí velice dobře paralelizovat. Obecně nám totiž nic nebrání ověřovat několik hesel současně. Teoreticky nás limituje pouze počet dostupných výpočetních jader.
A právě zde nachází potenciál grafické procesory. Klasický procesor CPU typicky obsahuje několik velice rychlých jader. Na GPU bývá taktovací frekvence jader výrazně nižší, ovšem na jediné kartě najdeme stovky či tisíce jader. Jde de facto o paralelní multiprocesor na principu „single program, multiple data“ (SPMD). Pomocí technologií knihoven OpenCL či NVIDIA CUDA můžeme na GPU provádět i obecný výpočet – zde tedy konkrétně paralelní ověřování hesel.
Akcelerace výpočtů pomocí GPU má proto značné uplatnění právě v oblasti automatizované kryptoanalýzy. S naším experimentálním nástrojem Wrathion1 vyvíjeným v letech 2013 až 2016 jsme byli na jediné GPU schopni dosáhnout až 30× rychlejšího ověřování hesel oproti CPU. Přidáním další GPU se výkon takřka zdvojnásobil. [1] Za úspěchem stojí právě zmíněná technologie OpenCL, díky které se podařilo kritické části kódu masivně paralelizovat. Jak ukazuje Obr. 1, nástroj tvoří jádro, množství modulů a uživatelské rozhraní. Jádro obsahuje řídicí subsystém pro kontrolu jednotlivých procesorů a množství generátorů hesel pro různé typy útoků. Moduly slouží pro ověřování hesel, každý z nich obsahuje kód pro ověřování hesel jak na CPU, tak na GPU, přičemž uživatel si může vybrat, který se použije.
Podobnou cestou se v průběhu let pustili také další vývojáři včetně komerčních distributorů forenzního softwaru jako AccessData, Elcomsoft či Passware. GPU akcelerace se dočkaly i volně dostupné nástroje. Za zmínku stojí např. legendární software John the Ripper, který je vyvíjen již od roku 1996. Hashcat je pak volně dostupný nástroj, který autoři označují za „nejrychlejší lamač hesel na světě“. Tento titul je zřejmě oprávněný, neboť jeho tým získal2 celkem sedm vítězství v soutěži Crack Me If You Can (CMIYC) v posledních deseti letech. Veškeré kryptografické algoritmy se v aktuální verzi udržují již pouze v implementaci pomocí OpenCL. Oba dostupné nástroje mají velice podobnou architekturu jako nástroj Wrathion, a lze je tedy prostřednictvím modulů snadno rozšířit o nové algoritmy.
Distribuovaný výpočet
Riziko útoků akcelerovaných pomocí GPU samozřejmě vnímají i tvůrci kryptografického zabezpečení, a pozorujeme proto trend zvýšit náročnost ověření hesla. Příkladem může být dokument vytvořený v aplikaci Microsoft Word 2003, který je zabezpečený osmiznakovým heslem složeným z písmen a číslic. Pro útok hrubou silou je nutné vyzkoušet až 2,18 × 1014 možností. Hashcat toto na legendární NVIDIA GTX 1080 Ti zvládne v nejhorším případě za pět dní. Pokud ale stejné heslo použijeme k zabezpečení dokumentu Microsoft Word 2013, prolomení stejného hesla na stejné kartě může trvat až 559 let. Sáhneme-li po novější RTX 2080 Ti, dosáhneme zrychlení asi o 60 %. Můžeme samozřejmě nasadit více karet a na trhu jsou řešení zahrnující až 12 GPU v jednom stroji. Stále však k prolomení potřebujeme až desítky let.
Pro náročnější úlohy je proto nutné nasadit distribuované zpracování. K tomu je potřeba řešení, které úlohu dokáže efektivně rozdělit mezi více výpočetních uzlů. Dalším způsobem, jak snížit čas nutný k prolomení hesla, je chytřejší hádání – např. s využitím existujících znalostí o tvorbě hesel či nasazením pravděpodobnostních modelů. Oba přístupy zvládá systém Fitcrack, který naše výzkumná skupina vytvořila jako experimentální funkční vzorek.
Systém Fitcrack
Fitcrack3 je systém pro distribuované lámání kryptografických hešů a hesel pro přístup k zabezpečenému obsahu. Může jít o uživatelská hesla k aplikacím, systémům, službám, ale také k Wi-Fi sítím. Dále jde o hesla šifrovaných dokumentů MS Office, PDF, archivů ZIP, 7z, RAR či diskových oddílů zabezpečených nástroji jako VeraCrypt či BitLocker.
Naše řešení využívá architekturu klient-server, kde server spravuje výpočetní úlohy a rozděluje je na menší pracovní jednotky. Tyto jednotky řeší klienti, což jsou výpočetní uzly se zařízeními podporujícími technologii OpenCL, např. GPU od výrobců NVIDIA a AMD, ale i CPU, FPGA či koprocesory. Využíváme zde platformu pro distribuované výpočty Berkeley Open Infrastructure for Network Computing (BOINC), se kterou je připojení nového uzlu velice jednoduché. Stačí nainstalovat aplikaci BOINC Client a veškeré další programy a data se stáhnou automaticky. Klientem může být jak specializovaný stroj s mnoha GPU, tak obyčejný kancelářský počítač, který během dne slouží k běžné práci a mimo pracovní dobu se stane součástí výpočetní sítě. Díky tomu mohou uživatelé naplno využít všechny dostupné výpočetní kapacity. Komunikace probíhá přes síť TCP/ IP, přičemž uzly nemusejí být nutně v jednom datacentru, ale může je tvořit i více výpočetních středisek v různých lokalitách – např. jednotlivých pobočkách instituce, která Fitcrack používá. [2]
Pro dosažení maximálního výkonu provádí ověřování hesel nástroj Hashcat, díky kterému systém podporuje přes 300 různých zabezpečených formátů. Pro obsluhu systému je k dispozici aplikace WebAdmin, jejíž grafické rozhraní ukazuje Obr. 2. Při vytváření úlohy je možné zadat jak konkrétní haše, tak nahrát šifrovaný soubor, např. dokument Office či archiv ZIP. O jeho zpracování a extrakci potřebných hešů se systém postará sám. Následně uživatel zvolí konfiguraci útoku (viz dále) a výpočetní uzly, které se na řešení mají podílet. Je také možné nastavit další parametry úlohy jako plánovaný čas spuštění, maximální dobu řešení a požadovanou granularitu pracovních jednotek.
Výpočet řídí adaptivní plánovací algoritmus, který zohledňuje stav a výpočetní kapacity konkrétních uzlů, celkový průběh výpočtu a množství již přidělené práce. [3] Server také implementuje mechanismy zotavení z chyb, díky čemuž je schopen se vyrovnat např. s výpadky uzlů nebo linek propojující sítě. Pro každý typ útoku používá systém Fitcrack unikátní plánovací strategii, jejímž cílem je efektivní řešení přidělené úlohy. [2, 4]
Typy útoků
Volba útoku by měla zohledňovat naši znalost o heslu, které se snažíme najít. Zohlednit můžeme bezpečnostní politiky – např. minimální délku hesla či nutnost obsahovat některé znaky. Uživatelé, pokud mohou, často používají jednoduchá hesla. Mnohdy také zvolí stejné heslo na více místech současně. [5] Je proto vhodné vyzkoušet často používaná hesla ze známých slovníků. Využít můžeme i pokročilých metod, které zohledňují uživatelské zvyklosti při tvorbě hesel. Pro slovníkové útoky můžeme využít pravidel, která hesla modifikují – mění velikost písmen, nahrazují „a“ za „@“ nebo přidávají na konec hesla číslo. I při útoku hrubou silou nástroje Hashcat nebo John nepoužívají znaky v pořadí dle abecedy, ale dle četnosti výskytů na základě frekvenční analýzy existujících textů. Mnohé algoritmy proto vycházejí z matematických modelů, jako jsou Markovovy řetězce nebo formální gramatiky. [7]
Systém Fitcrack – typy útoků:
- Slovníkový útok – hesla se zkoušejí z jednoho či více slovníků.
- Útok hrubou silou – zkoušejí se všechny přípustné znaky dle zadané masky hesla. Maska je předpis, který udává, jaké znaky se mohou vyskytovat na kterých pozicích.
- Kombinační útok – generují se kombinace hesel z více slovníků.
- Hybridní útoky – část hesla se vezme ze slovníku a část se generuje hrubou silou.
- Útok typu PRINCE – jde o pokročilý kombinační útok, který využívá algoritmu Probability Infinite Chained Elements (PRINCE). [6]
- Útok typu PCFG – tento útok tvoří hesla za použití pravděpodobnostních bezkontextových gramatik – Probabilistic Context-Free Grammars (PCFG). Matematický model, který s využitím pravděpodobnosti popisuje možnou strukturu hesla na úrovni fragmentů složených z písmen, číslic a speciálních znaků. Umožňuje tak modelovat uživatelské zvyklosti při tvorbě hesel. [7]
Porovnání výkonnosti
V rámci našich experimentů jsme nástroj srovnali s řešením Hashtopolis4. Jedná se v současnosti o jediný známý volně dostupný software, který umožňuje lámat hesla distribuovaně s použitím nástroje Hashcat. Pro modelovou úlohu jsme využili známého algoritmu SHA-1, jehož heše jsme se snažili prolomit na osmi fyzických počítačích s NVIDIA GTX 1050 Ti.
V prvním experimentu jsme měřili, jak dlouho trvá oběma systémům vyzkoušet všechna hesla o průměrné délce osmi znaků ze slovníků o velikosti 1 až 8 GB. Se systémem Fitcrack jsme byli schopni úlohu vyřešit za mnohem kratší dobu. Důvodem je odlišná strategie pro distribuci úlohy. Hashtopolis na začátku pošle celý slovník všem uzlům a následně nechá každý uzel procházet jeho část. Tato strategie je jednodušší na implementaci, ale přidává značnou režii pro přenos. Protože použitý protokol HTTP(S) nepodporuje broadcast, je škálovatelnost takového útoku problematická. Každý další uzel představuje potenciální zdržení při startu. Systém Fitcrack oproti tomu posílá každému uzlu pouze fragment slovníku, jehož velikost závisí na konfiguraci a výkonu konkrétního uzlu. Každý uzel tedy obdrží pouze hesla, která skutečně potřebuje. Dalším důvodem, proč systém Fitcrack dosáhl lepších výsledků, je zřetězené zpracování – zatímco uzel počítá jednu pracovní jednotku, na pozadí se stahuje další část úlohy, na kterou je možné ihned „přepnout“. [4]
Zřetězené zpracování přineslo výhody i při útoku hrubou silou. Zde jsme zkoušeli stejný algoritmus na totožné výpočetní síti. Maska hesla obsahovala na všech pozicích malá písmena. Zkoušeli jsme tedy, jak dlouho trvá vyzkoušení všech hesel délky 8, 9 a 10 složených z malých písmen. Byť rozdíl není tak markantní jako při distribuovaném slovníkovém útoku, systém Fitcrack vyzkoušel požadovaná hesla rychleji při použití stejného hardwaru. Roli zde hrál také plánovací algoritmus a odlišná granularita vytvářených pracovních jednotek. [4]
V prvním experimentu jsme měřili, jak dlouho trvá oběma systémům vyzkoušet všechna hesla o průměrné délce osmi znaků ze slovníků o velikosti 1 až 8 GB. Se systémem Fitcrack jsme byli schopni úlohu vyřešit za mnohem kratší dobu. Důvodem je odlišná strategie pro distribuci úlohy. Hashtopolis na začátku pošle celý slovník všem uzlům a následně nechá každý uzel procházet jeho část. Tato strategie je jednodušší na implementaci, ale přidává značnou režii pro přenos. Protože použitý protokol HTTP(S) nepodporuje broadcast, je škálovatelnost takového útoku problematická. Každý další uzel představuje potenciální zdržení při startu. Systém Fitcrack oproti tomu posílá každému uzlu pouze fragment slovníku, jehož velikost závisí na konfiguraci a výkonu konkrétního uzlu. Každý uzel tedy obdrží pouze hesla, která skutečně potřebuje. Dalším důvodem, proč systém Fitcrack dosáhl lepších výsledků, je zřetězené zpracování – zatímco uzel počítá jednu pracovní jednotku, na pozadí se stahuje další část úlohy, na kterou je možné ihned „přepnout“. [4]
Zřetězené zpracování přineslo výhody i při útoku hrubou silou. Zde jsme zkoušeli stejný algoritmus na totožné výpočetní síti. Maska hesla obsahovala na všech pozicích malá písmena. Zkoušeli jsme tedy, jak dlouho trvá vyzkoušení všech hesel délky 8, 9 a 10 složených z malých písmen. Byť rozdíl není tak markantní jako při distribuovaném slovníkovém útoku, systém Fitcrack vyzkoušel požadovaná hesla rychleji při použití stejného hardwaru. Roli zde hrál také plánovací algoritmus a odlišná granularita vytvářených pracovních jednotek. [4]
Závěrem
Akcelerace pomocí GPU přinesla revoluci v oblasti automatizované kryptoanalýzy zabezpečeného obsahu. Masivně paralelní ověřování hesel je trend, který ovlivnil komerční i volně dostupné nástroje. Kde končí možnosti jednoho stroje, nastupuje distribuovaný výpočet. Dosavadní výzkum ukazuje, že silně záleží na implementaci nejen samotného ověřování hesel, ale také způsobu, jak úlohu distribuujeme. Jsem přesvědčen, že v budoucnu můžeme očekávat další pokroky v této oblasti a také nové, důmyslnější a „chytřejší“ typy útoků.
Popsaný výzkum byl řešen v rámci projektů:
- Sec6Net – integrovaná platforma pro zpracování digitálních dat z bezpečnostních incidentů, MV ČR – Bezpečnostní výzkum České republiky 2015–2020, VI20172020062, 2017–2020, ukončen, zahájení: 2017- 01-01, ukončení: 2020-06-30
- TARZAN – moderní prostředky pro boj s kybernetickou kriminalitou na Internetu nové generace, MV ČR – Program bezpečnostního výzkumu České republiky 2010–2015, VG20102015022, 2010–2015, ukončen, zahájení: 2010-10-01, ukončení: 2015-09-30
Poznámky pod čarou:
- https://wrathion.fit.vutbr.cz/
- https://contest.korelogic.com/
- https://fitcrack.fit.vutbr.cz/
- https://github.com/s3inlc/hashtopolis
Použité zdroje:
[ 1 ] R. HRANICKÝ, P. MATOUŠEK, O. RYŠAVÝ a V. VESELÝ, „Experimental Evaluation of Password Recovery in Encrypted Documents,“ v Proceedings of ICISSP 2016, Řím, 2016.
[ 2 ] R. HRANICKÝ, L. ZOBAL, V. VEČEŘA, M. MÚČKA, A. HORÁK a D. BOLVANSKÝ, The architecture of Fitcrack distributed password cracking system, verze 2, Brno: Fakulta informačních technologií VUT v Brně, 2020.
[ 3 ] R. HRANICKÝ, M. HOLKOVIČ, P. MATOUŠEK a O. RYŠAVÝ, „On Efficiency of Distributed Password Recovery,“ The Journal of Digital Forensics, Security and Law, sv. 11, č. 2, pp. 79–95, září 2016.
[ 4 ] R. HRANICKÝ, L. ZOBAL, O. RYŠAVÝ a D. KOLÁŘ, „Distributed password cracking with BOINC and hashcat,“ Digital Investigation, sv. 30, č. 1, pp. 167–172, září 2019.
[ 5 ] J. BONNEAU, „The Science of Guessing: Analyzing an Anonymized Corpus of 70 Million Passwords,“ v Proceedings of 2012 IEEE Symposium on Security and Privacy, San Francisco, 2012.
[ 6 ] J. STEUBE, „PRINCE: modern password guessing algorithm,“ v Preproceedings of the 7th International Conference on Passwords, Trondheim, 2014.
[ 7 ] M. WEIR, S. AGGARWAL, B. D. MEDEIROS a B. GLODEK, „Password Cracking Using Probabilistic Context-Free Grammars,“ v 30th IEEE Symposium on Security and Privacy, Berkeley, 2009.