Image
25.7.2016 0 Comments

WWW hacking a obrana / 1. časť

Upo­zor­ne­nie:
Autor člán­ku ne­zod­po­ve­dá za prí­pad­né ško­dy vznik­nu­té po­uží­va­ním tec­hník uve­de­ných v tom­to člán­ku. Všet­ky po­stu­py, tec­hni­ky a spô­so­by sú iba na ukáž­ko­vé úče­ly pre po­tre­by prog­ra­má­to­rov s pred­pok­la­dom vy­uži­tia týc­hto in­for­má­cií na lep­šie za­bez­pe­če­nie inter­ne­to­vých ap­li­ká­cií. Kaž­dý po­uží­va opí­sa­né tec­hni­ky len na vlas­tnú zod­po­ved­nosť.

Dnes sa veľ­mi rých­lo dá vy­tvo­riť inter­ne­to­vá ap­li­ká­cia, kto­rá je dy­na­mic­ká a po­dľa sprá­va­nia sa po­uží­va­te­ľa dy­na­mic­ky ge­ne­ru­je vzhľad strá­nok a ko­mu­ni­ku­je s po­uží­va­te­ľom. Ja­zy­ky ako PHP a ASP sú veľ­mi po­pu­lár­ne a po­uží­va ich čo­raz viac prog­ra­má­to­rov. Mno­hí z nich však za­bú­da­jú na za­bez­pe­če­nie ap­li­ká­cií a spo­lie­ha­jú sa na to, že bez­peč­nosť by mal mať na sta­ros­ti po­sky­to­va­teľ hos­tin­gu. To je sí­ce prav­da, ale ri­zi­ko hro­zí nie­len zo stra­ny úto­kov na inter­ne­to­vé server­y, či už pria­mo na sof­tvér Apac­he, ale­bo Mic­ro­soft IIS, kto­ré sú naj­pou­ží­va­nej­šie, ale aj zo stra­ny úto­kov na ap­li­ká­cie, kto­ré sú čas­to zle za­bez­pe­če­né.

Ak si chce­te otes­to­vať po­uži­té tec­hni­ky, zos­tav­te si po­čí­tač tak­to: Ako server po­uži­te Apac­he 2.2.4., kto­rý je za­dar­mo (http://httpd.apac­he.org/). A PHP 5.2.0 (as­poň ver­ziu 5.2.0 z http://www.php.net), kto­ré je tiež za­dar­mo. Naj­prv nain­šta­luj­te server Apac­he a po­tom PHP. Aby ste moh­li všet­ky ukáž­ky vy­skú­šať a otes­to­vať, mu­sí­te up­ra­viť dve nas­ta­ve­nia v kon­fi­gu­rač­nom sú­bo­re PHP.
Ot­vor­te sú­bor php.ini, kto­rý sa nac­hád­za v ad­re­sá­ri, kde je nain­šta­lo­va­né PHP (väč­ši­nou C:\Prog­ram Fi­les\PHP\php.ini), up­ra­ví­me ma­gic_quotes_gpc = Off na ma­gic_quotes_gpc = On a re­gis­ter_glo­bals = Off na re­gis­ter_glo­bals = On.

Pa­ra­me­ter ma­gic_quotes=On za­bez­pe­čí vlo­že­nie backslash (spät­nej lom­ky) pred úvod­zov­ky a apos­tro­fy. A re­gis­ter_glo­bals = Off nám po­vo­lí po­uží­vať pre­men­né v tva­re $pre­men­na na­mies­to $_GET['pre­men­na'].
Ukáž­ky bo­li tes­to­va­né na preh­lia­da­čoch Mic­ro­soft Inter­net Explo­rer a Mo­zil­la Fi­re­fox, tak­že by vám na nich ma­li bez prob­lé­mov fun­go­vať.

XSS – Cross Si­te Scrip­ting
XSS je dnes veľ­mi po­pu­lár­ny spô­sob úto­ku na WWW strán­ky. Pr­vé opi­sy sla­bých miest, kto­ré mô­žu byť zneu­ži­té, sa ob­ja­vi­li v ro­ku 2000. XSS je vkla­da­nie skrip­tov do kó­du strán­ky. Nie je to však po­dmien­ka. Vkla­dať sa da­jú aj oby­čaj­ne ta­gy HTML, kto­ré sú na po­ba­ve­nie hac­ke­rov ideál­ne. Z to­ho je zrej­mé, že zra­ni­teľ­né bu­dú naj­me če­ty a fó­ra, kto­ré do­vo­ľu­jú po­uží­va­te­ľom po­sie­lať ne­ja­ký vstup dát. Z to­ho je zrej­mé, že XSS je prob­lé­mom vstu­pu dát. Je to prav­da, ale pla­tí to len pre úpl­ne neo­šet­re­ný vstup. Pre vstup, kto­rý je ne­ja­kým spô­so­bom kon­tro­lo­va­ný a up­ra­vo­va­ný, aby neob­sa­ho­val po­ten­ciál­ne ne­bez­peč­né zna­ky, je XSS aj prob­lé­mom vý­stu­pu dát. O tom si však po­vie­me až na­bu­dú­ce.

Žiaľ, i dnes sa stá­le ob­ja­vu­jú no­vé sla­bé mies­ta aj na strán­kach veľ­kých fi­riem. Eš­te pred tro­mi rok­mi sme sa stret­li na rôz­nych če­toch a fó­rach s XSS. Hac­ke­ri, kto­rí sa po če­te po­tu­lo­va­li, „lo­vi­li coo­kies“ po­uží­va­te­ľov bez prob­lé­mov. Me­ni­li nad­pi­sy strá­nok, krad­li coo­kies, skrý­va­li ob­sa­hy strá­nok atď. Dnes je to už ove­ľa lep­šie, ale na star­ších strán­kach, kto­ré sa pár ro­kov neak­tua­li­zo­va­li, sa XSS za­cho­va­lo.
Ako pr­vý prík­lad si uve­die­me jed­no­duc­hú ap­li­ká­ciu, kto­rá je nap­rog­ra­mo­va­ná v PHP. Je to veľ­mi jed­no­duc­hý prík­lad, ako mô­že k úto­kom ty­pu XSS dôjsť. Vstup je po­líč­ko, kde sa za­dá me­no po­uží­va­te­ľa, a ap­li­ká­cia zob­ra­zí me­no na strán­ke.

<html>
<a head>
<tit­le> Ukáž­ka ap­li­ká­cie, kto­rá je zle nap­rog­ra­mo­va­ná! </tit­le>
<me­ta http-equiv="Con­tent-Ty­pe" con­tent="text/html; char­set=win­dows-1250">

</head>

<bo­dy>
<form ac­tion="<?php ec­ho $HTTP_SELF; ? >" met­hod="get">
Me­no:
<in­put na­me="me­no" ty­pe="text" si­ze=100>
<in­put na­me="od­os­lat" ty­pe="sub­mit" va­lue="Od­os­lať">
</form>

<?php ec­ho $me­no;? >

</bo­dy>
</html>

 

Zdá sa, že všet­ko je v po­riad­ku a fun­gu­je bez prob­lé­mov. No sta­čí sa na chví­ľu za­mys­lieť a skú­siť do po­líč­ka vpí­sať nie­čo iné. To, na čo prog­ra­má­tor ne­mys­lel.
Naj­čas­tej­šie po­uži­je útoč­ník nie­čo po­dob­né, ako je to­to:
<script>alert("Webo­vá ap­li­ká­cia je vul­ne­ra­bil­ná - XSS!");</script>

Te­raz sa však po­zri­me, kde nas­tal prob­lém a v čom uro­bil prog­ra­má­tor chy­bu. Chy­ba je tá, že po­mo­cou fun­kcie void ec­ho(string re­ťa­zec) vy­pí­še text na strán­ku bez akej­koľ­vek kon­tro­ly, čo ob­sa­hu­je pre­men­ná $me­no.
<?php ec­ho $me­no;?> - to­to je zle

Na to, aby sme za­brá­ni­li to­mu­to ty­pu úto­ku, sta­čí, aby sme pre­men­nú $me­no ošet­ri­li fun­kciou string html­spe­cial­chars (string re­ťa­zec).
Prog­ra­má­to­ri však veľ­mi čas­to po­uží­va­jú len fun­kciu addslas­hes(string re­ťa­zec) v dom­nien­ke, že za­bez­pe­či­li ap­li­ká­ciu, ako sa naj­lep­šie dá. No mý­lia sa. Fun­kcia addslas­hes(string str) sa po­uží­va na oc­hra­nu pred SQL In­jec­tion, čo je vkla­da­nie da­ta­bá­zo­vých prí­ka­zov SQL do da­ta­bá­zy.

No na oc­hra­nu pred XSS ne­má veľ­kú si­lu. Je sí­ce prav­da, že za­brá­ni po­uží­va­niu " a tým zne­mož­ní správ­ne za­pí­sať (ozna­čiť) texto­vý re­ťa­zec v ja­zy­ku Ja­vaS­cript, ale sám ja­zyk Ja­vaS­cript nám po­nú­ka mož­nosť, ako sa dá to­to ob­med­ze­nie obísť a pred­sa len pre­pa­šo­vať ".

Po­uži­je­me na to fun­kciu ob­jek­tu String ja­zy­ka Ja­vaS­cript from­Char­Co­de(as­cii co­de). Tá­to fun­kcia skon­ver­tu­je kód AS­CII na je­ho zna­ko­vú po­do­bu. Tu je prík­lad zob­ra­ze­nia sprá­vy alert(XSS). 88=X, 83=S.
<script>alert(String.from­Char­Co­de(88, 83, 83));</script>

Ale sú aj ta­kí, kto­rí ne­pou­ží­va­jú ani fun­kciu addslas­hes(string str).
A ak je vstup, kto­rý je neo­šet­re­ný, nás­led­ne po­sla­ný do da­ta­bá­zy (SQL, MySQL, Po­stgreSQL), útoč­ník mô­že zís­kať kon­tro­lu nad ce­lou ap­li­ká­ciou. Mô­že po­sie­lať rôz­ne prí­ka­zy do da­ta­bá­zy, kto­rá ich bu­de oc­hot­ne vy­ko­ná­vať.

Ukáž­me si te­raz prík­lad, kto­rý bu­de vy­ni­ka­jú­cou ukáž­kou to­ho, ako mô­že prog­ra­má­tor myl­ne na­do­bud­núť pres­ved­če­nie o dob­rom za­bez­pe­če­ní svo­jej ap­li­ká­cie.
Pred­stav­te si, že prog­ra­má­tor inter­ne­to­vých ap­li­ká­cií (če­ty, fó­ra atď.) po­čul nie­čo o úto­koch ty­pu XSS. Vie, že keď ne­ja­kej pre­men­nej pri­ra­dí hod­no­tu, kto­rá sa bu­de rov­nať to­mu­to:
<script>alert("Webo­vá ap­li­ká­cia je vul­ne­ra­bil­ná - XSS!");</script>

zis­tí, že je­ho ap­li­ká­cia nie je za­bez­pe­če­ná pro­ti to­mu­to ty­pu úto­ku, te­da útoč­ník mô­že vlo­žiť aký­koľ­vek skript do kó­du strán­ky a inter­ne­to­vý WWW preh­lia­dač po­uží­va­te­ľa ho inter­pre­tu­je. Keď však vlo­ží do vstup­né­ho po­ľa pred­chád­za­jú­ci ria­dok, nič vi­di­teľ­né sa nes­ta­ne. To pre­to, že vstup má ošet­re­ný fun­kciou addslas­hes(string str), na kto­rej po­uži­tie upo­zor­ňu­je tak­mer kaž­dá za­čia­toč­níc­ka prí­ruč­ka ale­bo kni­ha o prog­ra­mo­va­ní v PHP.
Ale skús­te na­pí­sať do vstup­né­ho po­ľa nas­le­du­jú­ci ria­dok:
<script>win­dow.clo­se();</script>

Zob­ra­zí sa di­alóg, kto­rý sa bu­de pý­tať, či si že­lá­te za­tvo­riť ok­no. A zra­zu sa z ap­li­ká­cie, kto­rá je zdan­li­vo za­bez­pe­če­ná, sta­ne úpl­ne de­ra­vá strán­ka, kto­rá svo­jim náv­štev­ní­kom prip­ra­ví ta­ké prek­va­pe­nia, aké ur­či­te ne­ča­ka­li. A aké? Nap­rík­lad ta­ké­to:
<script>for(var i = 0; i < 30; i++)win­dow.open();</script>

Po­uží­va­te­ľo­vi sa po­stup­ne za­čne ot­vá­rať 30 práz­dnych okien. Ur­či­te to je nep­rí­jem­né prek­va­pe­nie pre náv­štev­ní­ka strán­ky.

Zá­ver
Na­bu­dú­ce bu­de­me po­kra­čo­vať v ob­jas­ňo­va­ní úto­kov XSS a to­ho, ako sa im brá­niť.

Zobrazit Galériu
Autor: Ján Chovanec

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

ITPro

Linux súkromne i pracovne v2.0 (14. časť): Small Business Server

09.11.2016 14:57

Pojem Small Business Server (malý firemný server) začala používať spoločnosť Microsoft ešte v roku 2000 na označenie servera, ktorý ­dokázal plniť úlohy niekoľkých samostatných serverov. Aplikačná vrs ...

ITPro

Industry 4.0: Fikcia alebo už realita?

09.11.2016 14:52

Štvrtá priemyselná revolúcia je pomenovanie rozsiahlych zmien prudko vstupujúcich do súčasného priemyslu. Nositeľom týchto zmien je digitalizácia výroby a optimalizácia všetkých podnikových procesov v ...

ITPro

Vývoj aplikácií UWP pre Xbox One II.

09.11.2016 14:47

V predošlej časti sme ukázali postup, ako si ­vytvoriť vývojársky účet a aktivovať vývojársky režim na hernej konzole Xbox One, aby ste mohli testovať svoje aplikácie. Výhodou hernej konzoly Xbox je v ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá