Některé konfigurační sekce, typicky například connectionStrings, obsahují citlivé údaje, které by se neměly dostat do rukou cizím. V případě, že se útočníkovi podaří získat obsah souboru web.config – třeba pomocí chyby podobné nedávnému "padding oracle" problému – šifrování konfiguračních sekcí dokáže minimalizovat následky chyby. Obecně se jedná o formu "obrany do hloubky".
Problémem šifrování konfiguračních sekcí je, že za normálních okolností musíte mít k zašifrování možnost spouštět na serveru programy z příkazového řádku, a to pod tou identitou, pod níž běží webová aplikace. Což v praxi není v lepším případě jednoduché, v horším vůbec možné. Například na web hostingu s pouhým FTP přístupem nic takového není možné.
Šifrování a dešifrování konfiguračních sekcí lze nicméně provádět i programově. Funkci šifrování tedy lze vestavět do webové aplikace samotné. To nicméně není přílši praktické, vzhledem k tomu, že se jedná o jednorázový úkon. Proto jsem napsal knihovnu, která tuto funkci zapouzdřuje. Najdete ji, včetně zdrojového kódu, na http://iisconfigcrypt.codeplex.com/.
Jak to funguje
Veškerou práci odvede jediný HTTP handler, realizovaný třídou CryptoTaskHandler. Je-li zavolán bez parametrů, zobrazí seznam všech konfiguračních sekcí. Zavolán s patřičnými parametry konfigurační sekci buďto zašifruje nebo dešifruje. Reálně se jedná o zavolání metod Protect nebo Unprotect. Většina kódu zajišťuje pomocné úlohy, jako zobrazování HTML rozhraní a podobně.
IIS Config Crypt používá pro šifrování automaticky generované symetrické klíče ukládané pomocí DPAPI (Data Protection API). Pro složitější scénáře je třeba používat asymetrické RSA klíče v patřičných kontajnerech.
Způsob instalace se liší podle toho, zda vaše aplikace běží v režimu full trust nebo medium trust.
Instalace v režimu full trust
Pokud vaše aplikace běží v režimu full trust, obejdete se bez spolupráce správce serveru. Stačí assembly Altairis.Web.Configuration.Encryption.dll umístit do bin adresáře vaší aplikace a potom do web.configu přidat registraci HTTP handleru. Na IIS 6.0 nebo na 7.x v "classic" režimu se jedná o tuto konfiguraci:
<configuration>
<system.web>
<httpHandlers>
<add path="cesta.axd" verb="*" type="Altairis.Web.Configuration.Encryption.CryptoTaskHandler, Altairis.Web.Configuration.Encryption"/>
</httpHandlers>
</system.web>
</configuration>
Pro IIS 7.x v nativním režimu se použije trochu jiná konfigurace:
<configuration>
<system.webServer>
<handlers>
<add name="AltairisCryptoTaskHandler" path="cesta.axd" verb="*" type="Altairis.Web.Configuration.Encryption.CryptoTaskHandler, Altairis.Web.Configuration.Encryption"/>
</handlers>
</system.webServer>
</configuration>
Instalace v režimu medium trust
Pokud vaše aplikace běží v režimu medium trust, bohužel se neobejdete bez spolupráce správce serveru. Aby bylo možné využívat tyto operace z Altairis.Web.Configuration.Encryption.dll je nutné zaregistrovat tuto assembly do GAC. To se dělá pomocí nástroje InstallUtil.exe, který je součástí .NET Frameworku:
installutil C:\cesta\k\Altairis.Web.Configuration.Encryption.dll
Poté už stačí zase zaregistrovat HTTP handler, tentokrát je ale nutné použít plné jméno assembly z GAC. Pro IIS 6.0 nebo 7.x v classic modu to je:
<configuration>
<system.web>
<httpHandlers>
<add path="cesta.axd" verb="*" type="Altairis.Web.Configuration.Encryption.CryptoTaskHandler, Altairis.Web.Configuration.Encryption, Version=1.0.0.0, Culture=neutral, PublicKeyToken=988407701b286445"/>
</httpHandlers>
</system.web>
</configuration>
Pro IIS 7.x v nativním režimu vypadá konfigurace takto:
<configuration>
<system.webServer>
<handlers>
<add name="AltairisCryptoTaskHandler" path="cesta.axd" verb="*" type="Altairis.Web.Configuration.Encryption.CryptoTaskHandler, Altairis.Web.Configuration.Encryption, Version=1.0.0.0, Culture=neutral, PublicKeyToken=988407701b286445"/>
</handlers>
</system.webServer>
</configuration>
Použití
Poté, co jste knihovnu nainstalovali, stačí zavolat patřičnou cestu (v příkladu nahoře by to bylo http://server/cesta.axd). Zobrazí se vám seznam všech konfiguračních sekcí a stačí klepnout na odkaz "encrypt" nebo "decrypt" u názvu sekce.
Handler nemá smysl nechávat v aplikaci registrovaný trvale, naopak by to znamenalo bezpečnostní riziko, po použití je žádoucí registraci handleru ihned odstranit. Assembly můžete nechat na místě, není nutné ji odstraňovat nebo odregistrovávat z GAC.