Wat is Control-flow-integriteit (control-flow integrity)?

Verzamelnaam voor verdedigingen die voorkomen dat de uitvoering van een programma afwijkt van de paden die in het oorspronkelijke programma mogelijk zijn (de control-flow-graaf). Daartoe behoren hardwarefuncties zoals shadow stacks en pointerauthenticatie, die het terugkeren uit functies beschermen, en Intel IBT en Arm Branch Target Identification, die de doelen van indirecte aanroepen en sprongen beperken tot plaatsen met een aangewezen markering, en ook doelcontroles die compilers toevoegen. Het maakt aanvallen moeilijker die terugkeeradressen of functiepointers overschrijven om fragmenten van bestaande code aan elkaar te rijgen.

Japanse benaming: 制御フロー完全性

“Control-flow-integriteit (control-flow integrity)” komt voor in 1 oefenvragen uit 1 onderwerpen, bijv. Hardwarebeveiliging: nieuwste ontwikkelingen.

Vakgebied: Hardwarebeveiliging: nieuwste ontwikkelingen

Nu oefenen: vragen over Control-flow-integriteit (control-flow integrity)

Welke combinatie is juist voor hardwarefuncties die control-flow-integriteit ondersteunen, namelijk wat het terugkeren uit functies beschermt en wat indirecte aanroepen en sprongen, zoals via functiepointers, beschermt?

  1. ATerugkeren wordt beschermd door shadow stacks of pointerauthenticatie; indirecte aanroepen en sprongen door mechanismen die eisen dat aan het begin van het doel een aangewezen markeringsinstructie staat
  2. BTerugkeren wordt beschermd door mechanismen die eisen dat aan het begin van het doel een aangewezen markeringsinstructie staat; indirecte aanroepen en sprongen door shadow stacks
  3. CTerugkeren wordt beschermd door KPTI (kernel page-table isolation); indirecte aanroepen en sprongen door adresvertaling in de IOMMU
Antwoord en toelichting tonen

Antwoord: A. Terugkeren wordt beschermd door shadow stacks of pointerauthenticatie; indirecte aanroepen en sprongen door mechanismen die eisen dat aan het begin van het doel een aangewezen markeringsinstructie staat

Een shadow stack vergelijkt het terugkeeradres met de kopie en pointerauthenticatie controleert de authenticatiecode die aan het terugkeeradres is toegevoegd, dus beide beschermen het terugkeren uit functies. Voor indirecte aanroepen en sprongen eisen Intel IBT en Arm Branch Target Identification dat aan het begin van het doel een markeringsinstructie staat (ENDBR64 bij x86), en maken ze van sprongen naar bijvoorbeeld het midden van een functie een exceptie. Een plaats met een markering is echter nog steeds vanuit elke indirecte sprong bereikbaar, dus soms worden ze gecombineerd met fijnere controles door de compiler die de doelen beperken tot functies van een passend type. KPTI is een tegenmaatregel tegen Meltdown en de IOMMU beperkt de DMA van apparaten; geen van beide beschermt de control flow.

Vragen met “Control-flow-integriteit (control-flow integrity)” (1)

  1. Welke combinatie is juist voor hardwarefuncties die control-flow-integriteit ondersteunen, namelijk wat het terugkeren uit functies beschermt en wat indirecte aanroepen en sprongen, zoals via functiepointers, beschermt?

Verwante termen

Functiepointer Shadow stack Pointerauthenticatie (PAC) KPTI Meltdown IOMMU DMA (direct memory access) Arm CCA (Confidential Compute Architecture) CHERI Confidential computing

Naar de woordenlijst