Zabezpečení počítače pomocí Software Restriction Policy

Před několika týdny se objevila závažná chyba v Java Runtime a v souvislosti s tím jsem narazil na velmi dobrý článek o zabezpečení počítače pomocí Software Restriction Policy (dále jen SRP) na který se budu odkazovat. Samozřejmostí využití SRP je, že se používají správně přístupová práva, takže se nepracuje na počítači trvale s právy Administrátora. Pak je jakékoli zabezpečení neúčinné.

Co je Software Restriction Policy ?

Stručně řečeno si to lze představit asi jako rozšíření NTFS práv o další příznak Execute, který povolí spuštění EXE nebo BAT souboru (ve skutečnosti to nemá s NTFS nic společného). Pokud není SRP aktivní, lze spustit cokoli odkudkoli a jediné co omezuje přístup k souborům či registru jsou práva přihlášeného uživatele. SRP lze používat dvěma způsoby (viz Step 4 v článku):

  • vše je povoleno, explicitně se zakáže spouštění souborů ze zadaných adresářů
  • vše je zakázáno (na všech jednotkách, tedy i z externích disků), explicitně se povolí spouštění souborů ze zadaných adresářů (typicky Program Files a Windows)

Právě ta druhá možnost je zajímavá, protože umožňuje zabránit nechtěnému spuštění z externího disku nebo uživatelského profilu. Toto neplatí pokud účtem Administrátora (viz Step 2 v článku) kde je povoleno vše bez omezení.

Vyjímka pro DLL knihovny

Pomocí SRP lze omezit nejen místa kde se nachází spustitelné EXE soubory, ale i DLL knihovny. Nastavení (viz Step 2 v článku) umožňuje nastavit vyjímku pro DLL knihovny, tak že se pro ně neuplatňuje SRP. Typicky se jedná o různé pluginy do prohlížečů a podobně, které jsou umístěné v uživatelském profilu. Tímto nastavením se sice zjednoduší seznam míst kde se mohou tyto "vyjímečné" DLL nacházet, ale také sníží bezpečnost celého řešení, protože lze pak škodlivý kód spustit pomocí RUNDLL32, které nahraje škodlivou DLL knihovnu umístěnou například někde v Temp adresáři v uživatelském profilu.

Praktické zkušenosti

Kromě toho co je popsáno v článku, jsem musel povolit ještě další Unrestricted pravidla pro adresáře v těchto případech:

Windows 7 Professional SP1 x64

  • "C:\Program Files (x86)" - pro 32 bitové aplikace
  • "C:\Program Files" - SRP zřejmě kontroluje, že se zde nachází jen 64 bitové aplikace. Bohužel ne vždy tomu tak je (například utility Lenovo), takže vznikal problém se spuštěním. Přidáním tohoto pravidla se to spravilo.

Mozilla Firefox

  • "C:\Documents and Settings\<user>\Application Data\Mozilla\Firefox\Profiles\<profile>\extensions" - pluginy prohlížeče

Mozilla Thunderbird

  • "C:\Documents and Settings\<user>\Application Data\Thunderbird\Profiles\<profile>\extensions" - některé addony jako například Lightning jsou ve formě nativní DLL

Microsoft Virtual PC 2007

  • "C:\Documents and Settings\<user>\Application Data\Microsoft\Virtual PC" - zde je poněkud nelogicky umístěna knihovna VPCKeyboard.dll bez které pak nefungují některé klávesy uvnitř virtuálního stroje

Software Restriction Policy a UAC

Zde platí stejná pravidla. Dokud nejsou požádována elevated práva (tedy skutečně Administrátorská), uplatňuje se SRP. Proto je třeba například instalaci aplikací spouštět z elevated Command Promptu.

Software Restriction Policy a vývoj ve Visual Studiu

Tuto kombinaci nemám vyzkoušenou, protože pro vývoj používám výhradně virtuální stroje, kde již SRP neuplatňuji. V takovém případě by bylo nutné vytvořit další pravidla.

Závěr

SRP je dostupné již od Windows XP a představuje skutěčně účinné zabezpečení proti škodlivému software nebo různým prasárnám typu Google Chrome, které se "instalují" do uživatelského profilu a tím umožňují snadné napadení jeho spustitelných souborů, protože ty díky špatnému umístění mimo Program Files nejsou chráněny proti zápisu pod příhlášeným uživatelem. Ve Windows 7 Ultimate a Windows 2008 R2 je dále dostupný AppLocker což je další rozšíření SRP.

Komentáře jsou uzavřeny