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…

Autor článku doporučuje: Internetový obchůdek zaměřený na produkty FairTrade, biopotraviny, přírodní kosmetiku, ekodrogerii a výrobky chráněných dílen.

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: @ScottyCZE Největší prdel je, že dostala od vedoucího a oponenta návrh na známky C a E.
    5.2.2012 13:50
  • Michal Smrčka: Vodafone podmínil dotaci na tel. datovým tarifem, ale všimli jste si, že současně ZDRAŽIL? Např. iPhone z 12877 na 13377 při 477/měs.
    3.2.2012 19:28
  • Michal Smrčka: "Zdar vole, kolik berete piv?" - "Haló? Voláte správně?" #kurva #android
    2.2.2012 12:40

Poslední články

Poslední komentáře

Honyx: To se teda máte čím chlubit...A autorizovaný asi jen podle jména...Trošku jsem podráždil strejdu Gůgla a zjistil že se o vás nepíše jen tady...Je mi vás líto chlapci... Ukázat
Lopata: Ne.. děláme to pouze podle předpisů tak jak máme :)A ano správně AUTORIZOVANÝ servis :P Ukázat
Honyx: Ano a to je přesně přístup výše jmenovaného "autorizovaného"servisu...Než by něco udělali pořádně,tak plnou pusu nesmyslů o tom jak to nejde a "nezájem"...Jsem bohužel v Čechách... Ukázat
Lopata: Nezájem :) A nazdar bazar ;) Ukázat
Honyx: Nevím zad bych riskoval ale rozhodně bych vyměnil to v čem je problém pokud enebyl způsoben oxidací a pokud by se ten telefon vrátil s problémem který způsobila oxidace,po té bych to teprve řešil a ne že:nesvítí ti display,máš tam 1mm čtvereční oxidace,tak... Ukázat

Vyhledávání

Nastavení

Velikost písma: Abc Abc Abc