Šifrování konfiguračních sekcí v ASP.NET

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.

  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET