O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

ShadowCallStack

ShadowCallStack (SCS) é um modo de instrumentação LLVM que protege contra sobrescrições de endereço de retorno (como estouro de buffer de pilha) salvando um endereço de retorno de função em um ShadowCallStack alocado separadamente no prólogo de função de funções não-folha e carregando o endereço de retorno de ShadowCallStack na função epílogo. O endereço de retorno também é armazenado na pilha regular para compatibilidade com desenroladores, mas de outra forma não é usado. Isso garante que os ataques que modificam o endereço de retorno na pilha regular não tenham efeito no fluxo de controle do programa.

Em aarch64, a instrumentação faz uso do registro x18 para fazer referência ao ShadowCallStack, o que significa que as referências ao ShadowCallStack não precisam ser armazenadas na memória. Isso torna possível implementar um tempo de execução que evita expor o endereço do ShadowCallStack a invasores que podem ler memória arbitrária.

Implementação

O Android suporta ShadowCallStack para kernel e espaço do usuário.

Habilitando SCS para o kernel

Para habilitar ShadowCallStack para o kernel, adicione a seguinte linha ao arquivo de configuração do kernel:

CONFIG_SHADOW_CALL_STACK=y

Habilitando SCS no espaço do usuário

Para habilitar ShadowCallStack em componentes do espaço do usuário, adicione as seguintes linhas ao arquivo de blueprint de um componente:

sanitize: {
  scs: true
}

O SCS assume que o registro x18 está reservado para armazenar o endereço do ShadowCallStack e não é usado para nenhum outro propósito. Embora todas as bibliotecas do sistema sejam compiladas para reservar o registro x18 , isso é potencialmente problemático se o SCS estiver habilitado para componentes do espaço do usuário que interoperam com o código legado em processo (por exemplo, bibliotecas que podem ser carregadas por aplicativos de terceiros), que podem prejudicar o registro x18 . Dessa forma, recomendamos habilitar o SCS apenas em componentes autocontidos que não serão carregados em binários legados.

Validação

Não há teste CTS específico para SCS. Em vez disso, certifique-se de que os testes CTS sejam aprovados com e sem o SCS habilitado para verificar se o SCS não está afetando o dispositivo.