Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

ShadowCallStack

ShadowCallStack (SCS) è una modalità di strumentazione LLVM che protegge dalla sovrascrittura dell'indirizzo di ritorno (come gli overflow del buffer di stack) salvando l'indirizzo di ritorno di una funzione in uno ShadowCallStack allocato separatamente nel prologo della funzione delle funzioni non foglia e caricando l'indirizzo di ritorno dallo ShadowCallStack nella funzione epilogo. L'indirizzo del mittente viene anche memorizzato nello stack normale per compatibilità con gli svolgitori, ma altrimenti non viene utilizzato. Ciò garantisce che gli attacchi che modificano l'indirizzo di ritorno sullo stack regolare non abbiano alcun effetto sul flusso di controllo del programma.

Su aarch64, la strumentazione utilizza il registro x18 per fare riferimento a ShadowCallStack, il che significa che i riferimenti a ShadowCallStack non devono essere archiviati in memoria. Ciò rende possibile implementare un runtime che eviti di esporre l'indirizzo di ShadowCallStack ad attaccanti che possono leggere la memoria arbitraria.

Implementazione

Android supporta ShadowCallStack sia per il kernel che per lo spazio utente.

Abilitazione di SCS per il kernel

Per abilitare ShadowCallStack per il kernel, aggiungi la seguente riga al file di configurazione del kernel:

CONFIG_SHADOW_CALL_STACK=y

Abilitazione di SCS nello spazio utente

Per abilitare ShadowCallStack nei componenti dello spazio utente, aggiungi le seguenti righe al file blueprint di un componente:

sanitize: {
  scs: true
}

SCS presume che il registro x18 sia riservato per memorizzare l'indirizzo di ShadowCallStack e non viene utilizzato per altri scopi. Sebbene tutte le librerie di sistema siano compilate per riservare il registro x18 , ciò è potenzialmente problematico se SCS è abilitato per i componenti dello spazio utente che interagiscono con il codice legacy in-process (ad esempio, librerie che potrebbero essere caricate da applicazioni di terze parti), che potrebbe il registro x18 . Pertanto, consigliamo di abilitare SCS solo in componenti autonomi che non verranno caricati nei file binari legacy.

Validazione

Non esistono test CTS specifici per SCS. Assicurati invece che i test CTS vengano superati con e senza SCS abilitato per verificare che SCS non abbia alcun impatto sul dispositivo.