Programování | Hacking | NSA

NSA zveřejnila program pro hackery Ghidra. Odhalíme s ním heslo do fiktivní jaderné elektrárny

Americký národní bezpečnostní úřad NSA zveřejnil nový nástroj Ghidra k reverzní analýze softwaru. Program doposud interně používali inženýři světoznámé agentury k hledání malwaru a nejspíše i zranitelností, které poté mohli sami využít ve svých kybernetických operacích.

Ghidra rozšířila balík softwaru NSA, který dnes agentura publikuje pod svobodnou licencí, k čemuž má i svůj vlastní účet na GitHubu.

Prolomíme zabezpečení centrálního pultu fiktivní jaderné elektrárny

Pojďme si Ghidru vyzkoušet v praxi na nějakém modelovém příkladu. Dejme tomu, že jsem zlý hacker, kterému donesli na disketě tajemný program JadernaElektrarna.exe. Když jej spustím, program nastartuje v textovém režimu a oznámí, že se jedná o ovládací konzoli jaderné elektrárny Havlíčkův Brod!

dad4a93d-e061-4b31-9410-2875e58714d6
Program po nás chce heslo ředitele elektrárny

To zní zajímavě, ale má to jednu vadu na kráse. Ovládací program po mně požaduje heslo pana ředitele.

Nic takového pochopitelně po ruce nemám, ale jsem přece schopný hacker – reverzní inženýr, a tak sáhnu po některém z podobných nástrojů, které dokážou analyzovat libovolný program pro daný procesor a pokusí se jej znovu přeložit do čitelného kódu, který budu moci projít, abych pochopil, co se uvnitř programu vlastně děje.

d45cefda-a138-44b4-972a-5ef995683105
Ghidra startuje a dokládá, že i federální NSA miluje dramatická loga svých aplikací

Ghidra pochopitelně není jediná svého druhu, jelikož v ní ale mají prsty schopné mozky z NSA, mohla by fungovat na jedničku. Zároveň se jedná o multiplatformní nástroj napsaný v Javě, takže poběží jak na Windows, tak na macOS a linuxových systémech.

Analyzujeme program pomocí balíku Ghidra

Jdeme na to. Spouštím Ghidru, zakládám nový projekt a otevírám její klíčový nástroj CodeBrowser. Do něj konečně importuji náš tajemný program JadernaElektrarna.exe a nechám Ghidru provést jeho kompletní analýzu.

66df9ef7-7724-4e25-8556-5ca4b4a5d4a0
Zakládám nový projekt a vkládám do něj k analýze program JadernaElektrarna.exe

Ovládací aplikace jaderné elektrárny Havlíčkův Brod je napsaná v C++ a CodeBrowser na mě vyplivne tuny v jazyku symbolických adres (slangově assembleru), který nyní mohu instrukci po instrukci pročítat, a pokud objednám mnoho pizzy, za týden se možná doberu kýženého výsledku, jak je to s tím heslem pana ředitele.

93cb5323-e1d4-4589-ae1c-4f47ae2bbdc0
CodeBrowser, tedy pohled na strojový kód programu a pokus o jeho dekompilaci vpravo

Vyhledám, kde se v programu vyskytuje text „Zadejte heslo reditele“

Abych to urychlil, použiji vestavěný vyhledávač textových řetězců a podívám se, kde se v kódu přesně vyskytuje spojení Zadejte heslo reditele, protože přesně poté, co tuto zprávičku program vypíše do terminálu, z něj bude číst náš vstup, tedy heslo, které poté bude dále zpracovávat. A přesně tato část programu nás zajímá.

124e6ed5-e8d1-44d6-bbf2-6ed6f53f4044
Potřebuji se v toku programu dostat do okamžiku, kdy mě požádá, abych vyplnil heslo
d89063aa-8bc7-4449-9b11-5121a06a47cb
Nechám si vyhledat všechny textové řetězce v programu a podívám se, v jakých částech programu se vyskytuje žádost o heslo.

CodeBrowser nachází blok kódu, který potřebuji a já se podívám na jeho dekompilovanou a mnohem čitelnější podobu v C++. Z tohoto kódu je patrné, že se vstup z klávesnice postupně uloží do proměnné local_38 a _Buf1 a právě tu druhou proměnnou poté program porovnává pomocí funkce memcmp, což je standardní funkce C++ pro porovnání dvou bloků paměti.

Když tyto dva bloky paměti budou shodné, program pokračuje výpisem „Vítejte v jaderné elektrárně“ a pokračuje dál v běhu.

ad03a279-3de8-4fc1-a1df-e68a9b1b1fe2
Vyhledal jsem v kódu okamžik, kdy se program ptá na heslo a zjistil jsem, že je heslo ředitele součástí kódu a zároveň bez jakéhokoliv šifrování!

Reverzní analýzou jsem našel heslo v kódu

Při pohledu na funkci memcmp je patrné, že vstup z klávesnice se porovnává s pamětí v podobě prostého textu ve znění pred_spanim_ctu_zive.cz, z čehož plyne, že právě tento text bude představovat heslo ředitele elektrárny!

Zkusím jej použít v programu a… A jadernou elektrárnu Havlíčkův Brod právě ovládli nebezpeční hackeři z Brna.

71b7ee04-4e25-49d9-8613-92789a495b0c
Reverzní analýzou jsem se dopátral hesla. Skutečné programy kritické státní informační infrastruktury jsou naštěstí mnohem bezpečnější.

V reálných podmínkách by to tak jednoduché pochopitelně nebylo, neboť éra, kdy bylo takto důležité heslo a dokonce v prostém textu bez jakéhokoliv šifrování součástí zdrojového kódu programu, je už dávno minulostí. Tedy doufejme.

8e92a1b6-14be-4ac8-bb5d-3239fb43e128
Na závěr ještě náhled skutečného kódu C++ našeho primitivního textového programu ovladače fiktivní elektrárny. Můžete jej srovnat s tím, který Ghidra vytvořila dekompilací strojového kódu.

V praxi jsme si ale vyzkoušeli, jak podobné programy pro softwarový reverzní inženýring v principu fungují a proč jsou nedílnou výbavou počítače každého studenta IT, bezpečnostního analytika, inženýrů z antivirových společností a ano, nakonec i zlých hackerů všeho druhu.

Diskuze (18) Další článek: Jak rychle jste schopni nainstalovat Windows 95? Už i v tom se pořádají závody

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,