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.

Lieferung Im Unternehmen (vor Ort oder online)
Dauer 3 aufeinanderfolgende Tage
Größe der Gruppe Bis zu 12 Teilnehmer
Anpassung Das Training kann auf Ihre Organisation, Ihren Kontext und Ihre Lernziele zugeschnitten werden.
Sprache Englisch
Investition Auf Anfrage
Broschüre herunterladen

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

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.

Zertifizierung

Nach der Teilnahme an dieser Schulung erhalten die Teilnehmer ein Zertifikat des High Tech Institute.