Microsoft prosazuje omezení volného toku zpráv o bezpečnostních děrách (slabinách, vulnerabilities). Scott Culp, manager Microsofotího security response center, v loni publikovaném názoru označuje současný stav za "informační anarchii". Tvrdí, že bychom všichni byli mnohem bezpečnější, kdyby si výzkumníci nechávali informace o detailech objevených děr pro sebe a nevyzbrojovali hackery exploity. Další iniciativou, kterou Culp představil na Microsoft Trusted Computing Forum, je sdružení, které by tyto ideje mělo uvést do praxe.
Povrch odhalení
Pro vysvětlení vývoje bezpečnostní díry v čase razím termín "povrch odhalení" (window of exposure). Díra (vulnerability) je chyba v programu, zanesená programátorem při vývoji a neodchycená během testování. Její zneužití (exploit, abuse) umožňuje útočníkovi prolámat se do počítače nebo udělat něco, co za normálního stavu nesmí.
Předpokládejme, že existuje díra, o níž nikdo nemá tušení. Nebezpečí je malé, protože nikdo neví, jak ji zneužít. Neobjevena může zůstat krátce (slabiny ve Win XP byly objeveny ještě před uvedením produktu), nebo také celé roky. Řekněme, že slabinu nakonec někdo objeví. Může to být někdo, kdo objev oznámí výrobci programu. Může to být někdo, kdo znalosti zneužije k napadání cizích systémů. Možná o tom nikomu nařekne a někdo jiný slabinu za pár měsíců objeví znovu. V každém případě, jakmile o slabině někdo ví, nebezpečí roste.
Zprávy o slabině se postupně mohou šířit, třeba mezi komunitou počítačové bezpečnosti, nebo také v undergroundu mezi hackery. Časem je slabina zveřejněna, například postem do Bugraqu, v tiskové zprávě, výzkumníkem, CERTem nebo výrobcem. Nebo je zveřejněna na obdobném fóru "temné" strany. V každém případě, nebezpečí opět roste, protože o chybě ví mnohem více lidí.
Pak někdo napíše exploit- automatizovaný nástroj, zkoušející slabinu. To je zlomový bod, který nemá v běžném světe obdoby. Jednak software umožňuje oddělit schopnost a znalost. Jakmile je napsaný exploit, může jej použít skoro kdokoli, bez ohledu na znalosti nebo porozumění chybě. Za druhé, takový hotový nástroj může být široce rozšířen s nulovými náklady, takže každý, kdo chce být chopen využít slabinu, jej snadno získá. Na scéně se objevují takyhackeři ("script kiddies"), útočící na systémy plošně. Jakmile je na světe snadno použitelný exploit, nebezpečí se zvětšuje o mnoho řádů.
Následně výrobce zveřejňuje záplatu. Nebezpečí se snižuje, ale ne tolik, jak by člověk optimisticky očekával. Většina počítačů na internetu nemá záplaty v aktuálním stavu, je spousta příkladů systémů, do nichž se někdo dostal děrami, které měly být dávno zalepené. Neobviňuji administrátory, záplat je prostě příliš mnoho a spousta z nich je prasácky napsaných a nedostatečně vyzkoušených. Nebezpečí se snižuje, ale nikdy se nevrátí na nulu.
Kdyby se závislost nebezpečí na čase vynesla do grafu, tak povrch odhalení je plocha pod grafem. Cílem je tuto plochu minimalizovat. Jinak řečeno, chceme co nejmenší nebezpečí v průběhu životního cyklu programu a určité konkrétní díry. Příznivci utajování chyb a příznivci úplného zveřejňování zastávají jen odlišné přístupy, jak toho společného cíle dosáhnout.
Historie úplného zveřejňování
V dobách počítačové a síťové prehistorie bylo normou utajování chyb. Když uživatelé a výzkumnící našli chybu, potichu uvědomili výrobce programu. Teoreticky pak výrobce chybu opravil. Po svém vzniku v roce 1988 se stal koordinátorem tohoto procesu CERT. Nově objevené díry lidé posílali CERTu, ten je ověřil, uvědomil výrobce a zveřejnil detaily slabiny a záplatu, jakmile byla záplata k disposici.
Problémem tohoto systému bylo, že nijak nemotivoval výrobce k promptnímu záplatování děr. CERT informace nepublikoval, dokud neexistovala záplata, takže s její výrobou nebylo důvodu spěchat. Jednodušší bylo udržet díry v tajnosti. Vyskytly se případy výrobců, vyhrožujících výzkumníkům, pokud své výsledky zveřejní a dehonestační kampaně proti těm, kteří existenci děr zveřejnili (i když bez detailů). Nakonec některé dírzy zůstavaly bez záplat roky.
Hnutí úplného zveřejňování je dítětem nespokojenosti s oním stavem. Princip je jasný - jakmile je díra zveřejněna, veřejný tlak donutí výrobce záplatovat velmi rychle a většinou to funguje i v praxi. Převážná část výzkumníků dnes zveřejňuje objevené slabiny v mailinglistech typu Bugtraq. O děrách se píše v počítačových časopisech. Výrobci se snaží zveřejnit opravu už v okamžiku publikování díry, aby mohli vydat vlastní tiskovou zprávu, kde vychválí, jak rychle a důkladně zareagovali. Paradigma úplného zveřejňování zlepšuje bezpečnost internetu.
Zároveň mailing listy slouží hackerům - mají možnost dozvědět se o děrách a vytvořit exploity. Občas píšou ukázkové exploity samotní objevitelé chyby, občas někdo jiný. Exploity jsou pak využívány k prolamování se do počítačů a sítí a výrazně zvyšují nebezpečí na internetu. Culp ve svém textu zmiňuje Code Red, Li0n, Sadmind, Ramen a Nimdu jako příklad škodlivého kódu, vzniklého na základě kódu, který výzkumníci zveřejnili jako demonstraci toho, jak nějaká díra funguje.
Nepřátelé úplného zveřejňování argumentují, že zveřejňování detailů děr více škodí než prospívá, vyzbrojujíc zločince nástroji, které použijí k napadání systémů. Tvrdí, že pro bezpečnost je nohem lepší, když zůstanou detaily děr utajené.
Odpovědí obhájců odpovídají, že tento argument mlčky předpokládá, že díru vždy objeví první výzkumníci, což samozřejmě není pravda. Někdy byly díry známy útočníkům (nebo se o nich šuškalo v "podzemí") měsíce nebo i roky, než se zpráva donesla k výrobci. Čím dřív je díra zveřejněna a zazáplatována, tím lépe. Návrat k utajování chyb by přinesl pouze návrat chování výrobců "neopravovat, zatloukat, zatloukat, zatloukat".
Stručně lze shrnout, oč tu běží: Převyšují výhody zveřejnění informací o útoku na nevýhodou, že se o nich dozví nepřítel? Měli bychom se povrch odhalení snažit zmenšit omezováním dostupnosti informací o děrách, nebo zveřejňováním, které donutí výrobce okamžitě záplatovat?
Za uplynulých osm let jsem se poučil, že úplné zveřejňování je spíše ku prospěchu věci. Od té doby, co se stalo normálním zveřejňovat, počítačový průmysl se změnil - místo ignorování bezpečnosti a popírání chyb dnes firmy berou bezpečnost natolik vážně, že se občas snaží vytvářet produkt bezpečný už od počátku, opravovat chyby před zveřejněním. Jen minimum chyb je nejprve známo útočníkům, kteří tak mohou udeřit naprosto bez varování. Informace už nejsou dostupné jenom úzkým okruhům výzkumníků a hackerů. Informace o děrách jsou dostupné komukoli.
Tato rovnost je důležitá. Pokud díra existuje a vy o ní nevíte, rozhodujete na základě neúplných dat. Nakonec vše vyjde najevo, povrch odhalení vzroste, ale nekontrolovatelně, neznámým způsobem, neznámo kdy. Můžete jenom doufat, že zlí hoši na to nepřijdou dřív, než hodní hoši díru zalepí. Úplné zveřejňování znamená, že informace dostanou všichni najednou a mohou se podle toho zařídit.
Je nutné zveřejňovat podrobné a úplné informace. Pokud výzkumník zveřejní pouze vágní prohlášení o existenci chyby, výrobce může prohlásit, že chyba není reálná. Pokud výzkumník zveřejní přesné popisy a detaily bez útočného kódu, výrobce může prohlásit, že chyba je pouze teoretická. Zbývá jediný způsob, jak zajistit, že výrobce musí reagovat - zveřejnit detaily jak ve formě srozumitelné jak pro člověka, tak pro počítač. (Vina Microsoftu je v používání obou těchto praktik, využití PR prostředků pro popírání existence a zpochybňování dopadu děr, dokud jejich reálnost není prokázána exploitem. ). Ukázkový kód je také cesta, jak ověřit, že řešení výrobce skutečně díru opravuje.
Volný tok informací, jak popisných, tak demonstračního kódu, je životně důležitý pro bezpečnostní výzkum. V uplynulých deseti letech výzkum a vývoj neobyčejně rozkvetl do značné míry zásluhou úplného zveřejňování. Možnost publikovat výsledky zkoumání přispívá k větší bezpečnosti všech. Bez zveřejňování se lidé nemohou učit z cizích chyb a jsou odsouzeni dělat stejné chyby znovu a znovu. Pokud chceme zlepšovat bezpečnost počítačů a sítí, zveřejňování je nezbytné.
Zkušenosti s utajováním chyb
Problémy, jež přináší utajení chyb, jsou patrné v průmyslu ochrany autorských práv. DCMA zakotvil paradigma utajení informací o chybách v zákoně. Ve většině případů je v USA nelegální zveřejňovat informace o chybách a nástroje k prolomení protipirátské ochrany. Výzkumníci jsou zastrašování a tlačeni k utajování své práce. Chyby jsou tajné. Výsledkem je moře nebezpečných systémů, jejichž vlastníci se schovávají za zákon s nadějí, že nikdo nepřijde na to, jak špatné ty systémy ve skutečnosti jsou.
V konečném důsledku se zákazník nemůže inteligentně rozhodnout. Například - před nějakou dobou výzkumník Niels Ferguson našel vážný problém v HDCP Digital Video Encryption Scheme od Intelu, ale odmítl publikovat detaily, vzhledem k obavám ze stíhání podle DCMA. Reakce Intelu připomněla staré "dobré" časy tajení chyb - Intel vyhlásil, že chyba je "teoretická" a jejich systém je stále bezpečný. Představte si, že plánujete koupit onen systém - podle čeho budete rozhodovat? Nemáte žádné skutečné informace, musíte věřit buď Intelu, nebo Fergusonovi.
Jiný příklad - před nějakou dobou se objevil release Linuxového kernelu bez obvyklých podobných informací o bezpečnosti operačního systému. Jako důvod, proč neuvádějí detaily, vývojáři zmínili obavy z DCMA. Představte si, že hodnotíte operační systémy - jste si jistější bezpečností Linuxového kernelu od doby, kdy nemáte k disposici žádné podobnosti?
Úplné zveřejňování a zodpovědnost:
Culp v jednom bodě mluví o zodpovědnosti. (Samozřejmě se Scott vyhýbá "mea Culpa") Cílem je zlepšit bezpečnost, nikoli vyzbrojit útočníky. "Easy-to-use hackovací nástroje" s klikacím rozhraním, připravené pro takyhackery, způsobují spoustu škod. Existuje rozdíl mezi zodpovědným a nezodpovědným zveřejňováním, i když jej není vždy jednoduché určit. Několik přibližných návodů na to ale mám.
Zaprvé, jsem proti rozsévání strachu. Zveřejňování děr, pro které nejsou žádné důkazy, je špatné. Zveřejňování děr stylem mnoho povyku a málo reálných dopadů je špatné. Zveřejňování děr v klíčových systémech které nemohou být snadno opraveny a kde může mít zneužití závažné následky (např. systém řízení letového provozu), je špatné.
Za druhé, věřím na upozorňování výrobce s předstihem. CERT to dovedl do krajnosti, občas měl výrobce na opravu roky. Rád bych, aby výzkumník sdělil výrobci, že chybu zveřejní za několik týdnů a dodržel to. V současnosti dává CERT výrobcům 45 dní, ale předplatitelům poskytne informace okamžitě. Microsoft doporučuje 30 denní dobu hájení. V teorii je taková myšlenka pěkná, ale vytvoření zvláštní skupiny "zasvěcených" přináší samo o sobě další problémy.
Za třetí, souhlasím s Culpem, že je nezodpovědné, možná zločinné, rozšiřovat "easy-to-use" exploity. Reverse engeneering bezpečnostních systémů, hledání děr, psaní článků o nich a dokonce i psaní ukázkového kódu prospívá výzkumu, pomáhá nám navrhovat chytřejší systémy. Rozšiřování útočných pomůcek nás pouze činí zranitelnějšími. Rád bych měl například možnost "pohovořit si" s lidmi, kteří píší virus creation kity. Mají se z čeho zodpovídat.
Hranice ale není ostrá - některé nástroje umožňují stejně dobře dobré i zlé využití a občas je rozdíl pouze v tom, jak se to podá. Dan Farmer byl proklínán za uveřejnění SATANa. Dnes jsou nástroje pro zhodnocení děr běžnou pomůckou. Nástroje pro vzdálenou správu vypadají jako Back Orifice (přestože toho umějí méně). L0pthCrack je hackerský nástroj pro prolomení slabých hesel jako přípravy na útok, ale LC3.0 je prodáván jako pomůcka administrátora pro odhalení slabých hesel. A program kvůli kterému byl uvězněn Dmitry Sklyarov má i legitimní využití. Ve skutečnosti se většina nástrojů dá využít oběma způsoby a věřím, že je lépe, když kdo je potřebuje, informace má, i když to znamená, že ti špatní je dostanou taky.
Pozornost si zaslouží i živobytí výzkumníka. Zveřejnění díry je často hrou o publicitu, výzkumník se snaží dostat své jméno do novin. Většinou k tomu má vlastní důvody - je konzultantem v oboru bezpečnosti, zaměstnanec společnosti, která prodává bezpečnostní produkty nebo služby a podobně. Jsem trochu otrávený ze společností, zveřejňujících díry, jen aby podpořily vlastní produkt. Nealtruistické důvody zveřejnění ale samozřejmě neznamenají, že informace nemá hodnotu.
Líbí se mi přístup "buď částí řešení, ne částí problému". Výzkum je částí řešení, stejně jako přesvědčování výrobců, aby díry záplatovali. Šíření strachu je částí problému. Předávání útočných nástrojů děckám je částí problému.
Díry existují a budou existovat, ale...
Především by žádné takové otázky nevznikaly, kdyby byly programy dobře napsané. Bezpečnostní díry vznikají z programátoských chyb. Buď úplných přehlédnutí, které měl někdo odchytit a odstranit je, například typu přetečení zásobníku, nebo z nedostatku porozumění interakcím v komplexním kusu kódu. Kdyby nebyl software děravý, bylo by po problému, příčinou neutěšeného stavu je prostě pochybná kvalita software.
Je pravda, že výrobci produkují šmejdy, ale obrovská komplexnost moderních programů a sítí znamená, že nějaké díry tu budou vždycky. Dokonce spousta děr. V každém větším programu je díra. Pokaždé, když Microsoft představuje novou verzi operačního systému, ujišťuje, jak důkladné bylo testovaní a jak je nový systém bezpečný. Pokaždé je v novém systému více děr, než bylo ve starém. Nevěřím, že se to brzo změní.
Výrobci neberou bezpečnost dostatečně vážně, neboť je k tomu nic zásadního nenutí, a pokud na bezpečnost kašlou, nemá to pro ně nepříjemné důsledky. Už dlouho tvrdím, že na software by se měly vztahovat stejné zákony o záruce a odpovědnosti prodejce, jako na cokoli jiného. Až k tomu dojde, přestanou výrobci o bezpečnosti plkat a začnou se o ni opravdu starat. Do té doby je úplné zveřejňování jediná možnost, jak je donutit k zodpovědnému chování.
Motivace Microsoftu pro prosazování utajení chyb je zřejmá - než řešit problémy nebo psát programy s ohledem na bezpečnost od začátku, je pro ně jednoduší informace o (ne)bezpečnosti zadupat do země. Mocný a stálý proud zpráv o děrách v MS software donutil mnoho lidí k zamyšlení, jak to bude v budoucnu. A když analytici jako Gartner doporučují opustit platformu MS IIS vzhledem k nebezpečnosti, Microsoftu připadá, že dávat svým zákazníkům méně bezpečnostních informací by prospělo prodeji.
Utajování chyb je životaschopnou normou, pouze pokud by se výrobci řídili principy řízení kvality W. Edwarda Deminga. Čím déle není chyba opravena, tím větší problémy způsobí. A protože počet systémů na internetu roste, čím déle není záplata, tím větší povrch odhalení. Kdyby tomu softwarové společnosti věřily a řídily se tím, byl by to dobrý argument pro utajování chyb. Historie ovšem ukazuje, že tak to nedopadne. Přečtěte si Culpovu úvahu - neříká "Hej, lidi, pokud jste našli chybu, pošlete mi jí a já se postarám, aby byla švihem opravená." Culp brojí proti zveřejňování děr a žádá výzkumníky, aby si detaily nechali pro sebe. Hrozí, že "výrobci nebudou mít jinou možnost, než najít jiné způsoby ochrany svých zákazníků". Ať už tím míní cokoli, je to přístup, který činí z úplného zveřejňování chyb jediný reálně fungující způsob, jak omezit dobu zranitelnosti systémů.
Culp přirovnává zveřejňování děr k volání "Hoří!" v přeplněném divadle. Zapomíná však dodat, že tu skutečně hoří. Díry existují nezávisle, obviňovat ty, kdo je zveřejňují, je stejné, jako obvinit osobu, která si první všimla plamenů. Objevitelé chyb je nevytvářejí, díry jsou v programech díky programátorům a ti je také musí opravovat. Každý dělá chyby a ty jsou přirozené v tom smyslu, že se nevyhnutelně stávají. Což ale naprosto nepředstavuje omluvu pro předstírání, že jsou způsobeny jakousi neovlivnitelnou vyšší mocí a že pomůže, když se na ně vykašleme.