Skip to content

MASTG-TEST-0232: Modos de Criptografia Simétrica Comprometidos

Visão Geral

Para testar o uso de modos de criptografia quebrados)) em aplicativos Android, precisamos focar em métodos de frameworks e bibliotecas criptográficas usados para configurar e aplicar modos de criptografia.

No desenvolvimento Android, a classe Cipher da Java Cryptography Architecture (JCA) é a API principal que permite especificar o modo de criptografia para operações criptográficas. O método Cipher.getInstance define a string de transformação, que inclui o algoritmo de criptografia, modo de operação e esquema de preenchimento (padding). O formato geral é "Algorithm/Mode/Padding". Por exemplo:

Cipher.getInstance("AES/ECB/PKCS5Padding")

Neste teste, vamos focar em modos de criptografia simétrica como ECB (Electronic Codebook).

O ECB (definido no NIST SP 800-38A) é geralmente desencorajado consulte o anúncio do NIST de 2023 devido às suas fraquezas de segurança inerentes. Embora não seja explicitamente proibido, seu uso é limitado e desaconselhado na maioria dos cenários. O ECB é um modo de cifra de bloco que opera deterministicamente, dividindo o texto claro em blocos e criptografando-os separadamente, o que revela padrões no texto cifrado. Isso o torna vulnerável a ataques como ataques de texto claro conhecido e ataques de texto claro escolhido.

Por exemplo, as seguintes transformações são todas consideradas vulneráveis:

  • "AES" (usa o modo AES/ECB por padrão)
  • "AES/ECB/NoPadding"
  • "AES/ECB/PKCS5Padding"
  • "AES/ECB/ISO10126Padding"

Você pode aprender mais sobre ECB e outros modos no NIST SP 800-38A - Recommendation for Block Cipher Modes of Operation: Methods and Techniques. Consulte também a Decision to Revise NIST SP 800-38A, Recommendation for Block Cipher Modes of Operation: Methods and Techniques e o NIST IR 8459 Report on the Block Cipher Modes of Operation in the NIST SP 800-38 Series para informações mais recentes.

Fora do escopo: Modos de criptografia assimétrica como RSA estão fora do escopo deste teste porque não usam modos de bloco como ECB.

Nas strings de transformação como "RSA/ECB/OAEPPadding" ou "RSA/ECB/PKCS1Padding", a inclusão de ECB neste contexto é enganosa. Diferente das cifras simétricas, o RSA não opera em modos de bloco como ECB. A designação ECB é um placeholder em algumas APIs criptográficas e não implica que o RSA use o modo ECB. Entender essas nuances ajuda a prevenir falsos positivos.

Passos

  1. Execute Análise Estática no Android com uma ferramenta como semgrep no binário do aplicativo, ou use Rastreamento de Métodos (análise dinâmica) com uma ferramenta como Frida para Android, e procure por funções criptográficas que especifiquem modos de criptografia inseguros.

Observação

A saída deve conter uma lista de locais onde modos de criptografia quebrados são usados em operações criptográficas.

Avaliação

O caso de teste falha se qualquer modo quebrado for identificado no aplicativo.

Mitigations

Demos

MASTG-DEMO-0023: Usos de Modos de Criptografia Quebrados em Cipher com semgrep