ShadowCallStack

ShadowCallStack (SCS) è una strumentazione LLVM modalità che protegge contro sovrascrive l'indirizzo di ritorno (come pila tampone overflow) salvando indirizzo di ritorno di una funzione a una ShadowCallStack allocato separatamente in funzione prologo delle funzioni non foglia e caricare l'indirizzo di ritorno dal ShadowCallStack nella funzione epilogo. L'indirizzo di ritorno è anche memorizzato nello stack normale per compatibilità con gli svolgitori, ma è altrimenti inutilizzato. Ciò garantisce che gli attacchi che modificano l'indirizzo di ritorno sullo stack normale non abbiano effetto sul flusso di controllo del programma.

Su aarch64, le marche strumentazione fanno parte una x18 registro per fare riferimento al ShadowCallStack, il che significa che i riferimenti alla ShadowCallStack non devono essere memorizzati nella memoria. Ciò rende possibile implementare un runtime che eviti di esporre l'indirizzo di ShadowCallStack ad aggressori in grado di leggere la memoria arbitraria.

Implementazione

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

Abilitare 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 presuppone che il x18 registro è riservato per memorizzare l'indirizzo della ShadowCallStack, e non viene utilizzato per altri scopi. Mentre tutte le librerie di sistema vengono compilati per prenotare x18 registro, questo è potenzialmente problematico se SCS è abilitato per i componenti spazio utente che interagiscono con in-process codice legacy (ad esempio, librerie che potrebbero essere caricati da applicazioni di terze parti), che possono clobber l' x18 registro. Pertanto, consigliamo di abilitare SCS solo nei componenti autonomi che non verranno caricati nei file binari legacy.

Convalida

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 influisca sul dispositivo.