Skip to content

MASTG-TEST-0213: Uso de Hardcoded Cryptographic Keys em Código

Visão Geral

Neste caso de teste, examinaremos aplicativos iOS para detectar a presença de chaves criptográficas embutidas em código (hardcoded). Chaves hardcoded normalmente podem ser encontradas em chamadas para funções criptográficas ou armazenadas como constantes ou variáveis dentro do código. No iOS, chaves criptográficas são frequentemente usadas nos seguintes frameworks:

  • Security Framework: A função SecKeyCreateWithData permite que desenvolvedores criem uma chave criptográfica a partir de dados brutos.
  • CommonCrypto: A função CCCrypt pode ser inicializada com dados brutos de chave em seu parâmetro key.
  • CryptoKit: Embora o CryptoKit forneça abstrações de alto nível para operações criptográficas, desenvolvedores ainda podem embutir chaves criptográficas em diferentes formatos e fornecê-las a métodos como P256.Signing.PrivateKey.init(rawRepresentation:) ou similares.

Passos

  1. Execute uma ferramenta de análise estática, como radare2 para iOS, no binário do aplicativo procurando pelas APIs criptográficas indicadas acima.

Observação

A saída deve incluir quaisquer instâncias em que o aplicativo use funções criptográficas que aceitem dados brutos de chave. Sempre que possível, a saída também deve tentar apontar para os dados brutos da chave a partir do binário.

Avaliação

O teste falha se forem encontradas chamadas para funções criptográficas com chaves hardcoded dentro do binário.

Você pode encontrar as chaves sendo passadas diretamente como argumentos para funções criptográficas (arrays de bytes ou literais de string) ou armazenadas em variáveis ou constantes dentro do código. Representações típicas de chaves hardcoded incluem:

  • Arrays de Bytes Brutos: Chaves criptográficas podem estar diretamente embutidas no código como arrays de UInt8 ou objetos Data. Por exemplo, uma chave AES de 256 bits pode ser representada como um array [UInt8].
  • Strings Codificadas em Base64: Desenvolvedores podem codificar chaves criptográficas como strings Base64 dentro do código, que podem ser facilmente decodificadas por atacantes se descobertas.
  • Strings Codificadas em Hexadecimal: Chaves às vezes são armazenadas como strings hexadecimais, que são então convertidas em objetos Data em tempo de execução para operações criptográficas.

Certifique-se de que quaisquer chaves identificadas sejam realmente chaves criptográficas usadas para fins relevantes de segurança. Evite falsos positivos verificando o contexto de uso da chave (por exemplo, configurações ou constantes não relacionadas à segurança podem ser erroneamente identificadas como chaves criptográficas).

Demos

MASTG-DEMO-0014: Uso de Chave Privada ECDSA Embarcada em CryptoKit com r2 MASTG-DEMO-0013: Uso de Chave Privada RSA Hardcoded em SecKeyCreateWithData com r2