Analýza použitých HTTP hlavičiek na českých a slovenských weboch

Ktoré servery sú najpoužívanejšie v Českej a Slovenskej Republike? Koľko z nich nie je aktualizovaných a používa starú nezabezpečenú verziu? Okrem zodpovedania týchto otázok sa v tomto článku pozrieme na to koľko serverov používa bezpečnostné HTTP hlavičky.

Pre komunikáciu medzi webovým prehliadačom a serverom na internete sa používa HTTP protokol alebo jeho šifrovaná verzia HTTPS. Komunikácia je typu klient-server, kde server na každú požiadavku klienta zasiela odpoveď. Súčasťou každej požiadavky a odpovede sú HTTP hlavičky, ktoré sú v tvare „kľúč: hodnota“. Server môže v odpovedi zaslať dodatočné hlavičky, ktoré môžu mať informačný charakter alebo slúžiť na zvýšenie bezpečnosti webovej aplikácie.

Pri bežnom prehliadaní stránok tieto hlavičky nevidno, v nasledujúcom príklade môžeme vidieť hlavičky, ktoré zaslal webový prehliadač po otvorení stránky example.com. Tieto hlavičky obsahujú informácie, ktoré môžu byť pre server nápomocné pri spracovaní nášho požiadavku – napríklad preferovaný jazyk, alebo informácie o tom, ktoré súbory sú nacachované.

Ukážka HTTP požiadavku na webovú stránku
Ukážka HTTP požiadavku na webovú stránku

Server odpovedal s úspešnou hláškou „200 OK“ a v hlavičkách vrátil informácie o použitom serveri či dátume a až potom nasleduje samotné telo odpovede, ktoré obsahuje informácie vyžiadané klientom.

Ukážka HTTP odpovede
Ukážka HTTP odpovede

Cieľom tohto článku je zanalyzovať použitie bezpečnostných HTTP hlavičiek na najnavštevovanejších českých a slovenských weboch a porovnať ich s celosvetovými dátami. Druhým cieľom je zozbierať dáta o použitých technológiách na týchto weboch a zistiť či používajú aktuálny software bez bezpečnostných chýb.

Prečo sú HTTP hlavičky dôležité a kto ich používa?

V reálnom svete dochádza málokedy ku exploitácii servera alebo systému len pomocou jednej zraniteľnosti. Prvým krokom pri plánovaní útoku je zbieranie informácii o danom cieli a práve v tom môže spočívať nebezpečenstvo HTTP hlavičiek – potencionálny útočník môže vďaka informáciám z nich nájsť exploit pre danú technológiu alebo určiť ďalší smer svojho útoku. Dostupnosť týchto informácii teda nevedie k priamej kompromitácii systému napriek tomu však môže zohrať kľúčovú úlohu pri odhaľovaní vážnejších nedostatkov.

Znalosť použitého frameworku či programovacieho jazyka dáva útočníkovi výhodu vo voľbe taktiky. Pokiaľ by sa napríklad útočník z hlavičiek dozvedel, že aplikácia používa verziu PHP 8.1.0-dev, tak by mohol kompromitovať server v priebehu pár minút.

Vo svete je problematika používania HTTP hlavičiek cieľom výskumu už dlhú dobu. Analýza použitia CSP hlavičiek bola zverejnená už v roku 2016. Mimo akadamickej obce publikuje Scott Helme na svojom blogu pravidelné analýzy od roku 2015 vďaka čomu môžeme vidieť čoraz väčšiu úroveň adaptácie hlavičiek v posledných rokoch. Je taktiež tvorcom stránky securityheaders.io, ktorá priraďuje stránkam známky na základe použitých hlavičiek a ktorú neskôr taktiež použijeme. V čase písania tohto článku bola jeho posledná analýza zverejnená v Júni 2022, na ktorú sa budeme odkazovať pri porovnávaní výsledkov.

Dataset

Vyššie spomenutý Scott Helme a ostatné vedecké články na túto tému používali na analýzu ako zdroj dát zoznam najnavštevovanejších domén zverejňovaný spoločnosťou Amazon „Alexa Top 1 Million“. Presnosť týchto dát bola otázkou viacerých debát, keďže postup zbierania a vyhodnocovania domén nebol jasný.

Od 1. 5. 2022 nie je táto stránka ďalej aktívna, a preto bol ako alternatívny zdroj dát použitý iný zoznam najnavštevovanejších domén „Tranco Top 1 Million“. Výsledky prezentované neskôr sú založené na zozname zo dňa 5.10.2022. Test bol realizovaný v noci z 5. na 6. Októbra 2022.

Pre stiahnutie dát sme použili script – crawler - napísaný v programovacom jazyku Python. Stihanutý zoznam domén obsahuje iba ich samotné názvy, napríklad "example.com", bez schémy protokolu. Crawler sa pokúša nadviazať spojenie cez HTTP protokol, zasiela teda HTTP požiadavky vo formáte http://doména a nasleduje všetky presmerovania s timeoutom nastaveným na 10 sekúnd. Pokiaľ dôjde ku chybe, crawler vykoná požiadavok na http://www.doména. Pre simulovanie správania webového prehliadača odosiela crawler požiadavky s nasledujúcim user-agentom:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36

Ak obdrží crawler odpoveď, tak uloží hlavičky a kód odpovede alebo chybovú hlášku do databázy. Okrem hlavičiek zaznamenáva crawler či daná doména automaticky presmeruje požiadavky z HTTP protokolu na šifrovaný HTTPS.

Po vyfiltrovaní českých a slovenských webstránok zo zoznamu sme dostali 4754 domén. Odpoveď sme následne dostali z 4527 domén.

Výsledky

Výsledky zodpovedajú vo väčšine príkladov celosvetovým štatistikám. Servery na ktorých bežia české a slovenské domény tak nezaostávajú a práve naopak bezpečnostné hlavičky boli použité vo viac percentách. Napriek tomu je úroveň implementácie hlavičiek stále nízka a používa ich ani nie tretina webov.

Nasledujúca tabuľka zhŕňa naše výsledky:

Tabuľka výsledkov, v prvom stĺpci je absolútny počet výskytu v hlavičkách, v druhom ich percentuálne zastúpenie
Tabuľka výsledkov, v prvom stĺpci je absolútny počet výskytu v hlavičkách, v druhom ich percentuálne zastúpenie

Content-Security-Policy (CSP)

CSP hlavičky boly definované v roku 2016. Tieto hlavičky určujú, ktoré súbory a z akých zdrojov môže prehliadač na stránky načítať. Toto poskytuje možnosť ochrany používateľov hlavne pred XSS útokmi. Pri správnej implementácii stratí útočník možnosť nahrať do webstránky externý Java skript. Keďže môže byť táto hlavička rozsiahla a obsahovať mnoho pravidiel, na vyhodnotenie jej účinnosti môže poslúžiť stránka csp evaluator.

K CSP sme taktiež zarátali hlavičky Content-Security-Policy-Report-Only (CSPRO), ktorých použitie predstavovalo necelé 1%. Naše výsledky sú podobné výsledkom S.Helma z Júna 2022, tieto hlavičky používa o 2,7% webov viac.

HTTP Strict-Transport-Security (STS)

Hlavička HSTS inštruuje prehliadač, aby komunikoval so serverom výhradne pomocou HTTPS protokolu a nie nešifrovaného protokolu HTTP čím dochádza ku ochrane pred „man-in-the-middle“ útokmi. Nastavením tejto hlavičky sa zníži riziko prenosu dát nešifrovaným spôsobom a dôjde tak ku vyššej bezpečnosti stránok a ich návštevníkov.

Zo zistených údajov vidieť, že hlavička HSTS je nastavená na viac ako 26% stránkach čo je o 3,6% viac ako pri posledných výsledkoch S.Helma.

X-Content-Type-Options (XCTO)

Hlavička XCTO slúži na overenie MIME typu súborov. Nastavením tejto hlavičky na hodnotu „nosniff“ sú prehliadače inštruované, aby neodhadovali typ daného súboru, ale riadili sa deklarovaným obsahom v ďalšej hlavičke „content-type“. Týmto mechanizmom sa zabráni napríklad spusteniu JavaScript kódu v obyčajnom súbore, ktorý útočnik nahral na webstránku.

Odchýlka je takmer totožná ako v predošlom prípade a hlavičku implementuje takmer 26% webov.

X-Frame-Options (XFO)

Táto hlavička sa používa na určenie toho či je možné webstránku načítať aj v rámci HTML kódu v tagoch ako <iframe> či <frame>. Správnym nastavením sa načítanie týchto tagov zakáže čím sa predíde útoku clickjacking. Okrem tejto ochrany to taktiež znamená, že sa stránka nenačíta na iných nechcených weboch.

Hlavičku XFO nastavuje takmer 30% webov. Rozdiel oproti ostatným hlavičkám je najväčší a to takmer 5%.

X-XSS-Protection (XXSSP)

Hlavička XXSSP umožňuje zapnutie zabudovaného XSS filtru v prehliadači používateľa. Táto hlavička slúži ako ďalšia úroveň ochrany na stránke aj keď sú na nej všetky vstupy a výstupy ošetrené proti útokom ako XSS. Podobnú ochranu je možné dosiahnuť hlavičkou CSP.

Hlavičku implementuje necelých 21% webov čím je odychýlka na podobnej úrovni ako v predošlých prípadoch - 3,9%.

HTTPS Redirect

Ďalšou vecou, ktorú crawler zaznamenával bolo či stránka presmeruje používateľa na HTTPS. Toto správanie je dôležité, keďže prehliadač sa najskôr pokúša získať stránku cez HTTP. Takmer 80% stránok vykonáva toto presmerovanie a oproti percentám pri predošlých hlavičkách sa jedná o výrazne väčšie číslo.

Server

Hlavička „Server“ sa vyskytuje v odpovediach pravdepodobne najviac zo všetkých – v našom datasete ju nastavilo 91% domén. Táto hlavička je odosielaná serverom a informuje o použitom softwari na webovej aplikácii. Typicky obsahuje názov a verziu web servera napríklad „Apache/2.4“. Ako už bolo uvedené, zverejňovanie týchto informácii v produkčnom prostredí nie je žiadúce.

Zo zistených údajov jasne vidieť, že najpopulárnejší server je stále Apache, ktorý je používanejší o 10% viac ako druhý najpopulárnšjeí nginx. Tieto výsledky sa líšia od svetových štatistík kde vedúcu rolu prebral už nginx.

Štatistika použitých web serverov
Štatistika použitých web serverov

Apache

Pozreli sme sa bližšie na to aké verzie Apache serveru sa používajú a môžeme konštatovať, že väčšina používa verziu, ktorej podpora ešte neskončila.

Štatistika použitých verzií Apache serverov, červenou farbou sú zvýraznené zastarelé verzie
Štatistika použitých verzií Apache serverov, červenou farbou sú zvýraznené zastarelé verzie

IIS

Podobným spôsobom sme extrahovali použité verzie Microsoft IIS web serverov. Z dostupných informácii môžeme povedať, že veľká väčšina serverov používa tento softvér v aktuálnej verzii.Verzie 6.0, 7.0 a 7.5 indikujú použitie operačných systémov Windows Server 2003, Windows Server 2008 či Windows Server 2008 R2, pre ktoré už podpora skončila.

Štatistika použitých verzií IIS serverov, červenou farbou sú zvýraznené zastarelé verzie
Štatistika použitých verzií IIS serverov, červenou farbou sú zvýraznené zastarelé verzie

X-Powered-By

Ďalšia populárna hlavička X-Powered-By sa v našich dátach objavila v 30% prípadoch. Je podobná hlavičke Server a najčastejšie sa v nej nachádza informácia o použitom jazyku, CMS alebo frameworku, napríklad teda PHP/8.0.

Pozreli sme sa bližšie na použité verzie PHP. Vo väčšine prípadov (65%) používajú stránky verziu, ktorá už nie je podporovaná a nedostáva ani bezpečnostné záplaty.

Štatistika použitých verzií PHP, červenou farbou sú zvýraznené zastarelé verzie.
Štatistika použitých verzií PHP, červenou farbou sú zvýraznené zastarelé verzie.

Známky

Na oznámkovanie hlavičiek sme použili už v článku spomenutú stránku securityheaders.io.

Bohužiaľ, takmer presná polovica stránok dostala známku F čo znamená, že buď bezpečnostné HTTP hlavičky vôbec nepoužívajú, alebo ich používajú nesprávne. Oproti výsledkom S.Helma je vidieť výrazný rozdiel práve v známkach F, české a slovenské domény ich dostali v menšom množstve.

Známky webov na základe použítých HTTP hlavičiek
Známky webov na základe použítých HTTP hlavičiek

Záver

V tomto článku sme si predstavili základné bezpečnostné HTTP hlavičky a porovnali úroveň ich používania. Správne nastavenie hlavičiek môže znížiť riziko rôznych útokov a poskytnúť tak správcom webov výhodu pri ich zabezpečovaní. Z našich skúseností počas vykonávania penetračných testov webových aplikácii vieme, že práve často nálezy s nízkou závažnosťou, ktoré nepredstavujú žiadne priame riziko, môžu viesť ku informáciám, ktoré skončia úplnou kompromitáciou systému. Vzhľadom k tomu, že samotné nastavenie hlavičiek nie je komplikované, malo by sa jednať o samozrejmú vec v procese vývoja a nasadenia web stránok.