Každý penetrační test má průzkumnou fázi, která se snaží získat informace o cíli a to buď přímým pozorováním nebo sběrem informačních otisků v internetu. V příspěvku se zaměříme na testy sběru dat v rámci testování webových aplikací. Nejde o jejich úplný výčet. Cílem je ukázat, co mohou takové testy za pomocí běžného prohlížeče prozradit.

Než začneme

Diskutujeme zde příklady bezpečnostních testů. Jsou pouze dvě možnosti, které vám zajistí právní ochranu. Ta první je, že jste vlastník testovaného webu a ta druhá je, že máte v ruce písemný souhlas vlastníka k provedení testu. Prakticky byste sběrem informací o webové aplikaci neměli nikomu způsobit škodu, protože pracujeme s veřejně dostupnými informacemi a většina dotazovacích metod je stejná jako běžný HTTP provoz, ale existují případy, na které bychom si měli dát pozor.

Information gathering
Information gathering

Jde spíše o to, jak se získanými informacemi nakládáme. Pokud bychom systematicky sbírali informace o nějaké osobě (i z veřejných zdrojů), porušujeme zákon na ochranu osobních údajů. Další porušení zákona nás čeká v případě, získáme-li přístup k informaci nebo systému, který je chráněn, ale vy jste jeho “zamýšlenou ochranu” překonali. V kontextu sběru dat to na první pohled nedává smysl, ale zkuste si představit následující okolnost. Systematicky mapujete dostupné informace o webové aplikaci a pomocí vyhledávače najdete “nešťastnou” URL, kterou navštívíte. Následně zjistíte, že máte díky chybě v aplikaci přístup k informaci, která za normálních okolností není ostatním uživatelům dostupná a provozovatel si toho všimne.

Testy na získávání informací

Následující odstavce vás provedou základními testy získávání informací. V příkladech záměrně měníme cílové weby. Pro samotné testování nám bude stačit webový prohlížeč s vývojářským panelem (web konzole). Jdeme na první test.

Vyhledávače

Vyhledávače indexují webové stránky několikrát týdně, podle toho, jak jejich obsah “žije”. Projdeme si pečlivě indexované stránky patřící webové aplikaci a postupně vyfiltrujeme nezajímavé odkazy. Každý vyhledávač má různé operátory, které pomáhají zpřesňovat vyhledávací dotazy a redukovat výsledky. Prozkoumejte dokumentaci vyhledávače Google, nebo následující článek s titulem Jak použít Google pro penetrační testování a hacking.

Vaše pátrání by nemělo skončit jen u Googlu, zkuste také ostatní vyhledávače. Klíčovou roli hraje čas, kdy robot vyhledávače stránku indexoval. Informace, která nám může pomoci mohla být dostupná pouze omezenou dobu.

Co všechno hledat?

  • dokumentaci k aplikaci,
  • pochopit strukturu URL adres, případně rozdělení aplikace na subdomény,
  • administrativní rozhraní k aplikaci,
  • dostupné typy souborů (txt, doc, pdf, kopie dokumentace, školící materiály),
  • problémy s provozem a údržbou aplikace (reportované administrátory na komunitních fórech, podpoře).

Příklad
Vyzkoušejte následující dotazy vyhledávače Google.

Webový roboti a soubor robots.txt

Ještě chvíli zůstaneme u webových vyhledávačů. Pokud správce stránek poskytuje v kořenové složce webu soubor robots.txt, tak si jej hodní roboti přečtou a neindexují zakázané adresáře v sekci “Disallow”. Z hlediska testera je soubor robots.txt návod, co prošmejdit jako první. Pojďme rovnou na příklad.

Příklad
Prozkoumáme adresu http://mountfield.cz/robots.txt a identifikujeme aplikace na správu obsahu.

Inspekce zdrojového kódu stránky

Zdrojový kód webové stránky tvoří HTML dokument, který se skládá z HTML značek a uživatelského obsahu. Pokud HTML dokument otevřeme v prohlížeči, tak se nejdříve “naparsuje” jeho struktura a vznikne objektový model dokumentu, který se za pomocí CSS stylů prezentuje uživateli.

Generování HTML dokumentu probíhá na  serveru a většinou jej řídí sama aplikace. Proč o tom mluvíme? Inspekce zdrojového kódu nám může napovědět, jak se stránka skládala. Občas zde najdeme otisk vývojáře ve formě komentáře nebo identifikujeme komponentu třetí strany.

Co hledat?
Ve zdrojovém kódu projdeme záhlaví HTML dokumentu – meta tagy, pak komentáře, které by nám mohli napovědět něco o struktuře aplikace. Dále formulářová pole, zda neobsahují skryté parametry, které by nám pomohly identifikovat použitý framework na straně serveru.

Všimneme si i zápisu URL adres, na které dokument odkazuje. Jejich tvar pomůže pochopit funkcionalitu aplikace a rozpoznat její části. Pokud se v URL vyskytují i přípony souborů, například php, jsp, aspx, pomůže nám to identifikovat aplikační platformu na serveru.

Příklad
Navštívíme stránku http://homecredit.cz a prozkoumáme jejich zdrojový kód HTML stránky pomocí zkratky CTRL+U.

html-source-code-hc

V záhlaví HTML stránky v meta tagu najdeme dodavatele/produkt (SiteOne), který stránky pravděpodobně generuje nebo je součástí řešení webové prezentace. Podle informací získaných na stránkách siteone.cz, kde hledají PHP vývojáře, máme hypotézu i na platformu aplikace. V kódu dále najdeme komentáře (<!––FAQ), jejichž interpretaci necháváme laskavému čtenáři k vlastnímu posouzení.

 

HTTP požadavky a odpovědi

Server zasílá HTML dokument webovému prohlížeči pomocí protokolu HTTP, který funguje na principu dotaz (klient) odpověď (server). Abychom mohli analyzovat HTTP dotazy a jejich odpovědi, včetně jejich hlaviček, budeme potřebovat v prohlížeči zapnout vývojářský panel, tzv. web konzoli.

Web konzole se v prohlížečích Firefox a Chrome aktivuje zkratkou CTRL+SHIFT+I.
Použití web konzole si nejlépe vysvětlíme na příkladě.

Příklad
Použijeme prohlížeč Firefox, navštívíme adresu http://novinky.cz a aktivujeme web konzoli.

developer-tool-bar-firefox
V konzoli přejdeme na záložku Network, zde bychom měli vidět realizované HTTP požadavky, které byly nutné pro načtení stránky. Pokud zde nic nevidíme, je potřeba stránku znovu načíst (CTRL+F5), aby se konzole vzpamatovala. Ještě zkontrolujeme, že máme správně nastavený “filtr” na hodnotu “All”, nalezneme jej na liště pod záložkou Network.

Co v konzoli v tomto případě vidíme? Na pravé straně je panel s detailem HTTP požadavku/odpovědi pro aktuálně označený záznam. V našem případě to je HTTP požadavek na domovskou stránku (GET /). V detailu HTTP odpovědi vidíme pole s názvem Server a hodnotou nginx/1.10.1, to je “banner” webového serveru identifikující jeho verzi. Toto pole však může administrátor web serveru přenastavit.

Web konzole nám prezentuje HTTP hlavičky trochu po svém, abychom viděli celou HTTP hlavičku, klikneme na tlačítko “Raw headers” na pravé straně.

raw-http-headers

Poslední věc, kterou zkontrolujeme jsou Cookies proměnné, které server poslal prohlížeči v první odpovědi, aby je klient opakoval v každé požadavku. V konzoli Cookies najdeme buď v náhledu “Raw headers” nebo se přepneme v panelu s HTTP detaily na záložku Cookies. Název cookie proměnné může prozradit platformu web/aplikačního serveru, viz. OWASP Cookie Database.

JavaScriptové knihovny

Skriptování na straně klienta (prohlížeče) umožňuje tvořit interaktivní aplikace. Nejrozšířenějším jazykem je JavaScript. Pro vývoj klientské části dnes máme celé knihovny a frameworky napsané v tomto jazyce. Řádově má pak takový “front-end” tisících řádků kódu a je těžké zde něco hledat.

Co však můžeme udělat, je sepsat si seznam použitých knihoven a identifikovat jejich verze. Většinou jsou tyto informace uvedeny v záhlaví každého souboru s příponou “.js”. Cesty k těmto souborům vydedukujete ze zdrojového kódu HTML. Proč to děláme? Zaprvé si utřídíme informace o použitých JS knihovnách a zadruhé můžeme dohledat, zda se nejedná o zranitelné verze.

Některé z těchto knihoven tvoří aplikační logiku a obsahuje URL adresy, které front-end volá. Právě tyto knihovny prohledáme na výskyt všech URL adres. Většinou zde najdeme adresy, které bychom obvyklým použitím aplikace neobjevili. Například může jít o zastaralou funkci, na kterou server stále reaguje nebo se jedná o adresy určené pouze pro administrátory aplikace.

Připravil jsem si pro Vás jednoduchý skript (urolog.py), který hledá v kódu tvary relativních adres.

Příklad
Zkusíme najít vzory URL adres v JS knihovně, kterou jsme nalezli na serveru seznamka.cz.

Nic zajímavého zde neuvidíme, je to jen demonstrace, že analýza kódu funguje. Tímto se blížíme pomalu k závěru.

Závěr

Prošli jsme společně základními testy získávání informací v rámci testování webových aplikací. Na příkladech jsme ukázali, že většinu práce lze zvládnout s běžným prohlížečem. Krátce jsme prošli oblasti, na které se testeři a útočníci při analýze získaných dat zaměřují. Pokud by vás zajímaly další testy z této kategorie, naleznete je v testovací příručce OWASP Testing Guide v sekci Information Gathering.

Chcete se podělit o vaše tipy, podpořit další příspěvky nebo sledovat aktuální dění etického hackingu? Najdete nás na sociálních sítích. Kontakty a odkazy naleznete v patičce webu na pravé straně.

To je pro dnešek vše. Zvažujete-li cestu etického hackera od začátku, rád uvidím na hacking kurzech.