Aktualizace: 30.11.2008
Autor: Michal "Mitch" Pavlík
BitLocker
Systém může chránit data jen pokud je aktivní, takže jsou nutná ještě opatření, která zajistí ochranu dat před vnějším zásahem.
Neautorizovanému přístupu lze zabránit pomocí mechanismů s hardwarovým základem jako jsou heslo BIOSu nebo šifrování. To je užitečné
především u notebooků, které lze snadno ukrást.
Encrypting File System (EFS) byl implementován již ve Windows 2000, ale Windows Vista přináší řadu vylepšení jako zvýšení rychlosti,
šifrování stránkovacího souboru a ukládání EFS klíče na externí médium. Nicméně EFS se nedá použít na některé součásti systému jako
soubory registru. To může být problém. Například když se přihlašujete do systému a nejste připojeni k doméně, systém uloží heslo do
registru a útočník by ho tak mohl pomocí speciálního softwaru získat, přihlásit se na váš účet a mít přístup i k šifrovaným souborům
(pokud tedy nemáte EFS klíč uložený mimo).
Ve Windows Vista je pomocí technologie Windows BitLocker Drive Encryption možné šifrovat celý systémový disk včetně systémových souborů
a dat. Narozdíl od EFS, který byl realizován ovladačem pracujícím na úrovni souborů, BitLocker šifruje na úrovni disku pomocí ovladače
Full Volume Encryption (FVE, %Systemroot%\System32\Drivers\Fvevol.sys). Schéma je znázorněno na obrázku 1.
Obrázek 1 - Umístění FVE filtru
FVE monitoruje všechny I/O požadavky, které NTFS posílá disku a šifruje data, která se mají zapsat resp. dešifruje data, která se
mají přečíst. Tyto operace FVE provádí pomocí Full Volume Encryption Key (FVEK), který byl disku přiřazen při konfiguraci BitLockeru.
Disky jsou typicky šifrovány 128-bitovým AES se 128-bitovým klíčem. Protože šifrování a dešifrování probíhá v I/O systému na nižší
úrovni než je NTFS, disk se pro NTFS jeví jako nešifrovaný a nepotřebuje ani vědět, jestli je BitLocker aktivní. Pokud se pokusíte číst
data odjinud než z Windows, získáte pouze náhodná data.
FVEK je dále šifrovaný pomocí Volume Master Key (VMK) a uložen na zvláštním místě na disku - metadata region. Když nastavujete BitLocker,
máte několik možností jak bude VMK chráněn (v závislosti na možnostech hardwaru). Pokud má systém Trusted Platform Module (TPM) vyhovující
specifikaci verze 1.2 a podporu BIOSu, pak může být VMK šifrován na základě klíče uloženého v TPM a buď druhého klíče na USB flash disku,
nebo PINu který zadáte vždy při bootování. Bez TPM vám BitLocker umožní šifrování VMK na základě klíče uloženého třeba na externím USB flash disku.
V každém případě budete potřebovat nešifrovaný 1.5 GB velký NTFS oddíl, kde bude uložen Boot Manager a Boot Configuration Database.
Výhoda TPM je v tom, že BitLocker s jeho pomocí zajistí, aby nebyl dešifrován VMK a odemčen bootovací oddíl, pokud se od aktivace
BitLockeru změní BIOS nebo bootovací soubory. Když poprvé šifrujete systémový disk a pokaždé když dochází k updatu komponent (MBR,
BIOS...), BitLocker spočítá SHA-1 hash pro každou takovou komponentu a pomocí ovladače (%Systemroot%\System32\Drivers\Tpm.sys) je uloží
v různých Platform Configuration Registers (PCRs) na PTM. Na základě těchto hodnot se pak provede zašifrování VMK - tzv. zapečetění.
Zapečetěný VMK a šifrovaný FVEK jsu pak uloženy v metadata regionu.
Když systém bootuje, provede se znovu hash všech komponent a uloží do PCRs. Nakonec když uživatel vybírá OS, Boot Manager načte
zapečetěný VMK z disku a nechá ho TPM aby jej dešifroval. Správný VMK se vrátí jen pokud budou všechny hashe stejné (a správný PIN,
pokud byl použit) jako v době, kdy se VMK zapečeťoval. BitLocker tak chrání data i když je disk připojen k jinému počítači, je
nabootován jiný systém nebo jsou podvrženy soubory na bootovacím oddíle.
Code Integrity Verification
Malware implementovaný jako kernel-mode ovladač, zahrnující rootkity, má stejná práva jako kernel a je tak obtížné ho najít a odstranit.
Takový malware může ovlivnit chování kernelu a jiných ovladačů tak, aby se stal nezjistitelný. Windows Vista tak přichází s kernel-mode
code signing (KMCS), který povolí načtení ovladače jen pokud má digitální podpis od vývojářů prověřených jednou z několika certifikačních
autorit. Na 64-bitové edici je KMCS od začátku aktivní a nelze jej vypnout.
Služby certifikačních autorit jsou placené a navíc provádí kontroly, takže je mnohem těžší zavést do 64-bitového systému anonymní malware.
Pokud přesto malware projde certifikací a bude v systému odhalen, bude známý i jeho autor. Další výhoda KMCS je, že pokud ovladač zaviní
pád systému, Windows Online Crash Analysis tým má kontaktní informace na vývojáře.
KMCS používá kryptografické technologie s veřejným klíčem, používané ve Windows přes 10 let, které vyžadují aby kód pracující v kernel-mode
měl digitální podpis vydaný jednou z důvěryhodných certifikačních autorit. Mnoho vydavatelů využívá služeb Microsoft Windows Hardware
Quality Laboratory (WHQL), kam pošlou ovladač a pokud projde testem spolehlivosti, Microsoft jej podepíše sám. Pokud vydavatel nechce
certifikát WHQL nebo má boot-start ovladač, který se zavádí ještě před startem systému, musí získat digitální podpis od jiné certifikační
autority, kterou Microsoft shledal jako důvěryhodnou. Autor pak spočítá hash, který zašifruje privátním klíčem a uloží ho spolu s
certifikátem do ovladače.
Při pokusu načíst ovladač, Windows dešifrují hash za pomoci veřejného klíče uloženého v certifikátu a pak ověří jeho pravost. Pravost
certifikátu se ověřuje stejným způsobem, ale pomocí veřejného klíče obsaženého ve Windows.
Na 64-bitové edici by k načtení nepodepsaného ovladače nikdy nemělo dojít, takže narozdíl od jiných systémů, kde Plug and Play Manager
zobrazí varovný dialog, ve 64-bitových Windows Vista se zapíše jen událost do Event Logu. 32-bitové Windows Vista také kontrolují digitální
podpis ale umožní načtení i nepodepsaných ovladačů (při kterém také zapíše zprávu do Event Logu).
Podpis je běžně dáván finálním verzím ovladačů, proto Windows Vista podporuje tesovací mód (dá se aktivovat pomocí Bcdedit), který dovolí
načíst kernel-mode ovladače s certifikátem vyrobeným vývojářem doma. Tento mód se pozná nápisem "Test Mode" v levé části nad taskbarem.
Obrázek 2 - Zpráva o načtení nepodepsaného ovladače ve 32-bitových Windows Vista
Protected Processes
Za pár let budou multimédia ve formátech HD-DVD, BluRay a jiných licencovaných pod Advanced Access Content System (AACS) běžnou součástí
domácností. Windows Vista přináší řadu technologií, souhrně zvaných Protected Media Path (PMP), které pro přehrávání takového multimediálního
obsahu vyžaduje AACS standard. PMP zahrnuje technologie Protected User-Mode Audio (PUMA) a Protected Video Path (PVP), které společně poskytují
audio a video ovladačům (stejně tak přehrávácímu softwaru) poskytují mechanismy zabraňující neoprávněnému kopírování HD obsahu.
PMP je ale postavena na jiné technologii kernelu, a to Protected Processes (chráněné procesy). Protected Processes jsou založeny na
standardu Windows process construct, který zapouzdřuje běžící spustitelné obrazy jako dynamické knihovny, security context (účet pod
kterým proces běží a jeho práva) a thready v procesu vykonávající kód, ale zabraňují jistým typům přístupu.
Standardní procesy implementují model, který umožňuje plný přístup vlastníkovi procesu a administrátorským účtům s právy Debug Programs.
Plný přístup umožňuje uživateli prohlížet a modifikovat adresní prostor procesu včetně jeho kódu a dat. Uživatel také může do procesu vložit
thready. Tyto typy přístupu jsou ale v rozporu s PMP, protože umožňují neautorizovanému kódu získat přístup k HD obsahu a tedy i k
Digital Rights Management (DRM) klíčům uloženým v procesu přehrávající multimédia.
Chráněné procesy omezují přístup k určitým informacím a rozhraním pro řízení procesu, včetně ukončení, zastavení nebo dotazu na název procesu.
Kernel ovšem pomocí obecných dotazovacích funkcí zpřístupňuje diagnostické informace procesu aniž by bylo zapotřebí přímého přístupu
do paměti.
Aby nedošlo k úniku zevnitř, musí mít veškerý spustitelný kód načtený chráněným procesem (dynamické knihovny, executeble image) podpis
Microsoftu (WHQL) a nastavený příznak Protected Environment (PE). Nebo pokud jde o audio kodek, musí mít DRM certifikát, který vývojář
získá od Microsoftu. Protože kód v kernel-mode může získat plný přístup k jakémukoliv procesu (i chráněnému), systém odemkne prémiový
obsah jen pokud má veškerý načtený kernel-mode kód digitální podpis.
Ve Windows není implementováno API na identifikaci chráněných procesů, ale v Task Manager-u (správce úloh) se chráněné procesy od ostatních
odlišují tím, že o sobě neposkytují všechny informace. Na obrázku 3 je zvýrazněn proces Audio Device Graph Isolation
(%Systemroot%\System32\Audiodg.exe) určený k přehrávání DVD chráněných CSS (Content Scramble System).
Obrázek 3 - Chráněný proces v Task Manager-u
Address Space Load Randomization
Navzdory opatřením v podobě Data Execution Prevention a Enhanced Compiler Error Checking, pokračují autoři malwaru v hledání zranitelností,
které jim umožní zapříčinit přetečení bufferu a získat kontrolu nad procesy jako Internet Explorer, síťové služby nebo aplikace
třetích stran. Když se jim podaří získat kontrolu nad procesem, musí stejně použít API, aby například přečetly data z disku nebo si zajistili
permanentní přítomnost v systému změnou jeho nastavení.
Spojení aplikace se vstupními body API (exportové dynamickými knihovnami) je obvykle obslouženo systémovým zavaděčem, ale tyto druhy malware
nemohly služby zavaděče využít. To ovšem nebyl ve starších systémech problém, protože se spustitelný kód vždy načítal do paměti vždy na stejné
místo. Malwaru tak stačila tabulka adres funkcí a zavaděč nebyl zapotřebí.
Obrázek 4 - Organizace paměti
Tomu ve Windows Vista předchází technologie Address Space Load Randomization (ASLR), která zajistí náhodné načtení při každém bootování.
Při bootování vybere Memory Manager náhodně adresu (tzv. image-load bias) z jedné z 256 adres (v 64 KB rozestupu) umístěných ve vrchních 16
MB adresního prostoru user-mode vrstvy. Když se do procesu načítají knihovny, které mají v hlavičce nový dynamic-relocation
flag (příznak dynamického přemístění), Memory Manager je uloží do paměti na první volnou adresu od image-load bias směrem dolů.
Se spustitelnými soubory, které mají nastavený příznak, se zachází podobně. Načítají se na náhodnou adresu (dělitelnou 64 KB) uvnitř 16 MB
bloku začínajícího na adrese určené v hlavičce (base address). Pokud je daná knihovna nebo spustitelný soubor uvolněn z paměti a má se znovu
načíst, Memory Manager znovu náhodně vybírá adresy. Na obrázku 4 je vidět příklad uspořádání paměti a kódu ve 32-bitových Windows Vista.
Náhodné umisťování se provádí jen u souborů, které mají dynamic-relocation flag (všechny spustitelné soubory a knihovny, které jsou součástí
Windows Vista). U starších aplikací se neprovádí pro případ, že vývojář při psaní spoléhal na statické umístění. Podporu pro přidání
dynamic-relocation flag přináší pro vývojáře Visual Studio 2005 SP1.
Náhodný výběr z 256 adres nezabrání malwaru zjistit umístění API které potřebuje, ale dost zpomalí jeho postup a sníží jeho šance na úspěch.
Další výhoda ASLR je v tom, že data jsou v paměti blíž u sebe. Tím tak vznikají větší bloky volné paměti pro pozdější alokaci a snižuje počet
stránek, ve kterých Memory Manager ukládá informace o rozložení adresního prostoru.
Service Security Improvements
Mnoho služeb má přístup k síti a většina běží pod účtem s vyššími právy než než má standardní uživatel. Jsou tedy ideálním cílem pro malware,
který získáním kontroly nad takovou službou, získá i vyšší práva. Z tohoto důvodu byly již ve Windows XP SP2 odebrána službám práva, která
nebyla zapotřebí k jejich činnosti. Například účty Local Service a Network Service ve Windows XP SP2 zahrnovaly jen některá práva oproti
účtu Local System, pod kterým pracovaly služby předtím. Útočník tedy nemá tak široký přístup do systému.
Windows Vista některým službám dále omezuje přístup k souborům, registru a portům firewallu. Windows Vista zavádí novou skupinu zvanou Security
Identifier (SID), která je pro každou službu unikátní. Služba tak má jen zdroje, ke kterým má přístup SID. SID služby můžete vypsat příkazem
sc showsid a názvem služby.
Obrázek 5 - Vypsání SID služby
SID chrání přístup ke zdrojům vlastněných příslušnou službou, ale službám standardně zůstává přístup ke všem objektům, které zpřístupňuje
účet pod kterým běží. Například služba běžící pod účtem Local Service nemá přístup ke zdrojům vytvořených jinou službou běžící pod Local Service
v jiném procesu, který chrání svoje objekty povolením přístupu jen určitému SID, ale může pracovat s objekty, ke kterým má účet Local Service
přístup.
Windows Vista proto přináší další typ služby, zvaný write-restricted service (služba s omezeným zápisem), který povoluje zápis jen do určitých
objektů.
Další informace o implementaci naleznete v originálním článku na
TechNetu.
Mitch