Přinášíme další článek, ve kterém představujeme zjištění z našich penetračních testů. V minulém článku jsme popsali časté nedostatky e-shopů v autorizaci.
Etičtí hackeři (penetrační testeři) jsou specialisté, které si firmy najímají, aby proaktivně a se svolením dané firmy hledali v jejich systémech bezpečnostní chyby. Vlastníci a provozovatelé e-shopů a jejich dodavatelé tak mohou získat jednoduché tipy na vylepšení bezpečnosti aplikací. Testeři zároveň také upozorňují na chyby, kterých se dopouští často uživatelé z řad zákazníků.
Stále si neseme dluhy z internetového pravěku
V době, kdy se vznikaly technologie, které tvoří základ dnešních webových aplikací, vypadal obsah internetu spíše jako Wikipedie. Internet tvořilo velké množství statických vzájemně propojených článků a stránek.
Systém byl jednoduchý: uživatel zadal požadavek a server mu vrátil statickou stránku. S rozvojem online služeb ale přibývaly různé typů uživatelů a bylo nutné vyřešit problém s rozlišením jednotlivých skupin. Aplikace následně neposkytovaly všechna data a funkce všem uživatelům bez rozdílu.
Základní protokol, prostřednictvím kterého s konkrétními aplikacemi komunikujeme (http), však zůstal ve své původní formě. Nerozlišuje to, kdo s aplikací komunikuje a zda je přihlášený. Za mechanismus, který sleduje aktivitu uživatele (relace, session), zodpovídají vývojáři aplikací. Ti bohužel často chybují.
Jak lze zneužít autentizační procesy
Z pohledu uživatele je přihlášení jednoduchý proces (stačí zadat správné přihlašovací údaje). V pozadí ale dochází k vygenerování unikátního řetězce (autentizačního tokenu), který se odesílá v požadavcích uživatele a slouží jako identifikátor platného přihlášení. Server tedy během přihlášení nekontroluje, zda zná jméno a heslo, ale pravost zmíněného řetězce. K této hodnotě je z hlediska kybernetické bezpečnosti vhodné přistupovat stejně jako k heslu, což se ale často neděje.
Útočníci mohou zneužít následující chyby:
Uhodnutí tokenu
Nejjednodušší způsob, jak token získat, je uhodnutí. To se děje v případě, kdy generované hodnoty tokenu nejsou náhodné a je možné je předpovídat.
Představme si, že útočník jednoduchým pozorováním zjistí, že server generuje hodnoty následovně: první část řetězce je tvořena identifikátorem uživatele, druhá část představuje čas přihlášení a poslední čtyři znaky jsou náhodné. Útočník si takto dokáže vytvořit poměrně malou množinu možných tokenů, které následně vyzkouší a najde ten platný.
Manipulace s hodnotou tokenu
Další častou chybou, se kterou se během testování setkáváme, je možnost předpřipravit hodnotu identifikátoru útočníkem ještě před samotným přihlášením. Tato chyba se nazývá Session Token Fixation. V případě, že uživatel už má nějaký token (nemusí být v daném momentě platný), aplikace nemusí tvořit nový, ale jen jej přiřadí k platné relaci uživatele.
Představme si situaci, kdy má útočník přístup k počítači, odkud uživatel přistupuje na předmětný e-shop. Jednoduchým způsobem dokáže předpřipravit hodnotu, která se při běžném přihlášení stane identifikátorem přihlášení. Jakmile tuto hodnotu zná, dokáže odcizit identitu uživatele.
K odcizení tokenů může dojít různými způsoby. Například:
- Jednoduché odposlechnutí komunikace, pokud aplikace nevynucuje šifrované spojení.
- Odesílání tokenu v požadavcích klienta nesprávným způsobem (například v URL, hlavičce referrer). Takto odeslané tokeny jsou uložené v historii prohlížeče, v cache a podobně.
- Odcizení pomocí škodlivého kódu třetí strany v prohlížečích prostřednictvím reklamního serveru, analytického nástroje na sledování návštěvnosti a podobně, případně také vložením škodlivého javascript kódu do aplikace e-shopu.
S bezpečností přihlašovacího procesu úzce souvisí správná implementace odhlášení
Aplikace často při odhlášení jen smažou hodnotu tokenu z prohlížeče uživatele. To zaručí, že oprávněný uživatel nebude moct přistupovat k aplikaci. Na neoprávněného uživatele to však nemá vliv. Toto dramaticky zvyšuje šanci zneužití při všech útocích zmíněných výše. Proces přihlášení je možné obejít také útoky typu injection.
Útoky vytvářené pro získání přihlašovacích údajů či platné relace uživatele mají téměř vždy za následek úplné odcizení identity oběti a přístup k citlivým údajům a funkcionalitě v kontextu předmětné aplikace. Proto je důležité mít tento proces kvalitně zabezpečený.
Jednou z úloh našich testerů je včas objevit už zmíněné, ale i nové nedostatky, které mohou potenciální útočníci zneužít a zabránit tak větším škodám. Zároveň chyby autentizace jsou jen jednou skupinou chyb, které mohou potenciální útočníci zneužít.