O útoku Session Hijacking mluvíme, pokud se útočníkovi podaří získat session identifikátor a díky tomu se začít vydávat za svou oběť. Jak vypadá současnost a blízká budoucnost obrany proti tomuto útoku?
V minulosti některé webové aplikace přenášely session identifikátor v URL. Tam je velmi snadno dostupný – v hlavičce Referer
se posílá na ostatní servery, ukládá se do logů, je přístupný z JavaScriptu a tak dále. Většina aplikací proto session identifikátor posílá v cookie. V PHP to zajistí nastavení session.use_cookies
.
V cookie byl session identifikátor v minulosti také snadno dostupný, ale díky HttpOnly cookies ho můžeme snadno znepřístupnit z JavaScriptu. Pomocí secure cookies můžeme prohlížeč navíc instruovat, aby cookie nepřenášel na nezabezpečeném připojení. V PHP jsou tyto volby dostupné pomocí session.cookie_httponly
a session.cookie_secure
.
O ochranu session identifikátorů se musíme postarat také na serveru. PHP ve výchozím nastavení bohužel ukládá session data do souborů pojmenovaných podle session identifikátoru. Útočníkovi tedy stačí získat seznam souborů v daném adresáři a rázem má přístup k sezením všech přihlášených uživatelů. Ve své knize ukazuji, jak session data ukládat do souborů pojmenovaných podle hashe session identifikátoru. Je to celkem snadné, stačí implementovat jednoduchý handler a zavolat funkci session_set_save_handler.
Takhle vypadá současnost obrany proti Session Hijacking. Jak vypadá budoucnost? Prohlížeč Google Chrome testuje možnost podepisování cookies. Předpokladem této obrany je, že každá instalace prohlížeče obsahuje unikátní identifikátor (říká se mu Channel ID). Prohlížeč potom při posílání cookie pošle taky podpis potvrzující, že pochází skutečně z něj. Pokud se útočníkovi podaří session identifikátor získat, tak je mu to k ničemu, protože z jeho prohlížeče se pošle jiný podpis (nebo se nepošle žádný). Pokud útočník získá i původní podpis, tak je mu to taky k ničemu, protože ve zprávě je proměnlivá část, takže i podpis se musí při dalších požadavcích lišit.
Podepisování cookies zatím nepodporuje žádný prohlížeč ani server. Google Chrome jeho podporu testuje, Mozilla Firefox ho nejspíš také zařadí, ostatní prohlížeče se snad časem přidají. Z webových serverů jsou připraveny zatím jen proprietární servery Googlu. Ale celý projekt je otevřený, takže globálnímu rozšíření snad nebude nic bránit.
Přijďte si o tomto tématu popovídat na školení Bezpečnost PHP aplikací.
Diskuse je zrušena z důvodu spamu.