Menu

Bezchybný operační systém

Bezchybný operační systém

Výzkumné oddělení Microsoftu představuje nový operační systém Verve. Hlavní atrakce: nemá žádné bezpečnostní mezery a běží velmi, velmi rychle…
PETR KRATOCHVÍL, JÖRG GEIGER

Každé druhé úterý v měsíci se Microsoft snaží pomocí nových aktualizací opravit ve Windows zjištěné bezpečnostní mezery. Tento postup vás však před všemi riziky neochrání – spíše připomíná klasické léčení "vnějších příznaků" pacienta. Problémem je totiž to, že naprostá většina škodlivého kódu proniká do operačního systému přes chybu "buffer overflow" – na tento způsob průniku do Windows spoléhá více než 90 procent všech útočníků!
Během útoku typu buffer overflow se útočník snaží "prolomit" prostor v paměti vyhrazený pro program tak, aby mohl manipulovat buď s jinými programy, nebo přímo s Windows. Pro opravu chyb tohoto typu Microsoft připravuje každý rok více než sto záplat. V nově vyvíjeném operačním systému Microsoftu, označovaném jako Verve, by toto číslo okamžitě kleslo na nulu.

Programovací jazyk jako riziko

Příčina toho, proč mají operační systémy takové potíže s útoky škodlivého softwaru, je skryta v použitém programovacím jazyku. Windows, Linux nebo Mac OS používají pro své základní funkce dobře známé programovací jazyky, jako je C, které už z principu nezaručují zabezpečení kódu.
Problém: Pro spuštění programového kódu v jazyce C na procesoru musí být nejprve kód přeložen kompilátorem do strojového jazyka (assembleru). Zároveň tzv. linker spojuje kód se systémovými knihovnami. Bezpečnostní mezery vznikají v obou krocích: problém může nastat, pokud překladač a linker udělají chybu, nebo v případě, že se jako chybné ukážou systémové knihovny. Navíc obvykle není vše "překládáno" z C-kódu. Pokud totiž opravdu záleží na výkonu programu, musí být část softwaru přímo naprogramována v assembleru. Nicméně ani klasický jazyk C, ani assembler nenabízí ochranu, která by umožnila ověřit bezpečnost kódu softwaru.
Příklad: Jaké hodnoty lze do proměnné v programu přiřadit (a jaké ne), to definuje samotný programátor. Pokud by například měla být proměnná celočíselná, je to nutné do kódu přesně určit. Poté by do této proměnné neměl být zadáván ani text, ani reálné číslo. Jestliže je ale v kódu chyba, útočník může například do této proměnné zadat velké reálné číslo a vytvořit přetečení vyrovnávací paměti.
Programovací jazyk je tedy před takovýmto typem útoku v bezpečí pouze tehdy, pokud je typ kontrolován při překládání programového kódu. Programovací jazyky, které toto provádí, se nazývají "typově bezpečné". Mají však podstatnou nevýhodu: dodatečná kontrola stojí hodně výkonu.

Systém, který sám kontroluje

V nově připravovaném operačním systému Microsoftu Verve se vývojářům podařilo propojit typovou bezpečnost s výkony assembleru, protože nejdůležitější součásti operačního systému jsou vytvořeny v typově bezpečném jazyce. Typově bezpečný assembler není nový vynález společnosti Microsoft, v tomto případě byl ale poprvé použit u většího projektu – u operačního systému. Verve navíc nabízí možnost prověřovat spouštěný cizí kód. Díky této možnosti Verve kontroluje kód nejen z hlediska bezpečnosti, ale navíc zajišťuje, že po spuštění nebude obsahovat žádné chyby. Bez ohledu na to, o jakou manipulaci se hacker pokusí, nelze v systému Verve vyvolat přetečení paměti…
                                                                              Technologie z OS Verve by se mohla objevit i ve Windows 8
Verve se liší od Windows a spol.i z hlediska architektury. Místo jednoho velkého jádra je zde klasické jádro doplněno o tzv. Nucleus, který má na starosti připojení k hardwaru. Na rozdíl od svého protějšku ve Windows (Hardware Abstraction Layer) Nucleus prověřuje, zda kód pro spolupráci s hardwarem neobsahuje žádné chyby. Nucleus má ale i další úkoly: například kontroluje vstup a výstup dat nebo provádí management chyb. Kromě toho je také zodpovědný za úklid. Ten zajišťuje, že program zbytečně nezabírá místo v paměti.

Spusťte software jako bezpečný kód

Samotné jádro (kernel) se tedy převážně používá pouze jako rozhraní pro programy, které chtějí založit nový thread nebo proces. Důležité je, že jak jádro, tak i samotné programy jsou v systému Verve zkompilovány pomocí typově bezpečného assembleru. Díky tomu pracuje správně a bezpečně jak systém, tak i v něm spuštěné programy.
Oddělení jádra a "sekce" Nucleus učinili vývojáři z pragmatických důvodů: v jádře jsou funkce naprogramovány pomocí bezpečného jazyka C#, zatímco pro Nucleus bylo nutné vytvořit typově bezpečný assembler. A to byl zdlouhavý a časově náročný úkol.
Verve lze označit jako úspěch, a přestože jde o vyvíjený systém, lze v něm už například spustit několik programů současně. I tak lze ještě najít u tohoto výzkumného projektu celou řadu nedostatků – stále ještě nepodporuje připojení k internetu přes protokolu TCP, chybí také například webový prohlížeč. Odvážní uživatelé ale nemusí zůstat jen u teorie a mohou si vyzkoušet Verve sami. Je pouze potřeba si nejprve zkompilovat zdrojový kód. Verve je zdarma k dispozici na open-source portálu Microsoftu – CodePlex (www.codeplex.com). Zda bude "technologie Verve" zapracována i do Windows 8 a 9, to se teprve ukáže. Pokud by ale pomohla odstranit pravidelné "záplatovací dny", byl by to rozhodně krok dobrým směrem…
AUTOR@CHIP.CZ


Aktuální software: Obvykle rychlý nebo bezpečný
Některé programovací jazyky jsou považovány za bezpečné, protože programátor může definovat, který typ hodnoty (např. text nebo číslo) musí být výsledkem výpočtu. A to je také při spuštění kódu kontrolováno, cenou za tuto kontrolu jsou však vyšší nároky na výkon – jedinou výjimkou z tohoto pravidla je typově bezpečný assembler (TAL).


Nový Verve je rychlý i s bezpečným kódem
V systému Verve jádro ovládá připojení k hardwaru. "Druhově bezpečný" assembler (TAL) umožňuje tvorbu nejen rychlých, ale i bezpečných aplikací. Nebezpečné externí programy jsou nejprve zkompilovány na TAL a teprve poté spuštěny.

BOOT LOADER - Bootuje systém
KERNEL
Výchozí bod -- Spuštění kernelu
Administrace procesů - Spuštění a kontrola programů
NUCLEUS
Výchozí bod - Spuštění Nucleusu
Správa zařízení - Ovládání hardwaru
Správa chyb - Opravuje chyby hardwaru
Vstup/výstup – Kontroluje akce uživatele
Správa paměti - Přiřazuje a čistí RAM
PROGRAM
Nebezpečný zdrojový kód. Je nejprve zkompilován
Typově bezpečný kód. Je spuštěn
HARDWARE

Foto: Vyzkoušejte si sami: Verve je k dispozici pouze jako zdrojový kód. Před vyzkoušením je tedy nutná kompilace.