<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE FL_Course SYSTEM "https://www.flane.de/dtd/fl_course095.dtd"><?xml-stylesheet type="text/xsl" href="https://portal.flane.ch/css/xml-course.xsl"?><course productid="36438" language="de" source="https://portal.flane.ch/swisscom/xml-course/36438" lastchanged="2025-10-29T08:42:31+01:00" parent="https://portal.flane.ch/swisscom/xml-courses"><title>Code responsibly with generative AI in C++</title><productcode>CRWGAIC++</productcode><vendorcode>CY</vendorcode><vendorname>Cydrill</vendorname><fullproductcode>CY-CRWGAIC++</fullproductcode><version>1.0</version><objective>&lt;ul&gt;
&lt;li&gt;Das Wesentliche der verantwortungsvollen KI verstehen&lt;/li&gt;&lt;li&gt;Vertrautmachen mit grundlegenden Konzepten der Cybersicherheit&lt;/li&gt;&lt;li&gt;Korrekte Implementierung verschiedener Sicherheitsmerkmale&lt;/li&gt;&lt;li&gt;Ermittlung von Schwachstellen und deren Folgen&lt;/li&gt;&lt;li&gt;Lernen Sie die besten Sicherheitspraktiken in C++&lt;/li&gt;&lt;li&gt;Verwaltung von Schwachstellen in Komponenten von Drittanbietern&lt;/li&gt;&lt;li&gt;Ans&amp;auml;tze und Grunds&amp;auml;tze der Eingabevalidierung&lt;/li&gt;&lt;li&gt;All dies im Kontext von GitHub Copilot&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Einpacken&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Grunds&amp;auml;tze der sicheren Kodierung
&lt;ul&gt;
&lt;li&gt;Grunds&amp;auml;tze der robusten Programmierung von Matt Bishop&lt;/li&gt;&lt;li&gt;Sichere Gestaltungsprinzipien von Saltzer und Schroeder&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Und was nun?&lt;/li&gt;&lt;li&gt;Quellen zur Softwaresicherheit und weiterf&amp;uuml;hrende Literatur
&lt;ul&gt;
&lt;li&gt;C- und C++-Ressourcen&lt;/li&gt;&lt;li&gt;Verantwortungsvolle KI-Prinzipien in der Softwareentwicklung&lt;/li&gt;&lt;li&gt;Generative AI - Ressourcen und zus&amp;auml;tzliche Anleitungen&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</objective><essentials>&lt;p&gt;Allgemeine C++- und C-Entwicklung&lt;/p&gt;</essentials><audience>&lt;p&gt;C/C++-Entwickler, die Copilot oder andere GenAI-Tools verwenden&lt;/p&gt;</audience><contents>&lt;h4&gt;Tag 1&lt;/h4&gt;
&lt;h4&gt;Verantwortungsbewusst kodieren mit GenAI&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Was ist verantwortungsvolle KI?&lt;/li&gt;&lt;li&gt;Was ist Sicherheit?&lt;/li&gt;&lt;li&gt;Bedrohung und Risiko&lt;/li&gt;&lt;li&gt;Arten von Cybersicherheitsbedrohungen - die CIA-Triade&lt;/li&gt;&lt;li&gt;Arten von Cybersicherheitsbedrohungen - das STRIDE-Modell&lt;/li&gt;&lt;li&gt;Folgen von unsicherer Software&lt;/li&gt;&lt;li&gt;Sicherheit und verantwortungsvolle KI in der Softwareentwicklung&lt;/li&gt;&lt;li&gt;GenAI-Werkzeuge f&amp;uuml;r die Kodierung: Copilot, Codeium und andere&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Schwachstellen in der Speicherverwaltung&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Montagegrundlagen und Aufrufkonventionen
&lt;ul&gt;
&lt;li&gt;x64 assembly essentials&lt;/li&gt;&lt;li&gt;Register und Adressierung&lt;/li&gt;&lt;li&gt;H&amp;auml;ufigste Anweisungen&lt;/li&gt;&lt;li&gt;Aufruf von Konventionen auf x64&lt;/li&gt;&lt;li&gt;Einberufung von Kongressen - was es damit auf sich hat&lt;/li&gt;&lt;li&gt;Aufrufkonvention auf x64&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Der Stapelrahmen&lt;/li&gt;&lt;li&gt;Gestapelte Funktionsaufrufe&lt;/li&gt;&lt;li&gt;Puffer&amp;uuml;berlauf
&lt;ul&gt;
&lt;li&gt;Speicherverwaltung und Sicherheit&lt;/li&gt;&lt;li&gt;Puffersicherheitsprobleme&lt;/li&gt;&lt;li&gt;Puffer&amp;uuml;berlauf auf dem Stack&lt;/li&gt;&lt;li&gt;Puffer&amp;uuml;berlauf auf dem Stack - Stack Smashing&lt;/li&gt;&lt;li&gt;Ausbeutung - Entf&amp;uuml;hrung des Kontrollflusses&lt;/li&gt;&lt;li&gt;&amp;Uuml;bung - Puffer&amp;uuml;berlauf 101, Wiederverwendung von Code&lt;/li&gt;&lt;li&gt;Ausnutzung - Willk&amp;uuml;rliche Codeausf&amp;uuml;hrung&lt;/li&gt;&lt;li&gt;Einschleusen von Shellcode&lt;/li&gt;&lt;li&gt;&amp;Uuml;bung - Code-Injektion, Ausbeutung mit Shellcode&lt;/li&gt;&lt;li&gt;Fallstudie - Stack BOF in FriendlyName Handhabung des Wemo Smart Plug&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Zeiger-Manipulation
&lt;ul&gt;
&lt;li&gt;Modifikation von Sprungtabellen&lt;/li&gt;&lt;li&gt;&amp;Uuml;berschreiben von Funktionszeigern&lt;/li&gt;&lt;li&gt;Bew&amp;auml;hrte Verfahren und einige typische Fehler&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Unsichere Funktionen
&lt;ul&gt;
&lt;li&gt;Umgang mit unsicheren Funktionen&lt;/li&gt;&lt;li&gt;&amp;Uuml;bung - Behebung eines Puffer&amp;uuml;berlaufs (Erkundung mit Copilot)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Verwendung von std::string in C++
&lt;ul&gt;
&lt;li&gt;Manipulation von C-&amp;auml;hnlichen Zeichenketten in C++&lt;/li&gt;&lt;li&gt;B&amp;ouml;sartige Beendigung von Zeichenketten&lt;/li&gt;&lt;li&gt;Labor - Verwirrung bei der Terminierung von Zeichenketten (Erkundung mit Copilot)&lt;/li&gt;&lt;li&gt;Fehler bei der Berechnung der Stringl&amp;auml;nge&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Tag 2&lt;/h4&gt;&lt;h4&gt;H&amp;auml;rtung der Speicherverwaltung&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Absicherung der Toolchain
&lt;ul&gt;
&lt;li&gt;Absicherung der Toolchain in C++&lt;/li&gt;&lt;li&gt;Verwendung von FORTIFY_SOURCE&lt;/li&gt;&lt;li&gt;Labor - Auswirkungen von FORTIFY&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Adress-Sanitizer (ASan)
&lt;ul&gt;
&lt;li&gt;AddressSanitizer (ASan) verwenden&lt;/li&gt;&lt;li&gt;&amp;Uuml;bung - AddressSanitizer verwenden&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Schutz vor Stapelzerschlagung
&lt;ul&gt;
&lt;li&gt;Erkennung von BoF mit einem Stack Canary&lt;/li&gt;&lt;li&gt;Klonen von Argumenten&lt;/li&gt;&lt;li&gt;Schutz vor Stapelzerst&amp;ouml;rung auf verschiedenen Plattformen&lt;/li&gt;&lt;li&gt;SSP-&amp;Auml;nderungen des Prologs und Epilogs&lt;/li&gt;&lt;li&gt;Labor - Auswirkungen des Stapelzerst&amp;ouml;rungsschutzes&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Laufzeit-Schutzmassnahmen
&lt;ul&gt;
&lt;li&gt;Laufzeit-Instrumentierung&lt;/li&gt;&lt;li&gt;Adressraum-Layout-Randomisierung (ASLR)
&lt;ul&gt;
&lt;li&gt;ASLR auf verschiedenen Plattformen&lt;/li&gt;&lt;li&gt;Labor - Auswirkungen von ASLR&lt;/li&gt;&lt;li&gt;Umgehung von ASLR - NOP-Schlitten&lt;/li&gt;&lt;li&gt;Umgehung von ASLR - Speicherlecks&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Nicht ausf&amp;uuml;hrbare Speicherbereiche
&lt;ul&gt;
&lt;li&gt;Das NX-Bit&lt;/li&gt;&lt;li&gt;Schreiben XOR Ausf&amp;uuml;hren (W^X)&lt;/li&gt;&lt;li&gt;NX auf verschiedenen Plattformen&lt;/li&gt;&lt;li&gt;Labor - Auswirkungen von NX&lt;/li&gt;&lt;li&gt;NX-Umgehung - Angriffe durch Wiederverwendung von Code&lt;/li&gt;&lt;li&gt;Return-to-libc / Bogeninjektion&lt;/li&gt;&lt;li&gt;R&amp;uuml;ckgabeorientierte Programmierung (ROP)&lt;/li&gt;&lt;li&gt;Schutz vor ROP&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Fallstudie - Systematische Ausnutzung eines MediaTek-Puffer&amp;uuml;berlaufs&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Tag 3&lt;/h4&gt;&lt;h4&gt;H&amp;auml;ufige Sicherheitsl&amp;uuml;cken in Software&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Sicherheitsmerkmale
&lt;ul&gt;
&lt;li&gt;Authentifizierung&lt;/li&gt;&lt;li&gt;Passwortverwaltung
&lt;ul&gt;
&lt;li&gt;Verwaltung eingehender Passw&amp;ouml;rter&lt;/li&gt;&lt;li&gt;Speichern von Kontopassw&amp;ouml;rtern&lt;/li&gt;&lt;li&gt;Passwort im Transit&lt;/li&gt;&lt;li&gt;Labor - Reicht das Hashing von Passw&amp;ouml;rtern aus?&lt;/li&gt;&lt;li&gt;W&amp;ouml;rterbuchangriffe und Brute-Forcing&lt;/li&gt;&lt;li&gt;Salzen&lt;/li&gt;&lt;li&gt;Adaptive Hash-Funktionen f&amp;uuml;r die Passwortspeicherung&lt;/li&gt;&lt;li&gt;Passwort-Politik&lt;/li&gt;&lt;li&gt;NIST-Authentifikator-Anforderungen f&amp;uuml;r gespeicherte Geheimnisse&lt;/li&gt;&lt;li&gt;Migration der Passwort-Datenbank&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Code quality
&lt;ul&gt;
&lt;li&gt;Codequalit&amp;auml;t und Sicherheit&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Umgang mit Daten
&lt;ul&gt;
&lt;li&gt;Typ-Fehlanpassung&lt;/li&gt;&lt;li&gt;Labor - Typeninkongruenz (Erkundung mit Copilot)&lt;/li&gt;&lt;li&gt;Initialisierung und Bereinigung
&lt;ul&gt;
&lt;li&gt;Konstrukteure und Destrukteure&lt;/li&gt;&lt;li&gt;Initialisierung von statischen Objekten&lt;/li&gt;&lt;li&gt;&amp;Uuml;bung - Initialisierungszyklen (Erkundung mit Copilot)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Unver&amp;ouml;ffentlichte Ressource&lt;/li&gt;&lt;li&gt;Array-Verf&amp;uuml;gung in C++&lt;/li&gt;&lt;li&gt;&amp;Uuml;bung - Mischen von delete und delete[] (Erkundung mit Copilot)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Fallstricke der objektorientierten Programmierung
&lt;ul&gt;
&lt;li&gt;Zug&amp;auml;nglichkeitsmodifikatoren&lt;/li&gt;&lt;li&gt;Sind Zug&amp;auml;nglichkeitsmodifikatoren ein Sicherheitsmerkmal?&lt;/li&gt;&lt;li&gt;Vererbung und Objektaufteilung&lt;/li&gt;&lt;li&gt;Implementierung des Kopieroperators&lt;/li&gt;&lt;li&gt;Der Kopieroperator und die Ver&amp;auml;nderbarkeit&lt;/li&gt;&lt;li&gt;Ver&amp;auml;nderlichkeit&lt;/li&gt;&lt;li&gt;Objekte mit ver&amp;auml;nderlicher Pr&amp;auml;dikatsfunktion&lt;/li&gt;&lt;li&gt;Lab - Objekt mit ver&amp;auml;nderlicher Pr&amp;auml;dikatsfunktion&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Verwendung anf&amp;auml;lliger Komponenten&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Sicherheit von KI-generiertem Code&lt;/li&gt;&lt;li&gt;Praktische Angriffe auf Tools zur Codegenerierung&lt;/li&gt;&lt;li&gt;Abh&amp;auml;ngigkeits-Halluzination durch generative KI&lt;/li&gt;&lt;li&gt;Fallstudie - Eine Geschichte der Schw&amp;auml;chen von GitHub Copilot (bis Mitte 2024)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
[/list]&lt;/p&gt;</contents><outline>&lt;ul&gt;
&lt;li&gt;Verantwortungsbewusst kodieren mit GenAI&lt;/li&gt;&lt;li&gt;Schwachstellen in der Speicherverwaltung&lt;/li&gt;&lt;li&gt;H&amp;auml;rtung der Speicherverwaltung&lt;/li&gt;&lt;li&gt;H&amp;auml;ufige Sicherheitsl&amp;uuml;cken in Software&lt;/li&gt;&lt;li&gt;Verwendung anf&amp;auml;lliger Komponenten&lt;/li&gt;&lt;li&gt;Einpacken&lt;/li&gt;&lt;/ul&gt;</outline><comments>&lt;p&gt;&lt;em&gt;Dieser Text wurde automatisiert &amp;uuml;bersetzt. Um den englischen Originaltext anzuzeigen, klicken Sie bitte &lt;span class=&quot;cms-link-marked&quot;&gt;&lt;a class=&quot;fl-href-prod&quot; href=&quot;/swisscom/en/course/36438&quot;&gt;&lt;svg role=&quot;img&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-nosnippet class=&quot;cms-linkmark&quot;&gt;&lt;use xlink:href=&quot;/css/img/icnset-linkmarks.svg#linkmark&quot;&gt;&lt;/use&gt;&lt;/svg&gt;hier&lt;/a&gt;&lt;/span&gt;.&lt;/em&gt;&lt;/p&gt;</comments><objective_plain>- Das Wesentliche der verantwortungsvollen KI verstehen
- Vertrautmachen mit grundlegenden Konzepten der Cybersicherheit
- Korrekte Implementierung verschiedener Sicherheitsmerkmale
- Ermittlung von Schwachstellen und deren Folgen
- Lernen Sie die besten Sicherheitspraktiken in C++
- Verwaltung von Schwachstellen in Komponenten von Drittanbietern
- Ansätze und Grundsätze der Eingabevalidierung
- All dies im Kontext von GitHub Copilot
Einpacken


- Grundsätze der sicheren Kodierung

- Grundsätze der robusten Programmierung von Matt Bishop
- Sichere Gestaltungsprinzipien von Saltzer und Schroeder
- Und was nun?
- Quellen zur Softwaresicherheit und weiterführende Literatur

- C- und C++-Ressourcen
- Verantwortungsvolle KI-Prinzipien in der Softwareentwicklung
- Generative AI - Ressourcen und zusätzliche Anleitungen</objective_plain><essentials_plain>Allgemeine C++- und C-Entwicklung</essentials_plain><audience_plain>C/C++-Entwickler, die Copilot oder andere GenAI-Tools verwenden</audience_plain><contents_plain>Tag 1


Verantwortungsbewusst kodieren mit GenAI


- Was ist verantwortungsvolle KI?
- Was ist Sicherheit?
- Bedrohung und Risiko
- Arten von Cybersicherheitsbedrohungen - die CIA-Triade
- Arten von Cybersicherheitsbedrohungen - das STRIDE-Modell
- Folgen von unsicherer Software
- Sicherheit und verantwortungsvolle KI in der Softwareentwicklung
- GenAI-Werkzeuge für die Kodierung: Copilot, Codeium und andere

Schwachstellen in der Speicherverwaltung


- Montagegrundlagen und Aufrufkonventionen

- x64 assembly essentials
- Register und Adressierung
- Häufigste Anweisungen
- Aufruf von Konventionen auf x64
- Einberufung von Kongressen - was es damit auf sich hat
- Aufrufkonvention auf x64
- Der Stapelrahmen
- Gestapelte Funktionsaufrufe
- Pufferüberlauf

- Speicherverwaltung und Sicherheit
- Puffersicherheitsprobleme
- Pufferüberlauf auf dem Stack
- Pufferüberlauf auf dem Stack - Stack Smashing
- Ausbeutung - Entführung des Kontrollflusses
- Übung - Pufferüberlauf 101, Wiederverwendung von Code
- Ausnutzung - Willkürliche Codeausführung
- Einschleusen von Shellcode
- Übung - Code-Injektion, Ausbeutung mit Shellcode
- Fallstudie - Stack BOF in FriendlyName Handhabung des Wemo Smart Plug
- Zeiger-Manipulation

- Modifikation von Sprungtabellen
- Überschreiben von Funktionszeigern
- Bewährte Verfahren und einige typische Fehler
- Unsichere Funktionen

- Umgang mit unsicheren Funktionen
- Übung - Behebung eines Pufferüberlaufs (Erkundung mit Copilot)
- Verwendung von std::string in C++

- Manipulation von C-ähnlichen Zeichenketten in C++
- Bösartige Beendigung von Zeichenketten
- Labor - Verwirrung bei der Terminierung von Zeichenketten (Erkundung mit Copilot)
- Fehler bei der Berechnung der Stringlänge
Tag 2

Härtung der Speicherverwaltung


- Absicherung der Toolchain

- Absicherung der Toolchain in C++
- Verwendung von FORTIFY_SOURCE
- Labor - Auswirkungen von FORTIFY
- Adress-Sanitizer (ASan)

- AddressSanitizer (ASan) verwenden
- Übung - AddressSanitizer verwenden
- Schutz vor Stapelzerschlagung

- Erkennung von BoF mit einem Stack Canary
- Klonen von Argumenten
- Schutz vor Stapelzerstörung auf verschiedenen Plattformen
- SSP-Änderungen des Prologs und Epilogs
- Labor - Auswirkungen des Stapelzerstörungsschutzes
- Laufzeit-Schutzmassnahmen

- Laufzeit-Instrumentierung
- Adressraum-Layout-Randomisierung (ASLR)

- ASLR auf verschiedenen Plattformen
- Labor - Auswirkungen von ASLR
- Umgehung von ASLR - NOP-Schlitten
- Umgehung von ASLR - Speicherlecks
- Nicht ausführbare Speicherbereiche

- Das NX-Bit
- Schreiben XOR Ausführen (W^X)
- NX auf verschiedenen Plattformen
- Labor - Auswirkungen von NX
- NX-Umgehung - Angriffe durch Wiederverwendung von Code
- Return-to-libc / Bogeninjektion
- Rückgabeorientierte Programmierung (ROP)
- Schutz vor ROP
- Fallstudie - Systematische Ausnutzung eines MediaTek-Pufferüberlaufs
Tag 3

Häufige Sicherheitslücken in Software


- Sicherheitsmerkmale

- Authentifizierung
- Passwortverwaltung

- Verwaltung eingehender Passwörter
- Speichern von Kontopasswörtern
- Passwort im Transit
- Labor - Reicht das Hashing von Passwörtern aus?
- Wörterbuchangriffe und Brute-Forcing
- Salzen
- Adaptive Hash-Funktionen für die Passwortspeicherung
- Passwort-Politik
- NIST-Authentifikator-Anforderungen für gespeicherte Geheimnisse
- Migration der Passwort-Datenbank
- Code quality

- Codequalität und Sicherheit
- Umgang mit Daten

- Typ-Fehlanpassung
- Labor - Typeninkongruenz (Erkundung mit Copilot)
- Initialisierung und Bereinigung

- Konstrukteure und Destrukteure
- Initialisierung von statischen Objekten
- Übung - Initialisierungszyklen (Erkundung mit Copilot)
- Unveröffentlichte Ressource
- Array-Verfügung in C++
- Übung - Mischen von delete und delete[] (Erkundung mit Copilot)
- Fallstricke der objektorientierten Programmierung

- Zugänglichkeitsmodifikatoren
- Sind Zugänglichkeitsmodifikatoren ein Sicherheitsmerkmal?
- Vererbung und Objektaufteilung
- Implementierung des Kopieroperators
- Der Kopieroperator und die Veränderbarkeit
- Veränderlichkeit
- Objekte mit veränderlicher Prädikatsfunktion
- Lab - Objekt mit veränderlicher Prädikatsfunktion

Verwendung anfälliger Komponenten


- Sicherheit von KI-generiertem Code
- Praktische Angriffe auf Tools zur Codegenerierung
- Abhängigkeits-Halluzination durch generative KI
- Fallstudie - Eine Geschichte der Schwächen von GitHub Copilot (bis Mitte 2024)

[/list]</contents_plain><outline_plain>- Verantwortungsbewusst kodieren mit GenAI
- Schwachstellen in der Speicherverwaltung
- Härtung der Speicherverwaltung
- Häufige Sicherheitslücken in Software
- Verwendung anfälliger Komponenten
- Einpacken</outline_plain><comments_plain>Dieser Text wurde automatisiert übersetzt. Um den englischen Originaltext anzuzeigen, klicken Sie bitte hier.</comments_plain><duration unit="d" days="3">3 Tage</duration><pricelist><price country="DE" currency="EUR">2250.00</price><price country="SI" currency="EUR">2250.00</price><price country="AT" currency="EUR">2250.00</price><price country="SE" currency="EUR">2250.00</price><price country="CH" currency="CHF">2250.00</price></pricelist><miles/></course>