Cross-Site Request Forgery (CSRF)

Cross-Site Request Forgery (zkráceně CSRF, Microsoft používá také označení One-Click attack) je druh útoku na předem známí cíl, u kterého útočník zná, anebo dokáže odhadnout, strukturu a ví jaký požadavek na tuto strukturu zaslat. Nejčastějším cílem jsou rozšířené open source systémy (CMS).

Příklad útoku

Dejme tomu, že máme veřejný open source blog. Útočník jej dokonale zná a ví, že soubor zmenprava.php v adresáři /admin/ obstarává změnu práv jednotlivých uživatelů. Na blogu je registrován jako redaktor s id 666 a právy 5 (může posílat články ke schvalování) a rád by získal práva 1 (administrátor). Pro aktivaci skriptu mu stačí následující požadavek poslaný přes parametr GET:

http://blog.tld/admin/zmenprava.php?id=666&prava=1

Jenomže k aktivaci tohoto příkazu potřebuje být přihlášený jako administrátor, protože pouze on může provádět tento příkaz.

Asi nejjednodušší by bylo poslat administrátorovi html email s odkazem „Klikni zde“, kde bude URL. Ovšem to by bylo poněkud nápadné. Je třeba to udělat chytře a právě zde poslouží obrázek.

<img src="http://blog.tld/admin/zmenprava.php?id=666&prava=1" width="1" height="1" border="0">

Teď už jen stačí, aby administrátor, který bude přihlášen ke svému účtu se dostal na stránku, kde se tento „obrázek“ objeví. Ideální by asi bylo využít kombinaci s XSS. Popřípadě mu poslat email. Mimochodem to je také jeden z důvodů proč emailový klienti automaticky nestahují obrázky.

Jak se útoku CSRF bránit

Dříve se proti Cross-Site Request Forgery doporučovalo používat místo GET metodu POST. Ovšem jak sami uznáte stačí vytvořit něco následujícího:

POST http://blog.tld/admin/zmenprava.php
...
Content-Length: 14;

id=666&prava=1

Takže rozhodně nemá cenu proti útoku CSRF používat POST.

V současné době se za bezpečné proti tomuto druhu útoků považuje použití takzvaného autorizačního tokenu. Princip je jednoduchý. Při vygenerování stránky kam zadáváte změny do formuláře, se například do session a databáze zapíše náhodně vygenerovaný kód. Po odeslání formuláře skript otestuje zdali sedí kód session s tím v databází (popřípadě místo databáze jej lze vložit přímo do formuláře jako hidden). Tato metoda je dostatečná pro ochranu proti CSRF útokům z venčí.

Mezi další metody obrany patří testování hlavičky referer. Tento druh testu se zároveň hodí i k zjištění odkud útok jde a uložení informací do logu, popřípadě zaslání varování.

Share Button

Tento článek byl byl přečten 4856 krát

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *