Prinášame vám ďalší článok zo série krátkych blogov, v ktorých vám predstavíme zistenia z testovaní, ktoré v poslednom čase robili naši etickí hackeri. V predchádzajúcom článku sme vás upozornili na chyby v autorizácii e-shopov.
Etickí hackeri sú špecialisti, ktorých služby využívajú firmy na to, aby proaktívne a s vedomím a povolením firmy hľadali v ich systémoch bezpečnostné chyby. Vlastníci, prevádzkovatelia e-shopov a ich dodávatelia tak môžu získať jednoduché tipy na kontrolu alebo vylepšenia bezpečnosti aplikácií e-shopov. Zároveň sa snažíme sprístupniť aj laickému čitateľovi spôsob, akým môžu byť zneužité programátorské chyby.
V tomto článku vám opíšeme ďalšiu chybu českých a slovenských e-shopov – problémy s prihlasovaním (autentifikáciou).
V časoch, keď sa vytvárali technológie tvoriace základ dnešných webových aplikácií, vyzeral obsah na internete inak. Bolo to množstvo statických, vzájomne prelinkovaných článkov, obsahov, podobne ako Wikipédia. Neexistovali komplexné aplikácie, aké poznáme dnes: e-shopy, sociálne siete dnešného typu, streamovacie služby a podobne. Systém bol jednoduchý – klient (používateľ) zadal požiadavku a server mu vrátil statickú stránku, ktorú mu jeho prehliadač zobrazil. Časom však komplexnosť aplikácií narastala. Rovnako narastal aj počet rôznorodých používateľov. A zrazu začalo byť okrem iného potrebné vyriešiť problém s rozlíšením jednotlivých klientov.
Aplikácie už neponúkali všetky svoje dáta a funkcie všetkým používateľom rovnako. Základný protokol, prostredníctvom ktorého s jednotlivými aplikáciami komunikujeme (http), však ostal vo svojej pôvodnej forme. Nerozlišuje to, kto s aplikáciou komunikuje a či je prihlásený. Preto sa nazýva ako bezstavový. Bremeno vytvorenia mechanizmu prihlásenia a jeho udržiavania počas aktívnej činnosti používateľa (relácia, session) je teda na pleciach vývojárov aplikácií. A z toho často pramenia niektoré z nasledujúcich chýb.
Prihlásenie z pohľadu používateľa prebieha jednoducho – stačí zadať platné meno a heslo. V pozadí však dochádza k vygenerovaniu unikátneho reťazca (autentifikačného tokenu), ktorý je odosielaný v požiadavkách používateľa – klienta (najčastejšie prostredníctvom takzvaných cookies) a slúži ako jeho indentifikátor platného prihlásenia. Server teda počas doby prihlásenia nekontroluje znalosť mena a hesla, ale pravosť spomínaného reťazca. K tejto hodnote je z bezpečnostného hľadiska potrebné pristupovať rovnako ako k heslu, čo sa zo strany vývojárov často nedeje.
Získanie hodnoty autentifikačného tokenu útočníkom znamená odcudzenie identity používateľa.
Útočníci môžu využiť nasledovné chyby:
- Najjednoduchším spôsobom získania tejto hodnoty je jej uhádnutie. Môže sa stať, že generátor týchto hodnôt nie je náhodný a je možné predpovedať hodnoty, ktoré bude generovať. Predstavme si, že útočník jednoduchým pozorovaním zistí, že server generuje hodnoty nasledovne. Prvá časť reťazca je tvorená identifikátorom používateľa. Druhá časť je časová známka, kedy bolo prihlásenie vykonané, a posledné štyri znaky sú náhodné. Útočník si takto vie vytvoriť pomerne malú množinu možných prihlasovacích tokenov, ktoré následne odskúša a nájde platný.
- Ďalšou častou chybou, s ktorou sa počas testov stretávame, je možnosť predpripraviť hodnotu identifikátora útočníkom ešte pred samotným prihlásením. Nazýva sa Session Token Fixation. Aplikácia sa môže správať spôsobom, keď v prípade, že používateľ už má nejaký token (nemusí byť platný v tomto momente), nevytvorí nový, len ho priradí k platnej relácii používateľa. Predstavme si, že útočník má prístup k počítaču, odkiaľ používateľ pristupuje na predmetný e-shop. Jednoduchým spôsobom dokáže predpripraviť hodnotu, ktorá sa po bežnom prihlásení stane identifikátorom prihlásenia. Keďže ju pozná, dokáže ju použiť aj on a odcudziť identitu používateľa.
Hodnoty tokenov sú mimoriadne citlivé údaje, s ktorými treba manipulovať podľa prísnych pravidiel, inak môže dôjsť k ich odcudzeniu. To sa môže stať rôznymi spôsobmi, ako je napríklad:
- Jednoduché odchytenie komunikácie, pokiaľ aplikácia nevynucuje šifrované spojenie.
- Odosielanie tokenu v požiadavkách klienta nesprávnym spôsobom (napríklad v URL, hlavičke referrer).
● Takto odosielané tokeny zostávajú uložené v histórii prehliadača, v cache, logoch a podobne. - Odcudzenie pomocou škodlivého kódu tretej strany v prehliadači prostredníctvom:
● Reklamných serverov, nástrojov na vyhodnocovanie návštevnosti a podobne.
● Vložením škodlivého javascript kódu do aplikácie e-shopu.
S bezpečnosťou prihlasovacieho procesu úzko súvisí aj správna implementácia odhlásenia
Aplikácie často pri odhlásení len zmažú hodnotu tokenu z prehliadača používateľa. To zaručí, že oprávnený používateľ nebude môcť pristupovať k aplikácii. Na neoprávneného používateľa to však nemá vplyv. Toto dramaticky zvyšuje šancu zneužitia pri všetkých útokoch spomenutých vyššie.
Proces prihlásenia je možné obísť aj útokmi typu injection, ale o tom si povieme niekedy nabudúce.
Útoky na prihlásenie a platnú reláciu používateľa majú takmer vždy za následok úplné odcudzenie identity obete a prístup k citlivým údajom a funkcionalite v kontexte predmetnej aplikácie. Preto je dôležité mať tento proces kvalitne zabezpečený.
Jednou z úloh našich testerov je včas objaviť už spomenuté, ale aj nové nedostatky, ktoré môžu potenciálni útočníci zneužiť pri chybnej autorizácii, a zabrániť tak väčším škodám. Zároveň chyby autorizácie sú len jednou skupinou chýb, ktoré môžu potenciálni útočníci zneužiť. Pokiaľ vás tento článok zaujal, zanechajte nám vašu e-mailovú adresu a pošleme vám aj ďalšie články týkajúce sa bezpečnosti internetových obchodov alebo testovania bezpečnosti.
Pokiaľ máte záujem o viac informácií o službe preverenia bezpečnosti vášho internetového obchodu alebo inej aplikácie, vyplňte kontaktný formulár .
Odporúčané články zo série: