Neescapuje jen hlupák

Poslední dny mě dovedly k zamyšlení nad tím, proč někteří programátoři nedodržují základní pravidla bezpečnosti. Proč čím dál tím více narážím na weby, které nemají vyřešeno escapování vstupů z formulářů a dovolí třeba i po pár minutách XSS útok. Je tak těžké naučit se aspoň elementární postupy zaručující aspoň nějakou bezpečnost?

Minulý měsíc byla prolomena databáze evernote.com, v posledních dnech se nabourali na 7 minut do unicreditbank.cz. Byť podle banky se nic zásadního nestalo a hesla jsou v bezpečí. Včera se ke mně dostala zpráva, že došlo k vykradení databáze votocvohoz.cz. Klasická odpověď ale je: „Nebojte se, databázi sice ukradli, ale hesla byla šifrována“. Ano, šifrována a hned v dalším sloupečku byl salt a šifrování bylo SHA1. V dnešní době je díky kryptografickým kolizím a online slovníkům vysoká úspěšnost v lámání takových hesel. Pokud si dobře pamatuji, některé zdroje uvádějí něco kolem 40%. Když započítám kolik procent z těcho lidí má stejné heslo na gmail a seznam a všechny další služby, radši nechci předjímat, co může nastat. Na konferenci Devel.cz jsem viděl, že z 200 záznamů se podařilo rozlousknout nějaká ta hesla. Pak 3 lidem se nakonec nabourali do seznam mailu a jednomu do gmail mailu. Gmail byl aspoň trochu inteligentní. Zjistil, že daný člověk se přihlašoval přes čínské proxy. Proto položil ověřující otázku požadující telefonní číslo. Číslo bylo samozřejmě na webu dohledatelné pod jménem daného člověka. Tak to ale přece google nemohl vědět, že? 😀

Nevím zda je to jen lajdáctvím nebo tím klasickým „mně se to přece stát nemůže“. A nebo snad i tím, že programovat v PHP se naučí skoro každý po přečtení knihy „Začínáme s PHP“. Spíše ale nabudou ten dojem a jejich ego stoupa do výšin, jak jsou dobří programátoři. Do té doby, než jim někdo web zhodí. V lepším případě je upozorní na chybu v bezpečnosti a bude doufat, že dojde k její nápravě a danému programátorovi to něco přinese.

Ano, nebudu nalhávat, že se někomu nepodařil útok na moje stránky. Na slevykurzu.cz zkusili zaútočit dva „hadcore“ programátoři. Ano, podařilo se. Po odhalení bezpečnostní díry v aplikaci již  není moc velký problém převzít nad ní kontrolu. Vše se ale odehrálo na testovací verzi, záměrně a s jasným cílem – udělat aplikaci bezpečnější. A samozřejmě měli k dispozici komplet zdrojové kódy a schéma databáze. S tímto se pak hned lépe útočí. Je to podstatně lehčí než provádět útok „naslepo“.

Předevčírem jsem dostal k zhodnocení stránky klienta. Po tom, co jsem si hrál s vyhledáváním jsem zjistil, že políčko není escapované. Třešničkou na dortu bylo to, že pokud vstup vyvolal chybu dotazu, celý dotaz se vypsal včetně backtrace. To stejné se stalo i pro přihlášení do administrace. Je asi jasné, co následovalo. Plná kontrola nad aplikací byla docílena během 15minut. za další minutu jsem si vytvořil vlastního uživatele a přihlásil se do aplikace. Jako bonus jsem zjistil, že stejný systém do včerejška běžel na webech jedné sítě rádií.

Programátor není doktor. když váš web nechá zabít, skoro nic mu nehrozí…

Dlouhodobým pozorováním situace docházím tedy k myšlence, že nejde jen o to, jak web vypadá, jak byl navrhnut grafikem a UX designerem. Ale hlavně jde o to, jak je celý naprogramován. U věcí, co „jdou vidět“ může posoudit, zda se mu líbí nebo či mohou fungovat z uživatelského hlediska. Při posuzování funkce kódu  je ale klient ve velké nevýhodě. Programátor mu může nakecat, co chce a asi pravděpodobně i uspěje. Zde je i zásadní kámen úrazu, klient nedokáže posoudit kvalitu a bezpečnost kódu. Na nějaké náklady spojené s analýzou webu jinou firmou peníze nemá. Následky takové nerozvážnosti mohou být v nejhorším případě fatální. Proto radím všem zadavatelům webových projektů: „Důvěřujte ale prověřujte“. Však taková analýza někým, kdo programování aspoň nějak rozumí nemusí stát víc jak 1.500…

Leave a comment

Your comment