
Python a kybernetická bezpečnosť / 20. časť
Túto časť seriálu venujeme vytvoreniu veľmi jednoduchého, ale nesmierne nebezpečného programu, ktorého úlohou bude zašifrovať produktívne súbory (doc, xls, ppt) nachádzajúce sa v zložke Dokumenty konkrétneho používateľa. Tentoraz nepôjde o aplikáciu klient – server, ale o dvojicu samostatných programov, z ktorých jeden bude určený na zašifrovanie a druhý na dešifrovanie spomínaných súborov. V podstate pokračujeme v téme, v rámci ktorej sa venujeme šifrovaniu. Využívame rovnaký balík PyCryptodome a všetky poznatky, ktoré sme získali v predošlých častiach seriálu.
Ransomvér
Výraz ransomvér (ransom – výkupné) súvisí so softvérom, ktorého úlohou je vykonať na zariadení obete nekalú činnosť, ako je napr. zablokovanie prístupu, zašifrovanie alebo odstránenie údajov či iné konfiguračné zmeny, pričom za obnovu systému do pôvodného stavu sa požaduje výkupné (najčastejšie peniaze). Takýto softvér sa dokáže do zariadenia obete dostať mnohými cestami, najčastejšie v prílohe e-mailu, ale aj počas prehliadania internetu, návštevy bankových portálov, firemných stránok či napr. aj prostredníctvom externých zariadení ako neželaný „doplnok“ legitímnych údajov. Obeť po tom, ako bola oklamaná útočníkom, spúšťa takýto softvér vlastným pričinením, to znamená, že útočník sa do zariadenia obete nemusí žiadnym spôsobom „nabúrať“. Obeť v tomto prípade predpokladá, že ide o užitočnú aplikáciu, resp. o aplikáciu, ktorú musí spustiť, aby splnila nevyhnutné podmienky a pravidlá. Tie sú však iba vymysleným podvrhom zo strany útočníka, ktorý sa obeť snaží presvedčiť, že spustenie aplikácie je správne alebo nevyhnutné. Smutná pravda je, že mnohé obete sa dajú presvedčiť – či už z nevedomosti, zo strachu, alebo z nedbanlivosti – a podvrhnutú aplikáciu spustia. V prípade ransomvéru teda nehovoríme iba o sofistikovaných útokoch vysoko erudovaných hackerov. Tí vlastne nemusia vykonávať žiadne prieniky ani nemusia mať obrovské znalosti prelomenia obranných systémov. Stačí im naprogramovať jednoduchú aplikáciu, doručiť ju na zariadenie obete a presvedčiť ju, aby aplikáciu spustila. Takíto útočníci nie sú hackermi v pravom zmysle slova, skôr ide o podvodníkov, ktorí sa zameriavajú na sociálne inžinierstvo a slabiny ľudí, ktorým chcú uškodiť.
Obr. 1 Obsah 18. časti seriálu a jeho zašifrovaná (nečitateľná) podoba
EncryptUserFiles.py (.exe)
Zdrojový kód programu EncryptUserFiles je úplne triviálny, má iba 32 riadkov a vykonáva nasledujúci algoritmus:
1. vytvorí zoznam (list) všetkých súborov, ktoré sa nachádzajú v zložke Documents v aktuálnej pracovnej zložke a majú príponu doc, docx, xls, xlsx, ppt alebo pptx:
doc_dir = os.path.join(os.getcwd(), 'Documents')
doc_ext = ('.doc', '.docx', '.xls', '.xlsx', '.ppt', 'pptx')
doc_files = list(Path(doc_dir).rglob('*' + e))
2. pre každý súbor vo vytvorenom zozname:
- otvorí a načíta obsah súboru,
- vytvorí nový súbor s rovnakým názvom a príponou enc,
- zarovná načítaný obsah súboru na CbcMode – block_size (pozri 19. časť seriálu),
- zašifruje zarovnaný obsah súboru,
- zapíše zašifrované údaje do vytvoreného nového súboru,
- odstráni pôvodný súbor.
Súbor s kódom dokážeme veľmi jednoducho pretransformovať na jeho spustiteľný variant exe pomocou balíka PyInstall (pozri 10. časť seriálu). Náš program z dôvodu zjednodušenia obsahuje definíciu kľúča a inicializačného vektora. Tie by útočník v reálnom nasadení nedistribuoval spolu s kódom, ale riešil by ich zadanie inou cestou. Takisto zmazanie pôvodných súborov by nebolo riešené ich jednoduchým odstránením zo súborového systému, ale napr. prepísaním ich obsahu náhodnými údajmi tak, aby ich obeť nemohla jednoducho obnoviť. Opakujem, že náš program je maximálne zjednodušený, ale plní stanovenú funkciu – zašifruje a zmaže všetky súbory určených typov zo zložky Documents. Obsah súborov sa stane nečitateľným a bez dešifrovania nepoužiteľným.
DecryptUserFiles.py
Program DecryptUserFiles je takisto triviálny (34 riadkov kódu), pričom jeho algoritmus vykonáva nasledujúce úlohy:
1. vytvorí zoznam (list) všetkých súborov, ktoré sa nachádzajú v zložke Documents v aktuálnej pracovnej zložke a majú príponu doc.enc, docx.enc, xls.enc, xlsx.enc, ppt.enc, alebo pptx.enc:
doc_dir = os.path.join(os.getcwd(), 'Documents')
doc_ext = ('.doc.enc', '.docx.enc', '.xls.enc', '.xlsx.enc', '.ppt.enc', 'pptx.enc')
doc_files = list(Path(doc_dir).rglob('*' + e))
2. pre každý súbor vo vytvorenom zozname:
- otvorí a načíta obsah súboru,
- vytvorí nový súbor s rovnakým názvom, ale bez prípony enc,
- dešifruje obsah súboru,
- odstráni zarovnanie dešifrovaného obsahu súboru,
- zapíše dešifrované údaje do vytvoreného nového súboru,
- odstráni pôvodný súbor s príponou enc.
Dešifrovací program z dôvodu zjednodušenia takisto priamo obsahuje definíciu kľúča a inicializačného vektora. Samozrejme, ide o ten istý kľúč a IV ako v predošlom prípade, no tentoraz nám ich prítomnosť priamo v kóde nijako neprekáža. Program je takisto maximálne zjednodušený, ale plní stanovenú funkciu – dešifruje všetky predtým zašifrované súbory v zložke Documents. Obsah súborov bude obnovený a stane sa čitateľným pre príslušné aplikácie Windows.
Komentáre
Obidva programy využívajú nám známy modul PyCryptodome, ktorého definičné súbory sa nachádzajú v zložke dist_packages/Crypto spolu s tzv. stub, resp. interface (.pyi) súbormi a shared object (.so) súbormi. Túto skutočnosť spomíname preto, lebo jednotlivé súbory vo svojom tele obsahujú vcelku komplexné komentáre vysvetľujúce činnosť jednotlivých funkcií, ale aj opis ich parametrov, kľúčových slov a hodnôt, ktoré vracajú na svojom výstupe. Uvedené informácie sú výhodné na štúdium detailov týkajúcich sa používania konkrétnych funkcií balíka Crypto, resp. PyCryptodome.
V závere musíme upozorniť na citlivé zaobchádzanie s prezentovanými programami, aby sa nestalo, že si nechcene zašifrujeme dôležité súbory a pri nerozvážnych modifikáciách programov, resp. zmenách šifrovacích kľúčov alebo IV ich nebudeme schopní dešifrovať.
Poznámka: Všetky zdrojové kódy možno stiahnuť zo stránky softengine.sk.
Zobrazit Galériu