Várias maneiras de falsificar PDF com assinatura digital


Fig. 1. O procedimento de salvamento incremental no qual as assinaturas digitais em PDF são baseadas. De acordo com os resultados do teste, esta é a maneira mais eficaz de falsificar documentos

Teoricamente, as assinaturas digitais em PDF autenticam de maneira confiável o autor de um documento. Mas, na prática, o processamento de PDF geralmente é realizado por software proprietário que não executa a validação corretamente. Especialistas da Universidade Ruhr em Bochum (Alemanha) descreveram várias opções para falsificar documentos PDF assinados digitalmente que funcionam na maioria dos visualizadores de PDF e serviços de verificação online.

A proteção contra todos os ataques é fornecida apenas em um único programa e até funciona no Linux.

Estrutura PDF



Fig. 2. Estrutura do documento PDF

A estrutura do documento PDF é mostrada na Fig. 2. Ao salvar de forma incremental as alterações no documento PDF, novos objetos são adicionados ao corpo , bem como uma nova tabela Xref com uma descrição dos novos objetos e um novo trailer com links para o catálogo (consulte a Fig. 1). Um diretório é o objeto raiz de um arquivo PDF; define a estrutura do documento e, opcionalmente, pode determinar as permissões de acesso.

Cada objeto começa com o número do objeto e o número da versão, o que aumenta a cada atualização do objeto.


Fig. 2. Estrutura do objeto PDF

Criação de Assinaturas


A adição de uma assinatura digital a um documento PDF depende de um mecanismo de salvamento incremental (consulte a Figura 1). Ao adicionar uma assinatura durante o salvamento incremental, o seguinte conteúdo é adicionado ao documento:

  • novo catálogo com um novo parâmetro Perms que define permissões para modificar o documento; esse parâmetro se refere ao objeto Signature ;
  • Objeto de assinatura ( 5 0 obj ) com informações sobre os algoritmos criptográficos usados ​​para hash e assinar o documento, com o parâmetro Contents , que contém o blob codificado em hexadecimal PKCS7 - ele armazena certificados e o valor da assinatura criada usando a chave privada que corresponde à chave pública no certificado. O parâmetro ByteRange determina quais bytes do arquivo PDF são usados ​​na entrada da função hash para calcular a assinatura (pares a, b c, d ), ou seja, qual parte do arquivo é assinada;
  • Uma nova tabela Xref com um link para um novo objeto
  • novo trailer .

Na fig. A Figura 3 mostra um diagrama simplificado de um arquivo PDF assinado digitalmente.


Fig. 3. Layout simplificado de arquivos PDF assinados digitalmente

De acordo com as especificações atuais, é recomendável assinar o arquivo inteiro, com exceção do blob PKCS7.

A verificação da assinatura é realizada pelo aplicativo em que o documento PDF é aberto. Ele extrai imediatamente a assinatura do PDF e usa operações criptográficas para verificar sua correção e, em seguida, verifica se o certificado X.509, cujas chaves foram usadas para assinar, pode ser confiável.

Normalmente, todos os leitores de PDF não confiam no keystore incorporado no sistema operacional. Como o navegador Firefox, eles distribuem seu próprio keystore e geralmente permitem que o usuário especifique uma loja com certificados confiáveis. Esta função permite confiar apenas em determinados certificados, por exemplo, da sua própria autoridade de certificação.

Falsificação de assinatura digital


Os pesquisadores descrevem três maneiras de falsificar conteúdo em PDFs assinados.

  • Falsificação de assinatura universal (USF);
  • Ataque Incremental Saving Attack (ISA)
  • ataque a um invólucro de assinatura (ataque de envolvimento de assinatura, SWA).

Falsa de assinatura universal (USF)


Um ataque do USF desativa a verificação de assinatura em um aplicativo que abre um PDF. Ao mesmo tempo, uma mensagem normal é enviada ao usuário sobre a validação bem-sucedida da assinatura. Isso é feito manipulando o objeto Signature no documento: um registro incorreto é criado dentro deste documento ou o link para o objeto é excluído do arquivo. Embora o visualizador de PDF não possa verificar se a assinatura está correta, em alguns casos o programa ainda mostra sua presença, que atende aos objetivos do invasor.

Os pesquisadores formularam 18 vetores de ataque da USF, oito dos quais são mostrados na Fig. 4)


Fig. 4. Oito vetores de ataque para contornar a verificação de assinatura digital

Todos esses métodos funcionam se o visualizador de PDF não verificar corretamente a assinatura digital.

Ataque de retenção incremental (ISA)


Essa classe de ataques consiste em redefinir a estrutura e o conteúdo em uma seção adicional de um documento. A ideia é que a assinatura seja calculada com base no intervalo de bytes especificado em ByteRange , e a seção extra não se enquadre nesse intervalo, conforme mostrado na Fig. 5)


Fig. 5. Ao adicionar conteúdo à seção adicional, a assinatura digital não é violada

Existem várias maneiras de contornar a verificação de alterações no documento e bloquear a exibição do aviso correspondente no visualizador de PDF.

Assinatura Wrapper Attack (SWA)


Por fim, a última classe de ataques permite ignorar a verificação de assinatura sem salvar incrementalmente, mas movendo a parte assinada do PDF para o final do documento e reutilizando o ponteiro da xref no Trailer assinado para a tabela Xref modificada. Ao mesmo tempo, para evitar o processamento da peça movida, ela pode ser embrulhada em algum objeto estranho, por exemplo, fluxo ou dicionário .


Fig. 6. Comparação de documentos PDF originais e modificados

Desempenho de ataque


Os pesquisadores testaram a eficácia de cada tipo de ataque em diferentes programas para visualizar PDF. Não é possível enganar apenas o Adobe Reader 9 no Linux . Em todos os outros programas, a verificação de assinatura é ignorada de uma ou mais maneiras.



A situação dos serviços online de verificação de assinaturas digitais em PDF não é melhor.

Source: https://habr.com/ru/post/pt442066/


All Articles