Zabezpečení pomocí nejasností je princip používaný k zajištění bezpečnosti v různých oblastech lidské činnosti. Základní myšlenkou je skrýt vnitřnosti systému nebo implementace, aby byla zajištěna bezpečnost.
Systém, který spoléhá na „zabezpečení prostřednictvím nejasností“, může mít existující nebo domnělé zranitelnosti , ale jeho vlastníci nebo vývojáři se domnívají, že pokud chyby nejsou známy, útočník je nebude schopen odhalit. Systém může také využívat zabezpečení prostřednictvím utajení jako jednu z vrstev ochrany systému, protože poskytuje čas vývojářům systému na opravu nalezené zranitelnosti, zatímco zveřejnění produktů a verzí z nich činí hlavní cíl pro zneužití zjištěných zranitelností v těchto produktech a verze. Prvním krokem útočníka je obvykle shromažďování informací, což je úkol ztížený používáním zabezpečení prostřednictvím nejasností.
Stávající oficiální literatura o bezpečnosti prostřednictvím nejasností je poměrně řídká. Knihy bezpečnostního inženýrství odkazují na Kerckhoffsův princip z roku 1883, pokud se na něco vůbec vztahují.
V oblasti práva Peter Swire psal o kompromisu mezi „bezpečností prostřednictvím nejasností je iluze“ a názorem armády, že „fámy potápějí lodě“ a jak konkurence ovlivňuje pobídky k odhalení.
Princip zabezpečení prostřednictvím nejasností byl samozřejmostí v kryptografické práci v dobách, kdy v podstatě všichni dobře informovaní kryptografové pracovali pro národní zpravodajské agentury, jako je Národní bezpečnostní agentura . Kryptografové nyní často pracují na univerzitách, kde výzkumníci publikují mnoho nebo dokonce všechny své výsledky a veřejně testují návrhy jiných lidí, nebo v soukromém sektoru, kde jsou výsledky častěji kontrolovány patenty a autorskými právy než utajením, takže princip částečně ztratil svou dřívější popularitu. Například PGP je vydán jako zdrojový kód a je obecně považován (pokud je používán správně) za kryptosystém vojenské úrovně.
Uvádíme argumenty ve prospěch použití principu. Ačkoli je špatný nápad vytvořit obranu systému, která se opírá pouze o princip zabezpečení prostřednictvím utajení, použití tohoto principu k utajení některých detailů systému může být chytrou taktikou v rámci vrstveného bezpečnostního systému. Když například jeho tvůrci objeví zranitelnost systému , zabezpečení prostřednictvím nejasností může být dočasnou překážkou pro útočníky, dokud nebude zranitelnost opravena. V tomto případě je účelem použití principu krátkodobě snížit riziko zneužití zranitelnosti v hlavních komponentách systému.
Představte si počítačovou síť, která obsahuje známou chybu zabezpečení. Vzhledem k tomu, že útočník nemá žádné informace o konkrétním zařízení systému, musí se rozhodnout, zda tuto chybu zabezpečení použije či nikoli. Pokud je systém nakonfigurován tak, aby detekoval tuto chybu zabezpečení, zjistí, že je napaden, a může reagovat buď uzamčením systému, dokud nebudou mít správci možnost reagovat, nebo sledováním a sledováním útoku útočníka nebo odpojením útočníka. . Podstatou použití principu v této situaci je, že útočník nemůže rychle získat potřebné informace o systému, aby se mohl pevně rozhodnout o poměru rizika zablokování při pokusu o zneužití zranitelnosti a možné odměny v případě o úspěšném útoku. Také v důsledku nedostatku potřebných informací o struktuře systému nemůže jednoznačně vybrat tu část systému, na kterou je potřeba zaútočit především.
Další strategie pro použití principu zahrnuje existenci dvojité vrstvy zranitelností, které jsou obě drženy v tajnosti. Tvůrci systému zároveň umožňují „únik“ jedné ze zranitelností. Cílem je poskytnout útočníkovi falešný pocit jistoty, že obrana byla překonána a vyhrál. Může být například použit jako součást návnady (ruský ekvivalent termínu je „lov na živou návnadu“).
Argumenty proti principu bezpečnosti prostřednictvím nejasností sahají zpět ke Kerckhoffsově principu , který v roce 1883 předložil Auguste Kerckhoffs . Tento princip říká, že návrh kryptografického systému by neměl vyžadovat utajení a neměl by způsobovat nepříjemnosti, pokud se dostane do rukou nepřítele. Vývojáři by měli předpokládat, že celý návrh bezpečnostního systému je útočníkům znám, s výjimkou kryptografických klíčů (bezpečnost kryptografického systému spočívá výhradně v kryptografickém klíči). V roce 1940 Claude Shannon formuloval tento princip jako „nepřítel zná systém“.
Čím větší je počet bodů možného kompromisu obsažených v systému, tím je pravděpodobnější, že strategie útoku na jeden z těchto bodů existuje nebo bude vyvinuta. Systémy, které obsahují strukturní nebo provozní tajemství, které jsou také body možného kompromisu, jsou méně bezpečné než podobné systémy bez těchto bodů, pokud je vynaloženo úsilí potřebné k získání zranitelnosti v důsledku odhalení struktury projektu nebo způsobu provozu, stejně jako snaha využít tuto zranitelnost, méně úsilí vyžaduje získání tajného klíče. Úroveň zabezpečení systému je omezena na úsilí potřebné k využití této chyby zabezpečení.
Pokud si někdo například nechává pod rohožkou náhradní klíč, pro případ, že jsou dveře zamčené zvenčí, spoléhá se na bezpečnost prostřednictvím nejasností. Teoretická bezpečnostní zranitelnost spočívá v tom, že by se někdo mohl vloupat do domu otevřením dveří tímto náhradním klíčem. Vzhledem k tomu, že lupiči často znají zamýšlené úkryty, bude majitel domu vystaven většímu riziku vloupání tím, že klíč ukryje, protože úsilí potřebné k nalezení klíče bude pravděpodobně menší než úsilí potřebné k vloupání (např. vloupáním) jiným způsobem, například přes sklo. Majitel přidal do systému zranitelnost – skutečnost, že vstupní klíč je uložen pod podložkou – a lze ji velmi snadno uhodnout a zneužít.
V minulosti několik softwarových algoritmů nebo systémů se skrytými interními detaily vidělo, že tyto interní detaily byly zveřejněny. K náhodnému odhalení došlo při několika příležitostech, například ve známém případě GSM byla důvěrná dokumentace týkající se šifry přenesena na University of Bradford, aniž by byly uloženy obvyklé požadavky na důvěrnost [1] . Kromě toho byly v softwaru objeveny a zneužity zranitelnosti, i když vnitřní detaily zůstaly utajeny. Tyto a další příklady dohromady ukazují, že je obtížné nebo neefektivní udržet podrobnosti o systémech a algoritmech v tajnosti.
Zabezpečení prostřednictvím nejasností není považováno za vhodný inženýrský přístup k zabezpečení systému, protože je v rozporu se zásadou „KISS“ . Národní institut pro standardy a technologie výslovně doporučuje používat zabezpečení prostřednictvím utajení ve více než jednom dokumentu. Podle NIST by „bezpečnostní systém neměl záviset na utajení implementace nebo jejích součástí“ [2] .
Panuje všeobecná shoda, dokonce i mezi těmi, kdo obhajují bezpečnost prostřednictvím nejasností, že princip „bezpečnost prostřednictvím nejasností“ by nikdy neměl být používán jako primární bezpečnostní opatření. Toto je v nejlepším případě sekundární opatření a odhalení nejednoznačnosti by nemělo vést ke kompromisům .
Hodnota použití principu při vytváření otevřeného nebo uzavřeného softwaru je velmi odlišná a nejednoznačná. Zvažte proces vytváření softwaru s otevřeným zdrojovým kódem. Vývojáři se nejčastěji zajímají spíše o vytváření nového kódu než o analýzu zranitelností existujícího kódu. Vzhledem k tomu, že vytvoření softwaru s otevřeným zdrojovým kódem je dobrovolné úsilí, je obecně kladen menší důraz na bezpečnost, než kdyby jednou z povinností autorů byla analýza zabezpečení programu. Na druhé straně existuje Linusův zákon , který říká, že „s dostatkem očí vyplavou brouci na povrch“, navrhuje zvýšenou bezpečnost algoritmů a protokolů, jejichž popis je zveřejněn. Více lidí si může prohlédnout detaily takových algoritmů, identifikovat chyby a opravit je dříve. Zastánci tohoto názoru věří, že četnost a závažnost důsledků kompromisu bude menší než u proprietárního nebo tajného softwaru. Z toho všeho můžeme usoudit, že v případě vytváření softwaru s otevřeným zdrojovým kódem bezpečnost přímo závisí na popularitě programu, to znamená, že čím vyšší je popularita, tím více dobrovolníků analyzuje kód programu a tím vyšší je pravděpodobnost nalezení zranitelnosti. v něm. Na podporu toho uvedeme příklad, že zdrojový kód Linuxu má 0,17 chyb na tisíc řádků zdrojového kódu [3] , zatímco uzavřený komerční software má v průměru 20–30 chyb na 1000 řádků zdrojového kódu.
U uzavřeného softwaru je při jeho tvorbě věnována velká pozornost bezpečnostní analýze kódu, která zvyšuje spolehlivost systému. Na druhou stranu, protože počet vývojářů je často menší než v případě open source softwaru, pravděpodobnost nalezení existujících zranitelností v programu klesá. Operátoři a vývojáři/výrobci systémů, kteří se spoléhají na zabezpečení prostřednictvím nejasností, mohou navíc zamlčovat skutečnost, že v jejich systému byla nalezena zranitelnost, aby se vyhnuli snížení důvěry v jejich služby nebo produkty, a tím se vyhnuli snížení jejich konkurenceschopnosti, a tím vštěpovali nepravdivé informace. důvěru v bezpečnost svých výrobků. Přinejmenším již v 60. letech se vyskytly případy, kdy společnost odložila vydání oprav a záplat a upřednostnila svá podniková pravidla před obavami nebo riziky zákazníků.
Vývojový inženýr Sean O`Neil je známý jako tvůrce poměrně flexibilního šifrovacího algoritmu EnRUPT . V úzkých kruzích kryptoanalytiků je také znám jako člověk, který se podílel na prolomení tajné šifry v čipech Mifare RFID . Tyto čipy tvoří základ dopravních karet, elektronických průkazů a dalších bezkontaktních čipových karet , které se dnes po celém světě počítají na miliardy.
V červenci 2010 se na internetu objevila zpráva, že Seanu O'Neillovi a skupině kolegů se podařilo prozradit zdrojové kódy programů, které chrání známou službu IP telefonie Skype . Konkrétně se jim podařilo získat zdrojové kódy pro proprietární šifrovací protokoly pro službu Skype. Sean O'Neill ve svém blogu dává odkaz na stránku cryptolib.com , kde se podle něj obdržené kódy nacházejí.
Podle vlastních slov se Sean O'Neill a jeho kolegové reverzní inženýři ve skutečnosti zabývají bezpečnostními problémy Skype již dlouhou dobu. Vzhledem k tomu, že byli specialisty na analýzu binárních kódů, dokázali program z binárních kódů poměrně rychle obnovit, a to navzdory skutečnosti, že programátoři Skype používali velmi intenzivní obfuskaci . Právě proto, že vývojáři Skypu intenzivně využívali mlžení, málokomu se dříve podařilo obnovit program z binárních kódů a ti, kteří to dokázali, nezveřejňovali zdrojové kódy, protože vypadaly odstrašující.
Nakonec se Seanu O'Neillovi podařilo vytvořit ekvivalentní kód, který funguje jako Skype ve všech hlavních režimech, ale který je napsán bez použití kódu Skype. Přestože byl kód vytvořen soukromě, po několika týdnech se mu podařilo uniknout na internet a okamžitě se stal nástrojem pro spammery , kteří posílali zprávy prostřednictvím služby rychlých zpráv Skype. Sean O'Neill, který se cítil zodpovědný za to, co se děje, se rozhodl prozradit hlavní tajemství komunikačního protokolu Skype – zmatený rozšiřující algoritmus pro vektor inicializace šifry RC4 . Přesněji řečeno, cryptolib.com má program C , který lze použít k dešifrování provozu služeb mezi klienty Skype a systémovými supernody. Navzdory skutečnosti, že k šifrování dat služby se používá metoda šifrování streamu RC4, neexistují žádné tajné klíče , které by bylo třeba prolomit. Jediné, co skutečně existuje, je neustálá transformace, která mění čitelné informace na nečitelné. Smyslem tohoto algoritmu bylo, že žádné jiné osoby nemohly vyvíjet aplikace kompatibilní se Skype, protože bez znalosti algoritmů pro přenos servisních dat není možné takové aplikace vytvářet. Byla to obrana výhradního vlastnictví systému Skype.
Přestože jsou tyto akce hacknuty a zveřejněny, nijak nepoškozují a neprozrazují důvěrnost zpráv a souborů, které jsou ve službě Skype zasílány mezi uživateli. Hackování bylo nasměrováno pouze na servisní kanál, přes který jsou přenášeny vyhledávací dotazy uživatelů, jejich profily, seznamy kontaktů a tak dále. Jde o jeden z nejjasnějších příkladů toho, jak i velké společnosti využívají ve svých produktech princip „zabezpečení pomocí nejasností“ a že toto jednání může způsobit jak obrovské finanční škody, tak snížení důvěryhodnosti produktu.
Existuje mnoho příkladů zabezpečení prostřednictvím nejasností v produktech společnosti Microsoft . Některé z nich mohou používat správci systému, některé vývojáři softwaru. Všechny jsou zaměřeny na snížení rizika zranitelnosti skrytím této zranitelnosti. Některé z nich nemusí mít pozitivní účinek, ale to není důkazem toho, že zabezpečení pomocí nejasností nefunguje.
Jedním z použití principu „zabezpečení prostřednictvím utajení“ je možnost skrýt písmena jednotek v Průzkumníkovi Windows. Tento postup se často používá ve školních počítačových učebnách, internetových kavárnách nebo na jiných místech, kde je potřeba vytvořit podmínky, aby uživatel mohl počítač používat, ale nemohl ukládat data na pevný disk. Stojí však za zmínku, že většina aplikací stále umí ukládat data na pevný disk, což značně snižuje hodnotu tohoto bezpečnostního opatření.
Systém Windows také často implementuje metodu pro zakázání sdílených síťových prostředků pro správu (například C$, Admin$ atd.). Základem myšlenky je, že tento postup by měl zabránit vetřelcům ve vzdáleném připojení k počítači. Útočník s účtem správce se však může vzdáleně připojit k prostředkům správy. Stejně jako u předchozího postupu však organizace hlásí, že deaktivace administrativních zdrojů snižuje množství malwaru v sítích.
Možnost Povolit operátorům serveru plánovat úlohy vám umožňuje plánovat úlohy pro uživatele ve skupině Server Operators. Mějte však na paměti, že provozovatelé serverů se mohou stát správci mnoha různými způsoby, takže bránit jim v plánování úloh není velký problém. Tato možnost je však preferována mnoha organizacemi, protože umožňuje jejich specialistům být operátory namísto administrátorů, což snižuje pravděpodobnost, že specialisté nechtěně zničí server.
Dalším příkladem je přejmenování účtu správce s relativním identifikátorem ( RID ) 500 na něco neznámého, což často doporučují bezpečnostní experti a také některé pokyny společnosti Microsoft. Smyslem této operace je, že útočník nebude znát jméno skutečného administrátorského záznamu. Nevýhodou této metody je, že účet správce má vždy RID 500 a každý uživatel může z RID zjistit název účtu správce.
Uveďme příklad použití mlžení. Obfuskace je technika zaměřená na zamlžení zdrojového nebo spustitelného kódu programu, jejímž účelem je zachovat provozuschopnost, ale takový kód bude obtížné analyzovat.
Obfuskaci lze použít jak na úrovni algoritmu, tak na úrovni zdrojového kódu programu a dokonce i na úrovni kódu sestavení . Například generování zmateného kódu assembleru lze dosáhnout pomocí speciálních kompilátorů . Takové kompilátory mají tendenci znovu vytvářet kód pomocí nezdokumentovaných funkcí běhového prostředí programu. Existují také speciální programy určené k zamlžování kódu – obfuscátory.
Některé postupy pro znejasnění programového kódu:
Příklad č. 1 (v jazyce C )
Zdrojový kód před zmatkem:
int POCET = 100 ; float TAX_RATE = 0,2 ; for ( int i = 0 ; i < COUNT ; i ++ ) { daň [ i ] = orig_price [ i ] * TAX_SAZBA ; cena [ i ] = orig_price [ i ] + daň [ i ]; }Po zmatku:
for ( int a = 0 ; a < 100 ; a ++ ) { b [ a ] = c [ a ] * 0,2 ; d [ a ] = c [ a ] + b [ a ];}Příklad č. 2 (v Perlu )
Zdrojový kód před zmatkem:
můj $filtr ; if ( @pod ) { my ( $buffd , $buffer ) = File::Temp:: tempfile ( UNLINK => 1 ); tisk $buffd "" ; vytiskni $buffd @pod nebo zemři "" ; tisk $buffd zavřít $buffd nebo zemřít "" ; @found = $buffer ; $filtr = 1 ; } exit ; sub is_tainted { my $arg = shift ; my $nada = substr ( $arg , 0 , 0 ); # místní $@ nulové délky ; # zachovat verzi volajícího eval { eval " #" }; návratová délka ($@) != 0; } sub am_taint_checking { my ( $k , $v ) = každé %ENV ; return is_tainted ( $v ); }Po zmatku:
sub z109276e1f2 { ( my $z4fe8df46b1 = posun ( @_ ) ) ; ( my $zf6f94df7a7 = substr ( $z4fe8df46b1 , ( 0x1eb9 + 765 - 0x21b6 ) , ( 0 × 0849 + 1465 - 0x0e02 ) ) ) ; místní $@ ; eval { eval ( ( "" ) ) ; } ; return ( ( délka ( $@ ) != ( 0x26d2 + 59 - 0x270d ) ) ); } můj ( $z9e5935eea4 ) ; if ( @z6a703c020a ) { ( my ( $z5a5fa8125d , $zcc158ad3e0 ) = Soubor::Temp:: tempfile ( "" , ( 0x196a + 130 - 0x19eb ) ) ) ; tisknout ( $z5a5fa8125d "" ) ; ( vytisknout ( $z5a5fa8125d @z6a703c020a ) nebo zemřít ( ( ( ( "" . $zcc158ad3e0 ) . " \ x3a \ x20 " ) . $! ) ) ) ; tisknout ( $z5a5fa8125d "" ) ; ( zavřít ( $ z5a5fa8125d ) nebo zemřít ( ( ( " " ) ) ) ; ( @ z8374cc586e = $ zcc158ad3e0 ) ; ( $ z9e5935eea4 = ( 0 × 1209 + 1039 - 0 sub5 d ) 2 × 161 ; 3 můj ( $z0f1649f7b5 , $z9e1f91fa38 ) = každý ( %ENV ) ) ; return ( z109276e1f2 ( $z9e1f91fa38 ) ) ; }Toto jsou příklady tzv. zamlžování na vysoké úrovni. Pokud je cílem skrýt kód viru , pak se ve většině případů používá nízkoúrovňové zmatnění (pomocí příkazů assembleru) a také automatické obfuskační programy jako Afx!AVSpoffer, EPProt a PETools.
Varianta základního principu je založena na charakteristikách málo známých programů, které při použití snižují pravděpodobnost odhalení zranitelnosti při náhodných a automatických útocích. Tento přístup má mnoho jmen, přičemž „bezpečnost prostřednictvím menšiny“ je nejčastější. Existují také pojmy „bezpečnost díky vzácnosti“, „bezpečnost díky neoblíbenosti“, „bezpečnost díky nezájmu“. Tento princip se nachází především ve vysvětlení, proč počet známých zranitelností nalezených v programu pro široký segment trhu bývá vyšší než lineární vztah implikovaný podílem programu na trhu, ale tento podíl je faktorem při výběru programu pro některé velké organizace. . Princip menšinového zabezpečení může být užitečný pro organizace, které nepodléhají cíleným útokům a plánují produkt používat dlouhodobě. Identifikace nových zranitelných míst v programu vedoucím na trhu je však obtížnější než v méně známých produktech, protože mnoho zranitelností již bylo identifikováno díky širokému rozšíření programu, takže program s velkým podílem na trhu je pro organizace vhodnější. pod neustálým útokem. Problém je také komplikován skutečností, že odhalení nových zranitelností v obskurním softwaru dělá ze všech uživatelů tohoto softwaru cíl útoku. U softwaru, který má vedoucí postavení na trhu, je pravděpodobnost, že se nové zranitelnosti v nich nechtěně stanou cílem útoků, ještě vyšší.
Obecně problém úzce souvisí s principem známým jako „bezpečnost prostřednictvím rozmanitosti“ – přítomností široké škály obskurních programů, zjevně rozmanitějších než nabídka lídra na trhu v jakémkoli typu programu, což snižuje rizika náhodného Záchvat.
Argument ve prospěch principu zabezpečení pomocí menšiny je v rozporu s principem pozorovaným v přírodě ve scénáři predátor-kořist. V tomto scénáři je zásada „jeden muž není válečník“ v rozporu se zásadou „bezpečnosti prostřednictvím menšiny“. Mezi například lvem lovícím gazelu a provozem automatizovaného systému jsou však některé velmi podstatné rozdíly. Většina obětí softwarového hackování není v žádném případě přímým cílem útoku.
Jedním typem zabezpečení podle menšinového principu je zabezpečení zastaráváním. Tento princip může být například založen na použití starších síťových protokolů (jako je IPX , nikoli TCP / IP ), což snižuje možnost útoků z internetu .