Hacking webů - obrana, techniky (1) | Michal Smrčka - blog

Hacking webů - obrana, techniky (1)

V tomto prvním dílu série o webových bezpečnostních rizicích se budu věnovat teorii průniků do cizích serverů skrz manipulace se zpracovávanými daty.

Otázka, jak se nabourat do cizího webserveru, napadla snad každého počítačového maniaka. Ať už byl motiv jakýkoli. (Já rozhodně neuznávám parazity, jejichž motivem je jen a pouze páchat škodu druhým.) A proč se zabývám bezpečností právě webových služeb? Chyby jsou přece ve všech aplikacích a pokud všechny chyby opravíte, stejně vygenerujete další chyby v těch opravách…

Existuje spousta programovacích jazyků. A každý má svoji syntaxi, strukturu, způsob vyhodnocování a také třeba striktnost otypování proměnných. A o tu právě jde. Největším rizikem programování webových aplikací je, že většina jejich jazyků téměř nedbá na datové typy. (Samozřejmě do toho nepočítám extrémy, jako je například web napsaný v Haskellu apod.)
Pokud člověk chce pochopit úplný základ programování dynamických webů za minimální čas, je pro něj jazyk typu PHP nebo ASP vhodný. Nemusí řešit, že program spadne, když člověk do proměnné čísla typu integer vloží desetinné číslo (proměnné prostě blíže nedefinuje). Je očekávaná rychlá funkčnost a tím i další motivace začínajícího programátora.

Pokud se však tento začátečník později pustí do větších projektů, jako například webové databáze nebo jednoduchý redakční systém, nastávají první problémy, které právě s datovými typy souvisí. Vzhledem k tomu, že web poskytuje na klientově straně zcela otevřený HTML kód, těm zkušenějším je již při prvním pohledu do tohoto kódu zřejmé, kde web může mít bezpečnostní slabiny. Poté například stačí do požadavku (přenášené informace) zadat takový programový kód, aby jej skript, který je špatně napsaný (nekontroluje datové typy a nemonitoruje obsah proměnných), do svého kódu doslova začlenil a jeho příkazy provedl. Tím může v některých případech útočník získat kompletní kontrolu nad webem, jeho databází apod. Je to podobné jako odejít z bytu a nechat pootevřené dveře.

Obecně platí, že čím komplexnější a složitější web je, tím více bezpečnostních chyb se na něm může nalézat. Je proto důležité již při návrhu webu počítat s tím, že veškeré informace, které přicházejí „zvenčí“ (jejichž obsah může cizí člověk ovládat), musí být zanalyzovány. Já osobně si vždy nadefinuji funkci checkVar(variable,type), kterou proženu každou proměnnou, která neslouží pouze pro vnitřní potřeby programu. Ta na základě parametru „type“ určí, zda proměnná může obsahovat nebezpečné znaky a případně tyto znaky „zneškodní“. Ačkoli se to na první pohled nezdá, obrovské bezpečnostní riziko se může skrývat například i v obyčejném políčku pro hledání…

Konkrétní techniky a praktické ukázky možného útoku a obrany zde zveřejním v příštím dílu.


Čtěte také:
31. 03. 2009 v 20:44 • Bezpečnost a hacking • autor Michal Smrčka
 

Názory a komentáře k článku


[1] Jirka M. 08. 04. 2009, 13:39
Michale za tu metodu checkVar te chvalim. Nicmene nemuzu souhlasit, ze vetsina jazyku nedba na datove typy. Mel si rict, ze nejrozsirenejsi jazyk PHP nedba na deklaraci datovych typu.
Bohuzel neni nejrozsirenejsi kvuli jeho prednostem a dokonalosti, ale kvuli jedine veci. Zvladne ho kazdy lammer... Na druhou stranu pokud clovek je striktni sam od sebe, tedy nikoli filozofii jazyka, da se i v PHP psat slusny kod.

[2] Michal Smrčka admin 08. 04. 2009, 18:41
Díky za reakci :)
Neřekl jsem, že na datové typy nedbá většina jazyků jako takových. Mluvím o jazycích používané ve webových aplikacích, což je nejčastěji PHP a ASP a ani jeden z nich nevyžaduje striktně datové typy (resp. v ASP se dá používat univerzální typ variant).
Nemyslím, že PHP zvládne každý. To se dá říct o většině jazyků, záleží na tom, kdy se ten "každý" dostane do bodu, kdy jeho začátečnický způsob programování nebude stačit (časová náročnost algoritmů, mnoho zbytečných requestů, neefektivní práce s databází, ...). Naopak myslím, že pro začátečníky, kteří opravdu chtějí pochopit smysl programování, je vhodný striktnější jazyk s jednoduchou syntaxí, např. Pascal.

[3] kolemjdouci e-mail 15. 09. 2010, 11:56
Tak na programování je nejlepší Perl nez PHP :).

PHP má spoust chyb .. třeba pokud zjištujete určitý string .. jeho obsah tak PHP předpokládá že je nečím zaplněn , ale pokud není tak i if ($a <> ahoj) {.... ; generuje wraning v logu že $a je prazdný...
Proto mi příjde lepší Perl a Turbobasic :P

A spousta chyb webu je způsobena tím že si uživatel ukládá hesla na account do hostingu do stejného adresáře co má web :D

[4] Host 08. 05. 2011, 02:17
kolemjdouci:
na ty vaše chyby mohu říct nastudujte si dokumentaci k dvou dobrým příkazům v php a už nebudete mít problémy s tím, když $a není při testovaní "ifem" něčím zaplněný:

http://cz.php.net/manual/en/function.isset.php

http://cz.php.net/manual/en/function.empty.php

S druhou Vaší připomínkou taktéž nemohu souhlasit

Přidat komentář

Jméno
E-mail
Web
Text
    Odesláním souhlasíte s pravidly.

Kategorie blogu

Twitter feed

    Twitter @michalsmrcka @michalsmrcka
  • Michal Smrčka: Včera jsme zahráli trochu jazzu na konferenci Vítejte u nás ve Znojmě http://t.co/ehfj7iHM . Btw zdravím @zitbrno ;)
    18.5.2012 22:47
  • Michal Smrčka: @MichalCerny To se mi jednou ve stavu opilosti taky stalo. O to horší, že více než 10 tisíc Kč peněženka odmítá a nejde zavřít
    18.5.2012 22:46
  • Michal Smrčka: Rathův obhájce je Adam Černý - muž, který žaluje Lupu kvůli rozkrývání kauzy Tojecool. Náhodička
    17.5.2012 07:57

Poslední články

Poslední komentáře

ten kdo neumi : Nevm jesi to tady uz nekdo nerikal ale. skouseli jste to nekdo psat na roztazenou gumicku potom gumicku pri pisemce roztahujete a opisujete kdyz se to udela dobre tak se to z nenapnuty gumicky neda precist mam za sebou 8testu vsecny na 1... Ukázat
cockin74: Dekuji za radu. Ukázat
Kaca: ja to delam tam ze si ho nalepim na zidli a sednu si a jenom roztahuju nohy nebo kdyz mame pisemku rozdelim si s kamoskou A4 papir na pul a na kraj toho papiru si tuzkou napisu veci ohnu aby to neslo videt... Ukázat
obluda: Sešit do lavice Ukázat
utrum: Badoo je ješte slabej odvar,merkněte na tohle video,měli byste si dat pozor nato. http://www.youtube.com/watch?v=4cf1YwEQxIs Ukázat

Vyhledávání

Nastavení

Velikost písma: Abc Abc Abc