ShadowCallStack

ShadowCallStack (SCS) è una modalità di strumentazione LLVM che protegge l'indirizzo di restituzione sovrascrivi (come gli overflow del buffer dello stack) salvando per restituire l'indirizzo a un ShadowCallStack allocato separatamente il prologo di funzioni delle funzioni nonleaf e il caricamento dell'indirizzo di ritorno da ShadowCallStack nell'epilogo della funzione. Viene memorizzato anche l'indirizzo di restituzione nello stack regolare per garantire la compatibilità con i unwinder, ma non viene utilizzato per altri motivi. Ciò garantisce che gli attacchi che modificano l'indirizzo di restituzione nello stack regolare non hanno effetto sul flusso di controllo del programma.

Su aarch64, la strumentazione utilizza x18 registro per fare riferimento a ShadowCallStack, il che significa che fa riferimento a ShadowCallStack non devono essere necessariamente archiviati in memoria. Ciò rende possibile implementare un runtime che evita l'esposizione l'indirizzo di ShadowCallStack agli aggressori che possono leggere una memoria arbitraria.

Implementazione

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

Abilita SCS per il kernel

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

CONFIG_SHADOW_CALL_STACK=y

Abilita SCS nello spazio utente

Per abilitare ShadowCallStack nei componenti dello spazio utente, aggiungi il metodo seguenti righe al file di progetto di un componente:

sanitize: {
  scs: true
}

SCS presuppone che il registro x18 sia riservato all'archiviazione dell'indirizzo del ShadowCallStack e non viene utilizzato per altri scopi. Anche se tutti i sistemi compilate per prenotare il registro x18, potenzialmente problematico se SCS è abilitato per i componenti dello spazio utente che interagiscono con codice legacy in-process (ad esempio, librerie che potrebbero essere caricate da terze parti app), il che potrebbe compromettere il registro x18. Di conseguenza, consigliamo solo abilitare SCS in componenti autonomi che non verranno caricati in file binari.

Convalida

Non esistono test CTS specifici per SCS. Assicurati invece che i test CTS passare con e senza SCS abilitato per verificare che SCS non influisca sul dispositivo.