Introdução
Quase desde que o sistema operativo Windows apareceu no mercado consumidor, que um dos pontos negativos porque ele é conhecido, é pela sua falta de segurança.
Este ponto tem sofrido alterações, na minha opinião, para melhor, nos últimos anos e este artigo pretende apresentar uma ferramenta da Microsoft, que, apesar de pouco conhecida e pouco usada, é algo de bastante útil e eficaz pelos testes efectuados com ele.
A ferramenta que vos vou falar neste artigo é o EMET ou “Enhanced Mitigation Experience Toolkit”, na sua versão 3.0, que foi recentemente lançada.
Esta ferramenta, que é grátis e bastante simples de usar, tem como objectivo fortalecer as aplicações usadas em Windows através do uso das últimas tecnologias de segurança existentes, para evitar que essas aplicações sejam exploradas através de um ataque.
Qualquer aplicação, em princípio, pode ser protegida pelo EMET e ele é eficaz mesmo em ataques em que ainda não existe um patch de segurança que proteja a aplicação em causa.
De referir que para se usar o EMET, não é preciso pagar nada, é relativamente simples de usar, mesmo num ambiente corporativo, não é preciso ter ou alterar o código da aplicação original, é bastante configurável e tem sofrido constantes melhoramentos ao longo do tempo.
Pró-actividade vs Reactividade
Num artigo anterior, sobre o Secunia Psi, já tinha tocado neste assunto.
No mundo Windows, a nível de segurança, as acções tomadas costumam ser muito reactivas e estáticas.
Isto é, o comum é instalar-se um antivírus e esperar-se que nos proteja de tudo e de todos.
O problema é que por muito bons que sejam os antivírus, não conseguem proteger o utilizador completamente, especialmente de bugs de aplicações que muitas vezes nem são conhecidos publicamente.
Grande parte das vezes usa-se um antivírus quando o computador já se encontra infectado e quando o problema já aconteceu.
Do ponto de vista do autor, a questão de segurança em Windows não pode ser tão estática e reactiva e é preciso usar outras ferramentas adicionais, como o Psi ou o EMET para que a segurança seja mais eficaz.
Para tal, algum esforço é necessário por parte do utilizador ou de quem gere um conjunto de computadores, mas, como diz o ditado, é melhor prevenir que remediar.
Tecnologias usadas no EMET
Esta é a parte teórica do artigo, onde vou tentar explicar que mecanismos são usados no EMET para fortalecer a segurança aplicacional.
De referir que para se usar o EMET, não é preciso ter um profundo conhecimento destas tecnologias, mas ficam aqui colocadas para mostrar o que ele é capaz.
Structure Exception Handler Overwrite Protection (SEHOP)
Esta tecnologia protege o sistema dos mais comuns ataques feitos a aplicações.
Foi implementado no Windows Vista Service Pack 1 e no Windows 7 há a possibilidade de ligar ou desligar esta tecnologia por cada processo existente.
Sem esta tecnologia, um atacante pode introduzir um valor de um apontador de uma excepção. Quando uma excepção acontece, o sistema operativo vai percorrer um fluxo onde um dos valores foi alterado pelo atacante.
Com esta tecnologia, o sistema operativo, antes de correr o fluxo, vai validar os valores da cadeia. Se a cadeia estiver corrompida, ele termina o processo, sem correr o fluxo.
Dynamic Data Execution Prevention (DEP)
DEP já se encontra no Windows desde os tempos do Windows XP, mas normalmente só era utilizado quando a aplicação era compilada com essa flag.
Com o EMET, podemos utilizar DEP nas aplicações, mesmo quando não são compiladas com essa flag.
Sem esta tecnologia, um atacante pode saltar para uma localização de memória onde dados do atacante foram inseridos, permitindo assim executar código.
Com esta tecnologia, estas regiões de memória são marcadas como não executáveis, parando assim o ataque ao nível do processador.
Heapspray Allocations
Quando é feito um ataque, muitas vezes não se sabe em que endereços de memória se encontra o código e tem que tentar adivinhar quando tenta executar.
Para ter mais hipóteses de sucesso, é copiado o código para o máximo de endereços de memória possíveis.
Com o uso do EMET, os endereços de memória mais utilizados são pré-alocados, mitigando assim o ataque.
Mandatory Address Space Layout Randomization (ASLR)
ASLR obriga a que dlls usem endereços de memória que sejam random, evitando assim que os atacantes saibam onde se encontra certa informação.
O problema é que para um aplicação usar esta tecnologia tem que ser compilada com uma flag.
Com o uso do EMET, é possível forçar o uso de ASLR, evitando assim o ataque.
Null page allocation
Esta técnica é parecida a “Heapspray Allocations”, mas para prevenir valores nulos no espaço do user. Neste momento, não se conhecem ataques usando esta técnica.
Export Address Table Access Filtering (EAF)
Muitas vezes para um ataque ter sucesso, precisa de usar APIs de Windows. Para tal, vai procurar a uma tabela (Export Address Table) pelos endereços de dlls de sistema, como o “kernel32.dll” ou “ntdll.dll”.
Com o EMET, é protegida esta tabela para verificar quem tem direitos de leitura e escrita nesta tabela, bloqueando assim código maligno de usar APIs de sistema.
Bottom-up randomization
Com o EMET, é feita uma randomização com 8 bits de entropia, dos endereços de memória de uma aplicação.