|
ISSN 1214-9675 Server vznikl za podpory Grantové agentury ČR. 21. ročník |
Témata
Doporučujeme
Kontakt
|
Zabezpečení webových aplikací III. - ostatní útoky a nastavení prostředíVydáno dne 15. 08. 2007 (12772 přečtení) Zabezpečení webových aplikací je jednou z nejdůležitějších položek jejich vývoje. Tato část článku se zabývá ostatními typy útoků z principu nespadajících do kategorií zneužití klientských skriptovacích jazyků nebo zneužití databázového dotazu. Také řeší správné nastavení
prostředí PHP a ASP.NET, které je základním kamenem ke správné bezpečnosti celého systému. Security of web applications III. - others type of attacks and environment settingAbstractSecurity of web applications is one of the most important aspects of their development. This part of paper deals with the others type of attacks, which do not belong to category of client script languages exploitation or database query exploitation. Here is also described proper setting of PHP and ASP.NET interface, which is basic element in proper security of whole system.ÚvodVětšina útoků, kterých se článek dotýká, opět přímo souvisí s uživatelským vstupem. Jejich vážnost a rozsah možného poškození jsou ovlivněny tím, v jaké části programu se vstupní údaj promítne. Ve většině případů jde o podstrčení škodlivého kódu nebo serverového skriptu, které může mít v nejhorších případech nedozírné následky. Pozornost je také třeba věnovat nastavení serverového skriptovacího jazyka (PHP / ASP) a samotného serveru, neboť vhodné nastavení direktiv a parametrů prostředí nám přímo zajistí ochranu před určitými typy útoků. Nebezpečné úpravy kóduProblém se týká především skriptovacího jazyka PHP. Ten je totiž z principu procedurálně skriptovací jazyk bez nutnosti kompilace, což je na jedné straně zjednodušení práce pro vývojáře (za cenu nižšího výkonu programů), na straně druhé tento fakt představuje nebezpečí z hlediska okamžité změny kódu aplikace. U ASP.NET tento problém odpadá kvůli nutnosti kompilace objektově orientovaného kódu. Podstrčení proměnných Jde o specifický útok pro jazyk PHP, který využívá
bezpečnostní díry (v počátcích vývoje PHP šlo spíše o hodnotnou vlastnost),
vzniklé při použití direktivy Obr. 1 Útok s využitím podstrčení proměnné Nejlepší obranou je, pokud máme tuto možnost, direktivu
Pokud tuto možnost nemáme, je nutné tento problém ošetřit
pomocí důsledné inicializace proměnných na jejich výchozí hodnoty. To se týká i
polí, která bychom měli vždy inicializovat jako prázdná formou přiřazení Extrémně nebezpečný útok spočívá v podstrčení škodlivého
kódu do webové aplikace. Tímto neduhem mohou být postiženy velmi špatně
zabezpečené aplikace, které dovolí uživateli měnit data, která jsou parametrem
funkcí Typickým příkladem jsou redakčně / publikační systémy, které
přímo dovolují spouštět v uživatelem zadaném obsahu PHP příkazy formou značek
Vždy je tedy nutné kontrolovat všemi dostupnými prostředky,
aby se k parametrům výše zmíněných funkcí nedostal uživatel bez patřičného
oprávnění. Riziková je i funkce Další metodou je vzdálené spouštění cizích skriptů. Souvisí
opět s PHP a spočívá v nedokonalém zabezpečení interních příkazů Vhodným ošetřením je, pokud už musíme vkládaný soubor
specifikovat v URL, použít v PHP funkce Za vhodné zabezpečení nelze považovat direktivu Další útokyÚprava protokolových hlavičekV originále se setkáme s označením response splitting [1].
Útok je založen na změně hlavičky HTTP (nebo SMTP v případě emailů), proti
kterému není aplikace zabezpečena. Tímto útokem lze přidávat do hlavičky
vlastní řádky, nebo – a to je zdaleka největší riziko – hlavičku prázdným
řádkem ukončit – čímž protokol přejde na zpracování samotných dat (která mu
tímto řešením podstrčíme ještě v rámci hlavičky). U HTTP hlavičky je
nejproblémovějším parametrem Řešením v PHP je důsledně kontrolovat data, která do
hlavičky vstupují a nepovolit dělení řádků (znakem U emailů problém spočívá v editaci hlavičky v příkazu Tento útok (session fixation) spočívá v přesvědčení uživatele, aby pro přihlášení použil útočníkovu předgenerovanou session ID. Jakmile se nic netušící uživatel zaloguje do systému a tento není proti útoku chráněn, použije se jako session ID identifikátor poskytnutý útočníkem. Ten pak může pod tímto ID přistoupit na stránku také a bude systémem chápán jako napadený uživatel. Technicky se předání session ID provede např. pomocí URL nebo POST dat z formuláře. Typické schéma útoku je na obr.7. Obr. 2 Princip session fixation Session fixation se dá ve skriptovací jazyce PHP předcházet
pomocí direktivy VIEWSTATE je vlastnost specifická pro ASP.NET stránky [3]. Jedná se o nástroj umožňující uchování stavu stránky a serverových objektů na ní umístěných mezi jejím opakovaným zpracováním. Narozdíl od jiných metod uchování stavu v ASP.NET aplikacích, které je možno použít v rozsahu platnosti uživatele aplikace (Session) nebo celé aplikace (Application, Cache apod..) je tedy jeho platnost omezena pouze po dobu tohoto opakovaného zpracování jedné stránky. VIEWSTATE je využívána zejména pro uchování hodnot vlastností ovládacích prvků umístěných na stránce, ale lze ji samozřejmě také použít v kódu stránky. Problémem VIEWSTATE je, že standardně není šifrován. Proto není vyloučenou, že někdo může data ve VIEWSTATE pozměnit či přečíst. Z tohoto důvodu existují další dvě úrovně zabezpečení dat ve VIEWSTATE. Pokud jsou v těchto datech přenášeny citlivé informace je vhodné tyto úrovně do aplikace přidat, aby bylo minimalizováno nebezpečí odposlechu či změny dat ve VIEWSTATE. Jedná se o:
Tamper-proofing nechrání VIEWSTATE proti přečtení obsahu nepovolanou osobou. Místo toho poskytuje možnost určit, zda-li někdo nepozměnil data uložená ve VIEWSTATE. Při využití tamper-proofing je, ještě předtím než jsou data ve VIEWSTATE poslány klientovy, vytvořen na serveru jejich otisk pomocí některé z hashovaních funkcí (např. MD5 nebo SHA1). Když pak klient odešle stránku zpět na server je opět vytvořen otisk dat ve VIEWSTATE a ten je poté porovnán s prvním otiskem. Samotná aktivace tamper-proofing je velmi jednoduchá a nastaví se v počátečním tagu stránky:
<%@ Page EnableViewStateMac="true"%> Bohužel tamper-proofing umožní pouze detekci změn ve
VIEWSTATE, ale nezabrání případnému přečtení dat nepovolanou osobou. Pokud
tomuto chcete zabránit musíte natavit další úroveň zabezpečení. V tomto případě
musíte data ve VIEWSTATE zašifrovat. Jako šifrovací algoritmus se používá 3DES.
Nastavení tohoto šifrovaní pro VIEVSTATE musíte provést v souboru
machine.config pomocí kódu
x:\<windows>\Microsoft.NET\Framework\<version>\config\machine.config Nastavení serverových prostředíPřed samotným závěrem je vhodné uvést obecná bezpečnostní doporučení, která v naprosté většině již vychází z toho, co bylo v článku popsáno výše. Situace je pochopitelně odlišná v případě skriptovacího jazyka PHP a prostředí ASP.NET Jazyk PHP Pokud používáme jazyk PHP, je nutné v první řadě správně
nastavit prostředí, na kterém pracuje. V naprosté většině případů jde o webový
server Apache. Je nutné pomocí konfigurace znemožnit např. prohlížení
zdrojových kódů PHP přímo z webu a takto zabezpečit všechny ostatní datové typy,
které by mohly způsobovat problémy. Také výpis adresáře pomocí HTTP požadavku
je dobré dovolovat jen lokálně a to pomocí souboru Velmi důležité je mít správně nastavenou adresářovou strukturu a manipulovat s oprávněními s extrémní opatrností. Správné řešení tohoto problému je však nad rámec rozsahu tohoto článku, proto je vhodné např. čerpat z [4]. Co se týče samotného skriptovacího jazyka, zde je především nutné správně nakonfigurovat direktivy. Následující direktivy by měly být z bezpečnostního hlediska vypnuty:
Naopak, následující direktivy je vhodné používat (nastavit):
Více informací k tématu lze načerpat např. v [5]. Prostředí ASP.NETStránky ASP.NET jsou úzce spjaty s IIS severem, proto také bezpečnost ASP.NET stránek velmi souvisí se zabezpečeným tohoto serveru. Možnosti zabezpečení IIS serveru jsou velmi rozsáhlé, proto zde nebudou rozebírány. Pro podrobnější informace odkazujeme např. na [5], [6]. Pokud vyžadujete od uživatelů autentizaci je doporučeno
použít některý z autentizačních módů ASP.NET. Jedná se o módy
<authentication mode="Typ_modu"> // další volby v závislosti na zvoleném režimu autentizace </authentication> Mód Dále je doporučeno mít pro všechny stránky mít nastavenu
vlastnost Nastavení parametru mode tagu Doporučuje se také chránit autenzační cookie proti případným
změnám jejího obsahu uživateli. Toto se provádí v tagu
ZávěremPoslední část článku se věnovala ostatním typům útoků na
webovou aplikaci. Tyto útoky z velké části využívají skriptovacího charakteru
jazyka PHP; Je nutné, pracujeme-li v tomto prostředí, dobře promyslet důsledky
použití funkcí jako Článkem popsaný výčet útoků pochopitelně není vyčerpávající. Další spočívají např. přímo ve využití bezpečnostních děr v softwaru (prohlížeče) nebo v operačních systémech. Dále může jít o útoky typu DoS (Denial of Service), příp. horší varianta - DDoS, které představují nejnebezpečnější typy útoků, mnohdy bez rozumných možností obrany. Tyto útoky mohou být namířeny i proti základním kamenům celého internetu - byl například zdokumentován pokus o vyřazení páteřních DNS serverů [8]. Článek se také nezabýval zabezpečením pomocí protokolu HTTPS, protože to je dosti rozsáhlé téma, které je vhodné řešit samostatně. Nezbývá než doufat, že článek bude přínosný zejména začínajícím programátorům, kteří se vývoji webových aplikací chtějí v budoucnu věnovat. Jedině lepší informovaností tvůrců aplikací lze totiž docílit toho, že podobné útoky se jednou stanou minulostí. PoděkováníAutoři článku chtějí touto cestou poděkovat panu Jakubovi Vránovi za velmi přínosné školení "Bezpečnost aplikací v PHP", ze kterého získali velké množství informací zejména o praktické realizaci útoků z pohledu napadající strany. Mnoho užitečných rad k dané problematice lze nalézt přímo na webových stránkách [5]. Literatura
[1] Securiteam.com: Introduction to HTTP Response Splitting, SecuriTeam™ 2005, online, dostupné z: http://www.securiteam.com/securityreviews/5WP0E2KFGK.html
Další zdroje Autor: J. Malý, J. Kacálek Pracoviště: Vysoké učení technické v Brně |
Zprávy
UPOZORNĚNÍ
Činnost serveru byla ukončena.
|
Tento web site byl vytvořen prostřednictvím phpRS - redakčního systému napsaného v PHP jazyce.
Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
nebo registrovanými ochrannými známkami příslušných vlastníků.