W2025-ITS
Early DRAFT !
Organisatorisches und Anmeldung für IT-Security Workshop vom 29. September bis 10. Oktober 2025
Wenn Sie die unten genannten Themen interessant finden und in den ersten beiden Oktoberwochen Lust und Zeit haben sich damit auseinanderzusetzen, so finden Sie hier den angestrebten Zeitplan sowie die Möglichkeit sich und (optional) ein spannendes eigenes Thema anzumelden.
POC@TLS-Handshake
Das "store now and decrypt later"-Szenario ist bereits jetzt eine Bedrohung für die Vertraulichkeit der im Rahmen einer TLS-Verbindung übertragenen Daten. Auch, wenn das in der aktuellen TR02102 noch nicht explizit gefordert wurde, ist es bereits jetzt interessant, sich damit zu beschäftigen, wie eine quantensichere (oder besser hybride) asymmetrische Schlüsselaushandlung gelingen kann. Hier bietet OpenSSL ab der Version 3.5+ bereits drei hybride aus klassischem und quantensicheren (ML-KEM) Verfahren:
openssl list -tls1_3 -tls-groups
... SecP256r1MLKEM768:X25519MLKEM768:SecP384r1MLKEM1024.
Auch GnuTLS, wolfSSL und einige Browser unterstützen schon solche hybriden Verfahren.
Doch kann man das auch in der Praxis verwenden? Probieren Sie es aus. Setzen Sie einen Webserver auf, inspizieren Sie mit Wireshark den Handschake, untersuchen Sie Interoperabilität und Performance.
Der nächste Schritt wäre dann auch der Einsatz von PQC-Signaturverfahren für die Authentisierung von Server und ggf. Client. Auch hier sind vielleicht hybride Verfahren sinnvoll. Gibt es schon die Möglichkeit, PQC-Zertifikate und die zugehörigen privaten Schlüssel einzusetzen? Gibt es scvhon CAs die solche Zertifikate ausstellen? Wohin geht die Reise?
Links:
- TR02102 TLS
- OpenSSL 3.5 (SecP256r1MLKEM768:X25519MLKEM768:SecP384r1MLKEM1024)
- draft-ietf-tls-ecdhe-mlkem
- SecP256r1MLKEM768:X25519MLKEM768 @ GnuTLS
- PQC @ wolfSSL
- PQC Betrachtungen
Mentoren: Wolf Müller
POC@OpenVPN
OpenVPN ist eine weit verbreitete Open-Source-Lösung für sichere, verschlüsselter VPNs. OpenVPN ist (anders als WireGuard) hinsichtlich vieler Aspekte konfigurierbar und bietet zahlreiche Optionen. Hier sind also bei der Administration einige Überlegungen nötig, um sichere und auch performante Einstellungen zu wählen. Hinsichtlich der Performance ist OpenVPN im Verbindungsaufbau und oft auch im Transport der eigentlichen Nutzdaten oft langsamer als WireGuard. Der Verbindungsaufbau ist in WireGuard sehr strikt spezifiziert und dadurch effizient. Dies bedeutet aber auch, dass ein Austausch der Kryptoalgorithmen in WireGuard nicht einfach möglich ist. Hier bietet OpenVPN mehr Kryptoagilität, auch wenn dies intrinsisch mit mehr Komplexität somit einer höheren Zahl an Roundtrips zum Verbindungsaufbau bezahlt wird. Häufig wird für den Aufbau des Kontrollkanals TLS verwendet, so dass zur Absicherung gegen Quantencomputer auf die ab OpenSSL >= 3.5 vorhandenen Mechanismen zurückgegriffen werden soll. OpenVPN unterstützt (derzeit bereits oder zukünftig) drei Mechanismen zur Quantensicherheit:
- "poor man's post-quantum cryptography" in Gestalt von preshared symmetrischen Schlüsseln mit den Optionen
tls-crypt,tls-crypt-v2, auf deren Basis dann die TLS-Schlüsselaushandlung ihrerseits verschlüsselt wird (in Version 2 mit nutzerindividuellen Schlüsseln). Dieser Mechanismus ist aber nicht vorwärtssicher unter dem Angreifermodell "Quantencomputer", - Die stärkere und wünschenswertere Methode ist die Nutzung eines hybriden Verfahren mit PQC, die dann "Perfect Forward Secrecy" garantiert. Da OpenVPN in der Regel OpenSSL als TLS-Bibliothek verwendet (siehe W2025-ITS#POC@TLS-Handshake-Thema), sind dann
X25519MLKEM768,SecP256r1MLKEM768undSecP384r1MLKEM1024denkbare Kandidaten, die dann mittls-groups X25519MLKEM768konfigurierbar sein sollen. - Auch eine auf PQC-basierende Authentisierung sowohl des Servers als auch der Clients in Gestalt von "Post-quantum signing/certificates" soll zukünftig möglich sein. Da aber in der Gegenwart noch keine Quantencomputer vorhanden sind die die klassischen Signaturen brechen können und eine Authentisierung nicht rückwirkend erfolgt, ist hier eher die Möglichkeit interessant, aber der Handlungsdruck nicht so immens wie bei dem Schutz der Vertraulichkeit.
Der eigentliche Transport der Nutzdaten erfolgt über den "data channel". Dieser nutzt symmetrische Kryptografie zur Verschlüsselung und Authentisierung. Wenn die Schlüsselübereinkunft quantensicher erfolgt und ausreichend starke (>= 256bit) Schlüssel genutzt, so ist der Datenkanal auch quantensicher. Hierbei sin sicher die AEAD-Chiffren CHACHA20-POLY1305 und AES-256-GCM eine solide Wahl. Während CHACHA20-POLY1305 in der Regel recht performant in Software umgesetzt werden kann und insbesondere gern auf ARM-Architekturen verwendet wird, kann AES-256-GCM seine Vorteile ausspielen, wenn AES hardwareunterstützt (z.B. durch die CPU) ist. WireGuard verwendet CHACHA20-POLY1305 für die Verschlüsselung der Nutzdaten, ist direkt im Kernel implementiert und bietet hervorragende Performance. Um hier etwas aufzuholen, hat OpenVPN das Konzept "Data Channel Offload (DCO)" an den Start gebracht, ein Kernelmodul bereitgestellt, dass die Ver- und Entschlüsselung der Datenpakete direkt im Kernel-Space ermöglicht. Von dem DCO-Kernel-Modulfür CHACHA20-POLY1305 und AES-{128,256}-GCM als Chiffren unterstützt. Versuchen Sie, für Ihren OpenVPN-{Server,Clienten} auch DCO zu verwenden und messen Sie den Performanceunterschied.
Links:
Mentoren: Wolf Müller
Supply Chain Angriff & Paketsignaturen unter Linux
Häufig ist es auch verlockend zu den Repositories der Distribution weitere Paketquellen hinzuzufügen. Man kann einerseits direkt ein konkretes Paket installieren oder aber ein zusätzliches Repository und den öffentlichen Schlüssel zur Signaturprüfung hinzufügen. So wird z.B. für die Installation von Eclipse Temurin der folgende Ablauf vorgesehen:
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
welcher den öffentlichen Signaturschlüssel herunterläd und für apt als vertrauenswürdig hinterlegt und die URL zur Liste der Quellen hinzufügt.
Die eigentliche Erstinstallation erfolgt dann mit:
apt update # update if you haven't already
apt install temurin-21-jdk
Das Vorgehen scheint auch für sicherheitsbewußte NutzerInnen durchaus plausibel, schließlich wird die Paketsignatur vor der Installation geprüft und auch zukünftige Updates werden automatisch gefunden und nach Signaturprüfung installiert, wenn bies mit Boardmitteln angefordert wird:
apt-get update && apt-get upgrade
Wir gehen hier davon aus, dass das Paket zum Zeitpunkt der Erstinstallation genau das war, was wir wollten und integer war. Doch was bedeutet das für die Zukunft?
- Natürlich kann wenn ein Ursprungsprojekt durch Angriffe kompromittiert werden, also kann die nächste bereitgestellte Version unsicher oder bösartig sein.
- Die Paketinstallation erfolgt mit
root-Rechten, so können ggf. bei der Installation Systemdateien gelesen, gelöscht oder verändert werden. - Können aus der Quelle "A" mit dem zugehörigen Signaturschlüssel auch Updates zu in der (System-)Quelle "B" angebotenen Paketen bereitgestellt werden und werden diese dann ohne Warnung installiert?
- Kann ein Paket aus Quelle "A" Dateien überschreiben die eigentlich zu einem anderen Paket gehören?
- Damit ein potenzieller "supply chain attack" nicht gleich auffällt, können natürlich verschiedene Inhalte des Repositories (z.B. je nach Absender-PI) ausgeliefert werden.
- ...
Werden Sie kreativ und probieren Sie es aus. Vielleicht haben Sie noch weitere Ideen. Gibt es Schutzmechanismen, die hier eine Eindämmung der Wirkkraft des installierten öffentlichen Verifikationsschlüssels begrenzen oder eindämmen?
Links:
Mentoren: Wolf Müller
FIDO2 TLS 1.3 Erweiterung
FIDO2 Security Keys bieten eine starke, datensparsame, standardisierte und zunehmend verbreitete Methode zur Clientauthentifizierung in Webanwendungen. Sie bieten hohe Sicherheit, Phishing-Resistenz, Privatsphäre und gute Benutzbarkeit. Die Authentifikatoren werden in anderen Protokollen, die eine Client-Authentifizierung erfordern, kaum verwendet, da sie ursprünglich für Webumgebungen entwickelt wurden. Das Projekt "FIDO2 TLS1.3 Extension" von Jonas Panizza implementiert TLS-Erweiterung in OpenSSL, die sowohl FIDO-Authentifizierung und -Schlüsselregistrierung direkt in TLS integriert und so für Nicht-HTTP(S)-Anwendungen verfügbar macht. Die Erweiterung wird für OpenSSL als zusätzliche C-Bibliothek bereitgestellt.
Eine eindrucksvolle Demonstration des Potenzials liefert Jonas gleich mit, indem er die Erweiterung in hostapd und wpa-Supplicant integriert, um ein 802.1X EAP-TLS-WLAN-Netzwerk einzurichten, das FIDO-Hardware-Authentifikatoren verwendet und herkömmliche X.509-Client-Zertifikate ersetzt.
Um die im TLS (Version 1.3) Handshake ausgetauschten Nachrichten besser verstehen können und damit langfristig dem Ziel von Interoperabilität zwischen "FIDO2 TLS1.3 Erweiterungen" für verschiedenen TLS-Implementierungen (zusätzlich zu OpenSSL) näher zu kommen, wäre eine Möglichkeit zum Logging/Debugging (vielleicht später sorag in Wireshark) wünschenswert. Da TLS v1.3 bereits große Teile des ServerHello verschlüsselt, sollte hier ein Mechanismus geschaffen werden, der dies, wenn vom Nutzer gewünscht, gestattet, indem Wireshark in einer Datei in standardisierter Weise die Sitzungsschlüssel zur Verfügung gestellt werden. Konkret gibt man mittels der Umgebungsvariablen SSLKEYLOGFILE an, dass dieser Mechanismus aktiv ist und in welche Datei die Schlüssel exportiert werden sollen.
Links:
- FIDO2 TLS1.3 Extension
- Minimal Test
- hostapd, wpa-Supplicant
- Wireshark: SSLKEYLOG
- example: sslkeylog.c
- draft-ietf-tls-keylogfile-02
Mentoren: Wolf Müller
WireGuard@Informatik
WireGuard ist ein auf modernen kryptografischen Algorithmen basierendes, in den Linux-Kernel gut integriertes und sehr performantes VPN. Die Konfiguration für einzelne Peers ist sehr übersichtlich. Jedoch ist es nicht vorgesehen, dynamische IP-Adressen nach etablierter Verbindung zu nutzen, sondern diese werden direkt in der Konfigurationsdatei gesetzt. Das reduziert die Komplexität und erhöht die Geschwindigkeit. Wie könnte aber eine komfortable Konfiguration für sehr viele Nutzer (die potenziell auch noch mehrere Geräte haben) aussehen? Gibt es hier bestehende Ansätze, wie (z.B. über einen Webdienst für authentisierte Institutsmitglieder) Konfigurationsdateien (die vielleicht auch einen QR-Code beinhalten) für die Geräte generiert und an die berechtigten Nutzer ausgeliefert werden, so dass potenziell alle Benutzer all Ihre Geräte konfliktfrei mit dem VPN verbinden können? Auch hierbei ist es sicherlich sinnvoll bereits über eine hohe Sicherheit gegen zukünftige Angreifer mit Quantencomputer nachzudenken man:
"PresharedKey — a base64 preshared key generated by wg genpsk. Optional, and may be omitted. This option adds an additional layer of symmetric-key cryptography to be mixed into the already existing public-key cryptography, for post-quantum resistance."
Ein interessantes Projekt könnte vielleicht wg-dynamic sein. Aber suchen Sie getrost nach besseren Ideen oder Ansätzen.
Etwas moderner wäre headscale "An open source, self-hosted implementation of the Tailscale control server".
Links:
- WireGuard
- Protokoll
- wg-dynamic
- wg-dynamic: Idee
- WireGuard Portal
- headscale
- OID für Authentifizierung
Mentor: Wolf Müller
OpenVPN: performant & sicher
OpenVPN ist ein sehr etabliertes und auch historisch gewachsenes VPN, welches viele Konfigurationsmöglichkeiten bietet. Das ist einerseits natürlich fantastisch, andererseits auch eine Herausforderung. Im Vergleich zu WireGuard, welches aufgrund seiner schlanken und "state of the art"-Kryptografie bereits Einzug in den Kernel gefunden hat, ist OpenVPN häufig signifikant langsamer und nicht immer sicher konfiguriert.
Können Sie hier weiterhelfen?
- So wäre es wünschenswert bereits jetzt etwas gegen Angreifer zu unternehmen, die den VPN-Verkehr aufzeichnen und später mit einem Quantencomputer entschlüsseln wollen. Weiterhin ist es wünschenswert, die Sicherheitsreserven zu erhöhen. Da Sie bei einer Authentifizierung mittels TLS-Client-Zertifikaten eine eigene PKI verwenden können, bietet es sich an, hier ECC-Schlüssel mit >400 Bit zu wählen. Weiterhin sind die Optionen
--tls-cryptoder besser--tls-crypt-v2interessant. Versuchen Sie, einen schnellen und sicheren TLS-Handshake zur Authentifizierung und Schlüsselableitung zu etablieren. - Im zweiten Schritt müssen dann noch die eigentlichen Nutzdaten ver-/entschlüsselt werden. Um dies performant und dennoch sicher umzusetzen, können Sie zum einen versuchen, die Hardwareunterstützung für AES zu aktivieren. Aber selbst wenn Ihnen das gelingt, wird WireGuard wahrscheinlich immer noch weitaus performanter sein. Das Problem ist, dass bislang bei OpenVPN in der Regel zwischen Versenden und Empfang und der Ver-/Entschlüsselung ein aufwendiger Wechsel zwischen User- und Kernelspace erfolgt, der in WireGuard nicht erforderlich ist. Doch auch hier gibt es Hoffnung in Gestalt von "OpenVPN Data Channel Offload", welches unter Linux ein Kernelmodul "openvpn-dco" nutzt um hier die Performance deutlich zu steigern. Konkret werden die AEAD Verschlüsselungen AES-GCM-256, AES-GCM-128 und CHACHA20POLY1305 unterstützt.
- Im dritten Schritt wäre eine möglichst performante Umsetzung zum Einsatz unter den im Institut gegebenen Rahmenbedingungen wünschenswert. Hier könnte der OpenVPN-Server unter Proxmox mit möglichst Hardwareunterstützung für AES in Kombination mit DCO laufen, der Handshake sollte sicher, schnell und kompakt laufen, die Authentisierung gegen einen LDAP-Server erfolgen.
Motivation: Bei meinem OpenVPN unter Windows 10 hat sich der Downstream von 48 Mbit/s auf 182 Mbit/s (exemplarisch, nicht repräsentativ) verbessert.
Links:
- OpenVPN DCO
- OpenVPN git für openvpn 2.6.12
- Tutorial: Turn on OpenVPN DCO
- @OpenSuse
- git für ovpn-dco-win
- BSI TR-02102-2
- Proxmox
Mentoren: Wolf Müller
WebAuthn / FIDO2
WebAuthn ist ein browserübergreifender Standard zur Authentisierung im Web. Die meisten modernen Browser Firefox, Chrome, Safari, Opera unterstützen die Verwendung von Sicherheitstoken zur Authentisierung gegenüber von besuchten Webdiensten ohne die Installation von weiterer Software oder Treibern. Während auch in WebAuthn aufgenommenen Standard FIDO-U2F ursprünglich dazu verwendet wurde, um eine Nutzername/Passwort-basierte Authentisierung durch die Nutzung eines universellen zweiten Faktors gegen automatisierte Angriffe entfernter Angreifer zu härten, ist es mit FIDO2 möglich, sich ganz ohne die Verwendung von Passwörtern zu authentisieren.
Probieren Sie es aus! Wo kann man sich mit FIDO2 authentisieren? (Interessante Webdienste). Versuchen Sie, einen Web-Service mit FIDO2-Authentisierung aufzusetzen! Obwohl WebAuthn/FIDO2 primär zur Nutzung mit Webdiensten entworfen wurde, sind ggf. auch andere Nutzungen (lokales Login, Windows Hello, Linux PAM, SSH, SCP, ...) denkbar. Was geht (schon)?
Mentor: Wolf Müller
Umsetzung eines PQC-Verfahrens im Rahmen des CNG Frameworks
(spannend, aber anspruchsvoll)
Post-Quanten-Kryptografie befindet sich derzeit im Prozess der Standardisierung und es werden viele Demo-Anwendungen umgesetzt. Statt jede Anwendung einzeln zu modifizieren und Support für diese neuen Verfahren einzubauen, bietet das MS CNG Framework die Möglichkeit, Module global im Betriebssystem zu ergänzen. Anwendungen, die die entsprechenden System-Routinen verwenden, erhalten werden damit PQC-fähig ohne modifiziert werden zu müssen.
Aufgaben:
- Einarbeitung in das CNG-Framework
- Analyse des Beispielcodes (C++)
- Auswahl eines geeigneten PQC-Verfahrens (z.B. Dilithium https://pq-crystals.org/index.shtml)
- Implementierung von CNG Cryptographic Algorithm Provider sowie Signature/Encryption Provider
Links:
- Understanding Cryptographic Providers
- SDK mit Dokumentation und Beispiel-Code
- 2024 standardisierte PQC: FIPS 203, 204 und 205
Skizze Microsoft CNG
Mentoren: Wolf Müller, Frank Morgner, Holger Eble
POC@FIDO2
Auch wenn FIDO2 ein Verfahren zur starken Authentisierung ist und somit nicht durch das "store now, decrypt later"-Szenario bedroht ist, so ist es sicher eine gute Idee auch an dieser Stelle bereits über die Verwendung von quantenresistenten verfahren nachzudenken. So sind ist der Plan ja die FIDO-Sticks eine lange Zeit als hardwaresichere Platform zu nutzen. Konkret wurde mit OpenSK einer in Rust geschriebenen Open-Source-Implementierung ein Prototyp vorgelegt, der die Signaturalgorithmen (klassisch) ECDSA und (PQC) Dilithium zu einer Hybridsignatur kombiniert, wobei die Signaturerstellung in einem akzeptablen Zeitrahmen auf dem FIDO-Stick erfolgt. Versuchen Sie diese Implementierung auf der Plattform Nordic nRF52840-DK zum laufen zu bringen, wie es in dem Abstract des Papers angeregt wird: "We publish an open-source implementation of our scheme at hybrid-pqc so that other researchers can reproduce our results on a nRF52840 development kit." Hierzu sollten Sie vielleicht erst einmal versuchen die klassische OpenSK-Version mit CTAP zu testen, um dann zu verstehen, wie man auf dem Stick das Erzeugen eines Schlüsselpaars anstößt. Erst im nächsten Schritt wird der Testaufbau dann auf die hybride Version erweitert.
Links:
Mentoren: Wolf Müller
Absicherung KNXD
Der Zugriff auf KNX-Komponenten im Heimnetzwerk (KNX-Bus) kann mithilfe der Open Source Software knxd vom Netzwerk erfolgen. Sinnvollerweise wird der Dienst so konfiguriert, dass er nur im Heimnetzwerk (also in der Regel in einem privaten Netzwerk) verfügbar ist. Dennoch eröffnet sich damit die Möglichkeit, ohne eine weitere Authentisierung auf KNX-Komponenten zuzugreifen. So könnte ein bösartiges Gerät (Fernseher, Staubsauger, Smarter Lautsprecher) die mit meinem Heim-IP-Netzwerk verbunden sind, diese Möglichkeit ausnutzen, um Zugriff auf beispielsweise die Heizungssteuerung oder Türschlösser zu erlangen. Wünschenswert wäre hier eine stärkere Authentisierung. Ideen/Priobleme:
- TLS mit Clientzertifikaten statt TCP-Socket?
- Geht da was mit Wireguard?
- TLS könnte in den Code von knxd integriert werden.
- ETS 5 kann nicht modifiziert werden, geht da was mit stunnel?
- Alternativ könnte man auch versuchen, eine Authentisierung gemäß KNX-IP-Secure Standard umzusetzen, was aber eher für eine Masterarbeit geeignet ist.
Links:
Mentoren: Wolf Müller
USB-Pentesting
USB-Geräte, welche leichtfertig angesteckt werden können ein beachtliches Risiko für die Sicherheit des jeweiligen Rechners darstellen. Was kann man mit solchen Geräten erreichen, welche Abwehrmechanismen gibt es? Probieren Sie es aus, zwei Geräte haben wir für unseren Workshop beschafft:
Links:
- Heise: "Pendrive S3: kleiner Stick mit ESP32-S3 für Pentesting und Entwicklung"
- ThingPulse Pendrive S3
- Github P4wnP1 A.L.O.A.
- USBGuard
- usbauth
Mentoren: Wolf Müller