Python a kybernetická bezpečnosť – 30. časť
V predošlej časti seriálu sme prakticky predviedli jednu z možností, ako kompromitovať binárne súbory pomocou modifikácie obsahu zásobníka. V poslednej časti seriálu v rámci témy venovanej zabezpečeniu binárnych súborov predstavíme Software Reverse Engineering (SRE) framework Ghidra a linuxovú distribúciu Kali, ktorá je priamo určená na vykonávanie penetračného testovania. V závere v krátkosti zosumarizujeme obsah nášho seriálu.
Ghidra (github.com/NationalSecurityAgency/ghidra)
Ide o SRE framework naprogramovaný v jazykoch Java a C++, vytvorený (v roku 2019) a udržiavaný z úrovne National Security Agency (NSA) Research Directorate. Jeho súčasťou sú multiplatformové analyzačné nástroje vrátane asesmblera, disassemblera, dekompilátora, rôznych zobrazovacích a skriptovacích nástrojov a mnohých ďalších utilít, ktoré sa týkajú Binary Security. Framework je upravovateľný pre potreby konkrétnych analýz, podporuje rôzne množiny inštrukcií moderných CPU a rôzne formáty spustiteľných súborov. Navyše je rozšíriteľný o nové moduly prostredníctvom skriptov napísaných v jazykoch Java alebo Python. Framework bol vyvinutý najmä pre potreby analýzy nebezpečného kódu a hĺbkový pohľad dovnútra programov s cieľom pochopenia ich potenciálnych zraniteľností. Okrem toho je však použiteľný aj zo strany útočníkov, ktorí pomocou neho takisto dokážu vyhľadať zraniteľnosti a zneužiť ich na svoj prospech.
Inštalácia
Inštalácia frameworku Ghidra sa zdá veľmi jednoduchá, no opak je pravda. Vyplýva to najmä z toho, že Ghidra sa distribuuje vo forme vopred pripraveného balíka s vopred zostaveným spustiteľným súborom ghidraRun. Áno, na úspešné spustenie súboru stačí nainštalovať odporúčaný Temurin JDK/JRE, následne stiahnuť ZIP balík, rozbaliť ho a Ghidra sa ľahko spustí. Problém však nastane v prípade, ak chceme v rámci frameworku spustiť Ghidra debugging. Z dôvodu, že framework Ghidra bol a je vydaný v danom čase s danou verziou Pythonu a takisto s konkrétnou verziou Pythonu v rámci GDB, musíme všetky tieto verzie vzájomne zladiť. Ak totiž máme v našom systéme rozdielne verzie Pythonu a GDB Pythonu, resp. máme staršiu verziu GDB Pythonu a snažíme sa spustiť debugging v rámci najnovšej verzie frameworku Ghidra, s veľkou pravdepodobnosťou bude naša snaha neúspešná. Okrem toho si musíme dávať pozor na virtuálne prostredia Python (virtual environments). GDB Python totiž nerešpektuje žiadne venv. Správnu verziu Pythonu v rámci nášho systému teda musíme nainštalovať ako system-wide s použitím klauzuly --break-system-packages.

Obr. 1 Vzájomné prepojenie verzií Python, GDB Python a Ghidra
Konkrétne v našom prípade sme funkčný Ghidra debugging dosiahli takto:
1. Vo virtuálnom PC s „čerstvo“ nainštalovanou staršou distribúciou Bodhi Linux sme nainštalovali GDB:
sudo apt install gdb
2. Overili sme verziu GDB Pythonu (obr. 1):
(gdb) python import sys
(gdb) python print(sys.version)
3.8.5 (default, Jan 27 2021, 15:41:15)
3. Doinštalovali sme balíky:
sudo apt install temurin-21-jdk python3-psutil python3-protobuf
4. Stiahli sme zodpovedajúcu verziu frameworku Ghidra – konkrétne verziu 10.1 s dátumom vydania 10. 12. 2021, ktorá časovo približne zodpovedala verzii vydania GDB Pythonu.
5. Pri takto zladenej zostave sme nemali problém v rámci frameworku Ghidra vytvoriť nový projekt, importovať binárny súbor a.out, ktorý sme vytvorili v predchádzajúcej časti seriálu, a následne spustiť jeho analýzu a debugging v rámci Ghidra Debugger.
Ghidra debugging
Aplikačné prostredie frameworku Ghidra je pomerne rozsiahle a dosť zložité na rýchle pochopenie. Určite ide o „silný“ nástroj, ktorý poskytuje rozsiahle množstvo analytických nástrojov a zaslúži si rozsiahlejšie štúdium jeho funkcionalít.
V našom prípade sme sa zamerali na debugging binárneho súboru a.out, ktorý sme zostavili v rámci predošlej časti seriálu. Jednoduchým spustením Debuggera sme nezískali nijaký výstup, a to preto, lebo framework Ghidra nám neposkytol pokyn na zadanie textu, ktorý je súčasťou nášho programu. Po krátkom bádaní na internete sme zistili, že ak chceme výstup programu debuggovaného v rámci Ghidra zobraziť v okne terminálu, musíme použiť malý trik:
1. V okne terminálu zadáme príkaz tty, ktorým získame názov terminálu prepojeného so štandardným vstupom, v našom prípade /dev/pts/0.
2. V okne terminálu zadáme príkaz sleep 10000000.
3. V okne Interpreter frameworku Ghidra zadáme príkaz set inferior /dev/pts/0 (obr. 2).
4. Následne spustíme debugging a v prípade, ak sme všetko nastavili správne, v okne terminálu by sme mali vidieť už spomínaný pokyn „Zadaj text: ...“, pričom po zadaní textu a stlačení klávesu Enter by sme mali vidieť správu „Zadal si text: ...“.

Obr. 2 Ghidra debugging binárneho súboru a.out
V rámci frameworku Ghidra takto môžeme vykonávať debugging aplikácií a získavať tak nesmierne množstvo veľmi užitočných informácií potrebných na vykonávanie penetračných testov. Veľmi zaujímavá je napr. dekompilácia binárneho súboru, ktorou získame „odhad“ jeho programového kódu.
Kali Linux (kali.org)
Ktokoľvek z nás, kto sa venuje kybernetickej bezpečnosti a mal niekedy do činenia s vykonávaním penetračných testov, resp. sa akýmkoľvek spôsobom stretol s touto oblasťou, už určite počul o tejto úžasnej distribúcii. Kali Linux (pôvodne BackTrack) môže používať ktokoľvek, ale predovšetkým je určený pre skúsených testerov a bezpečnostných špecialistov. Má na to prispôsobené jadro, systémové prostredie a predinštalovanú špecifickú súpravu balíčkov. Je zbytočné písať viac. Všetci kyberzločinci aj kyberochrancovia už určite Kali poznajú. Ak sa nezaraďujete do žiadnej z týchto skupín a chceli by ste sa dozvedieť viac, všetko potrebné nájdete na domovskej stránke tejto distribúcie.
Záver
Úspešne sme sa prepracovali k 30. časti tohto seriálu, ktorého prvá časť bola publikovaná v januári 2023. Postupne sme predstavili základné možnosti a spôsoby využitia Pythonu v oblasti kybernetickej bezpečnosti a takisto viacero jeho najzaujímavejších knižníc, ktoré dokážeme využiť na splnenie úloh spojených s touto oblasťou. Venovali sme sa skenovaniu počítačových sietí, bezdrôtovým sieťam a ich zabezpečeniu, pokúšali sme sa kompromitovať cieľové zariadenia, získať prihlasovacie údaje či udržať našu prítomnosť po prihlásení. Ďalej sme sa venovali zabezpečeniu internetových prehliadačov, vzdialenému spúšťaniu procedúr, možnostiam kompromitácie dočasných úložísk, tunelovaniu, šifrovaniu, poštovým službám, analýze webového obsahu a okrem iného aj téme CTF. V záverečných častiach sme rozobrali oblasť Binary Security. Popri teórii sme často programovali aplikácie, pomocou ktorých sme prakticky realizovali viaceré skenovacie techniky a spôsoby narúšania cieľových systémov.
Kybernetická bezpečnosť je nekonečná téma. Faktom je, že kyberzločinci sa snažili, snažia a budú sa neustále snažiť o kompromitáciu systémov, na čo musia adekvátne reagovať vždy pripravení kyberochrancovia. Dialo sa tak v minulosti, deje sa tak práve teraz a bude sa tak diať navždy...
Zobrazit Galériu