Ataques denominados buffer overflows, tanto na heap quanto n...
computacionais, julgue os itens que se seguem.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: C (Certo)
Vamos entender melhor o tema para justificar a alternativa correta e as incorretas.
**Buffer overflow** é uma vulnerabilidade que ocorre quando um programa escreve mais dados em um buffer (área de memória) do que ele pode armazenar. Isso pode resultar em execução arbitrária de código ou em falhas no programa.
Existem dois tipos principais de buffer overflow:
- Stack buffer overflow: Acontece na pilha (stack), que é usada para armazenar variáveis locais e controladores de execução de funções.
- Heap buffer overflow: Acontece no heap, que é usado para alocação dinâmica de memória em tempo de execução.
Quando um buffer overflow ocorre, um atacante pode inserir código malicioso no espaço de memória excedente, levando à execução arbitrária de código. Isso pode comprometer seriamente a segurança do sistema.
A questão aborda duas formas de mitigar esse tipo de ataque:
- Retirada de privilégios de execução: Impedir que o código injetado seja executado como se fosse parte do programa original.
- Checagem de integridade das estruturas: Monitorar e validar o uso da memória para garantir que não haja overflow.
Essas técnicas são essenciais para prevenir buffer overflows. Portanto, a alternativa C (Certo) está correta pois menciona métodos eficazes para evitar a execução arbitrária de código devido a buffer overflows.
Vamos agora entender por que as demais alternativas estão incorretas:
Alternativa E (Errado): A alternativa seria incorreta se negasse ou ignorasse a eficácia das técnicas mencionadas (retirada de privilégios de execução e checagem de integridade). No entanto, a alternativa correta reconhece a importância dessas medidas, motivo pelo qual a alternativa E não é aplicável no contexto da questão.
Espero que essa explicação ajude a entender melhor o tema de buffer overflows e as medidas de mitigação mencionadas na questão. Se precisar de mais algum esclarecimento, estou à disposição!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
A sobrecarga da memória buffer (ou buffer overflow) diz respeito, sobretudo, aos programas que funcionam sob Unix ou Linux. Não porque estes sistemas sejam pouco fiáveis, mas porque são os mais expostos, uma vez que são os mais numerosos a estarem conectados à Internet. Todos os sistemas são susceptíveis de ser atacados, independentemente de se tratar de equipamentos como routers e um servidor de cache ou de softwares (como um servidor Windows).
Os hackes escolhem o alvo de acordo com os seus objectivos. Se quiserem cortar as conexões de uma empresa, atacarão os routers para modificarem a configuração. Se quiserem aceder aos dados de uma empresa, tentarão deitar a mão a um servidor. A partir do momento em que um software corre numa máquina conectada, poderá ser alvo de tentativas de buffer overflow*. Para que a tentativa seja bem sucedida, no entanto, é necessário que estejam reunidas algumas condições de software muito particulares e que o pirata seja um especialista.
Na realidade, este tipo de tomada de controlo pode ter vários efeitos. O mais visível será uma negação de serviço aos utilizadores, seja porque a aplicação deixa de funcionar – falaremos mais adiante deste caso de buffer overflow aplicacional – ou porque as linhas de comunicação e os equipamentos estão saturados de informações inúteis por causa de uma sobrecarga do stack de rede.
Para compreender como funciona um buffer overflow, é necessário saber como estão distribuídas num computador as diferentes zonas de memória de que um programa precisa para ser executado. Quando um programa é lançado, é-lhe reservada uma certa quantidade de memória. As instruções, e depois os dados, serão copiados para essa memória. Também é atribuída uma zona de memória ao armazenamento temporário – trata-se do stack.
(...) continuando
Enganar o apontador de instruções
Uma vez carregado o programa e a memória alocada, inicia-se a execução. Dado que esta é sequencial, o stack vai sendo alocado de forma dinâmica para guardar temporariamente as instruções e os dados que o programa manipula. Quando é chamada uma função para ser executada, o stack é preenchido completamente com os parâmetros da função, com o endereço de retorno para aceder à instrução seguinte, com as instruções a executar e as memórias buffer (ou simplesmente buffers). Estas últimas são zonas que contêm os dados a manipular.
Acima de tudo, o stack irá conter o apontador de instruções, ou seja, o endereço de memória da próxima instrução que deverá ser executada imediatamente após aquela que está em curso num dado momento. É precisamente aqui que se situa o centro de manobra do pirata, que irá tentar modificar o conteúdo e colocar um valor que ele mesmo escolheu. Esse valor abusivo passará a designar, já não o endereço da próxima instrução original, mas o de uma instrução que o próprio pirata preparou.
Prevenções possíveis
Para nos precavermos contra ataques por buffer overflow, o procedimento mais simples consiste em aplicar os correctivos de segurança que são, de forma geral, publicados após a descoberta de uma falha. Se a empresa desenvolver as suas próprias aplicações, estão disponíveis no mercado compiladores de segurança e bibliotecas de controlo.
Os compiladores efectuam todas as verificações necessárias e as bibliotecas permitem a adição de rotinas de controlo que permitirão evitar este tipo de ataques. Para quem não quer ou não pode recompilar as suas aplicações, o método mais seguro consiste em instalar uma firewall aplicacional para filtrar os dados inseridos.
(....)
Perícia técnica e paciência
É, contudo, necessário que estejam reunidas algumas condições para que os sistemas sejam presa eventual de piratas: máquinas acessíveis à distância, softwares à espera de conexão e, evidentemente, defeitos na programação dessas aplicações. Nem todas as máquinas e todos os softwares que se executam são possíveis alvos dos piratas. Estes últimos interessam-se prioritariamente pelos inúmeros servidores de mensagens e de correio, pelos servidores Web, ou ainda pelas gateways que funcionam em plano de fundo e que esperam simplesmente que os utilizadores se conectem e utilizem os seus recursos.
Stack.
Zona de memória de um computador onde são guardadas provisoriamente as informações necessárias à execução do programa.
Para funcionarem bem e para interagirem de forma eficaz com o sistema ou com os outros softwares, estas máquinas e os seus programas precisam de dispor de direitos de execução e de escrita de nível elevado. Se um pirata conseguir fazer executar as suas próprias instruções por uma técnica de buffer overflow, beneficiará dos mesmos privilégios, uma vez que, do ponto de vista do sistema, será sempre o mesmo programa identificado e autorizado que se irá executar.
É igualmente necessário que o hacker conheça o funcionamento dessas máquinas e desses programas. De igual modo, precisa de passar pelos dispositivos de segurança, se estiverem instalados. Por outro lado, precisa de conhecer perfeitamente a linguagem máquina da plataforma que ataca, a versão específica do sistema e do software que pretende atacar, bem como de determinar precisamente em que momento da execução e em que condição pode provocar um buffer overflow.
A experiência tem provado que tudo isto exige simultaneamente muita competência técnica, muito tempo e alguma sorte. É bem mais simples e mais rápido detectar a presença de uma rede de rádio Wi-Fi não segura e tentar entrar na empresa por essa via.
GABARITO: CERTO.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo