-
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.
-
Ataques buffer overflows, ou sobrecarga de buffer, levam o atacante a utilizar os privilégios de execução do serviço atacado para a execução de códigos maliciosos.
-
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…