S_022025_RING Advertisement S_022025_RING Advertisement S_022025_RING Advertisement

Python a kybernetická bezpečnosť – 21. časť

Python
0

V tejto časti seriálu naprogramujeme ďalšiu verziu našej vzorovej aplikácie, pričom ju doplníme o funkcionalitu čítania informácií z údajových súborov MS Outlook. Tieto údajové súbory sú ďalším nesmierne cenným artiklom, ktorý nám ponúka obrovské množstvo informácií nielen o používateľovi (obeti), ale aj o cieľovom zariadení, resp. o sieťovom okolí daného zariadenia. Súbory PST sa štandardne nachádzajú v domovskej zložke konkrétneho používateľa, presnejšie v podzložke Dokumenty. V prípade, že sme účet úspešne kompromitovali, nie je problém stiahnuť údajový súbor (údajové súbory) PST a analyzovať ho (ich) v offline režime, napr. aj prostredníctvom jednoduchého programu napísaného v jazyku Python.

S_022025_S25 Advertisement  

PST (Personal Storage Table)/OST (Offline Storage Table)

Súbory PST/OST vytvára aplikácia MS Outlook počas pridania používateľských účtov, ale aj neskôr počas konfigurácie aplikácie, konkrétne pri práci s údajovými súbormi. Súbory PST sa týkajú účtov POP a obsahujú lokálnu kópiu informácií nachádzajúcich sa na serveri. Nehovoríme pritom iba o e-mailových správach, ale aj o obsahu kalendára, kontaktoch, poznámkach a úlohách. PST teda reprezentujú lokálny archív údajov. Okrem iného ich možno použiť aj na transfer/migráciu údajov medzi zariadeniami. súbory OST sa týkajú účtov Office 365, IMAP, Exchange a Outlook.com. Vytvárajú sa v prípade, ak používame tzv. cached exchange mode. Sú určené na offline prácu, ak dôjde k prerušeniu spojenia so serverom. Po opätovnom nadviazaní spojenia sa vykoná automatická synchronizácia informácií. Dôležitý je fakt, že obsah súborov PST je na rozdiel od OST ukladaný v otvorenej forme. To značí, že je čitateľný nielen v rámci MS Outlook, ale aj inými aplikáciami. Práve túto možnosť dokážu využiť záškodníci. Stačí, ak súbor stiahnu na vlastný počítač. Následne ho dokážu bez problémov hĺbkovo analyzovať a získať tak neuveriteľné množstvo cenných/citlivých informácií.

Libratom (https://github.com/libratom/libratom)

Libratom je knižnica Python vytvorená tímom RATOM (Review, Appraisal, and Triage of Mail) a je primárne určená na prácu so súbormi PST/OST a súbormi mbox s využitím Natural Language Processing (NLP). Knižnicu Libratom nainštalujeme s využitím inštalátora Pip pomocou príkazu pip install libratom. Knižnica pri svojej práci využíva funkcionalitu knižnice Libpff (https://github.com/libyal/libpff), ktorá sprostredkováva prístup k Personal Folder File (PFF) a Offline Folder File (OFF), konkrétne k súborom PAB (Personal Address Book), PST a OST.


Obr. 1 Vzťah medzi knižnicou libpff a libratom

Dokumentácia k práci s funkcionalitou, ktorú poskytujú uvedené knižnice, je veľmi „riedka“. Jednotlivé algoritmy možno naštudovať viac-menej z rôznych vzorových príkladov. V našom prípade sme sa zamerali na funkcionalitu týkajúcu sa čítania súborov PST, konkrétne správ (messages). Využívame pri tom fakt, že obsah súborov PST nie je šifrovaný, a teda je prístupný v otvorenej forme. V rámci našej aplikácie sa zameriavame na metódy triedy PffArchive(), ktorá je definovaná v súbore libratom/lib/pff.py. Na získavanie údajov týkajúcich sa konkrétnej správy využívame funkcie už spomínanej knižnice Libpff, deklarované v súboroch pypff/pypff_message.h, libpff/libpff_message.h a definované v súboroch pypff/pypff_message.c, libpff/libpff_message.c.

Konkrétne ide o nasledujúce funkcie:

get_sender_name()

Meno odosielateľa

get_subject()

Subjekt správy

get_client_submit_time()

Dátum a čas odoslania správy

get_number_of_attachments()

Počet príloh

get_transport_headers()

Transportné hlavičky

plain_text_body / html_body / rtf_body

Obsah správy

 

Sieťový skener v6.0

Na prezentáciu možností čítania obsahu súborov PST sme nám známu aplikáciu Sieťový skener doprogramovali o novú funkcionalitu, ktorú sme umiestnili do nového súboru pages/page7.py. V úvode importujeme triedu PffArchive knižnice libratom.lib.pff. Ďalej vytvárame objekt triedy PffArchive, ktorému odovzdávame meno súboru PST, ktorého obsah chceme prečítať. Najvýraznejšie zmeny sú na konci súboru page7.py, kde sme naprogramovali dve callback funkcie: 

1. Reakcia na stlačenie tlačidla PREČÍTAJ SÚBOR:

  • pre všetky zložky (folders) nachádzajúce sa v súbore PST,
  • pre všetky správy (messages) nachádzajúce sa vo všetkých zložkách,
  • získaj meno odosielateľa, subjekt, dátum a čas odoslania a počet príloh správy,
  • pridaj získané údaje do Pandas DataFrame.

Poznámka: Údaje v DataFrame sa v pravidelných intervaloch zobrazujú v tabuľke na webovej stránke aplikácie.


Obr. 2 Základné informácie o správach načítaných z MS Outlook súboru PST

2. Reakcia na kliknutie myšou v rámci tabuľky:

  • získaj identifikátor aktívneho (vybratého) riadka tabuľky,
  • pre všetky správy nachádzajúce sa vo všetkých zložkách súboru PST,
  • ak sa poradie správy rovná identifikátoru vybraného riadka,
  • získaj obsah správy a transportné hlavičky,
  • otvor dialógové okno, v rámci ktorého zobraz získané údaje (message headers, content).


Obr. 3 Transportné hlavičky a obsah správy

Ako obyčajne neriešime reakciu na všetky možné chybové stavy a náš kód nie je nijako optimalizovaný a vonkoncom nie je efektívny. Naším cieľom však bolo ukázať, ako jednoducho možno pomocou Pythonu a jeho knižnice Libratom prečítať obsah súborov PST. Transportné hlavičky, no aj obsah správ predstavujú pre potenciálneho útočníka veľmi cenný zdroj informácií. Hlavičky obsahujú napr. názvy a IP adresy poštových serverov, e-mailové adresy komunikujúcich strán, URL jednotlivých domén, mená osôb a, samozrejme, samotný obsah správ vrátane mien, názvov, podpisových doložiek a ďalších citlivých údajov. Samozrejmosť je aj možnosť získania príloh daných správ. Z dôvodu citlivosti sme tieto údaje z obrázkov zmazali.

Poznámka: Všetky zdrojové kódy možno stiahnuť zo stránky softengine.sk.

Zobrazit Galériu

Marek Sopko

Všetky autorove články

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať