Skip to content

MASTG-TEST-0211: Algoritmos de Hashing Comprometidos

Visão Geral

Para testar o uso de algoritmos de hash quebrados em aplicativos iOS, precisamos nos concentrar nos métodos de frameworks e bibliotecas criptográficas utilizados para realizar operações de hashing.

  • CommonCrypto: CommonDigest.h define os seguintes algoritmos de hash:

    • CC_MD2
    • CC_MD4
    • CC_MD5
    • CC_SHA1
    • CC_SHA224
    • CC_SHA256
    • CC_SHA384
    • CC_SHA512
  • CryptoKit: Suporta três algoritmos de hash criptograficamente seguros e dois inseguros em uma classe dedicada chamada Insecure:

    • SHA256
    • SHA384
    • SHA512
    • Insecure.MD5
    • Insecure.SHA1

Observação: o framework Security suporta apenas algoritmos assimétricos e, portanto, está fora do escopo deste teste.

Passos

  1. Execute uma ferramenta de análise estática como radare2 para iOS no binário do aplicativo, ou use uma ferramenta de análise dinâmica como Frida para iOS, e procure por usos das funções criptográficas que realizam operações de hashing.

Observação

A saída deve conter o código desmontado das funções que utilizam as funções criptográficas relevantes.

Avaliação

O caso de teste falha se for possível encontrar o uso de algoritmos de hash quebrados no código-fonte. Por exemplo:

  • MD5
  • SHA-1

Mantenha-se atualizado: Esta é uma lista não exaustiva de algoritmos quebrados. Certifique-se de verificar os padrões e recomendações mais recentes de organizações como o National Institute of Standards and Technology (NIST), o German Federal Office for Information Security (BSI) ou qualquer outra autoridade relevante em sua região. Isso é importante ao construir um aplicativo que usa dados que serão armazenados por um longo período. Certifique-se de seguir as recomendações do NIST do documento NIST IR 8547 "Transition to Post-Quantum Cryptography Standards", 2024.

Considerações de Contexto:

Para reduzir falsos positivos, certifique-se de entender o contexto no qual o algoritmo está sendo usado antes de reportar o código associado como inseguro. Garanta que ele está sendo usado em um contexto relevante para segurança para proteger dados sensíveis.

Por exemplo, usar o algoritmo quebrado MD5 para hashing de senhas é proibido pelo NIST, pois não é mais considerado seguro para fins criptográficos. No entanto, usar MD5 para checksums ou outras tarefas não criptográficas, onde a segurança não é uma preocupação, geralmente é aceitável.

Demos

MASTG-DEMO-0015: Usos de Algoritmos de Hashing Comprometidos no CommonCrypto com r2 MASTG-DEMO-0016: Usos de Algoritmos de Hash Quebrados no CryptoKit com r2