Dieser Vortrag bietet eine tiefgehende protokoll- und netzwerktechnische Analyse des Virtual Network Computing (VNC) und des zugrundeliegenden Remote Frame Buffer (RFB) Protokolls (standardisiert in RFC 6143). Trotz seines Alters (Entwicklung Ende der 1990er Jahre) ist VNC im Jahr 2026 weiterhin weitreichend im Einsatz, insbesondere in industriellen Steuerungsanlagen (Operational Technology / OT), Hypervisoren (wie QEMU/Proxmox), IP-KVM-Geräten und Legacy-Systemen.
Die Analyse beleuchtet die vier primären Phasen einer RFB-Sitzung: Versionsaushandlung, Authentifizierung (Handshake), Initialisierung und die interaktive Session. Ein kritischer Fokus liegt auf den inhärenten Sicherheitsdefiziten des Protokolls. Die standardmäßige VNC-Authentifizierung basiert auf dem veralteten Data Encryption Standard (DES) im Challenge-Response-Verfahren und limitiert Passwörter effektiv auf lediglich 8 Byte, während jegliche native Transportverschlüsselung im Protokoll fehlt. Zudem werden die verschiedenen Pixel-Kodierungs- und Kompressionstechniken (wie RRE, Hexle, TRLE und ZRLE) im Detail untersucht. Diese zeigen, wie das Protokoll versucht, Bandbreite durch Kachelung (16x16 Pixel große Tiles), Farbpaletten und Lauflängenkodierung (Run-Length Encoding) zu sparen, was jedoch die Protokoll-Schnittstellen und die Implementierung von Servern hochgradig komplex und fehleranfällig macht.
Wichtigste Punkte & Zeitstempel
0:13 Einführung in VNC & RFB-Protokoll: Vorstellung des Referenten Patrick Rauscher und Einführung in das Thema VNC als klassischer Fernwartungszugang auf Netzwerk-Layer 3 sowie das zugrundeliegende Remote Frame Buffer (RFB) Protokoll.
1:21 Relevanz von VNC im Jahr 2026: Trotz der Verfügbarkeit modernerer Alternativen (RDP, TeamViewer, AnyDesk) ist VNC weiterhin extrem verbreitet. Es wird intensiv in der Virtualisierung (QEMU), bei IP-KVM-Geräten, Druckern und im Bereich der Operational Technology (OT) zur Fernsteuerung von Industrieanlagen genutzt.
2:47 Funktionsweise & Abgrenzung zu RDP: Im Gegensatz zu RDP, das logische Fensterbeschreibungen und Grafikbefehle überträgt, arbeitet VNC rein auf Bildebene. Es fängt rohe Pixelwerte (Frame Buffer) ab und sendet diese an den Client, während Benutzereingaben (Maus und Tastatur) im Gegenzug an den Server übertragen werden.
4:03 Historie & Spezifikationen: Entwickelt in den Olivetti & Oracle Research Labs (1999 von AT&T übernommen), später von RealVNC kommerzialisiert und im RFC 6143 standardisiert. Es existieren diverse GPL-lizenzierte Forks wie TightVNC, TigerVNC und UltraVNC, die das Protokoll proprietär erweiterten.
5:51 Bedrohungsmodell (Attacker Model): Die Analyse basiert auf einem passiven Angreifer-Modell ("Eve"), bei dem der gesamte Netzwerkverkehr in beide Richtungen mitgelesen (gesnifft), aber nicht aktiv manipuliert oder blockiert werden kann.
6:35 Die vier Sitzungsphasen: Eine RFB-Sitzung gliedert sich strikt in die Phasen Versionsaushandlung (Version Handshake), Sicherheitsdeklaration und Authentifizierung (Security Handshake), Initialisierung (Initialization Phase) und die kontinuierliche Session-Phase.
8:07 Versionsaushandlung im Detail: Ein einfacher Austausch von ASCII-Strings (z. B. "RFB 003.008"). Beide Seiten senden ihre unterstützte Version; geeinigt wird sich immer auf die niedrigste gemeinsame Version (primär RFB 3.3, 3.7 oder 3.8).
9:29 Sicherheits- und Authentifizierungsphase: Der Server deklariert die geforderten Sicherheitsverfahren. RFB 3.3 erlaubt nur einen Typ (z. B. None oder VNC Auth), RFB 3.7 erlaubt eine Auswahlliste für den Client, und RFB 3.8 erzwingt ein explizites Sicherheitsresultat inklusive detaillierter Fehlermeldungen bei Fehlschlägen.
13:02 Inhärente Sicherheitsrisiken & DES-Schwachstelle: Die Standard-VNC-Authentifizierung verwendet ein Challenge-Response-Verfahren basierend auf der schwachen DES-Verschlüsselung. Passwörter sind hart auf maximal 8 Byte limitiert (längere Passwörter werden abgeschnitten, kürzere mit Nullbytes aufgefüllt). Da keine native Transportverschlüsselung existiert, müssen sichere Sitzungen über SSH-Tunnel oder TLS gekapselt werden.
15:40 Initialisierung & Pixelformat-Definition: Der Client fordert optional eine geteilte Sitzung (Shared Session) an. Der Server antwortet mit der Framebuffer-Größe (16-Bit Big-Endian) und einem 16-Byte-Pixelformat, welches Farbtiefe, Byte-Reihenfolge (Endianness), True-Color-Flags sowie Bit-Shifts für die Farbkanäle Rot, Grün und Blau definiert.
21:24 Optimierung durch Compressed Pixels (CPixel): Bei einer Farbtiefe von 24 Bit innerhalb eines 32-Bit-Werts erlaubt das CPixel-Verfahren das Weglassen des ungenutzten vierten Bytes, was die zu übertragende Datenmenge pro Pixel direkt um 25 % reduziert.
23:19 Asynchrone Session-Kommunikation: RFB nutzt dedizierte Nachrichtennummern, besitzt jedoch kein festes Frame-Format oder synchrones Request-Response-Verfahren. Server senden Frame-Buffer-Updates meist nur auf explizite Client-Anforderung ("Incremental Updates") und nur dann, wenn sich tatsächlich Pixel verändert haben.
26:42 Encoding-Typen und Pseudo-Encodings: Der Client definiert über eine "Set Encodings"-Nachricht, welche Kompressionen er beherrscht. Encodings dienen nicht nur der Bilddatenkompression, sondern übermitteln als "Pseudo-Encodings" auch Steuerungsdaten (z. B. Cursor-Daten zur clientseitigen Mauszeiger-Darstellung oder Änderungen der Desktop-Größe).
31:11 Veraltete Kompressionen (RRE & Hexle): RRE (Rise and Run Length Encoding) definiert eine Hintergrundfarbe und zeichnet darauf Sub-Rechtecke. Hexle verbessert dies, indem es den Bildschirm in 16x16 Pixel große Kacheln ("Tiles") unterteilt und mit optimierten Farbmasken arbeitet. Beide sind bei modernen, detailreichen Bildschirminhalten hochgradig ineffizient.
35:58 Moderne Kompressionen (TRLE & ZRLE): TRLE (Tile Run Length Encoding) nutzt CPixels sowie Kacheln in Kombination mit Lauflängenkodierung und dynamischen Farbpaletten. ZRLE (Zlib Run Length Encoding) wendet zusätzlich eine zlib-Kompression an. ZRLE erfordert einen kontinuierlich synchronisierten zlib-Zustand; ein einziger Paketverlust im Netzwerkstrom zerstört die gesamte Dekodierungsfähigkeit der restlichen Session.
41:26 Interaktive Events & Zwischenablage: Tastatureingaben werden über X11-Keycodes inklusive eines "Down-Flags" (Zustand gedrückt/losgelassen) übertragen. Pointer-Events übertragen absolute Koordinaten und Mausklick-Masken. Die Zwischenablage (Cuttext) ist standardmäßig auf Latin-1 limitiert; negative Längenfelder in erweiterten Protokollen signalisieren neuere Kodierungen wie UTF-8, RTF oder HTML.
44:50 Fazit der Protokollarchitektur: RFB/VNC ist extrem flexibel und abwärtskompatibel, leidet jedoch unter historisch gewachsenen Designfehlern (wie redundanten Padding-Bytes und Ambiguitäten). Ein passiver Netzwerk-Beobachter kann bei lückenloser Aufzeichnung die komplette Bildschirmsitzung rekonstruieren. Während VNC-Clients sehr einfach zu programmieren sind, erfordern performante Server hochgradig komplexe Kompressions- und Kachelungs-Entscheidungen.
Glossar
Remote Frame Buffer (RFB): Das zugrundeliegende, plattformunabhängige Netzwerkprotokoll von VNC, das den direkten Zugriff auf den Grafikspeicher (Frame Buffer) eines entfernten Rechners ermöglicht.
Frame Buffer: Ein dedizierter Speicherbereich einer Grafikkarte oder eines Systems, der die fertigen Pixeldaten für die Darstellung auf dem Bildschirm bereithält.
Data Encryption Standard (DES): Ein veraltetes, symmetrisches Verschlüsselungsverfahren aus den 1970er Jahren. In VNC wird es für die Passwort-Authentifizierung genutzt, gilt jedoch aufgrund seiner kurzen Schlüssellänge heute als absolut unsicher.
Challenge-Response-Verfahren: Ein Sicherheitsmechanismus, bei dem der Server eine zufällige Zeichenfolge (Challenge) an den Client sendet. Der Client verschlüsselt diese mit dem Passwort und sendet das Ergebnis (Response) zurück. Der Server überprüft dies, ohne dass das Passwort im Klartext übertragen werden muss.
Padding: Das Auffüllen von Datenstrukturen mit bedeutungslosen Bits oder Bytes (meistens Nullen), um eine bestimmte Blockgröße oder Speicher-Ausrichtung (Alignment) zu erzwingen.
Big-Endian / Little-Endian (Byte-Reihenfolge): Gibt an, in welcher Reihenfolge Bytes im Speicher abgelegt werden. Big-Endian speichert das signifikanteste Byte zuerst (wichtig bei Netzwerkübertragungen), Little-Endian das am wenigsten signifikante Byte (Standard bei x86-Prozessoren).
True Color: Eine Methode zur Speicherung von Bildinformationen, bei der jeder Pixel direkt durch seine Farbkanäle (Rot, Grün, Blau) repräsentiert wird, anstatt auf eine begrenzte Farbpalette zu verweisen.
Color Map (Farbpalette): Eine Tabelle mit einer begrenzten Anzahl vordefinierter Farben. Pixelwerte übertragen in diesem Modus keine echten RGB-Werte, sondern nur den Index in dieser Tabelle, was Bandbreite spart.
Run-Length Encoding (RLE) / Lauflängenkodierung: Eine einfache Form der verlustfreien Datenkompression, bei der aufeinanderfolgende, identische Datenwerte (z. B. zehn rote Pixel hintereinander) als ein einziger Wert und dessen Wiederholungsanzahl gespeichert werden.
zlib: Eine weit verbreitete, plattformunabhängige Software-Bibliothek zur verlustfreien Datenkompression, die im VNC-Encoding "ZRLE" verwendet wird.
Latin-1 (ISO 8859-1): Ein Standard zur Zeichenkodierung für westeuropäische Sprachen, der jedes Zeichen mit genau 8 Bit codiert. Er unterstützt im Gegensatz zu UTF-8 keine asiatischen oder komplexeren Sonderzeichen.
X11-Keycodes: Standardisierte Tastatur-Scancodes des X11-Fenstersystems, die von VNC zur Plattform-Übersetzung von Tastatureingaben verwendet werden.
CPixel (Compressed Pixel): Eine RFB-spezifische Protokolloptimierung, die ungenutzten Speicherplatz (Padding-Bytes) innerhalb der Pixel-Datenströme eliminiert, um Bandbreite zu sparen.
Operational Technology (OT): Hardware und Software zur Steuerung und Überwachung physischer Prozesse, Maschinen und Anlagen in der Industrie (z. B. Fabriksteuerungen, Kraftwerke).