Sichern von Rollen
Aktualisiert: November 2007
Mit der Rollenverwaltung können Sie die Autorisierung der Anwendung mit von Ihnen erstellten Kategorien verwalten, die als "Rollen" bezeichnet werden Durch Zuweisen von Benutzerrollen können Sie den Zugriff auf verschiedene Teile oder Funktionen der Webanwendung auf Grundlage einer Rolle steuern. Die Rolle fungiert dabei anstelle eines Benutzernamens bzw. zusätzlich zu diesem. So kann eine Mitarbeiteranwendung beispielsweise mehrere Rollen aufweisen, z. B. Manager, Mitarbeiter, Direktoren usw., wobei für jede Rolle unterschiedliche Berechtigungen anzugeben sind.
Benutzer können mehreren Rollen angehören. Wenn es sich bei der Seite z. B. um ein Diskussionsforum handelt, können einige Benutzer sowohl der Rolle eines Mitglieds als auch eines Moderators zugeordnet sein. Jede Rolle kann so definiert werden, dass sie auf der Seite über unterschiedliche Berechtigungen verfügt. Ein Benutzer, der zwei Rollen zugeordnet ist, hätte dann die Berechtigungen beider Rollen.
Die Sicherheit der Anwendung kann erhöht werden, wenn Sie bei Codegenerierung und Konfiguration die optimalen Vorgehensweisen befolgen. Es ist aber ebenfalls wichtig, dass Sie den Anwendungsserver auf dem aktuellsten Stand halten und immer die neuesten Sicherheitspatches für Microsoft Windows und Internetinformationsdienste (IIS) installieren. Das gilt ebenso für Patches für Microsoft SQL Server, Active Directory und weitere Datenquellen für Rollen.
Ausführlichere Informationen über optimale Vorgehensweisen beim Schreiben von Code und bei der Sicherung von Anwendungen finden Sie im Buch "Writing Secure Code" von Michael Howard und David LeBlanc. Ebenso finden Sie in der Anleitung "Patterns and Practices" von Microsoft weitere Informationen zu diesem Thema (https://www.microsoft.com/resources/practices/default.mspx).
Sichere Rollenmanagerkonfiguration
Die Rollenmanagerfunktion ist standardmäßig für ASP.NET-Anwendungen deaktiviert. Dadurch wird die Sicherheit von Anwendungen verbessert, die den Rollenmanager nicht verwenden. Bei aktivierter Rollenmanagerfunktion werden die Standardkonfigurationseinstellungen auf die sichersten Werte festgelegt. Informationen über die Konfigurationseinstellungen des Rollenmanagers und die jeweiligen Standardwerte finden Sie unter roleManager-Element (ASP.NET-Einstellungsschema).
Sichern von Konfigurationswerten
Werden vertrauliche Informationen in einer Konfigurationsdatei einer Anwendung gespeichert, sollten Sie die vertraulichen Werte mithilfe der geschützten Konfiguration verschlüsseln. Besonders vertrauliche Informationen enthalten die Verschlüsselungsschlüssel, die im machineKey-Konfigurationselement gespeichert sind, und die Verbindungszeichenfolgen einer Datenquelle, die im connectionStrings-Konfigurationselement gespeichert sind. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.
Sichere Verschlüsselungsschlüssel und Hashverfahren
Es wird dringend empfohlen, in Cookies zwischengespeicherte Rollennamen durch Festlegen des cookieProtection-Attributs des roleManager-Elements auf All zu schützen. Die Werte des Verschlüsselungsschlüssels für den angegebenen Verschlüsselungsalgorithmus sind im machineKey-Konfigurationselement gespeichert. Geben Sie für eine sichere Verschlüsselung einen Verschlüsselungsschlüssel an, dessen Wert in der entsprechenden Länge des ausgewählten Verschlüsselungsalgorithmus nach dem Zufallsprinzip generiert wurde.
Auf einem Server mit mehreren Anwendungen sollten eindeutige Verschlüsselungsschlüssel für jede Anwendung definiert werden. Eine weniger sichere Alternative wäre, einen einzigen Verschlüsselungsschlüssel zu definieren und die IsolateApps-Option mit dem Schlüssel anzugeben.
Hostserver können durch die Verweigerung von Überschreibungsrechten die Fähigkeit beschränken, Konfigurationseinstellungen der programmgesteuerten Konfiguration zu überschreiben. Ebenfalls verweigert wird die Möglichkeit, Verschlüsselungsschlüssel in der Web.config-Datei einer Anwendung neu definieren zu können.
Sichern der Verbindungen zu einer Rollendatenquelle
Verbindungszeichenfolgen
Wie bereits erwähnt ist es wichtig, die Verbindungszeichenfolge zu schützen, die für den Zugriff auf den SQL Server, den Active Directory oder andere Datenquellenanwendungen benötigt wird. Damit die Verbindung zum Datenbankserver sicher bleibt, sind die Informationen über Verbindungszeichenfolgen mithilfe der geschützten Konfiguration zu verschlüsseln. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.
Herstellen einer Verbindung zu einem SQL Server mithilfe der integrierten Sicherheit
Verbindungen zu SQL Servern sollten Sie mithilfe der integrierten Sicherheit herstellen. Auf diese Weise vermeiden Sie, dass die Verbindungszeichenfolge entdeckt und die Benutzer-ID sowie das Kennwort offengelegt werden. Wenn Sie eine Verbindung angeben, die die integrierte Sicherheit zur Verbindung mit einem SQL Server verwendet, wird die Rollenmanagerfunktion auf die Identität des Prozesses zurückgesetzt. Stellen Sie sicher, dass die Identität des Prozesses, der ASP.NET ausführt (z. B. der Anwendungspool), das standardmäßige Prozesskonto oder ein eingeschränktes Benutzerkonto ist. Weitere Informationen finden Sie unter Identitätswechsel in ASP.NET.
SQL Server-Datenbankberechtigungen
Die SQL Server-Datenbank, in der die Benutzerinformationen für Rollen gespeichert sind, umfasst Datenbankrollen und Ansichten. Mit diesen kann der Benutzerzugriff auf die erforderlichen Funktionen und auf notwendige Sichtbarkeit beschränkt werden. Der Benutzer-ID zur Verbindung mit einer SQL Server-Rollendatenbank sind minimale Berechtigungen zuzuweisen. Weitere Informationen hierzu finden Sie unter Rollen und Ansichten in der Datenbank für die Anwendungsdienste für SQL Server.
Workerprozessidentität für SQL Server Express
SQL Server Express 2005 enthält einen neuen Betriebsmodus, mit dem ein Workerprozess gestartet werden kann, der die Identität des sich verbindenden Benutzers aufweist. Dieser Modus heißt "als Benutzer ausführen"-Modus. Der Betriebsmodus eignet sich für die Entwicklung von Desktopanwendungen unter IIS, ist jedoch nicht geeignet zum Starten des Workerprozesses auf Webservern, auf denen sich mehrere, nicht vertrauenswürdige CodeBases von Kunden befinden. Auf gemeinsamen Hostservern, deren Anwendungen untereinander nicht vertrauenswürdig sind, sollte explizit die "als Benutzer ausführen"-Funktion deaktiviert sein. Diese Funktion kann durch Verbinden mit der SQL Express-Instanz (z. B. osql –E –S .\sqlexpress) und durch Ausführen des folgenden Transact-SQL-Befehls ausgeschaltet werden.
EXEC sp_configure 'show advanced option', '1'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'user instances enabled', 0
GO
RECONFIGURE WITH OVERRIDE
GO
Sichern des Autorisierungsspeichers
Um bei der Verwendung von AuthorizationStoreRoleProvider die Sicherheit der Datenquelle zu verbessern, müssen Sie die Rolleninformationen auf einem Active Directory-Server speichern (im Gegensatz zu einem dateibasierten Autorisierungsspeicher). Bei einer Gefährdung des Webservers kann dadurch die Offenlegung der Richtlinienspeicherdatei verhindert werden.
Beim Verbinden mit einem Active Directory-Server wird die Rollenmanagerfunktion auf die Prozessidentität zurückgesetzt. Stellen Sie sicher, dass die Identität des Prozesses, der ASP.NET ausführt (z. B. der Anwendungspool), das standardmäßige Prozesskonto oder ein eingeschränktes Benutzerkonto ist. Weitere Informationen finden Sie unter Identitätswechsel in ASP.NET. Zusätzlich sollten Sie Berechtigungen für das Konto im Active Directory-Autorisierungsspeicher zuweisen. Dieses Konto gewährt Zugriff nur auf die angegebene Autorisierungsmanageranwendung bzw. den Bereich, der von der ASP.NET-Anwendung benötigt wird.
Zum Schutz der Verbindung mit dem Active Directory-Server sollten Sie ein Netzwerkverschlüsselungs-Tool (z. B. Internet Protocol Security, IPSec) verwenden.
Absichern des Rollencookies
Zur Leistungsverbesserung können Sie festlegen, dass Rollennamen eines Benutzers in einem Sitzungscookie zwischengespeichert werden. Hierfür setzen Sie das cacheRolesInCookie-Attribut des roleManager-Elements auf true. Standardmäßig werden die Rollennamen in einem verschlüsselten Format gespeichert. Zusätzlicher Schutz der Rollencookies wird erreicht, wenn das cookieRequireSSL-Attribut auf true festgelegt wird und Rollen nur in einem Sitzungscookie zwischengespeichert werden, falls SSL aktiviert ist. Dadurch wird das Rollencookie davor geschützt, über das Netzwerk verfügbar zu sein und für einen Angriff durch Abhören und Wiedergeben missbraucht zu werden.
Verhindern der Freigabe von Cookies in Anwendungen
Das gleiche Rollencookie wird an mehrere Anwendungen gesendet, wenn das cacheRolesInCookie-Attribut des roleManager-Elements auf true und das cookiePath-Attribut auf einen Pfad festgelegt ist, der mehrere Anwendungen einschließt. Das Rollencookie kann gleichzeitig in mehreren Anwendungen verwendet werden, indem die gleiche Verschlüsselungsinformation im machineKey-Konfigurationselement für jede Anwendung angegeben wird.
Die gleichzeitige Verwendung des Rollennamen-Cookies über mehrere verschiedene Anwendungen kann folgendermaßen vermieden werden: Geben Sie im machineKey-Konfigurationselement für jede Anwendung einen separaten Verschlüsselungsschlüssel an. Legen Sie das cookiePath-Attribut für jede Anwendung auf den bestimmten Anwendungspfad fest, und legen Sie für die ApplicationName-Eigenschaft einen eindeutigen Wert pro Anwendung fest.
Sichere Webseiten, die Rollen verwenden
Anwendungsseiten, die mit vertraulichen Daten arbeiten, z. B. Anmeldeseiten, sollten über standardisierte Web-Sicherheitsmechanismen abgesichert werden. Dazu gehören z. B. Maßnahmen wie Secure Sockets Layer (SSL). Außerdem erfordert es, dass Benutzer angemeldet sein müssen, um vertrauliche Vorgänge ausführen zu können (z. B. Aktualisierung von Benutzerinformationen oder Löschen von Benutzern).
Darüber hinaus dürfen auf Seiten keine vertraulichen Funktionsdaten (z. B. Kennwörter oder auch Benutzernamen) als Klartext dargestellt werden. Stellen Sie sicher, dass Seiten mit vertraulichen Informationen SSL verwenden und nur authentifizierten Benutzern zur Verfügung stehen. Vermeiden Sie auch, vertrauliche Funktionsdaten in Cookies zu speichern oder sie über unsichere Verbindungen zu senden.
Absichern gegen Denial-of-Service-Angriffe
Aktualisierungen oder umfangreiche Suchoperationen können die Reaktionsgeschwindigkeit der Rollendatenquelle reduzieren, wenn diese von mehreren Clients gleichzeitig aufgerufen wird. Um die Anfälligkeit gegenüber Denial-of-Service-Angriffen so gering wie möglich zu halten, ist der Zugriff auf Benutzer mit Administratorrechten zu beschränken. Nur diese Benutzer sollten Zugriff auf ASP.NET-Seiten erhalten, auf denen Methoden zur Datenbankaktualisierung bzw. Datenbanksuchen ausgeführt werden können. Gleichzeitig dürfen für den allgemeinen Gebrauch nur solche ASP.NET-Seiten verfügbar gemacht werden, die eine Validierung der Rollenmitgliedschaft bereitstellen.
Fehlermeldungen und Ereignisse
Ausnahmen
So verhindern Sie, dass vertrauliche Informationen unerwünschten Quellen verfügbar gemacht werden: Konfigurieren Sie die Anwendung so, dass entweder keine ausführlichen Fehlermeldungen angezeigt werden oder nur dann ausführliche Fehlermeldungen angezeigt werden, wenn der Webserver der Client ist. Weitere Informationen finden Sie unter customErrors-Element (ASP.NET-Einstellungsschema).
Ereignisprotokoll
Führt der Server Windows Server 2003 aus, können Sie die Sicherheit der Anwendung verbessern, indem Sie das Ereignisprotokoll absichern. Außerdem verhindert die Festlegung von Parametern im Ereignisprotokoll bzgl. Größe, Beibehaltung usw., dass ein indirekter Denial-of-Service-Angriff ausgeführt werden kann.
Überwachungsinformationen
Der Webserver ist so zu konfigurieren, dass das Auftreten bestimmter Aktionen bzgl. der Rollenmanagerfunktion überwacht und die Überwachungsinformationen in einer Protokolldatei gespeichert werden. Da vertrauliche Informationen wie Benutzer- oder Rollennamen in der Überwachungsprotokolldatei gespeichert werden, sollte der Zugriff darauf eingeschränkt werden. Nur Administratoren ist die Überwachung, die Konfiguration des Speicherortes der Überwachungsprotokolldatei und der Zugriff hierauf zu ermöglichen.
Benutzerdefinierte Rollenanbieter
Beim Erstellen eines benutzerdefinierten Rollenanbieters ist sicherzustellen, dass die empfohlenen Vorgehensweisen bzgl. der Sicherheit eingehalten werden, um so während der Arbeit mit der Datenbank Angriffe zu vermeiden (z. B. SQL-Injection-Angriffe). Wenn ein benutzerdefinierter Rollenanbieter verwendet wird, muss dieser hinsichtlich der empfohlenen Sicherheitsvorgehensweisen überprüft worden sein.
Arbeiten mit kulturabhängigen Zeichen
Wenn Sie den SQL-Mitgliedschaftsanbieter oder einen benutzerdefinierten Mitgliedschaftsanbieter verwenden, wird Ihre Datenquelle möglicherweise für die Speicherung von Mitgliedschaftsdaten in einem kulturabhängigen Format konfiguriert. Rollennamen aus dem authorization-Konfigurationselement und aus der Datenquelle werden in ASP.NET jedoch immer kulturinvariant ausgewertet. Dies kann zum Gewähren von Berechtigungen für nicht autorisierte Benutzer führen, wenn der nicht autorisierte Rollenname bei kulturinvarianter Behandlung mit dem Namen einer autorisierten Rolle identisch ist. Um unbefugte Zugriffe zu vermeiden, stellen Sie sicher, dass die Rollennamen eindeutig sind, wenn sie kulturinvariant ausgewertet werden.