Não sei muito sobre o kernel do Linux e tenho algumas perguntas.
Qual é o principal objetivo de separar a memória do kernel da memória do espaço do usuário? Para garantir que um aplicativo de usuário não possa fazer nada de errado com o kernel?
Quantas maneiras existem para um aplicativo no nível do usuário transferir o controle para o kernel? O que posso sugerir é: (1) chamar uma chamada do sistema, (2) mapear a memória para o kernel (mas acho que mmap () também é uma chamada do sistema) e (3) carregar um módulo do kernel (mas acho que o lsmod também chama alguma chamada do sistema). Estou correcto? Existem outras maneiras que eu perdi?
Quantas maneiras de atacar o kernel? Posso ter alguns breves detalhes sobre eles?
Se eu receber o privilégio de root, isso significa que eu controlo completamente o kernel? Ou seja, posso fazer o que quiser com o kernel e o hardware? Ou ainda tenho poder limitado no kernel?
Eu realmente aprecio isso se alguém puder me ajudar a descobrir a resposta para essas perguntas.
fonte
Respostas:
Vou tentar responder às perguntas o mais brevemente possível. As perguntas que você faz são geralmente abordadas nos cursos introdutórios de sistemas operacionais das universidades, mas presumo que você não tenha feito esse curso.
O isolamento da memória para processos do espaço do usuário é muito desejável - não apenas para proteger o kernel de programas maliciosos do espaço do usuário, mas também para proteger os programas do espaço do usuário. Isso geralmente é chamado de memória virtual . Também facilita a implementação de paginação, o que é desejável por outros motivos (fragmentação mais simples, vinculadores / carregadores mais simples etc.).
Interrupções (nem todas estão no controle de um aplicativo no nível do usuário). Desistir do processador também tira o "controle" do processo (por exemplo,
wait
etc., que também são chamadas do sistema). O próprio kernel pode decidir cancelar o agendamento de um aplicativo.Essa é uma pergunta muito ampla. O kernel com chamadas de sistema mal implementadas é vulnerável. A capacidade de gravar na memória física seria outra maneira. Existem outras vulnerabilidades que podem surgir de instruções mal implementadas (por exemplo, vulnerabilidade de sysret nos processadores Intel).
Privilégios de raiz não é o mesmo que privilégios de kernel. Um aplicativo em execução como usuário root ainda está usando memória virtual, ainda precisa fazer chamadas do sistema, ainda precisa obedecer às outras regras exigidas por qualquer aplicativo no nível do usuário.
Se você quiser que eu forneça mais detalhes sobre algumas das respostas, entre em contato.
Se alguém puder melhorar algumas das respostas, fique à vontade para apontar.
fonte