Devemos confiar nas assinaturas digitais em arquivos PDF?

Pesquisadores tentam modificar os conteúdos de um arquivo PDF assinado sem invalidar a assinatura

Quase todas as empresas ou agências governamentais utilizam arquivos PDF -geralmente com assinaturas digitais para garantir a autenticidade. Quando você abre um arquivo assinado em qualquer visualizador de PDF, o programa exibe um sinalizador indicando por quem o documento está assinado, e fornece acesso ao menu de validação.

Assim, uma equipe de pesquisadores de várias universidades alemãs decidiu testar a segurança das assinaturas em PDF. Vladislav Mladenov, do Ruhr-Universität Bochum, compartilhou as descobertas da equipe durante apresentação no Chaos Communication Congress (36С3)

A tarefa dos pesquisadores era simples: modificar o conteúdo de um documento PDF assinado sem invalidar a assinatura. Na teoria, os cibercriminosos poderiam fazer o mesmo para transmitir informações falsas ou adicionar conteúdo malicioso a um arquivo autenticado. Afinal, os clientes que recebem um documento assinado de um banco, por exemplo, provavelmente confiam nele e clicam em qualquer link.

A equipe selecionou 22 visualizadores de PDF mais populares, para várias plataformas, e forneceu a eles os resultados de seus experimentos.

Estrutura do arquivo PDF

Estrutura de arquivo em PDF. Cabeçalho, Corpo, Tabela Xref e Trailer; Atualizações no Corpo, Tabela Xref e Trailer. Todos protegidos por assinatura.

Estrutura de arquivo em PDF. Cabeçalho, Corpo, Tabela Xref e Trailer; Atualizações no Corpo, Tabela Xref e Trailer. Todos protegidos por assinatura.

Primeiro, façamos uma introdução sobre o formato PDF. Cada arquivo consiste em quatro partes principais: o cabeçalho (Header, em inglês), que mostra a versão PDF; o corpo (Body), que mostra o conteúdo principal visto pelo usuário; a seção Xref, um diretório que lista os objetos dentro do corpo do arquivo e seus locais (para exibição do conteúdo); e o trailer, que é onde os leitores de PDF começam a ler o documento. O trailer contém dois parâmetros importantes que informam ao programa por onde começar o processamento do arquivo e onde a seção Xref começa.

Uma função de atualização integrada ao formato permite ao usuário, por exemplo, destacar parte do texto e deixar comentários. Do ponto de vista técnico, a função adiciona mais três seções: atualizações para o corpo do arquivo, um novo diretório Xref e um novo trailer. Isso efetivamente torna possível alterar a maneira como os objetos são vistos pelo usuário e adicionar novo conteúdo. Em essência, uma assinatura digital também é uma atualização adicional, adicionando outro elemento e as seções correspondentes ao arquivo.

Ataque ISA (Incremental saving attack)

Adicionando uma atualização.

Adicionando uma atualização.

Primeiro, a equipe tentou adicionar seções extras ao arquivo com outra atualização incremental, usando um editor de texto. A rigor, isso não é um ataque – a equipe simplesmente usou uma função implementada pelos desenvolvedores do formato. Quando um usuário abre um arquivo que foi modificado dessa maneira, o leitor de PDF geralmente exibe uma mensagem informando que a assinatura digital é válida, mas o documento foi modificado. Não é a mensagem mais esclarecedora, especialmente não para um usuário inexperiente. Pior que isso: um dos visualizadores de PDF (LibreOffice) nem exibiu a mensagem.

O próximo experimento envolveu a remoção das duas seções finais (ou seja, a adição de uma atualização ao corpo, mas não o novo Xref e o trailer). Alguns aplicativos se recusaram a trabalhar com esse arquivo. Dois visualizadores de PDF detectaram que as seções estavam ausentes e as adicionaram automaticamente sem notificar o leitor sobre uma alteração no conteúdo. Três outros carregaram o arquivo sem nenhuma objeção.

Em seguida, os pesquisadores se perguntaram o que aconteceria se eles simplesmente copiassem a assinatura digital em sua própria atualização “manual”. Outros dois leitores caíram nessa – o Foxit e o MasterPDF.

No total, 11 dos 22 leitores de PDF mostraram-se vulneráveis ​​a essas simples manipulações. Além disso, seis deles não mostraram absolutamente nenhum sinal de que o documento aberto para visualização havia sido modificado. Nos outros cinco casos, para revelar qualquer sinal de manipulação, o usuário teve que entrar no menu e verificar a validade da assinatura digital manualmente; simplesmente abrir o arquivo não era suficiente para mostrar a falha.

Ataque SWA (Signature wrapping attack)

Adicionando uma assinatura digital

Adicionando uma assinatura digital

Ao assinar um documento, dois campos importantes são adicionados como uma atualização adicional ao corpo do arquivo: /Conteúdo (Contents), que contém a assinatura, e /ByteRange, que descreve exatamente o que foi assinado. Neste último, existem quatro parâmetros (que definem o início do arquivo, o número de bytes antes do código da assinatura, um byte que determina onde o código da assinatura termina e o número de bytes após a assinatura) porque a assinatura digital é uma sequência de caracteres gerado por meios criptográficos a partir do código do documento PDF. Naturalmente, a assinatura não pode assinar-se sozinha, portanto, a área onde está armazenada é excluída do processo de cálculo da assinatura.

Os pesquisadores tentaram adicionar outro campo /ByteRange imediatamente após a assinatura. Os dois primeiros valores permaneceram inalterados, apenas o endereço do final do código de assinatura foi alterado. O resultado foi o aparecimento de um espaço adicional no arquivo, permitindo a adição de objetos maliciosos, bem como a seção Xref que os descreve. Na teoria, se o arquivo fosse lido corretamente, o visualizador de PDF simplesmente não chegaria a esta seção. No entanto, 17 dos 22 aplicativos estavam vulneráveis ​​a esse ataque.

Falsificação de assinaturas universais (USF)

Para maior precisão, o time de pesquisadores também decidiu realizar um teste de estresse nos aplicativos contra um truque conhecido, onde é realizada uma tentativa de substituir os valores dos campos com informações incorretas, ou simplesmente deletá-los. Quando o experimento é feito na seção de conteúdos, descobriu-se que, se a assinatura verdadeira fosse substituída por “0x00”, dois programas de leitura ainda assim validavam o documento.

E se a assinatura for deixada no devido lugar, mas a seção /ByteRange (que é a informação sobre o que você assinou exatamente) fosse deletada? Ou um espaço em branco fosse inserido no lugar dos dados reais? Em ambos os casos, alguns programas validaram a assinatura mesmo assim.

No total, foram encontrados erros de implementação que poderiam ser explorados em 4 dos 22 programas.

A tabela abaixo é um resumo que mostrar que nada menos do que 21 dos 22 leitores de PDF poderiam ser enganados. Ou seja, para todos exceto um, é possível criar um arquivo PDF com conteúdo malicioso ou informação falsa que pode parecer válido para o usuário.

Tabela resumo das vulnerabilidades dos leitores de PDF. Fonte

Curiosamente, o único aplicativo que não caiu em nenhum dos truques dos pesquisadores foi o Adobe Reader 9. O problema é que ele é suscetível a uma vulnerabilidade do RCE e é usado apenas pelos usuários do Linux, simplesmente porque é a versão mais recente disponível para sistema operacional.

Conclusões práticas

Quais conclusões práticas podemos tirar de tudo isso? Em primeiro lugar, ninguém deve confiar cegamente em assinaturas digitais em PDFs. Se você ver uma marca verde de verificação em algum lugar, aquilo não necessariamente significa que é uma assinatura válida.

Em segundo lugar, mesmo um documento assinado pode representar um risco. Então, antes de abrir qualquer arquivo recebido online ou de clicar em quaisquer links contido neles, esteja certo que você tem uma solução de segurança confiável instalada em seu computador.

Dicas

Como proteger a segurança doméstica

As empresas de segurança oferecem tecnologias inteligentes, principalmente câmeras, para proteger a casa contra roubos, incêndios e outros incidentes. Mas que tal proteger esses sistemas de segurança contra intrusos? É o que faremos para preencher essa lacuna.