lehrerbibliothek.deDatenschutzerklärung
Sichere Software programmieren Praktische Strategien und erfolgreiche Techniken zum Schreiben von sicherem Code in einer vernetzten Welt
Sichere Software programmieren
Praktische Strategien und erfolgreiche Techniken zum Schreiben von sicherem Code in einer vernetzten Welt




Michael Howard, David LeBlanc

Microsoft Press
EAN: 9783860636749 (ISBN: 3-86063-674-X)
432 Seiten, paperback, 19 x 24cm, 2002, mit CD-ROM

EUR 44,90
alle Angaben ohne Gewähr

Umschlagtext
Hacker verursachen immer wieder immensen Schaden und bringen Programmierer zum Verzweifeln, indem sie Netzwerkanwendungen korrumpieren, Kreditkartennummern stehlen, Webseiten verunstalten, Würmer in Systeme einschleußen und einstmals schnelle Netzwerke zum Schneckentempo zwingen. Dieses Buch bietet Ihnen die Informationen, Tipps und Techniken, um sich solcher Angriffe zu erwehren und bereits beim Design von Applikationen die wesenltichen Sicherheitsaspekte zu berücksichtigen. Davon ausgehend wird beschrieben wie sichere Code implementiert werden muss und wie Sie ihre Anwendungen optimal auf Sicherheitslücken testen können. Beide Autoren dieses Buches können eine langjährige Erfahrung in diesem Bereich zurückblicken, die Sie illustriert anhand von Beispielen in verschiedenen Programmiersprachen in diesem Buch an Sie weitergeben.



Lesen Sie:

• Warum sichere Systeme notwendig sind

• Sichere Systeme entwerfen

• Staatsfeind Nr. 1: Der Pufferüberlauf

• Effiziente Zugriffssteuerung

• Ausführen mit minimalen Rechten

• Kryptografie

• Geheime Daten speichern

• Kanonische Darstellung

• Sichere Sockets

• RPC, ActiveX und DCOM

• Schutz vor Denial of Service-Angriffen

• Sichere Webdienste

• Sicherer .NET-Code

• Testen von sicheren Anwendungen

• Sichere Softwareinstallation



Auf Begleit-CD:

• Der komplette Beispielcode

• Der englische Originaltitel als elektronisches Buch

• Die Tools Token Master und PPCKey



Die Autoren:

Michael Howard beschäftigt sich in erster Linie mit Design, Programmierung und Testen von Anwendungen als Mitglied der Secure Windows Initiative innerhalb der Windows XP Produktgruppe. David LeBlanc ist Mitglied der Trustworthy Computing Initiative von Microsoft, hat diverse Netzwerküberwachungstools geschrieben und ist Spezialist für interne Intrusion Detection-Tests.
Inhaltsverzeichnis
Vorwort

Danksagungen

Einführung
Wer dieses Buch lesen sollte XVIII
Aufbau des Buchs XVIII
Die Begleit-CD XIX
Installieren der Beispieldateien XIX
Tools XIX
eBook XX
Systemvoraussetzungen XX
Aktualisierte Links XX
Korrekturen, Kommentare und Hilfe XX

Teil l
Sicherheit heute l

1 Warum sichere Systeme notwendig sind
Anwendungen im Wild Wild Web
Wie Sie alle für die Sicherheit begeistern
Sicherheit mit Takt an den Mann bringen
Subversiv vorgehen
Anregungen für das Aufbauen einer Sicherheitskultur
Eine E-Mail vom Chef
Ernennen Sie einen Sicherheitsbeauftragten

2 Sichere Systeme entwerfen
Zwei häufige Fehler
Warum solche Fehler gemacht werden
Unverzichtbare Prinzipien für mehr Sicherheit
Richten Sie einen Sicherheitsprozess ein
Sicherheitszielsetzungen für das Produkt
Betrachten Sie Sicherheit als Produktfeature
Lernen Sie aus Ihren Fehlern
Verwenden Sie minimale Rechte
Errichten Sie mehrere Verteidigungslinien
Betrachten Sie externe Systeme als unsicher
Planen Sie ein Versagen ein
Fallen Sie nach Fehlern in einen sicheren Modus zurück
Setzen Sie sichere Standardeinstellungen
Denken Sie daran: Sicherheitsfeature != sicheres Feature
Verlassen Sie sich niemals darauf, dass Verstecken Sicherheit bedeutet
Drei abschließende Punkte
Sicherheitsdesign durch Bedrohungsmodellierung
Ermitteln Sie die bekannten Bedrohungen für das System
Klassifizieren der Bedrohungen nach ihrer Gefahr
Entscheiden Sie, wie Sie auf die Bedrohungen reagieren wollen
Wählen Sie Techniken zur Abwehr der Bedrohungen
Sicherheitstechniken
Authentifizierung
Autorisierung
Techniken für Fälschungssicherheit und Datenschutz
Schützen Sie Geheimnisse, oder speichern Sie sie gar nicht erst
Verschlüsselung, Hashes, MACs und digitale Signaturen
Überwachung
Filter, Quotierung und Dienstqualität
Minimale Rechte
Zurück zur Beispielanwendung
Eine Fülle von Bedrohungen und Lösungen
Teil II
Techniken für sicheren Code

3 Staatsfeind Nr l: Der Pufferüberlauf
Überlauf eines statischen Puffers
Heap-Überlauf
Fehler bei der Array-Indizierung
Bugs in Formatstrings
Größe von Unicode- und ANSI-Puffern
Ein Beispiel für einen Unicode-Bug
Pufferüberläufe verhindern
Sichere Stringverarbeitung
Gute Aussichten!

4 Effiziente Zugriffssteuerung
Warum ACLs wichtig sind
Exkurs: Korrigieren des Registrierungsbeispiels
Woraus besteht eine ACL?
Geeignete ACLs auswählen
Effiziente Verweigerungs-ACEs
Erstellen von ACLs
ACLs in Windows NT
4 erstellen
ACLs in Windows
2000 erstellen
ACLs mit der Active Template Library erstellen
NULL-DACLs und andere gefährliche ACE-Typen
NULL-DACLs und Überwachung
Gefährliche ACE-Typen
Was tun, wenn ich eine NULL-DACL nicht ändern kann?
Andere Zugriffssteuerungsmechanismen
IP-Einschränkungen
COM+-Rollen
Trigger und Berechtigungen im SQL Server
Ein Beispiel aus dem Krankenhausbereich
Eine wichtige Anmerkung zu Zugriffssteuerungsmechanismen

5 Ausführen mit minimalen Rechten
Reale Angriffe und minimale Rechte
Viren und Trojaner
Entstellung von Webservern
Eine kurze Geschichte der Zugriffssteuerung
Ein Überblick über Rechte
SeBackupPrivilege
SeDebugPrivilege
SeTcbPrivilege
SeAssignPrimaryTokenPrivilege und SelncreaseQuotaPrivilege
Ein Überblick über Tokens
Beziehungen zwischen Tokens, Rechten, SIDs, ACLs und Prozessen
SIDs und Zugriffsprüfung, Rechte und Rechtprüfung
Wie Sie geeignete Rechte auswählen
Schritt 1: Von der Anwendung benutzte Ressourcen auflisten
Schritt 2: Privilegierte APIs auflisten
Schritt 3: Welches Konto wird benötigt?
Schritt 4: Sehen Sie sich den Inhalt des Tokens an
Schritt 5: Sind alle SIDs und Rechte nötig?
Schritt 6: Passen Sie das Token an
Eingeschränkte Token
Dienstkonten mit geringen Rechten in Windows XP und Windows NET Server
Probleme mit Rechten debuggen
Warum Anwendungen nicht als normaler Benutzer laufen
Fehlerursachen ermitteln

6 Kryptografie
Schwache Zufallszahlen
Das Problem: rand
Eine Lösung: CryptGenRandom
Kryptografische Schlüssel aus Kennwörtern ableiten
Die effektive Bitlänge eines Kennworts berechnen
Schlechte Schlüsselverwaltung
Schlüssel nahe an der Quelle speichern
Eigene Kryptografiefunktionen ausführen
Stream-Cipher-Schlüssel
Warum Stream-Ciphers verwendet werden
Die Gefahren von Stream-Ciphers
Und wenn ich denselben Schlüssel verwenden muss?
Bit-Flipping-Angriffe gegen Stream-Ciphers
Abwehren von Bit-Flipping-Angriffen
Hash, Schlüssel-Hash oder digitale Signatur
Denselben Puffer für Klartext und Ciphertext verwenden

7 Geheime Daten speichern
Angriffsmethoden
Manchmal brauchen Sie ein Geheimnis nicht zu speichern
Einen Salted-Hash erzeugen
Geheimdaten vom Benutzer eingeben lassen
Geheime Daten in Windows
2000 und Windows XP speichern
Ein Spezialfall: Client-Anmeldeinformationen in Windows XP
Geheime Daten in Windows NT 4 speichern
Geheime Daten in Windows 95, Windows 98, Windows Me und Windows CE speichern
Die Sicherheit verstärken
Daten in einer Datei unter dem Dateisystem FAT speichern
Daten mit einem eingebetteten Schlüssel und XOR verschlüsseln
Daten mit einem eingebetteten Schlüssel und 3DES verschlüsseln
Daten mit 3DES verschlüsseln und ein Kennwort in der Registrierung speichern
Daten mit 3DES verschlüsseln und einen starken Schlüssel in der Registrierung speichern
Daten mit 3DES verschlüsseln, einen starken Schlüssel in der Registrierung speichern, Datei und Registrierungsschlüssel mit einer ACL schützen
Geheime Daten mit externen Geräten verschlüsseln
Ein Beispielszenario mit PPCKey
Ein Bedrohungsmodell für PPCKey

8 Kanonische Darstellung
Was bedeutet kanonisch und wo liegt das Problem?
Ein Blick in die Geschichte
Umgehen der AOL-Kindersicherung
Umgehen der Namensfilter in Napster
Umgehen der Sicherheitsprüfung von eEye
Schwachstellen in Apple Mac OS X und Apache
Zonen im Internet Explorer 4
::$DATA-Schwachstelle im Internet Information Server
DOS-Gerätenamen
Symbolischer Link im /tmp-Verzeichnis von StarOffice
Häufige Kanonisierungsfehler in Windows
83-Darstellung von langen Dateinamen
Alternative NTFS-Datenströme
Angehängte Zeichen
Das ?-Format
Verzeichniswechsel und übergeordnete Pfade ()
Absolute und relative Dateinamen
Groß- und Kleinschreibung bei Dateinamen
Gerätenamen und reservierte Namen
UNC-Freigaben
Kanonisierungsfehler verhindern
Entscheiden Sie nichts auf Basis von Namen
Namen mit regulären Ausdrücken prüfen
Versuchen Sie, den Namen zu kanonisieren
Kanonisierung bei Server- und Benutzernamen
Servernamen
Benutzernamen

Teil III
Netzwerkanwendungen


9 Sichere Sockets
Serverentführungen verhindern
Serverschnittstellen wählen
Verbindungen annehmen
Firewall-freundliche Anwendungen schreiben
Erledigen Sie die Aufgabe mit einer einzigen Verbindung
Der Server soll keine Rückverbindung zum Client aufbauen
Nutzen Sie verbindungsorientierte Protokolle
Multiplexen Sie Ihre Anwendung nicht über ein anderes Protokoll
Binden Sie in Daten der Anwendungsebene keine Host-IP-Adressen ein
Machen Sie Ihre Anwendung konfigurierbar
Spoofing, Host-Adressen und Port-Nummern

10 RPC, ActiveX-Steuerelemente und DCOM
RPC-Grundlagen
Was ist RPC?
RPC-Anwendungen erstellen
Wie RPC-Anwendungen kommunizieren
Sicheres RPC
Der MIDL-Schalter /robust
Das Attribut [ränge]
Authentifizierte Verbindungen
Paketvertraulichkeit und Paketintegrität
Strenge Kontexthandies
Kontexthandies und Zugriffsprüfung
Vorsicht bei NULL-Kontexthandles
Misstraue Deinem Peer
Sicherheits-Rückruffunktionen
Mehrere RPC-Server in einem einzigen Prozess
Versehen Sie Ihren Endpunkt mit einer Anmerkung
Verbreitete Protokolle nutzen
Sicheres DCOM
DCOM-Grundlagen
Sicherheit auf der Anwendungsebene
DCOM-Benutzerkontexte
Sicherheitseinstellungen im Programmcode
Quellen und Sinks
ActiveX-Grundlagen
Sicheres ActiveX
Welche ActiveX-Komponenten sind sicher für Initialisierung
und Skripterstellung?
Steuerelemente sicher für Initialisierung und Skripterstellung machen

11 Schutz vor Denial-of-Service-Angriffen
Angriff durch Anwendungsabsturz
Angriff durch CPU-Überlastung
Angriff durch Speicherüberlastung
Angriff durch Ressourcenüberlastung
Angriff auf die Netzwerkbandbreite

12 Sichere Webdienste
Vertrauen Sie niemals Benutzereingaben!
Schwachstellen bei Benutzereingaben
Böswillige Benutzereingaben abfangen
Webspezifische Kanonisierungsfehler
7-Bit- und 8-Bit-ASCII
Hexadezimale Escapecodes
UTF-8-Codierung
UCS-2-Unicode-Codierung
Doppelcodierung
HTML-Escapecodes
Kanonisierungsprobleme vermeiden
Weitere Sicherheitsfragen für Webanwendungen
Unsichere HTTP-Daten
ISAPI-Anwendungen und ISAPI-Filter
Speichern Sie keine geheimen Daten in Webseiten
Müssen Sie wirklich Systemadministrator sein?

Teil IV
Spezielle Themen


13 Sicherer NET-Code
Pufferüberläufe und die Common Language Runtime
Eine eigene Behandlungsfunktion für Sicherheitsfehler
Ein kleiner Dämpfer
Geheime Daten in NET speichern
Fordern Sie immer ausreichende Berechtigungen an
Übereifrige Anwendung von Assert
Weitere Details zu Demand und Assert
Keine Scheu vor dem Verweigern von Berechtigungen
Daten von nicht vertrauenswürdigen Quellen überprüfen
Multithreading in ASPNET
Tracing und Debugging von ASPNET-Anwendungen deaktivieren
Gute Zufallszahlen mit dem NET Framework
Daten von nicht vertrauenswürdigen Quellen deserializieren
Verraten Sie dem Angreifer im Fehlerfall nicht zu viel
SOAP
Einige Überlegungen zum Abschluss

14 Testen von sicheren Anwendungen
Die Rolle des Sicherheitstesters
Sicherheitstests sind anders
Der Einstieg
Ein Plan für Sicherheitstests
Zerlegen der Anwendung
Komponentenschnittstellen auflisten
Klassifizieren Sie Schnittstellen nach potentiellen Schwachstellen
Ermitteln Sie, welche Daten jede Schnittstelle verwendet
Sicherheitsprobleme durch Einspeisen fehlerhafter Daten aufspüren
Vor dem Testen
Erstellen von Tools zum Aufspüren von Fehlern
Clients mit böswilligen Servern testen
Sollte ein Benutzer diese Daten sehen oder ändern?
Testen mit Sicherheitsvorlagen
Testcode sollte von höchster Qualität sein
Testen Sie die vollständige Lösung
Codeprüfungen

15 Sichere Softwareinstallation
Das Prinzip der minimalen Rechte
Der Sicherheitskonfigurationseditor
Low-Level-Sicherheits-APIs

16 Empfehlenswerte Verfahren
Datenschutz
Kategorien für gesammelte Daten
Sammeln von Benutzerdaten
Verraten Sie dem Angreifer nichts
Alle Codezweige prüfen
Lassen Sie es ausgeschaltet!
Fehler im Kernelmodus
Zugriff auf Benutzermodusspeicher
Gesicherte Schnittstellen und ungeschützte lOCTLs
Kommentieren Sie sicherheitsrelevante Codeteile
Nutzen Sie die Fähigkeiten des Betriebssystems
Bürden Sie dem Benutzer keine Entscheidungen auf
CreateProcess sicher aufrufen
Übergeben Sie in IpApplicationName nicht NULL
Setzen Sie die Pfadangabe in Anführungszeichen
Gemeinsam verwendete Segmente
Identitätswechselfunktionen korrekt aufrufen
Schreiben Sie keine Benutzerdateien in Programme
Schreiben Sie keine Benutzerdaten in HKLM
Öffnen Sie keine Objekte für FULL_CONTROL oder ALL_ACCESS
Fehler beim Anlegen von Objekten
Temporäre Dateien
Auf der Clientseite gibt es keine Sicherheit
Beispiele sind Vorlagen
Wasser predigen und Wein trinken
Sie schulden es Ihren Kunden
Zugriffssteuerung über eine Administrator-SID
Unterstützen Sie lange Kennwörter

Teil V
Anhänge

A Gefährliche API-Funktionen

B Die zehn ehernen Gesetze der Sicherheit

C Die zehn ehernen Gesetze der Sicherheitsadministration

D Faule Ausreden, die uns zum Hals raushängen

Eine abschließende Überlegung

Weiterführende Literatur

Stichwortverzeichnis

Die Autoren