A Próxima Batalha: Malware em Hardware e Hypervisors
Em um post anterior eu falei aqui sobre como rootkits e outros softwares maliciosos podem subverter o kernel e tomar o controle do sistema, ficando virtualmente invisíveis para o usuário, para as ferramentas de segurança e para o próprio sistema operacional. Mencionei também como a assinatura digital do código do kernel e a proteção contra patches (Patchguard) nos Windows 64-bits atuam para mitigar esta ameaça.
A proteção do kernel no entanto não é o representa o fim da guerra contra malware em geral. Da mesma forma que os rootkits migraram para um modo mais privilegiad, no caso o kernel, para bypassar as proteções do modo usuário, nada mais previsível que eles venham a migrar para um modo mais privilegiado que o kernel para bypassar estas novas proteções. Mas o quê existe mais privilegiado que o kernel? O hardware - seja ele virtualizado ou não.
Ataques via Hardware
Há dois meses atrás o The Washington Post publicou uma matéia sobre um ataque de hackers chineses contra o Departamento de Comércio dos EUA. A material não publica Informação técnica detalhada sobre o ataque, mas ela contém um ponto interessantíssimo e nunca visto antes por mim:
A source familiar with the security breach said the hackers had penetrated the computers with a "rootkit" program, a stealthy form of software that allows attackers to mask their presence and then gain privileged access to the computer system.<…>
Commerce officials have also decided they cannot salvage the workstations that employees had been using and instead will build an entirely new system for the bureau in the coming months with "clean hardware and clean software," the senior official said. Foulon told employees in late August that they hoped to replace all the bureau's workstations within three months.
A maioria de nós está acostumado a ver o hardware como algo imutável, estável e obviamente confiável, e um porto seguro para onde sempre se pode voltar no caso de um incidente – tanto que a forma normalmente considerada segura de recuperar um sistema após uma invasão é o de reinstalar SO e aplicativos a partir de mídia considerada confiável.
No entanto o hardware usado atualmente pode ser na verdade surpreendentemente “dinâmico”. A BIOS do sistema, as extensões de BIOS nas placas PCI e o próprio microcódigo dos processadores podem ser atualizados via software e usados para esconder malware, que podem ficar assim virtualmente invisíveis para o sistema operacional e aplicações anti-malware. Código carregado em qualquer um destes pontos vai rodar de forma mais privilegiado que o kernel, e ficar indetectável por todo tipo de software que rode sobre ele. Só podemos especular o que foi usado no ataque contra o Departamento de Comércio, mas com certeza outros ataques deste tipo estão sendo feitos "as we speak" e só tendem a se tornar mais comuns.
Ataques via Hypervisor
Ataque similares podem ser feitos através de virtualização, e na verdade são conceitualmente o mesmo tipo de ataque – o software de virtualização é para todos os efeitos o “hardware” onde as máquinas virtuais executam. A introdução recente de virtualização auxiliada por hardware permitiu que pela primeira vez (na plataforma Intel/AMD) softwares de virtualização pudessem ficar completamente imperceptíveis aos olhos dos sistemas virtualizados.
O anel de proteção 0 (ring 0) era o modo mais privilegiado que um software poderia executar na plataforma Intel. Nele roda o kernel do sistema operacional que está no controle do hardware. Softwares de virtualização como o Virtual PC ou o Virtual Server rodam o kernel das máquinas virtuais no anel de proteçao 1, e as operações de acesso ao hardware e outras ações privilegiadas que só podem ser feitas no anel de proteção 0 são emuladas pelos softwares de virtualização. Ao custo, claro, de performance e compatibilidade.
Recentemente a AMD e a Intel lançaram extensões de virtualização para os seus processadores, que efetivamente cria um "anel de proteção -1" mais privilegiado que o anel de proteção 0. Neste anel -1 é possível ter SO mínimo com o software de virtualização, chamado de hypervisor, e permitir que o kernel dos sistemas operacionais virtualizados possam rodar no anel 0, exatamente como se não estivessem virtualizados. Estas extensões permitem que máquinas virtuais rodem praticamente sem nenhuma perda de performance e com compatibilidade.
Fantástico, não? Só que existe um lado negro das extensões virtualização por hardware: ao criar um anel de proteção mais privilegiado que o ring 0, elas permitem que um rootkit possa rodar neste anel e ficar completamente invisível do kernel. O próprio rootkit atua como um hypervisor, e virtualiza o sistema operacional rodando no sistema sem que ele perceba, até mesmo porque ele continua a executar no anel 0. Desta forma proteções como o PatchGuard são tão inúteis contra um rookit rodando em ring -1 quanto permissões em arquivos são inúteis contra um rootkit rodando no kernel.
A primeira prova de conceito de um rootkit usando máquinas virtuais foi produzida ironicamente pela Microsoft Research, e recentemente uma pesquisadora demonstrou no Blackhat um ataque usando o Vista x64 e as extensões de hardware da AMD. Até o momento ainda não são públicos ataques reais usando esta tecnologia, mas assim que processadores com estas extensões se tornem mais populares eles inevitavelmente virão.
Defesas?
Existem dois pontos de defesa contra ataques deste tipo. O primeiro é não deixar um malware deste tipo ser instalado. Nos sistemas Windows qualquer acesso direto ao hardware só pode ser feito pelo kernel, e um atacante para poder realizar um ataque contra o hardware tem que primeiro colocar código dentro do kernel (ou seja, ele tem que vencer a batalha pelo kernel antes para poder iniciar este ataque).
Todas as defesas de integridade do kernel portanto ajudam a proteger contra um ataque ao hardware ou hypervisor - assinatura de drivers, proteção contra patches, e o controle de integridade mandatório. No ataque demonstrado no Blackhat o ataque via hypervisor só foi possível porque a pesquisadora fez antes um ataque contra a assinatura de drivers, utilizando um exploit que foi posteriormente corrigido no Vista RC2.
Exploits como esse vão sempre aparecer, e aí entra o segundo e mais efetivo ponto de defesa – o próprio hardware. O uso de um chip TPM com o Bitlocker permite que a integridade do hardware seja verificada antes do sistema se iniciar, incluindo BIOS, extensões de BIOS em periféricos e outros pontos como MBR e trilha 0 da partição ativa. Se o hash de qualquer um destes componentes não for igual ao armazenado no chip TPM o boot não é feito, evitando que um sistema comprometido seja inicializado.
Estas duas defesas não são perfeitas. Novos bugs vão eventualmente ser descobertos que permitam a elevação de código para o kernel, e também um rootkit baseado em hardware ou hypervisor não seria descoberto pelo BitLocker enquanto o sistema não sofrer um “cold boot”. Mas elas um nível de proteção substancial contra esta nova geração de ataques, em especial o chip TPM. Na minha opinião é inevitável que todo hardware vai ter que incluir rotinas de verificação de sua integridade, e as especificações do Trusted Computing Group são o caminho que a indústria vai seguir nesta direção pelo spróximos anos. Se você está comprando um computador hoje, em especial um notebook, não deixe de comprar um sistema com um chip TPM 1.2.