Security through obscurity
Security through obscurity (bezpečnost skrze neznalost) je v informatice označení používané v počítačové bezpečnosti. Používá utajení (například návrhu, implementace, atd.) tím, že používá nestandardní konstrukce či postupy (např. vlastní algoritmy pro šifrování nebo hashování, vlastní úpravy všeobecně uznávaných algoritmů nebo ukládání přístupových údajů tak, že jsou veřejně přístupné, pouze jsou nějak zamaskované, apod.) k zajištění bezpečnosti. Systém využívající toho principu však může obsahovat programátorské chyby i bezpečnostní rizika, ale jeho tvůrce věří, že pokud tyto bezpečnostní chyby nejsou známy a např. přístupové údaje jsou jen těžko zjistitelné, tak je nepravděpodobné, že by na ně útočník přišel. Opačný přístup se nazývá Secure by design (bezpečné podle návrhu). Velká část reálných projektů obsahuje kombinaci obou dvou přístupů.
Popis
Bezpečnost skrze utajení je důvěra v to, že jakýkoliv systém může být bezpečný po dobu, kdy nikomu kromě lidí, kteří ho implementovali, není dovoleno zjistit nic o jeho vnitřních mechanismech. Například schovávání hesla do binárního souboru, či skriptu s tím, že předpokládáme, že ho nikdy nikdo nenajde, je základní případ bezpečnosti skrze utajení.
Tento přístup je upřednostňován většinou byrokratických organizaci (vlády, armádní složky a průmyslové podniky) a bývala využívána jako hlavní prostředek „pseudobezpečnosti“ v počítačových systémech.
S rozšířením open source systémů, síťových připojení, většímu obecnému pochopení programovacích technik a rozšíření relativně výkonných výpočetních systémů, se značně snížila bezpečnost těchto systémů. Základem vždy bylo, že váš systém musíte znát jen do té míry, jak je nutné, tedy co nejzákladněji. Pokud uživatel neví, jak provést nějakou nebezpečnou operaci, pak neexistuje nebezpečí. Ovšem takto je to pouze teoreticky. Bezpečnost se opírá o důvěru v úzký okruh lidí, například zaměstnanců. Pokud tento zaměstnanec odejde pracovat jinam, například kvůli lepšímu platu, toto tajemství odchází s ním. A jakmile jsou jednou tyto tajné informace vyzrazeny, systém přestává být bezpečný.
V dnešní době také čím dál víc běžných uživatelů potřebuje znát detaily, jak daný systém funguje, čímž se opět snižuje účinnost bezpečnosti skrze utajení. I uživatelé mají dnes více pokročilých znalostí, jak pracují operační systémy atd. a dokáží si domyslet tajné věci, čímž vlastně obcházejí to, že uživatel ví, jen to nejzákladnější, co je potřeba. Což je základní myšlenka bezpečnosti skrze utajení a systémy tedy přestávají být bezpečné.
Ukládání hesel do stínových souborů (v Linuxu např. soubor s hesly /etc/shadow
, ke kterému má přístup pouze root) je někdy vykládáno jako použití bezpečnosti skrze utajení. Ale to není pravda, protože bezpečnost skrze utajení je striktně vázána na utajení algoritmů nebo technik. V tomto případě se ale jedná o bezpečnost skrze zakázání přístupu k těmto datům.
Pro a proti
Bezpečnost skrze utajení způsobuje velké kontroverze, které budou dále rozebrány jako argumenty pro a proti jejímu používání.
Proti
Známý bonmot říká, že každý dokáže navrhnout tak silnou šifru, kterou sám nedokáže rozluštit.[zdroj?] Autor zabezpečení skrze utajení často bývá přesvědčen, že jeho řešení je nepřekonatelné, nebo je překonatelné jen s velkými obtížemi. Realita je ale často úplně jiná. Jediný způsob, jak zjistit, zda je řešení opravdu bezpečné, je otevřít způsob zabezpečení všem a nechat kohokoli, ať v něm hledá chyby. Teprve pokud v něm nikdo žádné chyby nenajde, můžeme takové řešení považovat (pro tuto chvíli) za bezpečné.
Například kryptografické systémy by neměly vyžadovat utajení, protože pokud by například útočník zjistil jak je navržen, měl by prakticky přístup ke všemu. Měl by být závislý pouze na nějakém specifickém klíči (například heslo).
Pokud například zamkneme dům a schováme klíč pod rohožku, spoléháme vlastně na bezpečnost skrze utajení. Útočník se do domu může dostat schovaným klíčem, pokud ho najde. My spoléháme že ho nenajde. Ovšem navíc zloději většinou znají pravděpodobná místa, kam se obvykle schovává klíč. Takže je pravděpodobné, že klíč najdou a do domu se dostanou s menším úsilím, než kdyby použili jinou metodu.
Navíc v minulosti se několikrát stalo, že tajné detaily byly omylem nebo úmyslně odhaleny (například prolomení GSM šifrování, WEP a mnoha dalších pomocí reverzního inženýrství). Zjištění nějaké chyby v určitém systému může být taky předmětem obchodů na černém trhu. Chyba může být tedy už dlouho využívána ke kriminální činnosti a výrobce systému o tom nemusí vědět.
Bezpečnost skrze utajení často také znamená, že se používají slabé algoritmy. Často ani nemusí dojít k úniku algoritmu jako takového, ale daný algoritmus je možné prolomit i bez jeho znalosti. Příkladem mohou být jednoduché substituční šifry, které je možné rozluštit jen na základě statistických charakteristik jazyka – a teprve na základě šifrovaného a rozluštěného otevřeného textu zpětně odvodit přesný algoritmus, který byl použit pro zašifrování.
Linusovo pravidlo, pojmenované po Linusu Torvaldsovi, říká, že mnoho očí zmenšuje možnost výskytu chyby. Tedy pokud je kód volně k dispozici a je hodně lidí, co ho zkoumají, je velice pravděpodobné, že někdo, případně i více lidí, tuto chybu odhalí a nahlásí, tudíž bude dříve veřejně známa a opravena.
Vývojáři programů využívajících bezpečnost skrze utajení mohou navíc zatajit jim známou chybu, kvůli spokojenosti zákazníků a také finanční stránce věci. Může být velice těžké a časově a finančně náročné nějaké chyby opravit. Takže je lepší chybu zatajit, doufat, že se na ní nepřijde a vydávat svůj produkt za bezpečný.
Pro
Je velice těžké, až nemožné navrhnout naprosto dokonale bezpečný systém. I když spoléhat se pouze na bezpečnost skrze utajení je většinou velice slabá obrana, je možné použít tuto strategii v kombinaci s dalšími a tím značně snížit možnost zjištění bezpečnostních rizik. Jde vlastně o zamezení možnosti rychle zjistit možné chyby v systému a mít tedy více času na opravu vzniklých chyb.
Dále pokud o chybě víme, je možné tuto chybu použít k detekci nebo zastrašení potenciálního útočníka. Například pokud útočník zjistí v síti počítač, který nemá opravenou známou chybu, útočník se musí rozhodnout, zda této chyby využije nebo ne. Pokud by totiž tento počítač byl nastaven na detekování využití této chyby, může na to reagovat zablokování systému, monitorováním útočníka a jeho vystopováním, jeho odpojením a podobně, což také zvyšuje potřebný čas a rizika útoku.
Nicméně většina odborníků, i těch kteří jsou zastánci bezpečnosti skrze utajení, se shodne, že bezpečnost skrze utajení by nikdy neměla být použita jako hlavní bezpečnostní hledisko. V nejlepším případě jako druhé hledisko.
Dopad open source
Open source software (tj. software s otevřeným zdrojovým kódem) poskytuje veřejně své zdrojové kódy, takže nejen bezpečnost skrze utajení nepoužívá, ale ani nemůže. Avšak také může obsahovat bezpečnostní chyby (například Morrisův červ). Argumentem proti je to, že vývojáři mohou být méně důkladní při kontrole vydávaného kódu. Tato práce je totiž považována za méně zábavnou a méně oceňovanou.
Na druhou stranu přesto, že zde není finanční stimul k opravě chyb, neznamená to, že by nebyla žádná motivace opravovat. Dokonce protože jsou kódy volně k dispozici, může si každý tyto chyby opravit sám a případně tyto opravy dál distribuovat. Je těžké tento fakt dokázat, ovšem výzkumy ukazují, že open source software má více objevených chyb, ale i jejich rychlejší nalezení, rychlejší opravení a rychlejší distribuci těchto oprav. Jedna studie dokonce tvrdí, že ve zdrojovém kódu Linuxu je průměrně 0,17 chyb na 1 000 řádků kódu, naproti tomu v komerčních, non-open source programech je průměrně 20–30 chyb na 1 000 řádků.[zdroj?]
Reference
V tomto článku byl použit překlad textu z článku Security through obscurity na anglické Wikipedii.