Freigeben über


Modul 1 – Einführung

* * *

Auf dieser Seite

Modulübersicht Modulübersicht
Zielsetzung Zielsetzung
Betrifft Betrifft
Verwendung dieses Moduls Verwendung dieses Moduls
Verbundener Bereich Verbundener Bereich
Grundlagen Grundlagen
Verbinden der Technologien  Verbinden der Technologien
Entwurfsprinzipien Entwurfsprinzipien
Zusammenfassung Zusammenfassung

Modulübersicht

Das Erstellen sicherer und verteilter Webanwendungen stellt eine große Herausforderung dar. Eine Anwendung ist immer nur so sicher wie ihre schwächste Verbindung, und verteilte Anwendungen verfügen über zahlreiche Verbindungen. Sie benötigen genaue Kenntnisse vieler Produkte und Technologien, um die sichere Zusammenarbeit aller Bestandteile der verteilten Anwendung zu gewährleisten.

In diesem Modul werden die Grundlagen für sichere, verteilte Webanwendungen beschrieben: Authentifizierung, Autorisierung und sichere Kommunikationsvorgänge. Zudem wird eine Reihe von wichtigen Sicherheitsprinzipien eingeführt, auf die Sie sich bei der Erstellung verteilter Webanwendungen konzentrieren sollten.

 

Zielsetzung

Themenbereiche:

  • Einführung in die Bedeutung der Begriffe Authentifizierung, Autorisierung und sichere Kommunikation.

  • Umfassende Einführung in die allgemeine Architektur einer ASP.NET-Webanwendung. Dies beinhaltet eine Einführung in die Technologien, die diese Architektur ausmachen, sowie in die Optionen für die Authentifizierung, Autorisierung und sichere Kommunikation, die die jeweilige Technologie bietet.

  • Einführung in die wichtigen Sicherheitsprinzipien, die die Grundlage für die restlichen Unterlagen in diesem Handbuch bilden.

 

Betrifft

Die Informationen in diesem Modul gelten für folgende Produkte und Technologien:

  • Betriebssysteme Windows XP oder Windows 2000 Server oder höher

  • .NET Framework Version 1.0 oder höher

  • ASP.NET 1.0

 

Verwendung dieses Moduls

Empfehlungen für eine erfolgreiche Arbeit mit diesem Modul:

  • Ihnen muss der Zweck von Microsoft-Produkten und -Technologien, einschließlich Windows, SQL Server 2000, Internetinformationsdienste, .NET Framework und Enterprise Services (COM+), bekannt sein.

  • Sie sollten über Erfahrung in der Entwicklung von ASP.NET-Webanwendungen verfügen.

 

Verbundener Bereich

Können Sie Ihr Wissen auch auf die Erstellung von .NET-Webanwendungen anwenden? Können Sie Ihr Wissen bei webbasierten, verteilten Anwendungen einsetzen, in dem Webdienste Unternehmen mit anderen Unternehmen oder mit Kunden verbinden und Anwendungen die Offenlegung in unterschiedlichen Stufen beispielsweise für Benutzer in Intranets, Extranets und im Internet bieten?

Betrachten Sie einige der grundlegenden Eigenschaften dieser verbundenen Umgebung.

  • Für Webdienste werden Standards wie SOAP, Extensible Markup Language (XML) und Hypertext Transport Protocol (HTTP) verwendet. In der Regel werden jedoch vertrauliche Informationen mit unverschlüsseltem Text weitergeleitet.

  • Business-to-Consumer-Internetanwendungen leiten vertrauliche Daten über das Internet weiter.

  • Business-to-Business-Extranetanwendungen verzerren die Vertrauenslinien und ermöglichen den Aufruf von Anwendungen durch andere Anwendungen in Partnerfirmen.

  • Intranetanwendungen bergen gewisse Risiken hinsichtlich der Vertraulichkeit der Anwendungen für Buchhaltung und Human Resources (HR). Solche Anwendungen sind besonders anfällig für böswillige Administratoren und verärgerte Mitarbeiter.

 

Grundlagen

Die Grundlage für eine erfolgreiche Anwendungssicherheitsstrategie bildet eine solide Vorgehensweise bei der Authentifizierung und Autorisierung sowie bei der sicheren Kommunikation, um den Datenschutz und die Integrität vertraulicher Daten zu gewährleisten. Zunächst sollen diese wichtigen Begriffe definiert werden. In Modul 3, "Authentifizierung und Autorisierung", wird dargestellt, wie die unterschiedlichen Authentifizierung- und Autorisierungsmechanismen kombiniert werden können, um einen soliden Sicherheitsentwurf bereitzustellen.

Authentifizierung

Bei der Authentifizierung handelt es sich um den Prozess der positiven Identifikation der Clients einer Anwendung. Zu den Clients können Endbenutzer, Dienste, Prozesse oder Computer zählen. In der Sicherheitsterminologie werden authentifizierte Clients als Prinzipale bezeichnet.

Die Authentifizierung erfolgt über die Ebenen einer verteilten Webanwendung. Endbenutzer werden zuerst durch die Webanwendung meist anhand eines Benutzernamens und eines Kennworts authentifiziert. Anschließend wird die Anforderung des Endbenutzers durch Anwendungsserver der mittleren Ebene (sofern in Ihrer Architektur vorhanden) und den Datenbankserver verarbeitet. Sie nehmen eine Authentifizierung vor, um die Anforderung zu überprüfen und zu verarbeiten.

In vielen Anwendungen nehmen die Downstream-Server und Komponenten keine Authentifizierung des Endbenutzers vor. Stattdessen authentifizieren sie die Entität, bei der es sich um die Upstream-Anwendung handelt. Voraussetzung hierfür ist, dass die Anwendung die Authentifizierung und Autorisierung der Anforderung ordnungsgemäß vornimmt, bevor sie weitergeleitet wird.

Die zahlreichen Authentifizierungsmechanismen, die für die ASP.NET-Anwendungsentwicklung gelten, werden in Modul 2, "Sicherheitsmodell für ASP.NET-Anwendungen", näher beschrieben.

Autorisierung

Durch den Autorisierungsprozess wird verwaltet, auf welche Ressourcen und Operationen der authentifizierte Client zugreifen kann. Zu den Ressourcen zählen Dateien, Datenbanken, Tabellen, Zeilen usw. sowie Ressourcen auf Systemebene, wie etwa Registrierungsschlüssel und Konfigurationsdaten.

Zur besseren Skalierbarkeit und leichteren Verwaltung autorisieren viele Webanwendungen den Zugriff auf Operationen, die über Methoden bereitgestellt werden, und nicht den direkten Zugriff auf die zugrunde liegenden Ressourcen. Es ist dennoch wichtig, die Ressourcen auf Systemebene durch die Sicherheit auf Plattformebene (Windows-ACLs usw.) zu sichern. Viele der gängigsten Autorisierungsschemata auf Anwendungsebene verwenden Rollen, um Kategorien von Benutzergruppen festzulegen, die innerhalb der Anwendung über dieselben Rechte verfügen.

Die unterschiedlichen Autorisierungsoptionen und Gatekeeper, die für die ASP.NET-Anwendungsentwickler zur Verfügung stehen, werden in Modul 2, "Sicherheitsmodell für ASP.NET-Anwendungen", näher beschrieben.

Sichere Kommunikation

Viele Anwendungen leiten vertrauliche Daten über Anwendungsschichten von Datenbankservern an Browser und umgekehrt weiter. Beispiele für vertrauliche Daten sind Informationen zu Bankkonten, Kreditkartennummern, Buchhaltungsdaten usw. Darüber hinaus müssen Anmeldeinformationen durch Anwendungen gesichert werden, wenn diese über das Netzwerk übertragen werden.

Die sichere Kommunikation bietet die beiden folgenden Funktionen:

  • Datenschutz. Der Datenschutz sorgt dafür, dass Daten geheim und vertraulich bleiben und nicht mit einer Netzwerküberwachungssoftware bei Lauschangriffen angezeigt werden können. Datenschutz wird in der Regel durch Verschlüsselung ermöglicht.

  • Integrität. Sichere Kommunikationskanäle müssen auch sicherstellen, dass die Daten bei der Übertragung vor versehentlichen oder absichtlichen (böswilligen) Änderungen geschützt werden. Die Integrität wird normalerweise durch Nachrichtenauthentifizierungscodes (Message Authentication Codes oder MACs) bereitgestellt.

Es ist wichtig, sowohl innerhalb als auch außerhalb der Firewall sichere Kommunikationstechniken anzuwenden, da viele unerwünschte Formen der Offenlegung von Informationen und Sicherheitsrisiken intern in Unternehmensnetzwerken auftreten.

Die sichere Kommunikation und die verschiedenen verfügbaren Ansätze werden in Modul 4, "Sichere Kommunikation", näher beschrieben.

 

Verbinden der Technologien

ASP.NET-Webanwendungen werden mithilfe von vielen verschiedenen Technologien und Produkten entwickelt. Auf den zahlreichen Ebenen Ihrer Anwendung sind unterschiedliche Ansätze für die Authentifizierung, Autorisierung und sichere Kommunikation erforderlich, um eine Sicherheitsstrategie der Tiefenverteidigung zu gewährleisten.

In Abbildung 1 werden die unterschiedlichen Technologien und die jeweiligen primären Authentifizierungs- und Autorisierungsoptionen zusammengefasst.

Sicherheit von .NET-Webanwendungen

Abbildung 1
Sicherheit von .NET-Webanwendungen

 

Entwurfsprinzipien

Es gelten mehrere umfassende Prinzipien, die auch für die Richtlinien in späteren Modulen gelten. Sie sollten sich diese Prinzipien einprägen und auf Ihre Anwendungsentwürfe anwenden:

  • Halten Sie sich an das Prinzip der minimalen Rechte. Prozesse, bei denen Skripts oder Codes ausgeführt werden, sollten im Kontext eines Kontos mit minimalen Rechten ausgeführt werden, um den potenziellen Schaden, der mit einer möglichen Gefährdung des Prozesses einhergeht, so weit wie möglich einzugrenzen. Wenn ein böswilliger Benutzer es schafft, einen Code in einen Serverprozess einzubringen, bestimmen die Rechte, die dem betreffenden Prozess gewährt wurden, im Wesentlichen den Typ der Operationen, die der Benutzer ausführen kann. Ein Code, für den eine zusätzliche Vertrauensstellung (mit erweiterten Rechten) erforderlich ist, sollte in separaten Prozessen isoliert werden.
    Das ASP.NET-Team hat bewusst entschieden, das ASP.NET-Konto mit minimalen Rechten auszuführen (dabei wird das ASPNET-Konto verwendet). Diese Änderung wurde für die erste Version von .NET Framework implementiert. In Betaversionen wurde ASP.NET als SYSTEM ausgeführt, wobei diese Einstellung deutlich unsicherer war.

  • Verwenden Sie die Tiefenverteidigung. Platzieren Sie Prüfpunkte innerhalb der Schichten und Subsysteme Ihrer Anwendung. Bei den Prüfpunkten handelt es sich um Gatekeeper, durch die sichergestellt wird, dass nur authentifizierte und autorisierte Benutzer auf die nächste Downstream-Schicht zugreifen können.

  • Vertrauen Sie keinen Benutzereingaben. Alle Benutzereingaben sollten eingehend durch Anwendungen überprüft werden, bevor mit diesen Eingaben Operationen durchgeführt werden. Die Überprüfung kann das Herausfiltern von Sonderzeichen beinhalten. Durch diese präventive Maßnahme wird die Anwendung vor versehentlichem Missbrauch oder gezielten Angriffen durch Personen geschützt, die versuchen, böswillige Befehle in das System einzubringen. Gängige Beispiele sind SQL Injection-Angriffe, Skript-Injection und Pufferüberlauf.

  • Verwenden Sie sichere Standardeinstellungen. Entwickler verwenden häufig reduzierte Sicherheitseinstellungen, nur damit eine Anwendung funktioniert. Wenn für Ihre Anwendungen Funktionen erforderlich sind, für die Sie die standardmäßigen Sicherheitseinstellungen reduzieren oder ändern müssen, testen Sie die Auswirkungen dieser Änderungen.

  • Verlassen Sie sich nicht auf Sicherheit durch Unklarheit. Dadurch, dass Sie versuchen, irreführende Namen für Variablen oder ungewöhnliche Speicherorte für Dateien zu wählen, stellen Sie keine Sicherheit bereit. Für das Verstecken von Daten empfiehlt es sich, Plattformfunktionen oder bewährte Techniken zur Datensicherung zu verwenden.

  • Überprüfen Sie am Eingang. Der Sicherheitskontext eines Benutzers muss nicht immer an das Back-End geleitet werden, um Autorisierungsprüfungen vorzunehmen. In einem verteilten System ist diese Vorgehensweise meist nicht die beste Option. Die Überprüfung des Clients am Eingang bezieht sich auf die Autorisierung eines Benutzers am ersten Authentifizierungspunkt (z. B. innerhalb der Webanwendung auf dem Webserver) sowie auf die Bestimmung der Ressourcen und Operationen (die potenziell von Downstream-Diensten bereitgestellt werden), auf die der Benutzer zugreifen darf.
    Wenn Sie solide Authentifizierungs- und Autorisierungsstrategien am Eingang entwerfen, können Sie die Delegierung des Sicherheitskontexts des ursprünglichen Aufrufers in den Datenebenen Ihrer Anwendung umgehen.

  • Gehen Sie davon aus, dass externe Systeme unsicher sind. Wenn Sie nicht Eigentümer eines Systems sind, gehen Sie nicht davon aus, dass das System sicher ist.

  • Reduzieren Sie die Angriffsfläche. Vermeiden Sie das Bereitstellen von Informationen, die nicht erforderlich sind. Wenn Sie unnötige Informationen anbieten, eröffnen Sie potenzielle Zugriffsmöglichkeiten, die zu weiteren Sicherheitsrisiken führen können. Gehen Sie auch vorsichtig mit Fehlern um und stellen Sie nicht mehr Informationen bereit als erforderlich, wenn Sie dem Endbenutzer eine Fehlermeldung zurücksenden.

  • Schalten Sie bei Fehlern in einen sicheren Modus. Stellen Sie sicher, dass vertrauliche Daten bei Anwendungsfehlern geschützt bleiben. Geben Sie zudem nicht übermäßig viele Details in Fehlermeldungen an. Nehmen Sie also keine Informationen auf, durch die ein Angreifer ein Sicherheitsrisiko Ihrer Anwendung ausnutzen könnte. Schreiben Sie detaillierte Fehlerinformationen in das Windows-Ereignisprotokoll.

  • Denken Sie daran, dass Sie immer nur so sicher sind wie Ihre schwächste Verbindung. Die Sicherheit ist ein oberstes Gebot für alle Anwendungsebenen.

  • Deaktivieren Sie nicht benötigte Funktionen. Sie können potenzielle Angriffspunkte entfernen, indem Sie Module und Komponenten deaktivieren, die für Ihre Anwendung nicht erforderlich sind. Wenn Ihre Anwendung beispielsweise keinen Ausgabecache verwendet, sollten Sie das Modul für den ASP.NET-Ausgabecache deaktivieren. Wenn in diesem Modul zu einem späteren Zeitpunkt ein Sicherheitsrisiko gefunden wird, stellt dies keine Bedrohung für Ihre Anwendung dar.

 

Zusammenfassung

In diesem Modul wurden Ihnen einige Grundlagen vermittelt, um Sie auf die folgenden Abschnitte des Handbuches vorzubereiten. Stellen Sie sicher, dass Ihnen die in diesem Modul eingeführten Kernkonzepte und Prinzipien bekannt sind, da sie in den folgenden Modulen häufig verwendet und erwähnt werden.