Hlavní navigace

Hacking Team: co všechno uměl a jak to dokázal?

Petr Krčmář

Úspěšný útok na Hacking Team svlékl do naha jednu z velkých společností, která nabízí počítačové útoky a sledování na objednávku. Co všechno firma zákazníkům nabízela? Proč se jí takové útoky dařily?

Na letošní konferenci OpenAlt zazněla také velmi zajímavá přednáška o případu společnosti Hacking Team, která dlouhá léta prodávala své služby vládám a organizacím po celém světě. Všechny detaily se provalily s bezpečnostním průnikem, při kterém firmě unikla prakticky všechna data. Umožnila nám nahlédnout pod pokličku takové společnosti.

Od hackování ke „vzdálenému monitorování“

Petr Hanáček z FIT VUT v Brně začal svou přednášku jako příběh z Milána, kde žili dva přátelé, kteří se živili počítačovou bezpečností. Občas něco konzultovali, občas něco hackli, až za nimi přišla policie. Ale ne je zatknout, ale aby s nimi spolupracovali. Tak vznikla intenzivní spolupráce, ale už se nehackovalo, ale „vzdáleně monitorovalo“.

Tak vznikla firma Hacking Team, která vytvořila systém nejprve pojmenovaný Galileo, pak Da Vinci a nakonec Remote Control System. Pak začali své služby prodávat dalším firmám, tajným službám a podobně. Ani se tím moc netajili, veřejně své služby inzerovali a zveřejňovali, kolik států si je pronajímá. Informace o jejich činnosti jsme měli jen zprostředkovaně, když se provalil nějaký hack. Mezinárodní novinářská organizace pak zmapovala 21 podezřelých států, které pravděpodobně s Hacking Teamem spolupracovaly. To už jsme věděli, co dělají, pro koho to dělají, ale neznali jsme žádné detaily. Chyběly informace o obchodním modelu, jejich schopnostech a znalostech.

Pak přišel 5. červenec 2015, kdy Hacking Team ochutnal vlastní medicíny a byl hacknut. A to tak, že úplně, uteklo jim v podstatě všechno – celkem 400 GB dat. Útočníci se dostali k mnoha citlivým informacím a všechno to zveřejnili na internetu. Na Twitteru Hacking Teamu zveřejnili zprávu o tom, že firma nemá co skrývat a každý se může podívat. Tím jsme dostali unikátní příležitost se podívat, jak přesně taková společnost funguje. Není samozřejmě jediná, takových společností existuje mnoho.

Velký unik otevřel velký svět

Firmě unikl například kompletní seznam klientů, do té doby jsme znali jen asi čtvrtinu z nich. Mezi klienty z Evropské unie se najdeme taky, takže Hacking Team pracoval i pro nás. Znepokojivé je, že mezi státy byly i některé ne úplně slušné země. Bůh ví, k čemu ten software zneužívaly. Mezi nejlépe platící země patří Mexiko, Itálie, Maroko. Česko se nachází přibližně uprostřed seznamu.

Unikl taky přibližně milion e-mailů, netrvalo dlouho a někdo naprogramoval vyhledávač, ve kterém je možné si jednotlivé zprávy filtrovat. Unikly také kompletní účetní doklady, ze kterých plyne, že si služby nekupovaly jen státy, ale například také banky. Není jasné, k čemu zrovna banka takové služby potřebuje, ale je možné zjistit, že šlo konkrétně o oddělení interního auditu. Zajímavá je například také objednávka od americké DEA, která by měla mít dostatek vlastních amerických odborníků.

Podařilo se získat také přístupová hesla k mnoha různým službám, jako jsou anonymizéry nebo i SSH účty na různých serverech. Mnoho z hesel bylo velmi triviálních jako kittens nebo P4ssword. Některá hesla byla zahašovaná, takže bylo potřeba na ně pustit duhové tabulky a podařilo se je odhalit.

Zveřejněny byly také ceníky, které dávají alespoň přibližnou představu o cenách. Většina částek za útok se pohybuje okolo 40 000 eur. Neznamená to, že ke všem nabídkám existuje útočný kód. Nemá smysl ho psát hned, ale čekalo se, až přijde kritické množství objednávek a pak se teprve kód napsal. Ceník tedy trochu lže a nedává přesnou představu o aktuálních schopnostech firmy.

Hacking Team u nás přímo neprodávala, ale měl sjednanou spolupráci s českou společností, která služby lokálně přeprodávala. Podle mailové komunikace se bavili o tom, že by se mohly jejich služby prodávat také českému NBÚ. Nakonec k tomu ale nedošlo, protože NBÚ má za úkol potírat kybernetické bezpečnostní hrozby a Hacking Team je někde na pomezí, proto byl nápad pro jistotu shozen ze stolu.

Co Hacking Team uměl?

O konkrétních možnostech Hacking Teamu dává přehled prezentace, která je součástí úniku. Nabízel například sledování webového prohlížeče, odposlech mikrofonu, sledování klávesnice, natáčení uživatele webovou kamerou a podobně. Na mobilních telefonech to bylo navíc sledování historie volání, lokalizace uživatele a odposlech uživatele. Na mobilu má odposlech úplně jiný rozměr, protože si sebou vlastně nosíte v kapse vlastní štěnici.

Nabízené služby vypadají velmi lákavě, protože nabízejí odpověď na řadu scénářů. Možnosti jsou až tak zajímavé, že se dá pochybovat o tom, že to Hacking Team všechno opravdu dokáže. Výrobci nám totiž tvrdí, že jejich přístroje jsou skvělé a bezpečné a najednou tu je firma, která tvrdí, že dokáže cokoliv.

Klient dostává vlastní aplikaci, která mu dovoluje ovládat celý systém a objednávat si v něm jednotlivé útoky. Celá akce začne tím, že si v aplikaci naklikáme objekt a potom si necháme vygenerovat soubor s exploitem. Původně šlo o samoobsluhu, ale uživatelé zacházeli s drahocennými exploity velmi ledabyle a nechávali je povalovat po internetu a tím zvyšovali riziko prozrazení. Proto se přešlo na klasický ticketovací systém a balíček s exploitem připravovali na požádání přímo lidé v Hacking Teamu.

Výsledkem je například wordovský dokument, který je vyroben přesně tak, aby ho dotyčný čekal, například na základě předchozí komunikace, kterou už chvíli sledujeme. To je nejkomplikovanější varianta proti paranoidním obětem. U ostatních si to můžu zjednodušit a poslat třeba poděkování e-mailovým přátelům.

Je také možné škodlivý kód vložit například do webové stránky, která je kopií nějakého webu. Hacking Team umí i dodat krabičku s názvem Network injector, která konkrétnímu uživateli zamění původní stránku za napadenou. Často si tuto akci ale umí objednatel zajistit sám, takže instalace krabičky není potřeba.

Jakmile je kód u oběti, je možné si sednout ke konzoli a začít programovat útok. Je například možné zvolit, kdy a co chceme provádět. Kdybychom třeba používali mobil jako štěnici a trvale odesílali data, velmi rychle vybijeme baterii. Můžeme proto nahrávat do souboru a buďto odesílat v nějakých intervalech nebo ještě lépe počkat, až se mobil dostane na Wi-Fi.

Takto je možné zařízení sledovat, získávat z něj informace a zařazovat je také do kontextu. Je to krásná aplikace, vypadá to jako z nějakého amerického filmu. Umožňuje například sledovat setkávání jednotlivých obětí, analyzovat obsah, vytvářet profily jednotlivých cílů a podobně. Je vidět, že se Hacking Team staral o svoje zákazníky a vytvářel jim aplikaci, se kterou je radost pracovat.

Kde se vezme exploit?

Je skutečně možné takto snadno zařízení napadnout? Abychom to mohli udělat, musíme mít připravené nějaké exploity. Hacking Team ve skutečnosti nabízel mnoho možností, jak zařízení infikovat. Je možné použít CD nebo flash disk, použít například port Firewire nebo třeba přímou instalaci po vyjmutí disku.

Stejně tak je možné infikovat vzdáleně pomocí knihovny zero-day exploitů. Vytvořili například nový nástroj melting tool, který dokáže kód injektovat přímo do provozu během stahování obsahu z internetu. Prakticky všechno bylo prováděno vzdáleným přístupem, přestože je to složitější, dražší a náročnější než lokální napadení zařízení. Vyžaduje to sice rozsáhlou knihovnu exploitů, ale většina klientů nechtěla s fyzickým útokem nic mít.

Hacking Team využíval několik různých kategorií útoků: nejjednodušší sociální, veřejně dostupné exploity až zero-day exploity. Ty jsou jako čerstvě maso, nevydrží věčně. Potřebuji mít nějaký mechanismus dodávání stále čerstvé zásoby exploitů. Nemůžu si je nasyslit do budoucna, protože po pěti letech už nebudou fungovat. Opravdu citlivé operace si Hacking Team chránil a pracoval s nimi sám, aby nedošlo k úniku a tím znehodnocení exploitu.

Zdroje exploitů jsou různé, firma může buďto vytvářet útočný kód sama nebo je nakupovat. Není příliš reálné, aby firma sama hledala všechny chyby. Hacking Team hledal různé cestičky, včetně některých velmi kreativních. Snažila se například spolupracovat s univerzitami, které by například během nějakého výzkumu objevovaly a posílaly bezpečnostní chyby. Hlavním zdrojem je ale nákup exploitů od lidí, kteří se tím živí.

Příkladem je například Vitalij Toropov, který do roku 2015 aktivně a veřejně hledal a hlásil bezpečnostní chyby v software. Pak ale přestal. Nebo je spíš přestal dávat do otevřených databází. Víme, že začal exploity prodávat Hacking Teamu a udělal si z toho dobrou živnost. Posílal normální faktury, které se našly v Hacking Teamu. Firma poté vypracovala systém, který jí umožnil nakupovat efektivně a automatizovaně pomocí vyplňování dotazníků. Dnes jsme už dále, existuje portál Zerodium, který funguje jako aukční server na exploity. Najdou se tu levné útoky na známé redakční systémy jako WordPress, Drupal a Joomla, ale i požadavek na „svatý grál“ v podobě vzdáleného útoku na zařízení od Apple.

Nejčastěji byly využívány dva konkrétní exploity: útok na jádro Windows – konkrétně knihovnu ATMFD.dll a také Flash player. První chyba se týká programu Adobe Type Manager, který do Windows přidával podporu True Type fontů. Původně šlo o samostatný program, který se později stal součástí systému. Chyba přežila několik desetiletí a mnoho verzí Windows. Ten kód je i v desítkách, ale je už samozřejmě opravený. Hacking Team byl prozrazen těsně před vydáním Windows 10, takže Microsoft stihl vydat záplatu.

Chyba ve Flashi se pak zneužívala tak, že se vložil flashový objekt do powerpointové prezentace. Při jejím otevření došlo k načtení a spuštění Flashe, který byl přes díru zneužit ke stažení útočného kódu, který pak prováděl samotný útok. Zajímavé ale je, že na první pohled jde o dva velmi rozdílné exploity pro různé technologie. Že by se jeden člověk zabýval dvěma tak rozdílnými systémy a hledal v nich slabiny? Mají ovšem jednu společnou věc: oba nástroje programovala společnost Adobe. Vitalij Toropov se tedy při své práci zaměřil na produkty jedné společnosti, která má z hlediska bezpečnosti velmi špatnou pověst.

Stále stejné chyby už 40 let

Nejčastěji jsou stále zneužívány chyby přetečení zásobníku, kdy programátor používá pro kopírování řetězců nebezpečné knihovní funkce. První popis se přitom objevil už v roce 1972, poprvé to bylo v praxi zneužito v roce 1988 a v roce 1996 se objevil první vyčerpávající návod, který dokázal použít kdokoliv: Smashing The Stack For Fun And Profit. Je to tu s námi třicet let a měli bychom být schopni s tím už pracovat. Naštěstí není nebezpečných funkcí tolik a je možné napsat vyhledávací software, který programátora upozorní na nebezpečné chování.

Jsme ale v roce 2017 a problém není stále uspokojivě vyřešen. My vlastně nechceme psát kód bez chyb a snažíme se to nějak obejít. Je to například ASLR, který přesouvá data v paměti náhodně, ale ani ten není samospásný. Před dvaceti lety by to bylo ultimátní řešení, které by zabránilo všem útokům. Dnes už jsou známy postranní kanály, které nám dovolují zjistit, kde se v paměti dané části nacházejí. Těch kanálů navíc stále přibývá.

Můžeme například použít také NX bit, kanárky a další. Všechno se to ale ukazuje být nefunkční. Útočníci totiž umí tato opatření obcházet. Pokud například pomocí NX bitu zakážeme spouštění kódu na zásobníku, může útočník zneužít už existující kód v regulérním programu. Najde si užitečné části původního programu, které končí instrukcí ret a ty využije. Takto si pak může svůj útočný kód poskládat. Je to jen jedna z mnoha možností, ale ukazuje to, že je to pro útočníka řešitelné.

Hlavní problém je, že programování v C skrývá mnoho dalších pastí jako například přetečení integeru. O mnoha pastech navíc programátor často netuší. Například že funkce abs může vrátit i zápornou hodnotu nebo že sečtení dvou kladných integerů může vrátit záporný výsledek. Tuší takové věci náš běžný student informatiky? Já nevím.

Velmi často se objevují nové způsoby zneužití programátorských chyb, o kterých jsme dříve nevěděli nebo jsme si nedokázali zneužití představit. Navíc tyto chyby není možné zachytit při překladu. Jedinou možností je psát kódy bez chyb.

Našli jste v článku chybu?