Computadores são Seguros?
comentado por Bruno Domingues em janeiro 20, 2008
Você confiaria em comprar livros pela Internet? E comprar um apartamento?
Eu pessoalmente só confio no primeiro…
Nos últimos anos presenciamos diversas mudanças sociais promovidas pelas facilidades que os computadores nos entregam. Hoje, a tele-presença já é uma realidade para muitas organizações, temos o comodismo de realizar transações bancárias até mesmo pelo celular, interagir com o governo através de um computador conectado a Internet e até mesmo realizar um curso de pós-graduação à distância. Todas essas inovações sociais, também moldaram o comportamento criminoso, pois hoje quase não ouvimos mais falar de assalto a banco ou carro-forte como o Rio em fins da década de 80, porém o cybercrime e as fraudes eletrônicas têm se tornado cada vez mais freqüente.
É neste cenário, que é de superlativa importância que segurança seja tratada com destaque, pois não é concebível termos neste modelo de sociedade que se figura, a ausência das garantias individuais ou a falta de segurança de propriedade, e nada disso pode ser assegurado sem que haja confiança no meio eletrônico.
Analise da arquitetura x86
Toda a instrução que é executada no processador com a arquitetura tradicional x86, desde o Intel 286, pode ser executada em quatro níveis distintos de privilégio que são definidos por dois bits do processador. Portanto quando uma instrução é executada com os bits de prioridade igual a 00b (0d), significa que está rodando com o maior nível de privilégio possível, e é também conhecido pela literatura como anel 0 ou “modo kernel”, por outro lado, quando estes bits são igualados a 11b (3d), significa que está rodando com menor nível de privilégio, que também é conhecido como anel 3 ou “modo usuário”
No inicio da década de 90, uma famosa discussão na USENET entre o Prof. Andrew S. Tanembaum (o mesmo que escreveu o clássico Computers Network) e Linus Torvalds (criador o sistema operacional Linux) debatiam a respeito dos modelos em que o sistema operacional deveria ser construído na arquitetura Intel x86. Andrew era defensor do modelo microkernel, que de fato era uma proposta bem elegante do ponto de vista de implantação, pois o sistema seria distribuído entre os quatro níveis de privilégio disponibilizados pelo processador, conforme pode ser observado no diagrama a seguir:
Já, Linus Torvalds, era defensor de um modelo mais pragmático, talvez até pela sua formação de programador, defendia o modelo de kernel monolítico, onde o kernel e drivers de dispositivos residem dentro do mesmo contexto de prioridade, portanto do ponto de vista de construção do sistema operacional se torna mais simplificado por evitar mudanças de contexto para chamadas entre processos.
O tempo passou, e mostrou que Linus Torvalds estava certo, o Linux se popularizou e o MINIX, por exemplo, desenvolvido por Andrew, não. David Cutler (arquiteto da Microsoft) também apostou no modelo de kernel monolítico, que acabou por prevalecer. Porém isso não quer dizer que os pontos levantados por Tanembaum não eram relevantes, muito pelo contrário, do ponto de vista de segurança, a criação de fronteiras entre o kernel, drivers de dispositivos e outros elementos, consiste em um avanço do modelo proposto por Linus, porém os sistemas de kernel monolítico apresentaram um desenvolvimento mais rápido pela sua simplicidade e tinha como apelo o seu melhor desempenho, apesar deste ser um ponto muito controverso, pois há vários exemplos de sistemas operacionais de microkernel, com um excelente desempenho, como é o caso, por exemplo, do IOS da Cisco que vem embarcado em seus roteadores.
Em termos de segurança, no kernel monolítico, uma vulnerabilidade ou código malicioso provindo de um driver ou serviço que rode no anel 0, comprometerá todo o sistema operacional, o que no Windows se apresenta como a temida tela azul e no Linux a famigerada mensagem “kernel panic”, comportamento diferente do esperado no modelo de microkernel, onde se tem um kernel mínimo e não-extensível, separado dos demais componentes em seu próprio TCB (Trusted Computing Base).
A ameaça
Os malwares mais sofisticados, e que tem se tornado cada vez mais populares, atuam no modo kernel, ou seja, no mesmo nível de privilégio que o seu antivírus que em tese é o agente que deveria proteger a máquina de códigos maliciosos, logo por definição tanto o código malicioso quanto o antivírus possuem nestes casos os mesmos recursos e privilégios no sistema operacional, isso significa que se o antivírus procurar a presença do malware em memória, o malware também tem o privilégio de interceptar a chamada de varredura de memória e passar qualquer informação ao antivírus, qualquer uma! Só tem um complicador nos casos reais, na maioria das vezes o antivírus não sabe o que procurar, principalmente quando é um malware recente, e na maioria das vezes o criador do malware sabe muito melhor a respeito das técnicas dos softwares de antivírus. Dado o exposto, quem você acha que tem mais chances de ganhar a batalha pelo kernel?
Exemplos deste tipo de ameaças são cada vez mais comuns, como é o caso do rootkit da Sony distribuido nos seus CDs de música como um recurso anti-pirataria que é discutido pelo Mark Russinovich, ou as diversas analises de rootkits que estão presentes na Internet, tomando como exemplo este excelente post do Fernando Cima.
Proposta
Conforme tivemos a oportunidade de explorar, os recursos de segurança disponíveis em software para lidar com ameaças que atuam no modo kernel são limitados e ataques cada vez mais sofisticados, como é o caso da prova de conceito da Joanna Rutkowask de um malware indetectável se usa das extensões de virtualização do processador para permanecer oculto, ou os ataques de DMA, provam que barreiras de segurança precisam ser implantadas no hardware para que tenhamos num futuro próximo computadores em que todos comprariam a sua moradia por ele.
Perseguindo este objetivo, a Intel criou em 2006 a linha de microcomputadores vPRO para o segmento corporativo, onde vários dos recursos de segurança que mitigam este tipo de ataque já estão presentes na plataforma. Uma mudança de paradigma importante é a inserção de um componente especifico para supervisionar o sistema operacional do usuário, o Virtual Appliance, que nada mais é que um sistema operacional extremamente enxuto, não-extensível (como o microkernel) e roda com nível de privilégio superior ao anel 0, pois o sistema operacional do usuário roda virtualizado, e portanto possui um conjunto restrito de instruções que pode executar diretamente no hardware, é o chamado contexto VMX-nonRoot (o termo VMX, vem de Virtual Machine eXtension), enquanto o Virtual Appliance por sua vez tem controle completo sobre o hardware e controla o que o sistema operacional do usuário pode ou não fazer no hardware, é o contexto VMX-Root, conforme pode ser visto na ilustração a seguir.
A criação de mais este nível de privilégio é possível com o uso de processadores que possuem o recurso de virtualização Intel-VT embarcado no processador, isto é, o processadores Core 2 Duo da linha 6xxx.
Você pode me perguntar:
—- Bruno, isso é um engodo! Como é que você garante que nenhum malware vai fazer uma injeção de código no Virtual Applicance e o problema continuar?
Nas máquinas vPRO, também está presente na plataforma um chip criptográfico, o TPM (Trusted Platform Module) que é o primeiro componente a ser energizado o computador é ligado, antes mesmo da BIOS, e este é responsável por verificar a integridades dos demais componentes da máquina. Por exemplo, quando o microcomputador é ligado em uma máquina com vPRO, o chip TPM pode verificar a integridade do Virtual Appliance realizando uma função hash sobre ele e comparando com o valor do ultimo estado no registrador do chip TPM, em os valores coincidindo, significa que não houve injeção de código, porém se os valores não forem idênticos, significa que a máquina não está mais em um estado confiável, e será necessário tomas as medidas cabíveis de segurança.
Essa é naturalmente uma simplificação de um dos recursos presentes nos equipamentos da família vPRO, e nos próximos posts vamos explorar outras facetas desta nova plataforma.
Comentários (6)
Outros posts com as tags: segurança, virtualização, vpro


Comentários
janeiro 20, 2008 | Mari disse:
Vcs podiam postar mais!
janeiro 22, 2008 | Bruno Domingues disse:
Ola Mari, Você está coberta de razão, o final do ano de 2007 para mim foi bastante corrido, mas a meta que eu me coloquei para 2008 é trazer sempre um conteúdo relevante por semana para discutirmos neste espaço!
Abraços e Obrigado pelo feedback! —bruno
janeiro 30, 2008 | Rodrigo Rubira Branco (BSDaemon) disse:
Na verdade nao seria necessario o uso das extensoes de virtualizacao para colocar este tipo de checagem.
A propria SMM provida pela arquitetura poderia ser utilizada, oferencendo uma base confiavel: http://www.kernelhacking.com/rodrigo/docs/H2HCIV.pdf
O grande desafio aqui é garantir atualizacoes adequadamente do sistema operacional e a performance para as verificacoes devidas. As mudancas necessarias nos kernels dos sistemas operacionais tambem devem ser executadas, para tornarem os sistemas mais resistentes… os modelos propostos pela intel ou mesmo o meu projeto, apenas garante que o kernel nao sera modificado, mas isto nao quer dizer que prioridades e estruturas dinamicas nao sejam alteradas, dando assim efetivo controle das maquinas por parte dos atacantes…
[s]
janeiro 30, 2008 | Bruno Domingues disse:
Ola Rodrigo,
Primeiramente, eu vi a sua apresentação no kernelhacking.com e realmente é um excelente artigo, obrigado por compartilhar!! Nos meus proximos posts sobre segurança sem dúvida vou fazer menção ao seu trabalho para ilustrar alguns pontos que pretende desenvolver ainda sobre o tema segurança.
De qualquer forma, o que apresentei é apenas uma parte da proposta da plataforma, pois para garantir que níveis de privilégio não sejam “burladas” ou que se faça alteração dinâmica em memoria, outras elementos do hardware precisam trabalhar, que na plataforma Intel se chama: Intel-VTd (para fazer o isolamento de I/O) e o TXT (Trusted Execution Technology), que pretendo explorar em posts futuros.
Abraços e Obrigado! —bruno
janeiro 30, 2008 | Fabiano disse:
Eu acredito que computadores são seguros, desde que os usuários pratiquem as normas de segurança. Porém é sabido que o desafio pemeia a mente H4ck3r, não importa o quão eficiente o sistema seja, eles sempre se unirão e farão a diferença, não para ofender os programadores, nem para tornar a vida de quem pratica a segurança da informação mais difícil, mas sim porque é como um vício, burlar, conseguir desvendar o que muitos temem. Afinal, sabemos que para o bom Matemático não existem barreiras, apenas tempo e concentração para alcançar a fórmula exata. Ótimo forum.
março 11, 2008 | Rodrigo Rubira Branco (BSDaemon) disse:
Grande Bruno,
Show de bola, se puder me avisar quando os proximos artigos sairem, adoraria acompanhar!
Sem duvidas sem IOMMU torna-se impossivel fazer isolamento de drivers no sistema operacional…
Abracos,
Rodrigo (BSDaemon).