Bezpečnost je míra, ne vlastnost

Chtěl bych se s vámi podělit o jeden příběh, který se nedávno odehrál. A poněvadž nebyl vyroben kdesi v Hollywoodu, ale napsal ho sám vývojářův život, tak není moc veselý. Na jeho konci se totiž místo závěrečných titulků rolujících po plátně za zvuku dojemných melodií objeví přístupové údaje k databázi jedné české a mnou oblíbené webové služby na sdílení obrázků.

Na sklonku minulého roku se kdesi na blíže neurčeném místě setkali dva vývojáři a začali se o tomto příběhu otevřeně bavit. V dnešní době z každé nevýznamné schůzky existuje záznam a tak i toto setkání kdosi nahrával a mě se po několika krabicích lahodného vína podařilo mého dobře informovaného známého přesvědčit k tomu, aby mi záznam tohoto on-line rozhovoru dvou vývojářů přenechal a já vám tedy teď jeho přepis nabízím. Omluvte gramatické chyby a chybějící diakritiku, z důvodu autentičnosti přepis neprošel jazykovou korekturou.

Začátek záznamu je bohužel nesrozumitelný a je přehlušen zvukem houkaček projíždějících policejních vozů, ale dá se vydedukovat, že jeden ze dvou protagonistů příběhu svého kamaráda upozorňuje na to, že ne zcela legálně získal přístup k databázi uvedené aplikace a zkušeně mu doporučuje, co má v následujících okamžicích podniknout.

spaze, 9.11.2011 23:47:14:
a zmen si heslo do db

spaze, 23:47:17:
a na mail

spaze, 23:47:21:

DB_USER
string(5) "jirka"

DB_PASS
string(14) "d2d5d95h1f5ds9"

Medhi, 10.11.2011 2:33:31:
a jak jste zjistili přístup do db, v čem spočívala ta díra?

spaze, 2:34:34:
vyvolas ladenku [1], mas login do db v konstantach a ladenka vypisuje konstanty

Medhi, 2:35:38:
ono to na nette [2] neběží, měl jsem tam nette jenom kvůli formulářům a nechápu, proč se laděnka zobrazovala na production, asi to nerozpoznala [3]

V tomto místě je záznam opět nesrozumitelný, lze jen vyvodit, že Medhi nabízí za danou informaci úplatek v podobě dodávky kvalitního kubánského nápoje destilovaného ze šťávy z cukrové třtiny. Poté záznam končí.

David Grudl, duchovní otec Nette [2], se v komentářích k jednomu z předchozích článků, ve kterém popisuji možnost napadnutí webových aplikací pomocí metody Mass Assignment, vyjádřil k bezpečnosti Nette takto:

David Grudl (28. 3. 2012 | 20:22) napsal:
Ačkoliv se kvůli své lenosti také snažím dělat v Nette vše co nejjednodušší, nikdy to nesmí jít na úkor bezpečnosti. Mass Assignment se proto Nette vůbec netýká. Z Nettích formulářů vždy dostanete jen ta data, která jste explicitně specifikovali. Totéž platí pro parametry předávané přes $_GET. A nelze to ani žádnou direktivou změnit, to je by design.

Tenkrát samozřejmě ještě nemohl tušit, že světlo světa spatří výše uvedený záznam, ve kterém je právě svatá trojice NetteNettí formuláře a Laděnka označena jako pachatel všeho zla. Zda Medhi použil uvedené nástroje špatným způsobem nebo zda je vina opravdu na těchto nástrojích samotných se už bohužel nedozvíme. Nicméně pro učinění závěru z tohoto příběhu to ani vědět nemusíme.

Použití jakéhokoliv nástroje, ať už je to webový framework nebo bouchač z reálného světa s východním přízvukem automaticky nezaručí bezpečnost vašich webových aplikací, nezávisle na tom, co tvrdí autor daného nástroje. Nebo váš nejlepší kamarád. Nebo váš šéf. Vždy se naučte, jak daný nástroj pracuje, jaké má omezení, jaké vlastnosti a kdy je vhodné jej použít a kdy ne. Vše pečlivě otestujte a hlavně věřte pouze svému úsudku a svojí hlavě. Tedy pokud nějakou máte.

Bezpečnost totiž není vlastnost, ale pouze míra, kterou byste neměli nikdy snižovat.


1 Laděnka je slangový výraz používaný ve vývojářském podsvětí k označení nástroje pro odhalování organizovaného zločinu v podobě chyb ve zdrojových kódech, často bývá spojován se skupinou známou pod jménem Nette.

2 Skupina Nette disponuje souborem nástrojů, které se využívají především pro rychlejší a pohodlnější psaní webových aplikací, v odborné literatuře se pro takový soubor nástrojů používá pojem framework.

3 Důvod, proč se tomu tak stalo naleznete na GitHubu v sekci Nette Issues: Debugger: wrong development mode detection.

3 thoughts on “Bezpečnost je míra, ne vlastnost
  1. Na jednom ze svych projektu, ktery nebyl postaven na nette, jsem pouzival ladenku a dibi. Prece jen to je uzasny nastroj pro lazeni chyb – klobouk dolu. Vypisu konstant, ve kterych se drzely pristupy k DB jsem si se zdesenim vsiml. Jednalo se ladenku vypreparovanou z nette 0.9. pro php 5.2. Kdybych poctive pouzival GTD a vyprazdnil si inbox, nasel bych tam poznamku, kterou jsem si dal za ukol o tomto informovat na nette foru. Myslel jsem si, ze to byl nejaky muj fail (ladenku jsem si vypreparoval, bez pouziti nette), ale clanek ukazuje, ze asi ne.

  2. Vždycky je naprosto nutné zkontrolovat, že Laděnka na ostrém serveru bězí v produkčním režimu, jinak je to malér. To není otázka jen údajů pro přístup k databázi – Laděnka se nesmí zobrazit vůbec.

  3. Laděnka se nesmí zobrazit vůbec

    Tesat do kamene. Její zobrazení může pomoci ve vedení dalších útoků, např. SQL Injection, to například ve chvíli, kdy dojde k chybě v SQL dotazu a Laděnka nám ukáže zdrojový kód, ze kterého se dá vyčíst celý SQL dotaz odesílaný na server

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax