Redação do Site Inovação Tecnológica - 24/06/2003
O estudante indiano Sudhakar Govindavajhala, atualmente estudando na Universidade Princeton (Estados Unidos), iniciou um verdadeiro alvoroço na comunidade mundial de informática, ao anunciar que consegue quebrar o código de uma máquina virtual Java rodando em qualquer processador, desde um PC comum, até um "smart card" (cartão inteligente), utilizando apenas uma lâmpada e um pequeno programa escrito em Java.
Após fazer uma palestra descompromissada em um simpósio sobre segurança no Institute of Electrical and Electronic Engineers (IEEE), demonstrando o funcionamento da sua teoria em máquinas virtuais Java e .Net, o estudante teve sua agenda lotada, concedendo palestras privativas para profissionais da NASA, Intel, fabricantes de "smart cards" e da gigante IBM. Para preocupação de todas essas empresas, o método do estudante funciona muito bem na maioria dos sistemas. Mas o pior é que nenhum sistema até agora testado mostrou-se imune ao ataque.
A descoberta da falha é, sem dúvida, a mais importante dos últimos tempos e deverá agitar a comunidade envolvida com segurança da informação e com os fabricantes de hardware pelos próximos anos. Não será mais possível fabricar memórias de computador como se fez até hoje, sob pena de perda de credibilidade junto aos clientes, uma vez que não é possível garantir-se a segurança de praticamente nenhum sistema de segurança baseado em software. O risco é maior para equipamentos portáteis.
O ataque requer o acesso físico à memória do computador, o que significa que as chances de que dados sejam usurpados remotamente de uma máquina são quase nulas. Mas preste atenção no "quase". Como as memórias de computador estão sujeitas a erros induzidos por excesso de calor, seja pela elevação da temperatura ambiente, seja por um mal funcionamento dos ventiladores do gabinete, um vírus rodando silenciosamente pode ficar à espreita, aguardando que um erro aleatório libere o acesso a áreas protegidas do sistema. No caso dos cartões inteligentes, o acesso não é problema, uma vez que o cartão é de uso disseminado, principalmente na Europa e Estados Unidos, podendo ser adquirido livremente por alguém mal intencionado, que poderá alterar seus dados ou os valores nele armazenados.
As primeiras experiências com o método de ataque, que exige apenas o conhecimento básico do funcionamento das memórias de computador e uma lâmpada, foram centradas justamente nos "smart cards", os cartões inteligentes que começam a substituir os cartões de crédito em nível mundial. Um cartão inteligente possui um pequeno processador e dados muito importantes como, por exemplo, um crédito que equivale a dinheiro vivo, que o usuário deposita no Banco e depois gasta como se fosse dinheiro vivo. As administradoras de cartão de crédito procuraram o estudante para saber mais detalhes sobre a falha de segurança, uma vez que o crédito registrado no cartão equivale a um cheque ao portador dado pelos bancos, com certificação digital e tudo. Caso seja possível quebrar-se a senha do cartão, um usuário mal intencionado poderia dar-se um crédito ilimitado ou renová-lo constantemente.
Um cartão inteligente possui um microprocessador e um sistema operacional baseado em uma máquina virtual Java. Uma máquina virtual é um programa de computador que simula um computador virtual dentro da memória de um computador real. Desta forma, é possível escrever-se programas que rodem em qualquer computador, seja ele Windows, Linux ou Mac. Uma máquina virtual rodando em um cartão inteligente permite que programas escritos em Java possam rodar nele sem problemas. Além disso, a máquina virtual isola o programa do restante do microprocessador, cujas rotinas internas ficam seguras. Pelo menos ficavam... até que o estudante resolvesse focalizar o calor de uma lâmpada sobre o chip.
Utilizando uma lâmpada para aquecer o chip, o estudante conseguiu inverter um bit da memória e ter acesso aos dados do cartão. Na verdade, mesmo raios cósmicos, que incidem o tempo todo sobre a Terra, podem alterar o valor ultra-sensível do campo magnético que guarda o valor individual de um bit em qualquer memória de computador. Mas o estudante resolveu acelerar o processo utilizando o calor de uma lâmpada.
O método de ataque é tão simples que nem é preciso focalizar um bit específico, o que certamente exigirá um aparato mais sofisticado do que uma lâmpada. "Não é importante inverter um bit específico da memória. Se você puder alvejar a memória, tudo que você necessita é inverter um bit correspondente a uma condição '(if password==xxxxx)' para ter acesso de root [administrador do sistema, com acesso integral]. Eu não tenho idéia de onde fisicamente os erros realmente ocorrem. Algumas vezes minha máquina travou devido a esses erros."
Govindavajhala introduziu um "applet", um pequeno programa Java com acesso muito restrito ao sistema, que tenta continuamente acessar o código protegido da memória. Ele cria dois objetos diferentes (A e B) e tenta fazer com que dois ponteiros apontem para o mesmo endereço físico. Como a linguagem Java efetua verificação de tipos ("typecast"), isto só pode ocorrer em caso de erro físico da memória. A aplicação de calor sobre o chip faz com que bits críticos sejam alterados, igualando os dois endereços. Isto equivale a se liberar o acesso à memória, quebrando todo o controle de segurança da máquina virtual Java.
Um ataque contra um computador pessoal, por sua vez, mostrou que os erros induzidos permitem a quebra da segurança em 70% dos casos. Mas ocorreu também uma série de erros que comprometeram o próprio sistema operacional (Linux Red Hat 7.3) da máquina sendo atacada, exigindo sua completa reinstalação. Por isso, Govindavajhala prosseguiu seus testes utilizando boot através de CD-ROM. O ataque teve sucesso contra máquinas virtuais Java da IBM e da Sun.
Por incrível que possa parecer, a proteção contra o ataque já existe e está presente em muitos computadores: as memórias do tipo ECC ("Error-Correcting Code") efetuam checagem de paridade de bits e corrigem automaticamente os erros, naturais ou induzidos. Mas, por uma questão de custos, a maioria dos PCs mais baratos utilizam memória sem checagem de paridade, deixando-os à mercê do ataque.
Mas, mesmo utilizando as memórias mais modernas, nem tudo são flores: as memórias ECC são efetivas apenas contra erros de 1 ou 2 bits, o que é mais do que suficiente para lidar com os erros "naturais", induzidos por superaquecimento ou raios cósmicos. Também do lado negativo, a contínua elevação da freqüência de operação dos computadores ("clock"), faz com que a ocorrência de erros no barramento ("bus") seja muito mais freqüente, comprometendo a segurança.
Uma proteção efetiva, segundo o descobridor do ataque, seria, além de memórias com checagem de paridade, a montagem de logs (arquivos de registro de ocorrências), onde o administrador pudesse observar comportamentos não aleatórios dos erros de memória, o que poderia indicar um ataque. A maioria dos sistemas operacionais não efetua registros desse tipo.
O artigo "Using Memory Errors to Attack a Virtual Machine" (Utilizando Erros de Memória para Atacar uma Máquina Virtual), está disponível para download no site de Govindavajhala (veja link abaixo). Há também uma série de comentários (em inglês) sobre questões específicas do ataque, questões estas feitas por diversas fontes, depois que o artigo foi publicado.