Ataques de estouro de buffer

3

Acabei de aprender hoje em uma classe de Sistemas Distribuídos que existe um espaço de endereçamento alocado para cada usuário pelo kernel, e se um usuário deseja obter o privilégio su, ele precisa mudar para o espaço de endereço do kernel.

Esta é a base para ataques de estouro de buffer, em que um usuário, se exceder seu espaço de endereço, pode acessar o espaço de endereço do kernel ou simplesmente sobrescrevê-lo?

    
por tsudot 18.09.2010 / 21:26

2 respostas

4

Um processo não pode ler ou escrever ou ramificar fora de sua memória. Isso significa que não pode acessar a memória de outros processos, memória não alocada ou memória do kernel. Assim, mesmo que um invasor dispare um estouro de buffer em um processo e seja capaz de executar código arbitrário no contexto desse processo, isso não dará acesso ao nível do kernel do invasor.

Existe uma saída: os processos podem fazer chamadas do sistema. A maneira exata em que as chamadas do sistema são feitas depende do SO e do tipo de processador; em sua forma mais simples, o processador tem uma instrução de “chamada de sistema”. que ramifica para um endereço específico onde o kernel instalou o código de tratamento de chamadas do sistema.

Quando a chamada do sistema é executada, o processador altera as permissões de acesso na memória. Dessa forma, o kernel é executado com privilégios elevados, incluindo a capacidade de ler, gravar e ramificar em toda a memória e a capacidade de acessar dispositivos de hardware. Novamente, os detalhes de como a elevação de privilégio é executada depende muito de como a chamada do sistema foi implementada em uma plataforma específica; por exemplo, o processador pode manter duas tabelas de controle de acesso (uma para o espaço do usuário e outra para o espaço do kernel) e a instrução de chamada do sistema pode alternar entre essas duas tabelas.

O código do kernel que lida com as chamadas do sistema decodifica os argumentos transmitidos pelo processo (como os argumentos são passados é novamente altamente dependente da plataforma). Pode acontecer que a chamada do sistema valide esses argumentos corretamente. Por exemplo, se o kernel espera um argumento de matriz e não verifica se toda a matriz se encaixa no espaço de endereço do processo, isso pode levar a um processo comum executando um ataque de estouro de buffer contra o kernel e ser capaz de executar o código do kernel. escolhendo.

Para um invasor remoto obter acesso no nível do kernel, geralmente é necessário explorar duas vulnerabilidades, uma em um processo em rede e outra no kernel. Ocasionalmente, há um bug no código de processamento da rede do kernel que permite um ataque em uma etapa.

    
por 19.09.2010 / 00:57
0

Não. O espaço do kernel é protegido na maioria das arquiteturas pelo processador e, a menos que haja um erro no sistema operacional, a tentativa de gravar ali resultaria na finalização do processo.

O ataque de estouro de buffer (geralmente) sobrescreve o endereço de retorno da função que interrompe o fluxo de controle nas mãos do invasor.

    
por 18.09.2010 / 23:53

Tags