Ataques denominados buffer overflows, tanto na heap quanto n...
computacionais, julgue os itens que se seguem.
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.
GABARITO CORRETO!
.
.
CONFORME LECIONA NAKAMURA, 2011, PÁGINA 59:
Nesse tipo de ataque, o hacker explora bugs de implementação, nos quais o controle do buffer (memória temporária para armazenamento dos dados) não é feito adequadamente. Assim, o hacker pode enviar mais dados do que o buffer pode manipular, preenchendo o espaço da pilha de memória. Os dados podem ser perdidos ou excluídos e, quando isso acontece, o hacker pode reescrever no espaço interno da pilha do programa, para fazer com que comandos arbitrários sejam executados. Com um código apropriado, é possível obter acesso de superusuário ao sistema.
Um dos métodos de programação que permite a atuação de modo proativo é a utilização de localizações aleatórias do buffer de memória, de modo que o hacker não tenha ideia da posição em que deve colocar seu código prejudicial. Outro método é o utilizado pelos sistemas de prevenção de intrusão (Intrusion Prevention System — IPS) baseados em host. Esses tipos de sistemas fazem o controle do espaço de execução, inspecionando as chamadas ao sistema de acordo com um conjunto de regras definido que permite sua execução. Com isso, diversos problemas, entre eles os relacionados ao buffer overflow, podem ser minimizados.
.
.
SEGURANÇA DE REDES EM AMBIENTES COOPERATIVOS.
Buffer Overflow (estouro de buffer) -> Buffer = região de armazenamento temporário na memória -> Overflow = transbordamento
As vulnerabilidades referentes ao buffer overflow nos sistemas são consideradas as maiores. Envia-se mais dados do que o buffer pode manipular, tomando toda a pilha de memória. Esse ataque tem por objetivo: executar códigos arbitrários, perda ou modificações dos dados e paralisação de todo o sistema.
Podem afetar: S.O, serviços, protocolos…
O item apresentado é complexo, mas envolve conceitos importantes sobre buffer overflows e medidas preventivas. Vamos analisar as afirmações:
- Buffer Overflows: São ataques onde um programa escreve dados além dos limites de um buffer, podendo sobrescrever informações críticas na memória e potencialmente executar código malicioso.
- *Heap e Stack: Buffer overflows podem ocorrer tanto na heap quanto na stack. Na heap, ocorrem quando há manipulação inadequada de alocações dinâmicas de memória. Na stack, são mais comuns e ocorrem quando funções não verificam adequadamente o tamanho dos dados que estão sendo colocados no stack.
- Execução Arbitrária de Código: Um dos resultados graves de um buffer overflow bem-sucedido é a possibilidade de execução arbitrária de código, o que permite que um atacante execute comandos maliciosos no sistema comprometido.
- Medidas Preventivas: Para mitigar buffer overflows, algumas medidas incluem:
- Retirada de privilégios de execução: Limitar as permissões de execução dos processos para minimizar o impacto de um ataque.
- Checagem de integridade das estruturas: Verificar os limites de buffers e garantir que não ocorram escritas fora dos limites permitidos.
*
- Heap: A heap é uma área de memória onde são alocados dados dinamicamente durante a execução de um programa. Em linguagens como C e C++, a alocação de memória na heap é feita explicitamente com funções como e . Os buffer overflows na heap ocorrem quando um programa manipula de forma inadequada essas alocações dinâmicas, permitindo a escrita além dos limites dos buffers alocados.
- Stack: A stack (ou pilha) é uma estrutura de dados que armazena informações temporárias utilizadas na execução de funções. Ela gerencia automaticamente o espaço de memória conforme as funções são chamadas e retornam. Buffer overflows na stack são mais comuns e ocorrem quando funções não verificam adequadamente o tamanho dos dados que estão sendo colocados na stack, permitindo que dados sobrescrevam outros dados críticos ou endereços de retorno.
Essas distinções são cruciais para entender como buffer overflows podem afetar diferentes partes da memória do programa e os tipos de medidas preventivas que podem ser adotadas para mitigar esses ataques.
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!