Eine gemischte Lernreise: Live-Schulungen mit Ausbildern und Laborübungen in einem erstklassigen E-Learning-System. Sie haben noch 3 Monate nach der Schulung Zugang zum E-Learning-System, um die Laborübungen und das Material erneut zu studieren.
Plattform: Windows.
Labs: Praktische Übungen.
Ihre in C# geschriebene Anwendung funktioniert wie vorgesehen, also sind Sie fertig, richtig? Aber haben Sie daran gedacht, falsche Werte einzugeben? 16Gbs Daten? Eine Null? Ein Hochkomma? Negative Zahlen, oder speziell -2^32? Denn das ist es, was die Bösewichte tun werden - und die Liste ist noch lange nicht vollständig.
Der Umgang mit Sicherheit erfordert ein gesundes Maß an Paranoia, und genau das bietet dieser Kurs: ein starkes emotionales Engagement durch viele praktische Übungen und Geschichten aus dem wirklichen Leben, um die Code-Hygiene erheblich zu verbessern. Fehler, Konsequenzen und beste Praktiken sind unser Blut, Schweiß und Tränen.
All dies wird in den Kontext von C# gestellt und um Kernfragen der Programmierung erweitert, wobei die Sicherheitsfallen der C#-Sprache und des .NET-Frameworks erörtert werden.
Damit Sie auf die Kräfte der dunklen Seite vorbereitet sind.
Damit nichts Unerwartetes passiert.
Nichts.
PRAKTISCHE INFO
- Wenn eine Schulung vor Ort nicht möglich ist, können wir eine interaktive Online-Schulung (virtuell) oder eine Hybrid-Schulung anbieten. Das Standardprogramm mit 3 Tagen Inhalt kann auch in 5 halben Tagen (von Montag bis Freitag) durchgeführt werden.
- Sind Sie neugierig, wie Sie den Return on Investment (ROI) von Schulungen zur sicheren Codierung quantifizieren können? Sehen Sie sich diesen Artikel.
Objektiv
- Erläutern Sie Ansätze für den Umgang mit Sicherheitsproblemen im Code;
- Identifizieren Sie Sicherheitsschwachstellen und deren Folgen;
- Erfahren Sie, wie Sie diese Fehler am besten vermeiden können.
Zielgruppe
Dieser Kurs richtet sich an C#-Entwickler, die an Desktop-Anwendungen arbeiten.
Preparedness: Allgemeine C#-Entwicklung.
Programm
Tag 1
Grundlagen der Sicherheit
Was ist Sicherheit?
Bedrohung und Risiko
Arten von Bedrohungen für Computersysteme
Folgen von unsicherer Software
Zwänge und der Markt
Bugs, Schwachstellen und Exploits
Kategorisierung von Fehlern
- Sieben verderbliche Königreiche
- Gemeinsame Schwachstellenaufzählung (CWE)
- CWE/SANS Top 25 der gefährlichsten Software-Fehler
- Schwachstellen in der Umgebung und den Abhängigkeiten
Eingabeüberprüfung
Grundsätze der Eingabevalidierung
- Schwarze Listen und weiße Listen
- Validierung mit Regex
- Was zu validieren ist - die Angriffsfläche
- Wann Sie validieren sollten - Validierung vs. Transformationen
- Wo soll validiert werden - Verteidigung in der Tiefe
Injektion
- Prinzipien der Injektion
- Injektionsangriffe
- CRLF-Injektion
- Baumstamm fälschen
- Labor - Baumstammfälschung
- Protokollfälschung - beste Praktiken
- Code-Einspritzung
- Befehl Injektion
- Übung - Befehlsinjektion
- Bewährte Praktiken der Befehlsinjektion
- Übung - Bewährte Praktiken der Befehlsinjektion
- Fallstudie - Befehlsinjektion
- Skript-Injektion
- Bewährte Praktiken der Injektion
- Eingabeüberprüfung
- Bereinigung der Ausgabe
- Kodierung und Escaping der Ausgabe
- Herausforderungen bei der Kodierung
Umgang mit Integer
- Darstellung von vorzeichenbehafteten Zahlen
- Integer-Visualisierung
- Ganzzahlige Probleme
- Integer-Überlauf
- Labor - Integer-Überlauf
- Signierte / unsignierte Verwirrung
- Labor - Signierte / unsignierte Verwechslung
- Ganzzahlige Trunkierung
- Bewährte Praktiken
- Upcasting
- Vorbedingungstest
- Nachbedingungstest
- Große Ganzzahl-Bibliotheken verwenden
- Integer-Verarbeitung in C#
- Labor - Überprüfte Arithmetik
- Andere numerische Probleme
- Division durch Null
Datenstrukturen
- Datenstruktur Sentinels
- Container
- Container-Fehler
- Assoziative Container
- Iteratoren
Dateien und Streams
- Pfadüberquerung
- Beispiele für Pfadüberquerungen
- Zusätzliche Herausforderungen in Windows
- Bewährte Verfahren zur Pfadüberquerung
- Übung - Pfadüberquerung
- Virtuelle Ressourcen
Unsichere Reflexion
- Reflexion ohne Validierung
- Labor - Unsichere Reflexion
Unsicherer nativer Code
- Abhängigkeit von nativem Code
- Übung - Unsicherer nativer Code
Einige andere Probleme bei der Eingabevalidierung
Verwendung anfälliger Komponenten
Bewertung der Umwelt
Härtung
Importieren von Funktionen aus nicht vertrauenswürdigen Quellen
Management von Schwachstellen
- Patch-Verwaltung
- Schwachstellen-Datenbanken und Scanning-Tools
- Bewertung der Schwachstellen - CVSS
- Übung - Auffinden von Schwachstellen der verwendeten Komponenten
- Der Build-Prozess und CI/CD
- Abhängigkeitsüberprüfung in Cake
Tag 2
Sicherheitsmerkmale
Authentifizierung
- Grundlagen der Authentifizierung
- Schwächen bei der Authentifizierung
- Fallstudie - Umgehung der Zwei-Faktor-Authentifizierung von PayPal
- Bewährte Praktiken für Benutzeroberflächen
- Passwortverwaltung
- Verwaltung eingehender Passwörter
- Speichern von Kontopasswörtern
- Klartext-Passwörter bei Facebook
- Labor - Warum reicht das Hashing von Passwörtern nicht aus?
- Wörterbuchangriffe und Brute-Forcing
- Einsalzen
- Adaptive Hash-Funktionen für die Speicherung von Passwörtern
- Passwort unterwegs
- Passwort-Politik
- Schwache und starke Passwörter
- Passphrasen verwenden
- Übung - Anwenden einer Kennwortrichtlinie
- Die Ashley Madison Datenschutzverletzung
- Der Wörterbuch-Angriff
- Der ultimative Angriff
- Verwertung der Ergebnisse und der daraus gezogenen Lehren
- Verwaltung ausgehender Passwörter
- Hart kodierte Passwörter
- Labor - Festcodiertes Passwort
- Passwort in der Konfigurationsdatei
- Schutz sensibler Informationen im Speicher
- Herausforderungen beim Schutz der Erinnerung
- Speichern von sensiblen Daten im Speicher
- Übung - Speichern von sensiblen Daten im Speicher mit SecureString
Autorisierung
- Grundlagen der Zugangskontrolle
- Fehlende oder unzulässige Autorisierung
- Zugriffskontrolle in Datenbanken
- Übung - Zugriffskontrolle für Datenbanken
- Privilegien und Berechtigungen
- Manipulation der Erlaubnis
- Falsche Verwendung von privilegierten APIs
- Bewährte Praktiken für Genehmigungen
- Das Prinzip des geringsten Privilegs
- Grundsatz der Trennung der Privilegien
- Erlaubnis erteilen
- Privilegien fallen lassen
- Umgang mit unzureichenden Privilegien
Sicherheit der .NET-Plattform
- Code Access Sicherheit
- Beweise
- Berechtigungen
- Der Stack Walk
- Übung - Code-Zugriffssicherheit
- Das Modell der Transparenz
- Bewährte Praktiken
- Labor - Experimentieren mit dem Transparenzmodell
- Rollenbasierte Sicherheit
- Auftraggeber und Identität
- Rollenbasierte Berechtigungen
- Nachahmung
- Übung - Rollenbasierte Sicherheit
- Schutz von .NET Code und Anwendungen
- Code Unterzeichnung
Informationsexposition
- Exposition durch extrahierte Daten und Aggregation
- Durchsickern von Systeminformationen
- Auslaufende Systeminformationen
- Verlassen Sie sich auf Zugänglichkeitsmodifikatoren
- Labor - Unangemessener Schutz durch Zugänglichkeitsmodifikator
- Bewährte Praktiken der Informationsexposition
UI Sicherheit
- Grundsätze der UI-Sicherheit
- Sensible Informationen auf der Benutzeroberfläche
- Übung - Passwort aus der Benutzeroberfläche extrahieren
- Fehlinterpretation von UI-Funktionen oder Aktionen
- Unzureichendes UI-Feedback
- Verlassen Sie sich auf ein verstecktes oder deaktiviertes UI-Element
- Lab - Ausgeblendetes oder deaktiviertes UI-Element
- Unzureichende Anti-Automatisierung
Tag 3
Häufige Schwachstellen in der Software
Zeit und Zustand
- Bewährte Praktiken der Thread-Verwaltung
- Bewährte Methoden der Thread-Verwaltung in C#
- Bedingungen für das Rennen
- Wettlaufbedingung in Objektdatenmitgliedern
- Lab - Singleton Mitgliedsfelder
- Datei-Race-Bedingung
- Zeitpunkt der Überprüfung bis zur Nutzungsdauer (TOCTTOU)
- Labor - TOCTTOU
- Unsichere temporäre Datei
- Datenbank-Race-Bedingungen
- Vermeiden von Race Conditions in C#
- Gegenseitiger Ausschluss und Sperren
- Deadlocks
- Labor - Sperren
- Synchronisierung und Thread-Sicherheit
- Synchronisierung und Thread-Sicherheit in C#
Fehler
- Grundsätze der Fehler- und Ausnahmebehandlung
- Fehlerbehandlung
- Rückgabe eines irreführenden Statuscodes
- Offenlegung von Informationen durch Fehlerberichte
- Behandlung von Ausnahmen
- Im Fangblock. Und was nun?
- Leerer Catch-Block
- Bewährte Praktiken für Fangblöcke
- Übermäßig weite Würfe
- Abfangen von NULL-Zeiger-Ausnahmen
- Ausnahmebehandlung in C#
- Übung - Chaos bei der Behandlung von Ausnahmen
Code-Qualität
- Daten
- Arrays und ToString()
- Initialisierung und Bereinigung
- Uninitialisierte Variable
- Zyklen zur Initialisierung der Klasse
- Labor - Initialisierungszyklen
- Unveröffentlichte Ressource
- Fallstricke der objektorientierten Programmierung
- Modifikatoren für Barrierefreiheit
- Vererbung und Overriding
- Implementieren von Equals()
- Wandlungsfähigkeit
- Schreibgeschützte Sammlungen
- Lab - Veränderliches Objekt
- Klonen
- Klonen sensibler Klassen - Objekt-Hijacking
- Objekt-Hijacking - bewährte Praktiken
- Serialisierung
Denial of Service
- Denial of Service
- Erschöpfung der Ressourcen
- Bargeldüberfluss
- Überschwemmung
- Nachhaltige Kundenbindung
- Denial-of-Service-Probleme in C#
- Endlosschleife
- Labor - Ressourcen erschöpfend
- Amplifikation
- Netzwerk-Verstärkung
- Amplifikation in Datenbanken
- Andere Beispiele für Verstärkung
- Probleme mit der Komplexität des Algorithmus
- Denial of Service mit regulären Ausdrücken (ReDoS)
- Labor - ReDos
- Kollision der Hashtabelle
- Wie funktionieren Hashtabellen?
- Hash-Kollision im Falle von Hashtabellen
- Hashtable-Kollision in C#
Einpacken
Grundsätze der sicheren Kodierung
- Grundlagen der robusten Programmierung von Matt Bishop
- Sichere Designprinzipien von Saltzer und Schröder
- Einige weitere Grundsätze
Und was nun?
- Weitere Quellen und Lektüre
- .NET und C# Ressourcen
- Weitere Labore und Herausforderungen zu tun
Methoden
Zertifizierung
Nach der Teilnahme an dieser Schulung erhalten die Teilnehmer ein Zertifikat des High Tech Institute.

