Masarykova univerzita Fakulta informatiky Ð Û Å«Æ ±²³ µ ¹º»¼½¾ Ý Forenzní analýza v cloudu Bakalářská práce Vadym Yanovskyy Brno, podzim 2014
Prohlášení Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. V Brně dne 6. 1. 2015 Vadym Yanovskyy Vedoucí práce: RNDr. Daniel Kouřil ii
Poděkování Na tomto místě bych rád poděkoval vedoucímu bakalářské práce panu RNDr. Danielu Kouřilovi za odborné vedení, konzultace, trpělivost a podnětné návrhy k práci. iii
Shrnutí Tato bakalářská práce se zaměřuje na podporu nástroje pro forenzní analýzu Cuckoo Sandbox v prostředí Kybernetického polygonu. Cuckoo Sandbox je nástroj, který umožňuje automatizovanou analýzu chování binárních souborů. Práce se primárně soustřeďuje na získání podezřelých IP adres použitých malware při komunikaci, které je možné využit při dalším šetření bezpečnostního incidentu. Popisuje techniky a nástroje použité při tvorbě podpůrného prostředí a samotný postup integrace. Integrace řeší zejména spouštění virtuálních stojů z virtualizováného hostitele, proto práce poskytuje přehled virtualizačních technik a jejích porovnání. Kromě toho bylo nutné vytvoření nástrojů pro rozšířenou podporu analýz. Jedná se o program pro automatické generování úderů na klávesnici určený pro analýzu keyloggeru a skript umožňující spuštění analýz a rychlé získaní podezřelých IP adres. Výsledky práce jsou demonstrovány na ukázkových analýzách malware v uzavřeném prostředí Kybernetického polygonu. Klíčová slova Cuckoo, sandbox, forenzní analýza, KVM, virtualizace, malware, KYPO iv
Obsah 1 Úvod............................................. 2 2 Forenzní analýza malware pomocí nástroje Cuckoo Sandbox.......... 4 2.1 Forenzní analýza.................................... 4 2.2 Sandbox......................................... 5 2.3 Cuckoo Sandbox.................................... 5 2.3.1 Obecný popis nástroje............................ 6 2.3.2 Architektura Cuckoo Sandbox........................ 7 3 Kybernetický polygon.................................. 9 3.1 Obecný popis projektu................................. 9 3.2 Architektura Kybernetického polygonu........................ 9 4 Integrace Cuckoo Sandbox a Kybernetického polygonu............. 11 4.1 Virtualizace....................................... 11 4.2 Techniky virtualizace.................................. 11 4.2.1 Emulace.................................... 12 4.2.2 Plná virtualizace................................ 12 4.2.3 Paravirtualizace................................ 12 4.2.4 Porovnání jednotlivých technik virtualizace................. 13 4.2.5 Nested virtualizace.............................. 13 4.3 Kernel-based Virtual Machine (KVM)........................ 14 4.4 Knihovna Libvirt.................................... 15 4.5 Architektura výsledného systému........................... 15 5 Implementace........................................ 17 5.1 Tvorba forenzní laboratoře............................... 17 5.1.1 Příprava Cuckoo hostitele........................... 17 5.1.2 Příprava Cuckoo hosta............................ 19 5.1.3 Konfigurace nástroje Cuckoo Sandbox.................... 20 5.1.4 Spuštění nástroje Cuckoo Sandbox...................... 21 5.2 Tvorba podpůrných nástrojů............................. 22 5.2.1 Program pro automatické generování úderů na klávesnici......... 22 5.2.2 Skript pro spuštění analýz a získání podezřelých IP adres......... 23 6 Ukázkové analýzy malware............................... 26 6.1 smlouva18.03.2013signed_a92686b621013978.exe.................. 26 6.2 keylog.exe........................................ 28 7 Závěr............................................. 30 1
1 Úvod Ve světe počítačů můžeme pozorovat poměrně rychlý technický vývoj. V dnešní době se již digitálním zařízením prakticky nevyhneme. Tato zařízení se rychle stala nedílnou součástí našeho života. Jsou propojená do počítačových sítí a umožňují vzájemně si vyměňovat informace. Logicky se tedy stávají terčem útoku a nástrojem zločinu. Každoročně tak roste množství škodlivých programů - malware, o kterých více pojednává podkapitola 2.1. Cílem takovýchto škodlivých programů se v dnešní době stále častěji stává zisk ve formě peněz. Podle společnosti Kaspersky Lab v loňském roce proběhlo ve světě 28.4 milionů malware útoků s cílem odcizit peníze, což je o 27,6 procenta více než v předchozím roce [9]. Škodlivý software nám tak činí čím dál více problémů a starostí, jak zajistit bezpečnost dat, uživatelů a jejich finančních prostředků. Pouze pomocí vysokých nároků na bezpečnost se vyhneme napadení virem, odposlouchávání, zneužití dat či krádeží identity. Je proto nesmírně důležité umět analyzovat rizika hrozící z Internetu. Chybně provedená analýza hrozeb má téměř vždy za následek chybně navržená bezpečnostní opatření. Naše hodnoty pak mohou být chráněny velmi nákladným, ale naprosto nesmyslným a neúčinným způsobem [8]. Na Masarykově univerzitě tak vznikl projekt bezpečnostního výzkumu Kybernetický polygon (skr. KYPO) [18], který se nachází v cloudu a tvoří výzkumné a vývojové prostředí na ochranu proti kybernetickým útokům. Slovo cloud lze z anglického jazyka přeložit jako oblak či mrak a v dnešní době má hned několik definic. V kontextu této práce se bavíme o cloudu jako o modelu IaaS. Jedná se o metodu přístupu k využíti výpočetní techniky, která je založená na poskytování sdílených výpočetních prostředků a jejich využití formou služby [29]. Velkou výhodou je pružnost, kterou tento model poskytuje. Dokáže se rychle přizpůsobit požadavkům uživatele a v případě potřeby jednoduše umožňuje zvýšit počet používaných virtuálních strojů, jejich výkon a velikost úložiště. S růstem malware a jejich šířením pomocí mailu v KYPO vzniklá potřeba po systému, který bude umožňovat jejich rychlou analýzu. Tento systém je cílen na pracovníky bezpečnostního týmu, kteří dostanou podezřelý soubor, získaný z podvodného e-mailu šířeným útočníkem, a potřebují rychle zjistit jeho chování s důrazem na síťovou komunikaci. Na základě získaných výsledků mohou stanovit další postup vyšetřování, ze získané síťové komunikace dohledat nakažené uživatele v síti nebo upozornit majitele serveru, na který malware odesílá odcizená data. Pro tyto účely se přímo nabízí známý nástroj určený k forenzní analýze malware Cuckoo Sandbox [11]. Předložená bakalářská práce se zabývá vytvořením podpůrného prostředí pro běh nástroje Cuckoo v prostředí KYPO. Zejména řeší správu virtuálních strojů, využívaných nástrojem Cuckoo, provede proto porovnání jednotlivých technologií virtualizace, konkrétně emulace a tzv. nested virtualizace. Hlavním cílem této práce však je zprovoznění systému pro analýzu binárních souborů, který poběží v uzavřeném prostředí KYPO a umožní dávkové spouštění analýz a získaní IP adres, s nimiž se malware snažil komunikovat za svého běhu. Členění hlavních kapitol bakalářské práce odpovídá chronologickému postupu při zpracovávání postavených cílů. Text je rozdělen na čtyři hlavní částí: Forenzní analýza malware pomocí nástroje Cuckoo Sandbox, Kybernetický polygon, Integrace Cuckoo a Kybernetického polygonu, Implementace a nakonec Ukázkové analýza malware. Kapitola Forenzní analýza malware pomocí nástroje Cuckoo Sandbox je věnována vysvětlení takových pojmu jako forenzní analýza, malware, sandbox a popisu použitého nástroje Cuckoo Sandbox. V častí Kybernetický polygon je seznámení s prostředím polygonů, ve kterém bude daný nástroj implementován. V sekcí Integrace Cuckoo a Kybernetického polygonu je popsaná zejména virtualizace v KYPO nutná pro vytvoření virtuálních strojů využívaných Cuckoo, technologie a nástroje využité pro její realizaci. V sekcí Implementace je popsané zprovoznění Cuckoo v KYPO a programové postupy použité při 2
1. Úvod tvorbě podpůrných nástrojů programů pro generování úderů na klávesnici a skriptu pro rychle odeslaní souborů na analýzu a získaní výsledných IP adres. Závěrem pro ověření a otestovaní výsledného řešení jsou provedené ukázkové analýzy malware. 3
2 Forenzní analýza malware pomocí nástroje Cuckoo Sandbox Tato kapitola je věnována nástroji pro forenzní analýzu malware Cuckoo Sandbox. V úvodu jsou vysvětleny pojmy forenzní analýza, sandbox, dále následuje seznámení se samotným nástrojem, jeho funkcionalitou a strukturou. Nejprve si ale kvůli častému použití terminu hostitelský systém (hostitel) a hostovaný systém (host) uvedeme, čím se liší v kontextu této práce. Hostitelem je myšlen primární stroj, instaluje se jako první a můžeme z něj spouštět další virtuální stroje, migrovat je nebo jím nastavovat parametry. Host je označení pro virtuální stroje, které se instalují na hostitele a spouštíme je pomocí vybrané virtualizační platformy. 2.1 Forenzní analýza Pokud budeme pátrat po významu slova forenzní, zjistíme, že se vztahuje k vědeckým a technologickým postupům při zjišťovaní, prokazování a vyšetřování skutečností a ověřování důkazů v rámci trestního i občanského práva. [23] My se budeme zabývat forenzní analýzou malware. Malware je souhrnný pojem pro jakýkoli software, který při spuštění zahájí činnost ke škodě systému, ve kterém se nachází. Jeho vnější projevy mohou být časovány, nebo reagovat na konkrétní naprogramovanou spouštěcí událost. Může se jednat například o: Spyware (špionážní software) jedná se o programy, které skrytě monitorují chování oprávněného uživatele. Svá zjištění tyto programy průběžně zasílají subjektu, který program vytvořil, respektive distribuoval. Takové programy jsou často na cílový počítač nainstalovaný spolu s jiným programem (utilita, počítačová hra), s jehož funkcí však nesouvisí. Adware (advertising supported software) je software, jehož cílem je předání reklamního sdělení (i proti vůli uživatele systému). Trojské koně, keyloggery jsou programy, implantované do systému bez vědomí oprávněného uživatele, monitorující specifické činnosti, o které projevuje útočník zájem. Zaznamenávají např. klávesy, které oprávněný uživatel stiskl na klávesnici, zejména hesla nebo stránky, které navštívil. Tyto údaje předávají útočníkovi k dalšímu zpracování. Ten tak může získat přístupové informace k webovým stránkám, bankovním účtům nebo kontům elektronické pošty. Trojské koně často instaluje nevědomky sám oprávněný uživatel, když instaluje z Internetu jiné programy. Červ (worm) je autonomní program, schopný vytvářet své kopie, které rozesílá do dalších počítačových systémů (sítí), kde vyvíjí další činnost, pro kterou byl naprogramován. Často slouží ke hledání bezpečnostních děr v systémech. [5] Když tedy dojde k šíření nějaké nové hrozby v podobě malware a objeví se první nakažená zařízení, je potřeba daný útok zkoumat. Potřebujeme zjistit, jaká data mohl útočník získat a jak přesně malware funguje, abychom mohli varovat uživatele. Je to tedy postup, který se podobá vyšetřování vraždy nebo vloupání, kdy lidé zainteresovaní v takovém případu ohledávají místo činu za účelem rekonstrukce dané události, nalezení viníků a sběru důkazů. Samozřejmě, že mezi těmito dvěma oblastmi jsou určité rozdíly. Digitální data jsou velmi nestálá a náchylná ke změnám. Musíme tomu také přizpůsobit nakládání s těmito daty, ať už se jedná o jejích sběr, uchovaní nebo transport. [24] Proces reakce na bezpečnostní incident způsobený malware je složen z více kroků, které jsou v různých zdrojích popsané odlišně, ale jejich základní podstata je stejná. Objevit podstatu a cíl škodlivého programu 4
2. Forenzní analýza malware pomocí nástroje Cuckoo Sandbox Zjistit, jak funguje mechanismus nákazy Zjistit, jak program komunikuje s hostitelským systémem Zjistit, jak program komunikuje na sítí Stanovit povahu a propracovanost útoku Stanovit závažnost útoku a jeho dopady na hostitelský systém a okolí Analýza v kontextu této práce je chápána jako sběr informací o podezřelém programu a jejich následné vyhodnocení. K analýze škodlivých programů lze přistoupit buď staticky, nebo dynamicky. Statická analýza se vykonává bez spuštění zkoumaného programu. Ve většině případu se vykonává nad nízkoúrovňovým kódem (strojovým kódem) získaným metodami reverzního inženýrství a dissasemblováním kódů. Poskytuje náhled na program jako celek a umožňuje zvažovat všechny možné cesty výpočtu. Vyžaduje však dostatečně silnou znalost programování, assembleru a stojí nás hodně času. Využívá se zejména v dřívějších fázích analýzy, protože je bezpečnější než analýza dynamická. Vzhledem k časové náročnosti a komplexnosti, kterou vyžaduje, je poměrně těžko aplikovatelná na analýzu většího množství malware. Některé moderní malware navíc obsahují ochranu před debuggingem a mění svoje chování na základě dat získaných od útočníka, což statickou analýzu podstatně komplikuje. [25] Tato bakalářská práce se věnuje dynamické analýze, která škodlivý program spouští a pozoruje jeho chování a změny v systému. Oproti statické analýze je schopna postihnout generování kódu za běhu a je možné její průběh zčásti automatizovat. Má však pouze lokální povahu a poskytuje pouze malý vhled do kódu programu, zkoumá jenom ty cesty, které byly skutečně vykonány. 2.2 Sandbox Abychom mohli bezpečněji analyzovat hrozby, potřebujeme uzavřené prostředí, které nám zajistí právě sandbox. Termín sandbox, můžeme doslova přeložit jako pískoviště, které představuje prostor, kde se písek nedostane mimo vyhrazenou plochu. Je to přísně kontrolovaný prostor, kde můžeme simulovat útoky a spouštět nedůvěryhodné programy bez rizika uniku hrozby ven. V této práci se setkáme se dvěma různými sandboxy. První sandbox je tvořen Kybernetickém polygonem a jedná se o sandbox poněkud větších rozměrů. Skládá se z několika navzájem propojených počítačových síti, které můžou obsahovat různý počet virtuálních uzlů. Jeho architektuře se podrobněji věnuje Kapitola 3. Na jednom z těchto strojů v polygonu poběží zmíněný nástroj Cuckoo Sandbox. Cuckoo bude mít vlastní sandbox, tvořený pouze jedním počítačem s operačním systémem Windows verze 7, ve kterém bude spouštět podezřelé programy a sledovat jejich běh. Po ukončení běhu programu se tento sandbox vymaže a stroj bude vrácen do původního stavu. Některé malware se však nemusí v sandboxu chovat tak, jak bychom čekali. Nákaza systému může probíhat až po spuštění nějaké konkrétní události, která zrovna nenastane, nebo malware odhalí skutečnost, že běží ve virtualizovaném prostředí a změní svoje chovaní. Naše analýza je pak neúplná a zhodnocení hrozby může být zkreslené. Pokud tedy chceme zkoumaný program analyzovat důkladně, nevyhneme se reverznímu inženýrství. Nicméně pro rychlou a automatizovanou analýzu, která je cílem této práce, je dynamická analýza s využitím sandboxu ideální volbou. 2.3 Cuckoo Sandbox V této podkapitole si přiblížíme nástroj Cuckoo Sandbox. Jeho použití a funkce jsou dobře popsané v dokumentaci [10], proto zde uvedeme jen některá klíčová fakta. 5
2.3.1 Obecný popis nástroje 2. Forenzní analýza malware pomocí nástroje Cuckoo Sandbox Cuckoo Sandbox je nastroj pro automatizovanou analýzu malware. Používá se pro automatické spouštění, analýzu a sběr souhrnných výsledku analýzy, které přibližují chovaní malware v operačním systémů Windows. Díky automatizaci Cuckoo umožňuje rychlé zvládnutí analýzy velkého počtu malware a zároveň poskytuje prostor se více zaměřit na případy vyžadující větší pozornost. Jedná se o open-source projekt, který je realizován v programovacím jazyce Python a C. Z výsledné zprávy, kterou generuje Cuckoo lze získat následující údaje: Výpis volání Win32 API funkcí. Win32 API můžeme chápat jako programovací rozhraní, obsahující tisíce funkcí, které programy využívají pro komunikací s operačním systémem Windows a volání jeho různých funkcí. Seznam souboru, které malware vytvářel, mazal nebo stahoval během svého běhu. Výpis kompletního síťového provozu. Právě ten se využívá v této práci k rychlému získání síťové komunikace podezřelých programů. Snímky obrazovky Windows pořízené za běhu malware. Kompletní paměťový výpis (tzv. memory dump) strojů. Jedná se o soubor, do kterého je zaznamenáván aktuální obsah operační pamětí počítače. Nástroj Cuckoo můžeme používat ihned po jeho stažení, pokud máme připravený virtuální stroje a máme nainstalované všechny potřebné závislostí, které Cuckoo pro svůj běh využívá. Cuckoo se skládá z centrálního řídicího software, který se stará o spouštění vzorků malware na virtuálních strojích a jejich následnou analýzu. Každá analýza se spouští v izolovaném prostředí virtuálního stroje, který je následně vždy vracen do původního stavu. Infrastruktura Cuckoo se skládá z hostitelského počítače (řídící software) a řady dalších strojů (hostů), na kterých probíhají samotné analýzy. Hostitelský počítač vytváří sandbox, který řídí celý průběh analýzy, zatímco hosty tvoří izolované prostředí ve kterém se bezpečně spouští a analyzuji vybrané vzorky malware (viz obr. 2.1). Soubor na analýzu můžeme poslat několika způsoby. Prvním způsobem je spuštění skriptu utils/submit.py, kterému jako parametr předáme cestu k souboru. Má však pouze lokální povahu a je nutno ho spouštět na hostitelském stroji, kde běží samotný Cuckoo. Pro účely této práce se proto nehodí, jelikož ke Cuckoo chceme přistupovat vzdáleně. Pro vzdálený přístup můžeme použít skript utils/api.py, který na zadané adrese a portu spustí API, přes který můžeme s Cuckoo komunikovat. Jelikož právě tento způsob budeme používat pro zasílání podezřelých binárních souborů na analýzu, je více přiblížen v kapitole 5. Cuckoo rovněž nabízí možnost spuštění plnohodnotného webového rozhraní, kde můžeme prohlížet výsledky dokončených analýz a zároveň vytvářet analýzy nové. Při zaslaní souboru na analýzu máme možnost specifikovat řadu věcí, například na jakém přesně stroji analýza poběží, jeho systémový čas, prioritu nově vytvořené úlohy. Nás zajímá specifikace časového limitu (tzv. timeout), který udává maximální dobu běhu analýzy. Některé vzorky malware, vyžadují pro svůj běh více času a pro jejich důkladnější analýzu je vhodné tento limit nastavit na delší dobu. Pokud všechny procesy doběhnou před uplynutím daného časového limitu, je analýza ukončena. Průběh samotné analýzy je zobrazen na obrázku 2.2. Program většinou běží na pozadí a čeká na nový soubor, určený pro analýzu. Když daný soubor dostane, vytvoří se nová úloha, které se přiřadí unikátní identifikační číslo. Dále se podle zadaných konfigurací připraví nová analýza a zahájí se spuštěním malware na virtuálním strojí. Po ukončení běhu programu nebo po vypršení časového limitu je analýza ukončena. Následuje zpracování výsledků a tvorba výsledné zprávy, která je uživateli dostupná ve více formátech. 6
2. Forenzní analýza malware pomocí nástroje Cuckoo Sandbox Cuckoo hostitel Zodpovědný za řízení a průběh analýzy. Spouští analýzy, sleduje síťový provoz a vytváří výsledné zprávy. Hosté, na kterých probíhá analýza Zprávy o průběhu analýzy jsou předávány zpět Cuckoo hostiteli. Virtuální stroj č. 1 Virtuální stroj č. 2 Internet Virtuální síť Izolovaná síť, ve které spouštíme analýzy na virtuálních strojích Virtuální stroj č. 3 Obrázek 2.1: Základní architektura nástroje Cuckoo Sandbox 2.3.2 Architektura Cuckoo Sandbox Každý krok analýzy je realizován v Cuckoo odpovídajícím modulem, ve většině případů se jedná o skripty napsané v programovacím jazyce Python, které jsou roztříděné do složek. V této práci vždy uvádíme cestu k potřebnému modulu začínající kořenovým adresářem Cuckoo. Zmíněná struktura nástroje nám umožňuje snadnou modifikaci průběhu analýzy a její rozšiřitelnost. Jsme tak například schopní přidat modul, který po startu stroje otevře webový prohlížeč a zadá libovolnou adresu. Průběh analýzy je kompletně automatizovaný a nevyžaduje zásah ze strany uživatele. Analýzy můžeme spouštět souběžně na více virtuálních strojích. Všechny moduly, ze kterých se Cuckoo skládá, lze rozdělit na moduly jádra, určeny pro běh na hostitelském systému, a moduly analyzátorů, určeny pro běh uvnitř hostovaného stroje. Mezi moduly jádra patří: Moduly stroje (modules/machinery/) Moduly určující, jak Cuckoo komunikuje s virtualizační platformou. Zabývají se tím, jak stroj spustit, jak ho zastavit, jak ho vrátit do původního stavu. Dostupné pro více virtualizačních platforem, my využijeme moduly určené pro QEMU/KVM [16]. Přídavné moduly (modules/auxiliary/) 7
2. Forenzní analýza malware pomocí nástroje Cuckoo Sandbox Vytvoření nového úkolu Příprava analýzy Spouštění hostitele Vykonání úkolu a tvorba loggu Zpracování výsledků a tvorba výsledné zprávy Obrázek 2.2: Průběh analýzy nastroje Cuckoo Sandbox Definují procesy, které běží současně s každou analýzou na hostiteli. Patří sem například tcpdump [34] pro analýzu síťového provozu. Moduly zpracování (modules/processing/) Starají se o zpracování výsledků po dokončení analýzy. Jsou zde moduly zpracovávající výsledky sítové komunikace, statické analýzy souboru atd. Vytvářejí kolekci surových dat, které jsou předány na zpracování další kategorii modulu. Moduly reportování výsledků (analyzer/windows/modules/reporting/) Moduly dostávají kolekci dat zpracovaných v předchozích krocích a vytvářejí strukturovaný report. Reporty jsou dostupné v následujících formátech: JSON, HTML, MAEC, MongoDB. Mezi moduly analyzátorů patří: Balíky pro analýzu Jsou důležitou součástí analýzy, jsou to moduly, které definují, jak se bude malware spouštět uvnitř virtuálního stroje. Definují jaké typy souboru bude moct Cuckoo zpracovat. Kromě příslušného modulu je nutno mít na hostovi nainstalovaný odpovídající software k otevření souboru daného typu. Přídavné moduly Běží současně s každou analýzou na hostovi. Ve výchozích nastaveních jsou dva moduly, jeden na tvorbu snímku obrazovky (tzv. screenshotu) a druhý simuluje interakcí uživatele. Simulace uživatele je důležitá pro určité druhy malware, které se spouští až potom, co zjistí aktivitu uživatele. Zároveň je tento modul nastaven tak, aby procházel přes případná dialogová okna. 8
3 Kybernetický polygon V této kapitole bude popsán projekt Kybernetický polygon. Konkrétně bude nastíněna jeho základní architektura a důvody jeho použití pro forenzní analýzu malware ve spojení s nástrojem Cuckoo. Informace o Kybernetickém polygonu zmíněné v této kapitole jsou blíže popsané v technických zprávách Analýza a návrh architektury [12], Příprava experimentálního prostředí v cloudu [13] a v článku ze symposia NOMS [36]. 3.1 Obecný popis projektu Projekt KYPO vznikl na Masarykové univerzitě pro potřeby bezpečnostních týmů za účelem vytvoření prostředí pro vývoj a výzkum hrozeb ohrožujících bezpečnost kritických infrastruktur. Kritickou infrastrukturou může byt například informační systém, nebo sít elektronických komunikací, jejichž narušení má negativní dopad na společnost a stát. KYPO tedy poskytuje platformu umožňující detailně studovat bezpečnostní útoky proti nejrůznějším síťovým infrastrukturám a strojům, které jsou v těchto infrastrukturách umístěny. Útoky jsou definované bezpečnostním scénářem, který poskytuje prostor jak pro vlastní popis řešeného problému, tak i pro definici technických podrobností jednotlivých částí polygonů. Pro každý takový bezpečnostní scénář je možné v KYPO vytvořit již zmíněné uzavřené prostředí sandbox, ten v KYPO obsahuje simulovanou celou počítačovou síť a jednotlivé uzly, tak, aby bylo možné věrně simulovat bezpečnostní útok a sledovat jeho dopady. Jeho nedílnou součástí jsou i služby sbírající data o prováděném útoku a usnadňující analýzu chování útočníků. KYPO umožňuje paralelně provozovat více takových uzavřených prostředí. Ta jsou vzájemně izolována, takže veškeré procesy probíhající v rámci jednoho sandboxu, zůstávají uzavřené pouze v něm a nemůžou nekontrolovaně opustit a ohrozit jiná simulovaná prostředí. Celý sandbox a samotný Kybernetický polygon, se nachází v cloudovém prostředí a tvoří ho výhradně virtuální stroje. Jsme tedy schopni v KYPO provádět komplexní kybernetické útoky proti reálné síťové a IT infrastruktuře, umožňuje realizaci hrozeb, jejich identifikovaní, monitorovaní a vizualizaci. KYPO je rovněž využíván ke školení bezpečnostních tymu a vývoji nových bezpečnostních nástrojů. Cloud prostředí poskytuje možnost zabezpečeného přístupu uživatelům z celého světa. Důvodu, proč použít nástroj Cuckoo pravě v KYPO, je hned několik. KYPO nám umožní simulaci libovolného stroje a sítě včetně Internetu. Můžeme tedy simulovat stroj útočníka a sledovat, jak malware s útočníkem komunikuje. Zjistíme tak, jaké citlivé informace jsou předmětem zájmu útočníka a jakých uživatelských dat se útočník zmocnil. Všechno se odehrává v izolovaném prostředí s vestavěným monitoringem. Poskytuje nám to plnou kontrolu nad prostředím a jistotu, že se hrozba nedostane ven. Monitoringem získáme plný síťový provoz, máme možnost vyexportovat paketová data (PCAP soubor) a podrobit je další analýze. KYPO v kombinaci s Cuckoo nám tedy poskytne ideální a bezpečnou laboratoř pro forenzní analýzu škodlivých programů. 3.2 Architektura Kybernetického polygonu KYPO je provozováno nad cloudem poskytovaným Masarykovou univerzitou a akademickým sdružením CESNET 1. V současné době KYPO využívá několik hardwarových strojů, které umožňují simulovat prostředí s řadou nezávislých LAN sítí, čítajících dohromady desítky uzlů. Cloudová infrastruktura poskytuje plnou podporu pro správu strojů v polygonu, tj. jejich vytváření, sledování stavu, základní monitoring, mechanismus migrace, apod. Infrastruktura Kybernetic- 1. http://www.cesnet.cz 9
3. Kybernetický polygon Scénář...... Vizualizace Sandbox n Uzel správy sandboxu Databáze Simulace & Měření Obrázek 3.1: Architektura Kybernetického polygonu kého polygonu tedy nemusí tyto mechanismy řešit. Pomocí této vrstvy je možné simulovat běžné operační systémy a architektury, zejména 32 bitové a 64 bitové architektury založené na procesorech x86. Výpočetní prostředky jsou ovládané cloudovým manažerem OpenNebula [28]. Samotná architektura Kybernetického polygonu, zobrazená na obrázku 3.1, se sestává ze sady čtyř modulů, které představují jednotlivé funkční části polygonu. Jedná se o modul správa scénářů, správu cloudů, správu měření a správu virtualizace. Moduly jsou na sobě nezávislé a komunikují spolu pomocí zpráv obsahujících konfigurační údaje nebo vlastní data. Správa scénářů je řídicím modulem, který vytváří a spravuje celkovou konfiguraci. Tento modul předává ostatním dílčí části k implementaci. Dále zpracovává příkazy ke změně konfigurace za běhu polygonu. Správa cloudu je modul, který je zodpovědný za spouštění a zastavovaní virtuálních strojů. Na základě zadané konfigurace vytváří mezi nimi požadovanou síťovou infrastrukturu. Má tedy na starosti vytvoření a správu cloudového prostředí, realizuje a doplňuje konfiguraci jednotlivých uzlů a sítové topologie. Pro naše potřeby je nutné, aby virtuální stroje byly vytvořeny za pomoci tzv. nested virtualizace. Popis této technologie je přiblížen v podkapitole 4.1. Správa měření je modul určený pro řízení měřící infrastruktury. Měření je dosaženo za pomoci množství sond, které jsou umisťovány na konkrétních pozorovacích místech, a nástrojů měřících výhradně provoz a stav daného stroje. Správa vizualizace je modul, který zajišťuje vizuální prezentaci síťové a logické topologie a grafický vyobrazuje data získaná měřící infrastrukturou. 10
4 Integrace Cuckoo Sandbox a Kybernetického polygonu V této kapitole se budeme věnovat technologiím, které využijeme pro propojení Cuckoo Sandbox a Kybernetického polygonu a to konkrétně virtualizaci. V této práci je virtualizace poměrně rozšířený pojem, proto nebude na škodu si ho vysvětlit trochu podrobněji. Používá se jak pro vytvoření samotného cloudu, tak pro vytvoření Cuckoo hosta. Představíme si dostupné techniky a všeobecné koncepty. Porovnáme emulaci a plnou virtualizaci a zjistíme, co je pro naši forenzní analýzu malware nejvhodnější. Následně si představíme námi vybranou virtualizační platformu KVM [16] a knihovnu Libvirt [26], kterou využijeme právě pro práci s KVM. Nakonec si ukážeme, jak vypadá výsledná architektura našeho řešení z pohledu použitých nástrojů. 4.1 Virtualizace Pojem virtualizace se začal objevovat již v šedesátých letech. V té době, důvodem pro vznik virtualizace bylo lepší využití hardwarových prostředků. První počítače, které v té době vznikaly, byly v podstatě osobní. Jejich výpočetní možnosti i způsob práce s nimi vedly k tomu, že v daném okamžiku umožňovaly řešit pouze jeden konkrétní problém, jednou skupinou lidí. Postupem času a s nárůstem výkonu počítačů začalo být možné zpracovávat dva a více programů současně, což vedlo k prvnímu souběžnému sdíleni počítačů - současně zpracovávané programy již nepatřily stejnému uživateli. Každé sdílení však přináší svá rizika. Program jednoho uživatele může poškodit data nebo program druhého a vést ke zhroucení celého počítače. Některý z uživatelů rovněž může zatížit počítač (omylem nebo záměrně) požadavky na paměť či výkon procesoru a znemožnit tak ostatním uživatelům jeho využiti. [7] Virtualizace je koncept, který se snaží výše zmíněné problémy řešit. Virtualizace je ve své podstatě iluze, ve které vytvoříme řadu kopií nějakého zdroje (např. paměti, procesoru, disku) a každý uživatel dostane k dispozici jednu nebo více těchto kopií. Protože kopie vznikají pouze jako koncepty, hovoříme o virtuálních objektech máme virtuální paměť, virtuální disk a virtuální procesor. V konečném důsledků jsme schopni uživateli poskytnout celý virtuální počítač, který se skládá z virtuálních komponent. Uživatel má absolutní kontrolu nad celým virtuálním počítačem, ve skutečnosti však sdílí konkrétní fyzické zdroje s dalšími uživateli. [7] Ne všechny součásti počítače však lze snadno virtualizovat. Zatímco v případě paměti už si mnohdy ani neuvědomujeme, že pracujeme prakticky vždy s její virtualizovanou formou, v případě procesorů je to mnohem obtížnější. Pomáhá nám zde proto tzv. hypervisor. Takto se označuje programová vrstva, která řídí přístup virtualizovaných počítačů (hostu) k hardwaru hostitelského systému, řídí jejich běh a zároveň je od sebe odděluje. Co nám virtualizace přináší? Virtualizace umožňuje vytvořit izolovaný virtuální stroj, na kterém můžeme spustit námi zkoumaný program bez poškození hostitelského systému. Navíc jsme schopní virtuální stroj kdykoliv vrátit do původního, nepoškozeného stavu. Dalším přínosem je zálohovanost. Obrazy strojů můžeme snadno ukládat, obnovit ze zálohy nebo v případě potřeby poskytnout k užívání dalším uživatelům. 4.2 Techniky virtualizace V této podkapitole se podíváme na technickou stránku věci a způsoby, kterými je možné virtualizovat v dnešní době. Mezi nejrozšířenější způsoby patří emulace, plná virtualizace a paravirtualizace. Podrobněji se jimi zabývá diplomová práce [4]. Podíváme se i na tzv. nested virtualizaci, o které se v poslední době mluví jako o budoucnosti virtualizace, protože poskytuje podporu hardwarové virtualizace na virtualizovaném stroji. 11
4. Integrace Cuckoo Sandbox a Kybernetického polygonu 4.2.1 Emulace Emulace jako jediná ze zmiňovaných technik umožňuje provozovat na hostujícím systému virtuální systém jiné architektury. Abychom toho dosáhli, musíme všechny operace prováděné v hostovaném systému interpretovat, což má za následek snížení výkonu. Díky tomu se také emulace značně odlišuje od ostatních virtualizačních technik a bývá mnohdy vyčleňována do samostatné kategorie. Emulace může být založená na interpretací, statickým překladů nebo dynamickém překladu. Při interpretaci emulátor prochází kód programu po instrukcích a podle toho mění stav hostovaného systému. Pro každou instrukci provádí její načtení, dekódovaní a zavolaní odpovídající obslužné operace. Takové zpracování každé instrukce zvlášť je neefektivní. Statický překlad naopak nejprve zpracuje celý program a bez dalších úprav ho provede. Dynamický překlad se na rozdíl od statického provádí až za běhu. Načte se blok instrukcí, ty se zpracují a provedou. Dynamický překlad je nejvíce rozšířenou metodou. Je nejefektivnější a používá ho například emulátor Qemu. Oproti nativnímu prostředí hostitele se však stále uvádí zpomalení virtuálu 2 až 3 násobné. Výhody: umožňuje na libovolné platformě spustit systém jiné architektury. Jsme schopni například na hostujícím systému, který má x86 Intel architekturu emulovat architektury jako jsou MIPS 1 a ARM 2 Nevýhody: pomalý výkon emulovaného systému. 4.2.2 Plná virtualizace Pokud důsledně virtualizujeme všechny součásti počítače, hovoříme o tzv. plné virtualizaci. Plná virtualizace vyžaduje, aby hostovaný i hostující systém měl stejnou architekturu. Pro každý hostovaný systém se totiž vytváří identický obraz fyzické architektury. V takovémto případě hostovaný operační systém má k dispozici stejnou instrukční sadu a stejné prostředky jako na stroji fyzickém a nemůže žádným způsobem poznat, že běží ve virtualním prostředí a sdílí přístup k hardwarům s dalšími stroji. Architektura hostujícího systému musí splňovat určité podmínky. V první řadě procesor musí podporovat alespoň dva režimy ochrany, uživatelský a privilegovaný. Privilegovaný je přístupný pouze jádru operačního systému a v uživatelském běží všechny programy. Dále architektura musí definovat asynchronní přerušení, pomocí kterých je procesor upozorňován na vzniklé události. A v poslední řadě správa paměti by měla podporovat dynamickou relokaci a bezpečnostní mechanismy (stránkování, segmentaci). Většina dnešních počítačů tyto podmínky splňuje, protože nejsou důležité jen pro zvládnutí plné virtualizace, ale jsou důležité i pro zvládnutí běžného multitaskingu. Protože při plné virtualizaci dochází k úplnému oddělení fyzické a programové vrstvy, ovlivňuje tím snížení výkonu. Hypervisor totiž zde emuluje fyzické vybavení a většinu operací provádí ve vlastním software, namísto aby je přímo vykonával hardware [6]. Výhody: hrubý výpočetní výkon, nevyžaduje úpravu operačního systému Nevýhody: pomalé zpracovaní vstupních/výstupních operací. 4.2.3 Paravirtualizace Pokud se některé komponenty virtuálního a fyzického počítače shodují (např. hostující systém bude mít stejný procesor), pak můžeme použít tzv. paravirtualizaci. Paravirtualizace provádí jen 1. Microprocessor without Interlocked Pipeline Stages 2. Acorn RISC Machine - architektura procesoru vyvinuta firmou ARM Limited, který patří mezi zástupce RISC( procesory s redukovanou instrukční sadou) 12
4. Integrace Cuckoo Sandbox a Kybernetického polygonu částečnou abstrakci na úrovní virtuálního počítače a nabízí virtuální prostředí podobné fyzickému, na kterém virtuální počítač provozujeme [6]. Hostovaný systém ví, že běží ve virtuálním prostředí, a dokáže efektivně komunikovat s hypervisorem (všechny přístupy k hardware jsou převedeny na volání hypervisoru). Základem pro tuto efektivní komunikaci je však speciálně upravené jádro hostujícího systému, což komplikuje její nasazení u operačních systému s uzavřeným zdrojovým kódem. Částečně se však již dá dosáhnout i za použití speciálních ovladačů VirtIO [21]. Při naší implementaci virtuálního stroje využijeme právě zmíněné ovladače VirtIO. Vytvářejí vrstvu mezi hypervisorem a hostem pro zajištění paravirtualizace při I/O přenosech. Dělí se na dva typy: ovladače určeny pro hosta a ovladače určeny pro hostitele [22]. Výhody: poskytuje o něco lepší výkon než plná virtualizace Nevýhody: vyžaduje instalaci ovladačů VirtIO na hostitele a hosta, případně speciální úpravu operačního systémů. 4.2.4 Porovnání jednotlivých technik virtualizace Pokud tedy budeme uvažovat o nejvhodnější technologii pro tvorbu virtuálního stroje pro potřeby Cuckoo, sáhneme po plné virtualizaci. Pokud zvolíme emulaci, budeme sice schopní emulovat různé architektury procesorů, ale podstatnou nevýhodou bude slabý výkon emulovaného systému. Pro naše účely je určitě přednější výkon, který nám zajistí plynulý průběh analýzy. Navíc různé architektury procesorů nepotřebujeme, vystačíme si pouze s x86, kterou podporuje KVM. Rovněž se budeme snažit dosáhnout alespoň částečné paravirtualizace pomocí ovladačů VirtIO, která přispěje ke zvýšení výkonů virtuálního stroje. 4.2.5 Nested virtualizace Při klasické virtualizaci hypervisor spouští několik operačních systému současně, každý na svém vlastním virtuálním stroji. Při tzv. nested virtualizaci hypervisor dokáže spouštět několik dalších hypervisoru a každému přiřadit vlastní virtuální stroj (obrázek 4.1). Zmiňujeme ji až nakonec, protože se nejedná o samostatnou techniku virtualizace, ale spíš mluvíme o jakémsi vylepšení, které můžeme aplikovat na plnou virtualizaci nebo paravirtualizaci, a získat tím další výhody. Budeme mluvit o nested virtualizaci dostupné pro Intel x86 architekturu. Obrázek 4.1: Nested virtualizace [35] V současné době se z operačních systému často stávají hypervisory. Jako příklad můžeme 13
4. Integrace Cuckoo Sandbox a Kybernetického polygonu uvést Windows XP mód dostupný ve Windows 7. Windows XP mód umožňuje uživatelům spouštět programy, které původně byly vyvinuté pro Windows XP na jejich Windows 7 strojích. Windows XP mód funguje tak, že spouští virtuální stroj s operačním systémem Windows XP a v novém okně na něm spouští daný program, v tuto chvíli Windows 7 začíná plnit funkcí hypervisoru. Linux má rovněž vestavěnou funkcionalitu hypervisoru zprostředkovanou KVM hypervisorem. [27] Hlavní uplatnění však nachází hlavně v cloudu, kde umožňuje uživatelům spouštět vlastní hypervisory. Jak již bylo řečeno v úvodu, cloud, nad kterým je vybudován Kybernetický polygon, je IaaS cloud. Model IaaS reprezentuje způsob využití cloudu pro poskytování virtuálních prostředku. Nejčastěji se jedná o stroje, které slouží jako server, datové úložiště nebo výpočetní prostředky. Právě tyto stroje vytvořené pomocí rozhraní OpenNebula v4.4 [28] využívá KYPO pro tvorbu prostředí na simulaci útoku. Přístup k nim je zprostředkováván na fyzickém stroji hypervisorem. Protože právě na jednom z takových strojů v KYPO budeme instalovat, za použití KVM, další virtuální stroj, který bude využíván Cuckoo, je nutný, aby tato vrstva byla realizovaná právě pomocí nested virtualizace. Nástroj KVM potřebuje pro svoji práci podporu hardwarové virtualizace, a pokud by tvorba virtuálních strojů nebyla realizovaná pomocí nested virtualizace, umožňující každému strojí spouštět svůj vlastní hypervisor, nebylo by využití nástroje KVM možné. Výhody: možnost mít několik vitrualizovaných systemů zanořených v sobě (princip ruské matrjošky) Nevýhody: omezený výběr nástrojů, složitější instalace. 4.3 Kernel-based Virtual Machine (KVM) KVM je nástroj pro plnou virtualizaci, který je součástí linuxového jádra od verze 2. 6. 20. Takže je velice pravděpodobné, že pokud budeme používat operační systém Linux, bude mít již nainstalované KVM. Podporuje jen architekturu x86 (Intel a AMD). Koncepce virtualizace KVM je založena na principu přeměny linuxového jádra na virtualizační vrstvu a nahráním modulu do jádra. Každý virtuální stroj má svůj vlastní virtualizovaný hardware: síťovou kartu, úložiště, grafickou kartu, atd. Jak již bylo řečeno, je potřeba, aby procesor podporoval hardwarovou virtualizaci, jinak využití KVM není možné. Zdali má procesor podporu hardwarové virtualizace lze zjistit poměrně snadno výpisem z /proc/cpuinfo. 1 # grep -E vmx svm /proc/cpuinfo 2 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge 3 mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pni 4 pdpe 1gb rdtscp lm constant_tsc up rep_good nopl pclmulqdq vmx 5 ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes 6 xsave avx Vmx je flag udávající podporu u procesoru Intel, smv udává podporu u procesoru AMD-V. Pokud ve výsledném výpisu flagů najdeme vmx nebo svm, znamená to, že náš systém hardwarovou virtualizaci podporuje. Ukázkový výpis je vytvořen na stroji v polygonu a můžeme z něj usoudit, že daný stroj má podporu pro hardwarovou virtualizaci Intel procesorů. Pokud by tomu tak nebylo, tak obraz, ze kterého jsme stroj v polygonu vytvářeli, jen nemá tento typ virtualizace povolený, jelikož jsme se ujistili, že náš cloud nested virtualizaci implementuje, museli bychom pouze zvolit jiný obraz stroje. Pří vykonání I/O operaci využívá KVM funkcionalitu zmíněného emulátorů Qemu. Každý I/O volání hostujícího operačního systému hypervisor zachytí a emuluje pomocí Qemu procesu. 14
4. Integrace Cuckoo Sandbox a Kybernetického polygonu To znamená, že některé moduly Qemu jsou také součástí linuxového jádra. I přesto si ale Qemu nainstalujeme, protože budeme využívat některé jeho další funkce, které nejsou součástí jádra. Další informace o architektuře KVM na stránkách společnosti IBM [14]. 4.4 Knihovna Libvirt Libvirt je knihovna umožňující ovládat různé virtualizační platformy a využijeme ji při práci s KVM. Vytváří abstraktní vrstvu mezi virtualizační platformou a uživatelským rozhraním za účelem usnadnění správy strojů. Jejím cílem je poskytovat všeobecné aplikační programové rozhraní pro správu virtuálních strojů. Při zpracování příchozích požadavku Libvirt komunikuje s každým dostupným hypervisorem. [20] V terminologii Libvirt jsou fyzické stroje pojmenovány jako uzel a hosté jsou pojmenováni jako domény. Název uzel byl zvolen protože Libvirt podporuje migraci systému mezi uzly. Pro účely manipulace se stroji, jejich konfigurací a konfiguraci sítě se budeme připojovat k Libvirt daemonu 3 pomocí nástroje virsh. Konfigurační soubory Libvirt jsou psané značkovacím jazykem XML a mohou být občas hůře čitelné. [19] 4.5 Architektura výsledného systému Před tím než přejdeme k samotné implementaci, ukážeme si, jak bude vypadat architektura výsledného systému. Představíme způsob, jakým bude nástroj Cuckoo Sandbox integrován do prostředí Kybernetického polygonu a uvedeme zařazení použitých nástrojů a technik. Jak můžeme vidět na obrázku 4.2, mezi technickými prostředky a virtuálními strojí v cloudu, je umístěná virtualizační vrstva tvořená XEN a KVM umožňující nested virtualizaci. Rozhraní OpenNebula zde plni roli správce virtualizovaných výpočetních prostředků a tvoří základ při tvorbě prostředí polygonu. V KYPO máme vytvořený Cuckoo hostitel, s operačním systémem Debian verze 7 a pojmenovávaný jako Doména 0. Využíváme na tomto strojí virtualizační platformu KVM, kterou ovládáme pomocí knihovny Libvirt. Máme dva Cuckoo hosty (domény) s operačním systémem Windows verze 7, které jsou využívány pro spouštění podezřelých binárních souboru nástrojem Cuckoo. K virtualizaci těchto strojů jsme přistoupili plnou virtualizaci s využitím ovladačů VirtIO pro zvýšení její efektivnosti (výkonu). Nad knihovnou Libvirt máme ještě další dva nástroje, které pomocí volaní funkcí Libvirt spravují Windows domény. Jedním z nich je virsh a dalším samotný nástroj Cuckoo, který při spouštěni, ukončení a vracení Windows domén do původního stavu rovněž volá funkce knihovny Libvirt. Že se to tak opravdu děje můžeme vidět ve zdrojovém kódu jednoho z modulu stroje module/machinery/kvm.py. 1 from lib.cuckoo.common.abstracts import LibVirtMachinery 2 3 class KVM(LibVirtMachinery): 4 """Virtualization layer for KVM based on python-libvirt.""" 5 6 # Set KVM connection string. 7 dsn = "qemu:///system" 3. program běžící na pozadí 15
4. Integrace Cuckoo Sandbox a Kybernetického polygonu Doména Doména KYPO (Windows7) (Windows7) Hypervisor Virsh, Cuckoo libvirt Hypervisor Plná virtualizace + VirtIO Linux hostitel (Doména 0) KVM OpenNebula Nested virtualizace Virtualizační systém (XEN/KVM) Virtualizační systém (XEN/KVM) Obrázek 4.2: Struktura cloudu a zařazení jednotlivých nástrojů 16
5 Implementace V této kapitole bude popsána instalace nástroje Cuckoo Sanbox. Dále bude popsána tvorba nástrojů pro rozšířenou podporu analýz a požadavky na ně kladené. 5.1 Tvorba forenzní laboratoře V této podkapitole se věnujeme instalaci a zprovoznění nástroje Cuckoo v prostředí sandboxu, vytvořeného v Kybernetickém polygonu. Jako výsledek získáme bezpeční a izolovanou forenzní laboratoř, v niž budeme schopní nebezpečné programy spouštět a analyzovat jejích chování. 5.1.1 Příprava Cuckoo hostitele Cuckoo hostitel KYPO Sandbox eth1 eth0 147.251.252.xxx 10.10.10.2 192.168.99.0 10.10.10.0 Obrázek 5.1: Zobrazení Cuckoo hostitele uvnitř KYPO sandboxu Vytvoření nového uzlu v sandboxu Po vytvoření sandboxu v KYPO v něm vytvoříme nový virtuální stoj, na němž poběží nástroj Cuckoo. Stroj bude instanciovan z obrazů se základním systémem Debian verze 7 a podporou hardwarové virtualizace. Stroji přiřadíme dvě síťová rozhraní (eth0 a eth1) a každé bude následně zapojeno do jiné L3 sítě. Rozhraní eth0 bude využíváno pro komunikaci s nástrojem Cuckoo a pro samotný přístup uživatele ke stroji za účelem jeho konfigurace. Protože se stroj nachází v sandboxu, bude eth0 mít privátní adresu. Pro přístup ke strojí zvenku musíme vytvořit SSH tunely z výchozí brány, která má veřejnou IP adresu. Pokud jako příklad vezmeme stroj na obrázku 5.1, pak můžeme vytvořit tři následující tunely: 147.251.252.238:8080 10.10.10.2:80 REST server Cuckoo 147.251.252.238:8090 10.10.10.2:90 Web rozhraní Cuckoo 147.251.252.238:2222 10.10.10.2:22 Přístup uživatele ke stoji Přes rozhraní eth1 bude kontrolovaně probíhat veškerá síťová komunikace Cuckoo hosta. Předtím něž na stroji zahájíme samotnou instalaci Cuckoo Sandbox, se musíme rozhodnout, kde budeme mít uložené obrazy hostu, protože jejich velikost je poměrně velká a nemusíme mít na nově vytvořeném stroji dost místa. V cloudu máme k dispozici hned několik možností, jak 17
5. Implementace rozšířit velikost disků virtuálního stroje, a je pouze na nás, kterou použijeme. Jednou z možností je vytvoření disku typu DataBlock, v rozhraní OpenNebula, potřebné velikosti a následně jeho připojení ke stroji. Nevýhodou je výrazné zpomalení spouštění a zastavení stroje z důvodu kopírování dat. Další možností, která se zda být více flexibilní, je připojení datových úložišť přes NFSv4. Návod pro připojení je k dispozici na stránkách provozovatele cloudu [31]. Jedná se o velké prostory (v řádech stovek TB), je možné k úložišti přistupovat z různých strojů a bez rizika zpomalení. Určitou nevýhodou může být autentizace přístupu pomocí systému Kerberos. Instalace Cuckoo Sandbox Předtím, než začneme s konfigurací Cuckoo Sandbox, je potřeba nainstalovat některé další nástroje a knihovny, které Cuckoo využívá pro svůj běh. Za účelem instalace těchto nástrojů a Cuckoo hosta, byl vytvořen skript cuckoo_install. Před jeho spuštěním musíme správně nastavit proměnnou IMAGE_HOME, která udává cestu, kde bude vytvořen obraz disku stroje (mělo by to být dostatečně velké úložiště, v řádech desítek GB) a proměnnou ISO_HOME, která udává cestu k instalačnímu iso obrazu s Windows. V první řadě se nainstaluje samotný Python, ve kterém je vytvořena naprostá většina modulu Cuckoo. Dále probíhá instalace nástrojů pro správu databáze, běh webového rozhraní a pomocných nástrojů pro zpracování výsledků analýzy. Následně se nainstaluje nástroj tcpdump pro získání síťové komunikace podezřelého programu, jejíž analýze budeme věnovat většinu času. Tcpdump bude poslouchat na virtuálním směrovači a zachycený provoz bude zaznamenáván do souborů. Jak již bylo zmíněno, KVM je součástí jádra Linux, budeme však potřebovat nainstalovat další jeho komponenty, které se v jádru nenachází. Zároveň se nainstaluje i knihovna Libvirt. Potom, co máme nainstalované zmíněné komponenty a nástroje, můžeme přejít ke konfiguraci sítě. Cuckoo hostitel Cuckoo host Virtuální přepínač pracující v režimů NAT 192.168.122.1 192.168.122.222 eth1 eth0 Obrázek 5.2: Pohled dovnitř Cuckoo hostitele Libvirt využívá koncept virtuálního síťového přepínače. V našem případě síťový přepínač bude pracovat v režimu NAT. To znamená, že Cuckoo hosty budou používat privátní nesměrovatelné adresy a překlad adres NAT mapuje tyto privátní adresy na veřejnou. Zároveň pomocí 18
5. Implementace atributu dev=eth1 řekneme směrovači, že veškerá síťová komunikace Cuckoo hostu má probíhat přes síťové rozhraní eth1. V případě potřeby můžeme NAT režim nahradit směrovacím režimem, kdy virtuální přepínač vidí IP adresy v každém paketu a tyto informace využívá při rozhodování na základě informací ze své směrovací tabulky. Po konfiguraci sítě následuje instalace Cuckoo hosta. Protože z disku, na kterém budeme mít nainstalovaný systém, vytvoříme tzv. snapshot, potřebujeme vhodný typ disků, který tuto funkci podporuje. Snapshot je funkce, která je dostupná při virtualizaci a umožňuje nám uložit momentální stav systémů a v případě problémů jsme schopni vše vrátit do původního stavu. V našem případě je využíván nástrojem Cuckoo, kdy po každé analýze je systém obnoven za použití uloženého snapshotu, čímž je zajištěno, že všechny škodlivé soubory vytvořené malware za běhu, se smažou. Snapshot ukládá opravdu vše, včetně v danou chvíli běžících aplikací. Jako typ disků tedy zvolíme qcow2, který má podporu této funkce, a vytvoříme disk potřebné velikosti. Následně pomocí instalačního příkazu virt-install a specifikace instalačních parametrů se vytvoří a spustí nový virtuální stroj (Cuckoo host). V parametrech příkazu uvádíme jméno stroje, velikost přidělené operační paměti, cestu k obrazu disků a iso souboru s instalací Windows, počet virtuálních procesorů, název sítě, ke které chceme systém připojit. U sítě a disku navíc specifikujeme, že chceme použit zmíněné ovladače VirtIO. Pomocí parametru noautoconsole říkáme, že nechceme automatický otevřít okno s instalací, protože jsme připojeni přes SSH. Specifikujeme také VNC port, na kterém bude virtuální stroj dostupný. V tuto chvíli skript doběhl a můžeme se připojit přes VNC na spuštěný stroj a manuálně dokončit instalaci, která je podrobněji popsaná v následující podkapitole. 5.1.2 Příprava Cuckoo hosta V tomto okamžiku máme spuštěný virtuální stroj na portu 5901, ke kterému se můžeme připojit za použití VNC. Po dokončení instalace operačního systému můžeme přejít k jeho samotné konfiguraci. Stejně jako na hostiteli, také na hostovi musíme nainstalovat Python. Podle toho, jaké typy souboru budeme analyzovat, nainstalujeme také vhodný software pro otevření daných souboru. V našem případě se bude jednat pouze o aplikaci pro čtení PDF dokumentů a webový prohlížeč Chrome. V základní instalaci Windows již máme k dispozici WordPad, který zvládne otevření dokumentů formátu doc. Stejně jako na hostiteli, tak i na hostovi nesmíme zapomenout na instalaci ovladačů VirtIO pro zajištění částečné paravirtualizace, Ovladače pro operační systém Windows jsou k dispozici na stránkách nástroje KVM [32]. Díky nim bude hardware virtualizovaný hostitelem rozpoznán a komunikace s hypervisorem hostitele bude efektivnější. Ovladače instalujeme standartním způsobem přes rozhraní Správce zařízení. Musíme rovněž vypnout firewall a automatické aktualizace. Může to mít vliv na chování malware a výsledky analýzy mohou být znehodnoceny. Zároveň se ve výsledcích analýz pak objevují IP adresy, které jsou bezpečné a nejsou pro nás ničím zajímavé. Ve vlastnostech připojení hosta musíme také nastavit pevnou IP adresu. Pokud síť zůstane nastavená na dynamické přidělování IP adres, je možné, že virtuální počítač dostane po startu novou IP adresu, což rozhodí konfiguraci Cuckoo. Aby Cuckoo mohl vyměňovat s hostem informace v průběhu analýzy, musí uvnitř hosta běžet speciální agent. V našem případě se nachází na hostiteli ve složce /opt/cuckoo/agent. Jedná se o skript agent.py, který stačí zkopírovat do operačního systému hosta a spustit. Tím se spustí XML-RPC server, který bude poslouchat na portu 8000 a čekat na spojení. Výhodou tohoto protokolu pro vzdálené volání procedur je jeho podpora v mnoha jazycích a na mnoha platformách. Komunikace probíhá pomocí předávání zpráv ve formátu XML, Cuckoo host dostane zprávu, požadavek obslouží a výsledek se zašle řídícímu software. Jako komunikační protokol se používá HTTP a tato komunikace je z výsledného reportu odstraněna. Skript přidáme 19
5. Implementace mezi programy spouštěné při startu. V případě, že budeme chtít použít více hostů za účelem průběhu více analýz najednou, můžeme jednoduše zkopírovat qcow2 obraz, na kterém již máme nainstalovaný Windows. A následně za použití virt-install s parametrem import, vytvořit a spustit nový virtuální stroj. Samozřejmě mu, ale musíme přidělit jinou statickou IP adresu a jiné jméno, které funguje jako unikátní identifikátor. 1 # virt-install --name cuckoo_host_2 --ram 1024 --disk path=copy. qcow2,device=disk,bus=virtio,format=qcow2 --vcpus=1 -- network network=local,model=virtio --hvm --graphics vnc, port=5901 --noautoconsole --import 5.1.3 Konfigurace nástroje Cuckoo Sandbox Potom, co máme na hostovi manuálně nastavené všechny potřebné věci, můžeme, spustíme skript cuckoo_config, který je určený ke konfiguraci a prvnímu spuštění Cuckoo Sandbox. Skript navazuje na předchozí cuckoo_install a vytváří snapshot ze stejného stroje, který byl v předchozím skriptu vytvořen a který jsme následně manuálně konfigurovali. Je proto důležité, aby v momentu spuštění skriptu stroj běžel a byl správně nakonfigurován. Po vytvoření snapshotu, se provede nastavení potřebných hodnot v konfiguračních souborech Cuckoo, které si teď rozebereme trochu podrobněji. cuckoo.conf Tento soubor obsahuje základní nastavení nástroje Cuckoo. Můžeme zde například aktivovat kontrolu aktuální verze Cuckoo, zapnout mazání souboru po skončení jejich analýzy, vypnout tvorbu paměťového výpisu, nastavit maximální velikost souboru povolenou pro analýzu. Tvorbu výpisů operační paměti stroje vypneme, protože se více soustředíme na síťovou komunikaci a tato funkce by analýzy zpomalovala. Důležitou věcí, kterou je třeba zde změnit, je jméno modulu, který se použije pro komunikaci s virtualizačním softwarem. V našem případě to není virtualbox, ale kvm. Dále změníme IP adresu, kam se budou zasílat logy o průběhu analýzy, na adresu našeho virtuálního přepínače. Zároveň se zde nastavuje časový limit pro ukončení běhu malware, který se dosáhne poměrně snadno, protože většina malware po spuštění běží v pozadí a svůj běh dobrovolně neukončí. Tento parametr tedy určuje, jak dlouho analýza potrvá. V některých případech, abychom malware zanalyzovali důkladně, se vyplatí tento parametr nastavit na delší dobu. Můžeme zde nastavit také časové limity určené pro služby, které určují, jak dlouho bude Cuckoo čekat na odpověď dané služby (databáze, virtuálního stroje) než se analýza zcela přeruší. kvm.conf Protože jsme zvolili platformu KVM, bude nás zajímat právě tento konfigurační soubor a je z celé konfigurace nejdůležitější. Uvádíme zde jméno stroje (hosta), na kterém chceme analýzy spouštět. V případě více strojů uvedeme více jmen. Nastavujeme zde statickou IP adresu, kterou jsme stroji přiřadili, a vygenerované číslo snapshotu. Jako jméno rozhraní, na kterém budeme zachytávám sítový provoz, uvedeme virbr0, který je společný pro všechny případné Cuckoo hosty. processing.conf Je konfigurační soubor, kde můžeme vybrat, které z modulů zpracování výsledků chceme využít. Zakážeme pouze zpracování operační paměti stroje, protože jak již bylo řečeno, nebudeme ji 20
5. Implementace potřebovat, a analýzu souboru službou VirusTotal 1. reporting.conf Zde můžeme stanovit, v jakých formátech bude výsledná zpráva dostupná. Necháme zde dostupné všechny formáty, určitě budeme potřebovat JSON, případně HTML. 5.1.4 Spuštění nástroje Cuckoo Sandbox V tuto chvíli je již vše hotové a Cuckoo se spustí v KYPO. Protože potřebujeme, aby běželo jako proces v pozadí, spustí se za použití nástroje supervisor. Jedná se o klient/server systém, který umožňuje ovládat celou řadu procesů běžících na operačních systémech typu UNIX. Supervisor spouští všechny skripty jako vlastní podprocesy, což nám umožňuje jejich snadnou správu. Navíc máme možnost nakonfigurovat automatické restartovaní úlohy při zhavarování. Získáme tak nad procesy Cuckoo mnohem lepší kontrolu než v případě init skriptu. Na rozdíl od klasických init skriptů jsou jednotlivé procesy hlídané a jsme schopni ovlivnit jejich chování v případě, že se objeví nějaký problém. Serverová část nástroje se jmenuje supervisord. Je zodpovědná za spuštění podprocesů, reagovaní na příkazy od klienta a restartovaní zhavarovaných podprocesu. U každého podprocesů se ukládá jeho stdout a stderr výstup, který se následně nachází ve složce /var/log/supervisor. Klient určený k použití v příkazové řádce se jmenuje supervisorctl. Poskytuje rozhraní pro funkce, které jsou poskytované serverem. Můžeme se připojit k jednotlivých podprocesům, zjistit jejich stav, řídit jejich běh pomocí příkazu start a stop nebo získat výpis všech aktuálně běžících podprocesu. Ve složce /etc/supervisor/conf.d vytvoříme nový soubor, který pojmenujeme cuckoo.conf a nadefinujeme v něm, co přesně chceme spustit. 1 [program:cuckoo] 2 command=python cuckoo.py 3 directory=/opt/cuckoo 4 5 [program:cuckoo-api] 6 command=python api.py --host 10.10.10.2 --port 8090 7 directory=/opt/cuckoo/utils 8 9 [program:cuckoo-web] 10 command=python manage.py runserver 10.10.10.2:6060 11 directory=/opt/cuckoo/web Po přidání cesty k vytvořenému konfiguračnímu souboru a restartování supervisord, můžeme vidět, že Cuckoo nám běží a čeká na nové soubory určené k analýze. 1 # supervisorctl status 2 cuckoo RUNNING pid 13160, uptime 4:16:54 3 cuckoo-api RUNNING pid 13159, uptime 4:16:54 4 cuckoo-web RUNNING pid 13161, uptime 4:16:54 cuckoo Je v tomto případě označení pro samotný řídicí software Cuckoo. Po přijetí souboru od Web rozhraní nebo REST API serveru vytvoří novou úlohu a spustí analýzu na hostovi. 1. www.virustotal.com 21
5. Implementace cuckoo-api Označuje REST API server, který nabízí Cuckoo. REST je architektura navržená pro distribuované prostředí. Na rozdíl od již zmíněného XML-RPC, který Cuckoo používá pro komunikaci s hostem, je orientován datově, nikoli procedurálně. Cuckoo definuje vzdálené procedury a protokol pro jejich volání, REST určuje, jak se přistupuje k zdrojům. Zdrojem mohou být jak data, tak i stavy Cuckoo. Všechny zdroje mají vlastní uri identifikátor. REST API, který nabízí Cuckoo, implementuje dvě základní metody, vytvoření dat (POST) a získaní požadovaných dat (GET). Tyto metody jsou implementovány pomocí odpovídajících metod HTTP protokolu. REST API budeme hlavně využívat v našem skriptu, pro odeslání souboru na analýzu a následné získání podezřelých IP adres. Umožňuje také propojení Cuckoo s dalšími známými analytickými nástroji jako například Maltego. [30] cuckoo-web Označuje Web rozhraní, které jsme spustili na adrese http://10.10.10.2:6060. Můžeme k němu přistupovat z libovolného stroje v sandboxu KYPO, který disponuje grafickým rozhraním a webovým prohlížečem. Je tvořeno s využitím frameworku Django (který jsme v předchozích krocích nainstalovali). Rozhraní nám umožňuje odesílat soubory na analýzu a procházet výsledné zprávy předchozích analýz (výsledky analýz jsou ukládány do databáze). Pokud bychom chtěli rozhraní zpřístupnit i mimo sandbox KYPO, museli bychom vytvořit již zmíněné SSH tunely. 5.2 Tvorba podpůrných nástrojů Táto podkapitola se věnuje tvorbě nástrojů pro rozšířenou podporu analýz. Konkrétně se jedná o nástroj pro automatické generování úderů na klávesnici pro analýzu keyloggeru a skript konzolového rozhrání pro spouštění analýz a rychle získaní podezřelých IP adres na strojích bez grafického rozhraní. 5.2.1 Program pro automatické generování úderů na klávesnici Při analýze takových malware jako keyloggery, které zaznamenávají stisky jednotlivých kláves za účelem získaní uživatelských hesel, vznikla potřeba po nástroji, který během analýzy v Cuckoo Sandbox bude simulovat tyto stisky kláves uživatelem. Většina malware tohoto typu funguje tak, že se pokusí spojit se serverem útočníka, až když nějakou podobnou činnost zaznamená. Potřebujeme tedy vytvořit nástroj, který bude během analýzy běžet na Cuckoo hostovi zároveň s podezřelým programem a podstrčí mu fiktivní data, která se následně malware pokusí předat útočníkovi. Snažíme se tedy o to, aby se ve výsledné zprávě o analýze malware objevila IP adresa, na kterou keylogger odesílá historii stisku kláves. Nástroj musíme navrhnout takovým způsobem, aby simulace stisku vypadala co nejvíc pravděpodobně. Musí fungovat pro většinu keyloggeru a žádný z nich by neměl odhalit, že se jedná o program a ne o skutečnou osobu. Řešení tedy budeme implementovat v programovacím jazyce C++, o kterém je známo, že je hodně vázaný na hardware. Jako vývojové prostředí zvolíme Visual Studio, které je úzce spojeno s vývojem pro Windows. Před tím, než přejdeme k psaní samotného kódu, uvedeme princip, na kterém funguje psaní na klávesnici. Data z klávesnice jsou získávaná ve formě tzv. skenovacích kódu. Každá klávesa má přiřazený svůj vlastní skenovací kód, podle kterého ovladač klávesnice rozpozná, která klávesa byla stisknuta. Skenovací kód je vždy přiřazen konkrétní fyzické klávese a nemění se od jazykového rozložení klávesnice nebo zapnuté funkce Caps Lock. Při psaní velkého písmena jsou tak odeslány hned dva skenovací kódy. Všechny skenovací kódy jsou zapsané v hexadecimální 22
5. Implementace soustavě. Existují tři různé sady skenovacích kódu a z dokumentace společnosti Microsoft, zjistíme, že všechny aplikace v operačním systému Windows pracují s první sadou. Platí proto pro nás tabulka, která je k nalezení zde [33]. Výsledný program není rozsáhlý a je tvořen pouze třemi funkcemi. V hlavní funkci main() definujeme konstantní řetězec, který se nebude měnit a obsahuje text, který bude psán programem na klávesnici. Daným řetězcem se naplní datový kontejner typu Vektor, kde každý znak řetězce tvoří samostatnou položku kontejneru. V dalším kroku následuje volání funkce converttoscancode(vector<char> collectionofcharacters), která jako parametr přebírá instanci třídy Vektor, vytvořenou v předchozím kroku. Tato funkce má za úkol přeložit každý znak obsazený v kolekci na skenovací kód a jako výsledek vrátit kolekci odpovídajících skenovacích kódů. Příklad překladu slova user bude vypadat následovně. 1 u s e r 2 0x16 0x1F 0x12 0x13 Nakonec je v nekonečné smyčce volaná funkce presskeys(vector<unsigned int> keycodes), která pro každý skenovací kód z kolekce pošle signál o zmačknutí klávesy a následně o její uvolnění. Pokud budeme chtít změnit řetězec, který program píše na klávesnici, budeme muset změnit hodnotu v kódů a kód opětovně přeložit. Obsah řetězce je však při použití daného programu jako pomocníka při analýze irelevantní a nepočítá se s tím, že ho uživatel bude chtít měnit. Hlavním jeho cílem je pouze vyprovokovat malware k akci. Binární verzi našeho programu umístíme uvnitř Cuckoo hosta. Teď zbývá říct Cuckoo, aby program, který jsme právě vytvořili během analýzy, spustilo. Pro tyto účely vytvoříme modul Press.py a umístíme ho do složky s moduly, které se spoušti v průběhu analýzy na hostovi (analyzer/windows/modules/auxiliary). Skript vytvoříme podle vzoru ostatních Cuckoo modulů a nadefinujeme v něm cestu k našemu programu na Cuckoo hostovi. 1 def start_press(): 2 subprocess.call([ C:\Users\windows\Documents\Cuckoo\ Key_Press_Simulator.exe ]) 5.2.2 Skript pro spuštění analýz a získání podezřelých IP adres Nyní si představíme skript, který byl vytvořen za účelem odeslání souboru na analýzu a následného získání podezřelých IP adres, které se během analýzy vyskytovaly. Je napsán ve skriptovacím jazyce Bash a v podstatě tvoří souvislou sérii příkazů. Je možné ho používat na unixových operačních systémech, nevyžaduje překlad, protože se jedna o jazyk interpretovaný. Bere skript řádek po řádku a volá příkazy, které jsou ve skriptu zapsány. Pro vytvoření nové analýzy a získání jejích výsledků využívá již zmíněné REST API, které poskytuje Cuckoo Sandbox. Výsledky analýzy budeme stahovat ve formátu JSON, ze kterého následně parsováním získáme požadovaný výstup. Parsování tak velkého JSON souboru za použití Bash nemusí být úplně jednoduché. Na rozdíl od ostatních programovacích jazyku Bash neposkytuje žádné knihovny, které bychom mohli využít pro zjednodušení práce. Můžeme tedy uvažovat o poměrně složitém regulárním výrazu nebo se rozhlídnout po nějakém dalším nástroji, který nám tuto práci usnadní. Takovým nástrojem je jq. Jedna se o flexibilní JSON zpracovatel určený pro použití přímo v příkazové řádce. Po stažení a instalaci balíku můžeme nástroj začít ihned používat. Samotný skript je tvořen následujícími funkcemi: get_ip_and_port Na vstupu dostává řetězec tvořený IP adresou a portem oddělené dvojtečkou. Jedná se 23
valid_port 5. Implementace o adresu a port, kde běží REST API server. Řetězec rozdělí a uloží hodnoty do separátních proměnných. Jako vstup dostává číslo portu, které kontroluje a zjišťuje, zda-li je číslo portu validní (celé číslo z rozsahu 1-65535). valid_ip Kontroluje, jestli je vstupní parametr platnou IP adresou. valid_input Pomoci funkci valid_port a valid_ip kontroluje, jestli je vstup od uživatelé správný, neobsahuje chyby a překlepy v adrese nebo souboru. Pokud je všechno v pořádku, volá funkci testc. testc Dotazem na REST API server kontroluje jeho dostupnost. Pokud je server dostupný, volá funkci analyze. Pokud analýza proběhne úspěšně, zavolá funkci get_hosts. analyze Posílá soubor na analýzu, pokud je nově vytvořená úloha příliš dlouho ve stavu čekaní, analýzu přeruší. get_hosts Stáhne výslednou zprávu, pomoci nástroje jq získá IP adresy, na kterých zavolá funkci filter. Podezřelé adresy vypíše na výstup. filter Pro každou IP adresu zkontroluje, jestli patří mezi bezpečné či nikoliv. Rozmezí bezpečných adres získává z přiloženého JSON souboru. Seznam bezpečných IP adres ukládáme v přiloženém ke skriptu JSON souboru ve formě rozsahu. V následující ukázce je zobrazen příklad uložení rozsahu adres Microsoft, které se nezobrazí ve výsledném seznamu podezřelých IP adres. 1 [ 2 { 3 " Microsoft ": { 4 " beginning ": "94.254.64.0", 5 " ending ": "94.245.127.255" 6 } 7 }, 8 ] Na obrázku 5.3 je zobrazen výsledný průběh analýzy s využitím daného skriptu. Skript v základní konfiguraci vypisuje získané IP adresy na standardní výstup. Ovšem výpis na standardní výstup nemusí být vždy efektivní. Například při analýze většího množství malware, kdy daný skript pouštíme ve smyčce je vhodné výstup přesměrovat do souboru. 24
5. Implementace Vrací výslednou zprávu a parsováním se získávájí IP adresy Obrázek 5.3: Průběh analýzy s využitím vytvořeného skriptu 25
6 Ukázkové analýzy malware V této kapitole si ukážeme analýzy malware provedené pomoci nástroje Cuckoo Sandbox, který jsme integrovali do Kybernetického polygonu. K dispozici jsme měli několik desítek starších a ve většině případu již neaktivních malware. Za použití vytvořeného skriptu, jsme vybrali jeden. Skript jsme spustili ve smyčce, aby pro každý malware vykonal analýzu a získané IP adresy vypsal do souboru. Následně jsme prozkoumali vytvořený soubor a zjistili, který malware stále provádí podezřelou síťovou komunikaci. Podrobnou analýzu tohoto malware si ukážeme v této kapitole. Dalším malware, který jsme zvolili pro ukázkovou analýzu je keylogger, který ověří funkčnost programu pro automatické generovaní stisku kláves. 6.1 smlouva18.03.2013signed_a92686b621013978.exe Jako první vzorek pro analýzu zvolíme malware získaný z podvodného e-mailu. Jedná se o mediálně známý případ, který se objevil v dubnu 2014, kdy několik desítek lidí dostalo e-mail, který informoval adresáta o neuhrazené pohledávce a obsahoval přílohu ve formátu zip [1]. Příloha obsahovala nebezpečný vir, který připravil lidi o poměrně velké finanční částky. Tento malware se objevoval i v dalších evropských zemích, což svědčí o úspěchu útočníků. Text e-mailu se snaží vzbudit u příjemce zdání existence dluhu. Tváří se, že byl vytvořen pracovníky banky a pojednává o částce, kterou zákazník bance dluží. Sděluje příjemci, že kopii smlouvy a platební údaje najde v příloze jako soubor smlouva_5564844564b4564.zip. Tento zip soubor obsahuje spustitelný exe soubor, který mnoho vyděšených uživatelů spustilo. Ukážeme si tedy analýzu daného malware v Cuckoo Sandboxu, který máme puštěný v KYPO. Soubor na analýzu pošleme pomocí námi vytvořeného skriptu a zjistíme, jestli provádí podezřelou síťovou komunikaci, na kterou se následně podíváme podrobněji. Malware necháme běžet na Cuckoo hostovi deset minut, aby měl dost času na nakažení systému. Obrázek 6.1: Podezřelé IP adresy vypsané na standardní výstup Z výsledků zobrazených na obrázku 6.1 vidíme, že po vyřazení známých a bezpečných IP adres, zbyly nám tři, které můžeme považovat za podezřelé. Pokusíme se IP adresy přeložit na adresy domén a zjistit informace o vlastníkovi. IP adresa Doména 97.74.215.50 djinni.net 85.159.67.70 ramsisyapi.com 87.106.204.65 icsgrafico.com Tabulka 6.1: Překlad získaných IP adres na domény. Překlad získaných IP adres na domény je znázorněn v tabulce 6.1. Na první pohled nemají nic společného. Fyzicky jsou hostovány na serverech v různých zemích (Německo, Kypr, Amerika), které nabízí služby webhostingu. Můžeme předpokládat, že útočník má na těchto serverech pronajaté místo, kde má rozmístěný sběrný server nebo další škodlivé soubory, které malware 26
6. Ukázkové analýzy malware stahuje. Podíváme se na celý průběh analýzy důkladněji, stáhneme PCAP soubor a prozkoumáme zmíněné IP adresy v programu Wireshark [17]. Když si stáhneme výslednou zprávu vygenerovanou nástojem Cuckoo, můžeme ze snímku obrazovky vidět, že malware po spuštění otevře dokument. Ze zrávy můžeme rovněž vyčíst, že se jedná o dokument typu rtf a ne doc, jak je tomu zvykem. Soubory rtf se vyznačují mnohem menší velikostí oproti doc a zároveň se dají otevřít obyčejným textovým editorem. Dá se předpokládat, že formát rtf byl útočníkem zvolen záměrně, aby příloha e-mailu byla co nejmenší a byla spustitelná i na počítačích s chybějícími kancelářskými balíky. Samotný obsah souboru pro oběť nenese žádnou vypovídající hodnotu. Jak můžeme vidět na obrázku 6.2, jedná se o smlouvu mezi krajem Vysočina a nemocnicí v Jihlavě. Po chvilce hledaní na internetu zjistíme, že se jedná o skutečnou smlouvu a je volně dostupná na webových stránkách kraje Vysočina (ovšem v klasickým doc formátu) [2]. Běžný uživatel daný soubor zavře a pravděpodobně e-mail ihned odstraní. Malware však zůstává běžet v pozadí, přepsáním registru si navíc zajistí automatické spouštění při přihlašování uživatele do systému. Obrázek 6.2: Dokument, který se zobrazuje po spuštění malware Samotný soubor rtf je bezpečný a slouží zřejmě jen pro odvedení pozornosti uživatele. Škodlivý program se pravděpodobně teprve stáhne z jedné ze tří námi získaných IP adres. Stáhneme si proto PCAP soubor (curl http://147.251.252.232:8090/pcap/get/5 > dump.pcap), otevřeme ho v program Wireshark a postupně budeme aplikovat filtr http&&ip.addr pro každou z těchto tří IP adres. Použitým filtrem říkáme, že pro konkrétní IP adresu, chceme zobrazit komunikaci jen pomocí protokolu HTTP. Z výstupu vidíme, že se malware snaží získat soubor z názvem saver.tar.gz. V prvním případě (97.74.215.50) byla komunikace neúspěšná, vzdálený server vrátil chybu: 404 (Nena- 27