Nebudu hovořit o včerejším článku, ten je i tak dost průkazný. Dnes jsem našel zmínku o blogu Thomase Ptacka, který se podíval na bezpečnostní funkce Leoparda trochu z větší perspektivy.
Sandboxing - XNU kernel nyní umožňuje definovat role aplikované na systémové volání. Můžete napsat flexibilní pravidla k tomu co který program může a nemůže dělat.
Mail.app by neměla mít možnost přidávat uživatelské účty do systému. Safari by nemělo být dovoleno nahrávat doplňky kernelu. iChatu by neměl být schopen instalovat SSH server se zadními vrátky. Lidé z bezpečnosti předpokládají, že každá aplikace má v sobě skrytou bezpečnostní chybu, která dovolí útočníkům nahrát vlastní kód do běžícího programu. S omezením přístupu na úrovni jádra i když se o to útočník pokusí, stále to nic nemusí znamenat.
Nenechte se podvést nebo naštvat dokumentací sandboxu. Leopardovy sandboxy jsou flexibilní a zajímavé. Ty velmi pravděpodobně vznikají kompilací programu ze schématu, které lze otevřít v TextEditu a je z nich patrné, že je mnoho základů pokryto, včetně SYSVIPC, BSD sysctl interface a signály.
Co je špatně?
Tři věci:
- Chybí dokumentace. Oficiálně nemůžete použít API pro zabezpečení vlastního kódu. Nemůžete číst kód Apple nebo specifikaci aby jste zjistili, jak je bezpečný.
- Současné profily jsou nedostatečné. Například Leopardí Quick Look je označována jako typický příklad pro sandbox, protože automaticky otevírá a zpracovává obsah download složky. Avšak sandbox Quick Look je omezen pouze na síťový přístup. A koho to zajímá? Quick Look může prostě instalovat trojského koně někde jinde a ten pak nebude do sandboxů zahrnut.
- Téměř nic z toho, co nejvíce potřebuje nevyužívá sandbox. Například: Mail, Safari a iChat
Výsledek
Není to jasné vítězství, ale lze to akceptovat. Sandboxy jsou lepší v mnoha ohledech než to co nabízí Visty. Apple by měl poskytnout větší nástroje pro tuto funkci stejně, jako to udělal pro DTrace a dovolit tak komunitě okolo Darwina aby vyvinula další řešení.
Mám zkušenosti z implementace SE Linuxu pod Red Hatem, který v praxi dělá podobné věci jako sandbox. Red Hatu se povedlo dát dohromady rozumná pravidla pro SE Linux až ve 2 až 3 verzi. V prvních verzí se jednalo jen o "možnost" si SE Linux zapnout. Lze tedy předpokládat, že i u Apple bude podobný vývoj následovat.
Omezení Input Managera
Input Manager je knihovna, která se nahrává do všech běžících programů. Původně byla určena pro různé úlohy při mezinárodní podpoře a přístupnosti, ale zmutovala do generického kódu používaného všemi Cocoa programy.
Input manager je hrozbou. Je to společný kus kódu, který se objevuje v téměř každé aplikaci. Jsou extenzí uživatelského rozhraní stejně, jako Back Orifice 2k jsou nástrojem pro dálkovou správu systému.
Input manager v Leopardovi se nahrává pouze z "/Library/InputManagers/" a nikoliv z domovské složky uživatele a je nahrán pouze tehdy, pokud je vlastněn uživatelem root.
To znamená, že stále s ním můžete pracovat, ale velmi pravděpodobně se ze Safari nepodaří tento kód "opravit", protože nemá právo zápisu do složky "/Library/" a nemůže vytvářet soubory vlastněné rootem.
Výsledek
Zcela jednoznačné vítězství. Apple velmi jednoduše zavřel hlavní cestu k nabourání do operačního systému a s minimálním omezením pro jiné aplikace.
Co se Apple v Leopardovi nepovedlo?
Účet pro hosta
Účet pro hosta je účet který poskytuje relativně čisté prostředí pro lidi, kteří používají počítač bez nutnosti ukládat na počítač vlastní informace a s nutností mazat po sobě všechny data. Jinými slovy ideální pro všechny internetové kavárny.
Myšlenka takového bezpečného uživatelského účtu pro hosty je brilantní.
Bohužel implementace vázne. Například.
- Účet povoluje instalovat úlohy do cronu (tedy automaticky je spouštět). Ty jsou spouštěny na pozadí a provedou si i tehdy, když není žádný host přihlášen a zůstávají i po odhlášení hosta.
- Uživatel Host může měnit nastavení bezdrátové sítě, avšak po odhlášení se neobnoví původní nastavení.
- Uživatel Host může připojit vzdálený síťový svazek, který však po odhlášení zůstává připojen.
Výsledkem je, že uživatel Host zůstává i nadále přítomen ve vašem počítači i když jeho domovský adresář byl vymazán během odhlašování.
Hodnocení
Bude lepší předstírat, že tato funkce neexistuje.
Randomizace adresového prostoru
Velká část všech útoků na nízké úrovni využívá chyby, které dovolí útočníkům poškodit paměť programu. Ve většině případů, jestliže poškodíte paměť, můžete odklonit program do svého kódu do kódu dle vaší chuti.
Tato technika je označována jako ret-to-libc. Tento typ útoku vyžaduje, aby útočník znal umístění jednotlivých knihoven. V OS X Tygrovi je to velmi jednoduché. Každý Mac udržuje tyto informace na stejných místech v paměti. V Leopardovi se umístění knihoven náhodně rozhodí, takže je lze obtížně předpokládat. Tato funkce je nazývána ASLR.
Tato funkce tak zajišťuje ochranu proti běžným chybám buffer overflow, heap overflow, zneužívání neinicializovaných proměnných atd.
Některé knihovny jsou opravdu náhodně rozmístěny v paměti.
Dynamic linker library (dyld) však nikoliv. Po několika testech je zřejmé, že tato knihovna získává stále stejný adresový prostor. Potíž je v tom, že tato knihovna má na starosti nahrávání nových knihoven do paměti a obnovu základních adres pro existující knihovny.
Může být toto zneužitelné? Ne. Ale ASLR uděláte buď pořádně a nebo to bude jen drobná překážka pro útočníky. Zde je ještě pár drobností k Leopardím ASLR:
- Adresy knihoven se nemění mezi několika spuštěními stejného programu.
- Adresy knihoven se nemění mezi spuštěním několika různých prgramů (Safari i iChat mají CoreServices na stejné adrese)
Výsledek
Tato funkce odstraňuje jeden z argumentů vůči bezpečnosti Microsoft Windows Vista, ale neřeší vlastní problematiku. Cocoa programy pod Darwinem jsou méně bezpečné než Win32 programy spuštěné pod NTOSKRNL.