O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

ShadowCallStack

ShadowCallStack (SCS) é um LLVM instrumentação modo que protege contra substituições de endereço de retorno (como pilha tampão transborda), salvando endereço de retorno de uma função para uma ShadowCallStack atribuída separadamente na função Prolog de funções não-folha e carregar o endereço de retorno a partir do 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 x18 registo para referenciar o ShadowCallStack, o que significa que as referências ao ShadowCallStack não tem que ser armazenados 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
}

SCS assume que o x18 registo é reservada para armazenar o endereço do ShadowCallStack, e não é usado para quaisquer outros fins. Enquanto todas as bibliotecas do sistema são compilados para reservar o x18 registo, isto é potencialmente problemática se SCS é activada para os componentes do espaço do usuário que interagem com o código em-processo legado (por exemplo, bibliotecas que poderiam ser carregados por aplicações de terceiros), que pode sobrescrever o x18 registo. Como tal, recomendamos apenas habilitar o SCS 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.