Was ist Kontrollflussintegrität (Control-Flow Integrity)?

Sammelbegriff für Schutzmaßnahmen, die verhindern, dass der Ausführungsfluss eines Programms die im ursprünglichen Programm möglichen Pfade (seinen Kontrollflussgraphen) verlässt. Dazu gehören Hardwarefunktionen wie Shadow Stacks und Pointer Authentication, die Rücksprünge aus Funktionen schützen, sowie Intel IBT und Arm Branch Target Identification, die die Ziele indirekter Aufrufe und Sprünge auf Stellen mit einer festgelegten Markierung beschränken, außerdem vom Compiler eingefügte Zielprüfungen. Sie erschwert Angriffe, die Rücksprungadressen oder Funktionszeiger überschreiben, um Fragmente vorhandenen Codes aneinanderzureihen.

Japanische Bezeichnung: 制御フロー完全性

„Kontrollflussintegrität (Control-Flow Integrity)“ kommt in 1 Übungsfragen aus 1 Themen vor, z. B. Aktuelle Entwicklungen der Hardwaresicherheit.

Fachgebiet: Aktuelle Entwicklungen der Hardwaresicherheit

Jetzt üben: Fragen zu Kontrollflussintegrität (Control-Flow Integrity)

Welche Zuordnung ist bei Hardwarefunktionen, die die Kontrollflussintegrität unterstützen, richtig: was Rücksprünge aus Funktionen schützt und was indirekte Aufrufe und Sprünge, etwa über Funktionszeiger, schützt?

  1. ARücksprünge werden durch Shadow Stacks oder Pointer Authentication geschützt, indirekte Aufrufe und Sprünge durch Mechanismen, die am Anfang des Sprungziels einen festgelegten Markierungsbefehl verlangen
  2. BRücksprünge werden durch Mechanismen geschützt, die am Anfang des Sprungziels einen festgelegten Markierungsbefehl verlangen, indirekte Aufrufe und Sprünge durch Shadow Stacks
  3. CRücksprünge werden durch KPTI (Kernel Page-Table Isolation) geschützt, indirekte Aufrufe und Sprünge durch Adressübersetzung in der IOMMU
Antwort und Erläuterung anzeigen

Antwort: A. Rücksprünge werden durch Shadow Stacks oder Pointer Authentication geschützt, indirekte Aufrufe und Sprünge durch Mechanismen, die am Anfang des Sprungziels einen festgelegten Markierungsbefehl verlangen

Ein Shadow Stack vergleicht die Rücksprungadresse mit ihrer Kopie, und Pointer Authentication prüft den an die Rücksprungadresse angehängten Authentifizierungscode; beide schützen also Rücksprünge aus Funktionen. Für indirekte Aufrufe und Sprünge verlangen Intel IBT und Arm Branch Target Identification am Anfang des Sprungziels einen Markierungsbefehl (bei x86 ENDBR64) und machen Sprünge etwa in die Mitte von Funktionen zu Ausnahmen. Da jedoch jede markierte Stelle von jedem indirekten Sprung erreichbar bleibt, werden diese Funktionen teils mit feineren Prüfungen des Compilers kombiniert, die die Ziele auf Funktionen passenden Typs beschränken. KPTI ist eine Gegenmaßnahme gegen Meltdown, und die IOMMU beschränkt DMA von Geräten; keines von beiden schützt den Kontrollfluss.

Fragen mit „Kontrollflussintegrität (Control-Flow Integrity)“ (1)

  1. Welche Zuordnung ist bei Hardwarefunktionen, die die Kontrollflussintegrität unterstützen, richtig: was Rücksprünge aus Funktionen schützt und was indirekte Aufrufe und Sprünge, etwa über Funktionszeiger, schützt?

Verwandte Begriffe

Funktionszeiger Shadow Stack Rücksprungadresse Pointer Authentication (PAC) KPTI (Kernel Page-Table Isolation) Meltdown IOMMU DMA (Direct Memory Access) Arm CCA (Confidential Compute Architecture) CHERI

Zur Glossarübersicht