Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
18/12/2006

< Segurança no Vista IX: >
<
Proteção contra “malware” no IE7
>


Segundo a MS, no documento (já citado nesta série de colunas) “Microsoft Windows Vista Security Advancements” de junho de 2006, ao alterar a arquitetura interna do Internet Explorer reforçando os recursos de segurança da versão 7 ela teve dois objetivos: reduzir a probabilidade de sucesso dos ataques de programas mal intencionados como vírus, vermes, programas espiões e “adware” e proteger os dados pessoais dos usuários de ataques de sítios fraudulentos da Internet e de “phishing”. E as mudanças implementadas para este fim foram muitas e radicais.

Vamos começar examinando as do primeiro grupo, proteção contra “malware”.

Antes, porém, convém ressaltar que, embora o Internet Explorer 7 esteja disponível para ser transferido do sítio da MS e instalado em outros sistemas operacionais, inclusive o Windows XP SP2, ele foi desenvolvido tendo em mente a arquitetura interna do Vista. Assim, embora muitos de seus novos recursos de segurança permaneçam válidos e ativos nas demais versões, alguns deles, por razões técnicas ligadas à arquitetura interna do sistema, somente estarão presentes no Vista. Um exemplo é o recurso que será discutido a seguir, o “modo protegido”, concebido para inibir ataques do tipo “elevação de privilégio”.

Modo protegido (Protected Mode)

Quando roda sob Vista e é executado no “modo protegido”, o IE7 se torna totalmente independente dos demais aplicativos. É como se ele estivesse sendo executado no interior de uma “bolha” protetora, isolada, que detém um nível de privilégios muito baixo, tornando-o incapaz de alterar quaisquer ajustes ou arquivos – do sistema ou de usuários. Sem permissão explícita, ele somente pode gravar e alterar dados na pasta “Temporary Internet Files”. Toda e qualquer alteração fora destes limites somente poderá ser feita através da ajuda de um processo intermediário (“broker”) que troca informações e dados com o sistema operacional e exige, para que esta troca seja permitida, a autorização explícita do usuário. Qualquer tentativa de gravação fora da pasta “Temporary Internet Files” é bloqueada pelo “Mandatory Integrity Control” (MIC – controle obrigatório de integridade) que restringe a escrita em pastas de maior nível de integridade que o detido pelo processo.

Quando o “Modo Protegido” está habilitado (e ele vem habilitado por padrão; Veja a Figura 1), para que o IE7 possa alterar um único byte que seja fora de seu limite de atuação ele precisa recorrer ao “broker”, um processo disparado apenas através da iniciativa do usuário (por exemplo, clicando nos menus ou na janela do IE7), jamais por “scripts”, controles ActiveX ou qualquer outro tipo de procedimento automático. Sendo a única forma de comunicação entre o IE7 e o restante do sistema, o processo intermediário (“broker”) filtra qualquer tentativa de contornar as defesas do modo protegido, já que sem a ajuda do “broker”, da forma pela qual foi desenvolvida a nova arquitetura do IE7 (um conjunto de aplicações multi-processo com níveis de integridade variáveis por processo), os objetos do COM (Component Object Model) apenas conseguem “enxergar” a si mesmos, não dispondo portanto de referências ou informações que lhes permitam identificar e ameaçar outros aplicativos ou o sistema operacional. E como o processo intermediário (“broker”) só é disparado através do comando direto do usuário, é impossível instalar qualquer “malware” ou efetuar quaisquer alterações no Registro sem autorização expressa.

O que não quer dizer que seja impossível instalar “malware”, apenas que eles somente poderão ser instalados com autorização expressa do usuário. Sim, eu sei que esta afirmação parece tola, mas pense um pouco: com os artifícios engendrados pelos crápulas que criam “malware”, do tipo “seu título irá para o protesto” ou “você foi sorteado” ou “veja aquelas fotos proibidas” e coisa e tal, seguido de um convidativo “clique aqui”, usuários ingênuos ou mal informados podem, sim, clicar ali, invocando o “broker” e, quando solicitados, autorizar expressamente que um programa, proveniente de fonte aparentemente confiável, seja executado. Portanto, o modo protegido talvez não impeça a instalação de “malware” (embora outros dispositivos que examinaremos adiante talvez impeçam). Mas dificulta um bocado...

Figura 1: Habilitando o Modo Protegido no IE7 sob Vista.

Corrigir configurações para mim (Fix My Settings)

Se você leu a coluna anterior talvez se lembre do comentário que fiz sobre o “mau passo” da MS ao implementar o Windows Firewall na versão inicial do XP mas deixá-lo desabilitado por padrão. Como muitos usuários receiam alterar a configuração padrão, isso possibilitou que um bocado de máquinas fossem infectadas por um grupo de vermes que se propagou justamente naquela ocasião. Foi o bastante para que a MS aprendesse a lição e a partir da versão XP SP2 passasse a manter habilitada por padrão todo recurso de segurança.

Mas mesmo em questões de segurança é preciso oferecer alguma flexibilidade. Afinal, existem razões legítimas para reduzir temporariamente o nível de segurança quando se precisa executar uma determinada ação e se tem certeza que é inócua apesar de potencialmente perigosa (por exemplo, transferir, instalar e executar um programa de terceiros do qual se necessita e cujo autor merece confiança absoluta). Por isso a MS oferece meios de alterar as configurações do IE reduzindo o nível de segurança quando necessário. E nem poderia ser de outra forma.

Naturalmente espera-se que, cessada a razão que o levou a “abaixar a guarda”, o usuário desfaça a alteração e restabeleça o nível de segurança adequado. O problema é que muitas vezes (e isso é mais comum do que se pode imaginar), após executar a ação que o motivou a fazer a alteração, seja por preguiça, desleixo, ignorância ou puro esquecimento, o usuário não refaz os ajustes e deixa a máquina vulnerável.

Pois bem: com o IE7 a MS deu um passo adiante nesse campo. Ela continua fornecendo os principais ajustes de segurança habilitados por padrão e continua permitindo que o usuário os altere quando necessário. Mas, caso o usuário faça alterações que tornam a máquina vulnerável, enquanto a máquina estiver assim será mantida no alto da janela do IE7, logo abaixo do conjunto de abas, uma barra de informações com o conhecido escudo vermelho que representa “perigo” exibindo uma mensagem informando que o computador corre risco de segurança. Um clique sobre a barra abre um menu de contexto que permite acesso à ajuda sobre configurações de segurança, oferece informações adicionais, abre a janela de configurações de segurança ou, a opção mais simples e eficiente: “Corrigir Configurações para mim...” (em inglês, “Fix My Settings”) que, com um único clique sobre ela, simplesmente desfaz quaisquer alterações que tenham reduzido o nível de segurança, restaurando os ajustes padrão sem mais delongas ou perguntas. Uma mão na roda para usuários desatentos...

Figura 2: Barra de informações e menu do recurso “Fix My Settings”

Figura 1: Habilitando o Modo Protegido no IE7 sob Vista.

Proteção da manipulação de URLs (URL Handling Protection):

URL é o acrônimo de “Universal Resource Locator”, ou “Localizador Universal de Recursos” (o que faz com que, em português, assuma o gênero masculino por se tratar de “um localizador”, embora a maioria das pessoas se refira à sigla como “uma URL”). Trocando em miúdos, URL é a forma de localizar (portanto, é um “endereço”) um recurso qualquer (um servidor, uma impressora ou até mesmo um documento) em uma rede (desde uma pequena rede local até a Internet). Trocando em miúdos ainda menores: URL é aquilo que costumamos chamar de “endereço Internet”.

URLs têm propriedades interessantes. Vou partir do princípio que você esteja lendo esta coluna em um programa navegador (“browser”), como o Internet Explorer, já que ela foi escrita especificamente para ser postada na Internet. Então ela (que é um documento) tem um URL. Para lê-la você certamente chegou até aqui clicando em um atalho (ou “link”) que provavelmente exibia seu nome (e não seu URL; já veremos a diferença). Ao fazê-lo, o programa navegador capturou o URL correspondente ao atalho, o dividiu em seus componentes e analisou-o, transformando-o em um número (no caso da Internet, um “endereço IP”) que identifica o “domínio” (já veremos mais sobre isso) de um sítio hospedado em uma máquina ligada à Internet (servidor Internet) e nos demais componentes que identificam o documento (ou “página”) a ser exibido. Quem faz esta análise não é o programa navegador propriamente dito, mas um de seus componentes, denominado “parser” (que pode ser traduzido por “analisador”).

Agora, vejamos algumas coisas interessantes sobre URLs. Ainda presumindo que você esteja lendo esta coluna em um programa navegador, repare na linha abaixo:

www.bpiropo.com.br > www.bpiropo.com.br

Ela é um URL. Mais especificamente, o URL do Sítio do Piropo. Se você clicar sobre ele (depois, não esqueça de retornar para cá, pois o sítio é tão interessante que você pode resolver ficar por lá um bom tempo; afinal, a propaganda é a alma do negócio...) será levado, como seria de esperar, para o Sítio do Piropo. Agora, repare nesta outra linha abaixo:

< www.bpiropo.com.br > Sítio do Piropo

Como se percebe pelo destaque, ela é um atalho. Que “esconde” um URL. Que URL? Provavelmente o do Sítio do Piropo, como indica o nome. Basta clicar sobre o atalho para confirmar. Faça isso e confira.

Agora vamos fazer uma nova experiência. Repare na linha do parágrafo seguinte. Aparentemente, ela exibe o mesmo URL do Sítio do Piropo, verdade? Pois clique nela para ter uma surpresa.

< www.disquepiropo.com.br > www.bpiropo.com.br

Você acaba de descobrir a diferença entre “atalho” (ou “link”) e URL (ou “endereço Internet”). Um atalho é um texto que “esconde” (ou contém) um URL. Mas não obrigatoriamente o URL mostrado (ou indicado) pelo atalho. Quando você clica no atalho, aciona o “parser” que busca o URL ali contido, o analisa e leva ao sítio ou documento correspondente ao endereço apontado pelo URL (que não coincide necessariamente com o induzido pelo texto do atalho).

Agora que temos o procedimento claro em nossa mente, vamos discutir duas possíveis vulnerabilidades que ele pode apresentar (e que são fartamente exploradas pelos safardanas que desenvolvem “malware”).

A primeira é óbvia: nem sempre o atalho leva para onde diz que leva, como você acabou de perceber. Mas essa é fácil de evitar. Quer ver? Mova o ponteiro do mouse para aquele último atalho que o enganou levando-o para o sítio “DisquePiropo” (gostou? um  exemplo interessante de sítio desenvolvido inteiramente em folhas de estilo em cascata, ou CSS que você pode examinar mais tarde; mas isso é outra conversa...) até que o cursor indique que está sobre um atalho (provavelmente transformando-se em uma pequena mão com o dedo indicador estendido) mas não clique nele. Em vez disso, veja o que está escrito na “barra de status” de seu navegador (a “barra de status” é uma barra horizontal exibida na base da janela do navegador com algumas informações; se no seu navegador ela não aparece, force sua exibição; no Internet Explorer faça isto clicando na entrada “Barra de Status” do menu “Exibir” e se já estiver usando o IE7 sob Vista, não esqueça de premir “Alt” para fazer aparecerem os menus).

Percebeu? A barra de status sempre mostra o URL efetivamente contido no atalho. Serve para não deixar que você seja levado para onde não quer nem deve ir. Ela também aparece, com o mesmo objetivo, nos programas de correio eletrônico como Outlook Express. Portanto, na próxima vez que você receber uma mensagem apaixonada de “alguém que te ama muito mas não teve coragem de confessar pessoalmente”, com um atalho “clique aqui para ver minha foto” ou algo parecido, mova cautelosamente o ponteiro do mouse para o atalho e, sem clicar, veja na barra de status para onde ele leva. Se o URL mostrado na barra de status terminar em “.exe”, “.pif”, “.scr” ou mais uma dezena de extensões suspeitas, que correspondem a programas executáveis, “scripts”, “controles” ou qualquer outro tipo de código executável, lamento informar que você não é assim tão irresistível quanto pensava: o “alguém que te ama muito” não passa de um calhorda qualquer que está prestes a tentar infectar sua máquina com um “malware”. 

Esta vulnerabilidade, como se vê, é fácil de contornar (mesmo porque, se você estiver rodando o IE7 sob Vista com o modo de segurança habilitado, o código executável eventualmente invocado pelo atalho jamais será executado sem sua autorização). Mas existe uma segunda, mais fluida, sorrateira e por isso mesmo mais perversa. Que se baseia na forma como o “parser” funciona. Ou melhor, funcionava antes do IE7.

Como eu disse, para identificar o “endereço IP” e os demais componentes do URL, a rotina do “parser” subdivide o URL e analisa cada trecho. Faz isto carregando os caracteres que formam o URL em um trecho da memória, uma estrutura temporária semelhante a um “buffer” e interpretando os caracteres um a um. Pois bem: os pulhas que se dedicam a disseminar “malware” descobriram uma forma de “enganar” a rotina do “parser” associando URLs “malformados” a atalhos. Fazem isso seja entremeando entre os caracteres do URL códigos inválidos, seja aumentando excessivamente o número de caracteres fazendo com que se estendam para além do trecho de memória reservado para este fim pelo “parser”, o que provoca um efeito semelhante a um “estouro” ou “extravasamento” de buffer e “planta” na memória código executável que instala o programa mal intencionado.

Até agora, a solução encontrada pela MS cada vez que se descobria uma vulnerabilidade relativa ao “parser” de URLs do IE era emitir um “remendo” ou “patch” e inclui-lo em uma atualização de segurança. Desta vez ela decidiu resolver o problema de uma vez por todas (o que significa realmente “até que a fértil imaginação dos tratantes que desenvolvem “malware” conseguirem uma forma de burlar a solução”): reescrever inteiramente a rotina do “parser” do IE7 definindo uma única função para processar dados de URLs, uma função mais confiável por ter sido desenvolvida tendo em mente as principais estratégias adotadas para criar URLs “malformados”. Agora, toda a manipulação de URLs é feita por um “parser” concebido para se conter ataques gerados por mal-formação de URLs.

Opção por permitir controles ActiveX (ActiveX Opt-In)

Controles ActiveX são a contrapartida da Microsoft aos mini-aplicativos Java da Sun Microsystems. Trata-se de um conjunto de tecnologias que permitem a interação entre os componentes de software em um ambiente de rede (inclusive a Internet mas não exclusivamente nela) independentemente da linguagem usada para desenvolver tais componentes. Um “controle ActiveX” funciona na prática como um pequeno programa usado para ativar e ligar diferentes aplicativos permitindo que o usuário interaja com o ambiente de rede. Em resumo: um controle ActiveX é código executável e, se usado mal intencionadamente, pode causar danos irreversíveis. Além de ser um dos meios preferidos pelos safardanas que criam “malware” para disseminá-los.

Geralmente estes malfeitores criam seus próprios controles ActiveX e usam de algum artifício para fazer com que o usuário incauto o instale na máquina alvo. Este método tornou-se tão comum que a maioria dos programas navegadores dispõe de defesas contra ele: se as configurações de segurança estão ajustadas “nos conformes”, cada vez que um agente qualquer tenta instalar um novo controle ActiveX o usuário é avisado e uma permissão é solicitada. E todo usuário com um mínimo de discernimento já aprendeu a recusar liminarmente a instalação de qualquer controle ActiveX cuja solicitação surgiu inopinadamente em sua tela, aceitando apenas aqueles cuja fonte é conhecida e confiável.

Pois bem: como acima mencionado, embora usados predominantemente na Internet, controles ActiveX podem ser empregados em qualquer ambiente de rede. Por isso o próprio Windows traz diversos deles criados para uso pelo próprio sistema.

Ora, como estes controles já vêm com Windows, não é preciso instalá-los. Para serem usados, basta que sejam invocados (ou “chamados”) por uma rotina qualquer. Como já estão instalados, serão executados sem aviso. Resultado: como era de se esperar, os meliantes que criam “malware” passaram a se aproveitar deste fato e apelar para estes controles ActiveX pré-instalados, mesmo alguns que não foram concebidos para uso na Internet, usando-os para instalar seus programas ou furtar diretamente dados confidenciais dos usuários.

Para dificultar este estratégia, a MS engendrou a “opção por permitir controles ActiveX” (ActiveX Opt-In). Que consiste em solicitar permissão ao usuário para executar pela primeira vez qualquer controle ActiveX, mesmo aqueles previamente instalados na máquina. Fizeram isso desabilitando por padrão toda a “classe” de controles ActiveX. Se um agente qualquer invocar um controle, o sistema verifica se ele está ou não habilitado. Se acabou de ser instalado ou se já estava previamente instalado mas jamais foi usado, certamente estará desabilitado. Então, antes de executá-lo, será solicitado ao usuário que o habilite. A partir de então aquele controle poderá ser invocado a qualquer momento por qualquer agente (portanto, cuidado ao responder afirmativamente as solicitações de habilitar controles ActiveX, especialmente se aparecerem inopinadamente, “do nada”, em sua tela e mais especialmente ainda se isto ocorrer enquanto está visitando um sítio da Internet pouco confiável, seja pornográfico, seja daqueles que fornecem programas “informais” ou “cracks” e assemelhados).

De novo: a iniciativa “ActiveX Opt-In” não impede que controles ActiveX mal intencionados sejam executados. Sempre se pode imaginar uma situação em que um usuário mal informado ou pouco experiente autorize que seja habilitado sem saber do perigo que isto representa. Mas, novamente: não impede, mas dificulta. O que já é muito...

Proteção contra ataques entre domínios (“cross-domain scripting attack”)

Um “domínio” é uma máquina, ou um grupo de máquinas que compartilham um “diretório” ou local de armazenamento comum, conectada à Internet. Um domínio é identificado por um “nome de domínio” (não confundir o nome de domínio, seu identificador, com o domínio propriamente dito, o servidor ou grupo de servidores que armazena os arquivos). Cada domínio dispõe de um “endereço IP”, um número que o identifica. Mas para nós, humanos, é mais fácil identificar algo por um nome que por um número. O nome de domínio, então, é uma forma mais simples de nos referirmos a ele que usando um número.  Por exemplo: no URL (clique nele para de divertir um pouco):

< www.bpiropo.com.br/gente.htm > www.bpiropo.com.br/gente.htm

O trecho inicial antes da primeira barra invertida (“/”) é o nome de domínio.

Quando se introduz um nome de domínio na barra de endereços do programa navegador e tecla-se ENTER para estabelecer a conexão com o sítio correspondente, a primeira ação do navegador é conectar-se a uma máquina específica, um “Servidor de Nomes de Domínio” (“Domain Name Server”), para consultar uma tabela que “resolve” este nome (ou seja, converte-o no endereço IP correspondente) e repassar o endereço IP para a máquina (que ao contrário dos humanos, se entende melhor com números que com nomes) para que ela feche a conexão com aquele domínio usando como referência o endereço IP.

Por exemplo: o nome de domínio de meu provedor de correio eletrônico, o Mandic, é “www.mandic.com.br”. Seu endereço IP é “200.225.83.19”. Experimente: entre com ambos (um de cada vez, naturalmente) na caixa de endereços de seu navegador, tecle ENTER e veja o que ocorre (ao entrar com o endereço IP, remova as aspas mas deixe os pontos separando os grupos de algarismos). Toda e qualquer página pertencente ao sítio do Mandic que possa ser exibida em um programa navegador obrigatoriamente deverá estar armazenada neste domínio juntamente com todo código (“scripts”, controles ActiveX, aplicativos Java e mais o que for) usado para interagir com as páginas do sítio do Mandic (por exemplo, o programeto que verifica meu nome de usuário e senha cada vez que tento estabelecer uma conexão para ler minha correspondência eletrônica).

Agora que sabemos o que é um domínio poderemos entender (mais) um estratagema empregado pelos finórios (meus adjetivos estão acabando...) que desenvolvem “malware” para contaminar nossas máquinas, o “ataque entre domínios” (“cross-domain scripting attack”).

A coisa é razoavelmente sofisticada e funciona assim: você entra, inadvertidamente, em um sítio criado por um sevandija (não falei que estavam acabando? dicionário, por favor...) mal intencionado. Este sítio, hospedado em um determinado domínio, usa um “script” para invocar a abertura de uma nova janela hospedada em um segundo domínio, digamos o de seu banco. Uma página absolutamente legítima, a do seu banco, efetivamente hospedada no domínio do seu banco, portanto perfeitamente confiável. E que pede sua identificação e sua senha.

Ora, como se trata realmente da página de seu banco, em princípio não há razão para tomar maiores precauções. E você, que confia nas páginas e códigos armazenados naquele domínio, fornece os dados solicitados. Parece seguro, pois não?

Normalmente, seria. Afinal você está fornecendo ao sítio de seu banco os dados que utiliza para se identificar junto a ele. Mas fê-lo (que língua essa nossa...) sem notar que aquela janela, aparentemente segura, foi invocada por um script armazenado em um segundo domínio, este sim mais falso que uma nota de três reais. E que pode ter disparado um novo “script” que aciona um código executável que captura os dados fornecidos ao outro domínio e os envie ao sevandija acima referido. E lá se foram sua identificação e senha.

Bem bolado, nénão? Pois isto é o “ataque entre domínios” (“cross-domain scripting attack”).

No IE7 as coisas são diferentes. Nesta nova versão todo código executável invocado por uma página da Internet passa a ser indissoluvelmente ligado ao domínio de onde se originou. E sua ação fica limitada a esse domínio. Qualquer tentativa de interagir com outra janela ou conteúdo armazenado fora deste domínio é irredutivelmente bloqueada.

Esta característica não apenas impede totalmente qualquer ataque entre domínios como evita que vulnerabilidades eventualmente existentes nas páginas de um ou outro sítio da Internet sejam exploradas por código originado em um domínio diferente.

Interação com o Windows Defender

Finalmente, ainda visando a proteção contra “malware”, é importante citar a estreita colaboração entre o IE7 e o Windows Defender, que discutimos na coluna anterior.

O Defender é um programa de proteção contra “malware” cujas principais características já foram discutidas e portanto não cabe voltar a elas. Aqui nos interessa apenas um ponto: sua estreita integração com a versão 7 do IE, já que foram desenvolvidos em conjunto. Por isso, durante toda transferência de arquivos para o computador do usuário (“download”), o arquivo “baixado” é submetido a uma varredura pelo Windows Defender enquanto está sendo baixado, que procura por conteúdo mal intencionado durante a transferência, que é interrompida caso se constate que se trata de código destinado a instalar “malware”.

Pronto. Faltam apenas os recursos de segurança incorporados ao IE7 visando a proteção de dados pessoais. Mas esta coluna já ficou demasiadamente longa, portanto vamos esperar um pouco e abordá-los na próxima (e, prometo, última) coluna desta série.

Até lá.

 

B. Piropo