Skip to content

MASTG-TECH-0014: Análise Estática no Android

A análise estática é uma técnica utilizada para examinar e avaliar o código-fonte de uma aplicação móvel sem executá-la. Este método é fundamental para identificar potenciais vulnerabilidades de segurança, erros de codificação e problemas de conformidade. As ferramentas de análise estática podem escanear automaticamente toda a base de código, tornando-se um recurso valioso para desenvolvedores e auditores de segurança.

Dois bons exemplos de ferramentas de análise estática são o grep e semgrep. No entanto, existem muitas outras ferramentas disponíveis, e você deve escolher a que melhor atende às suas necessidades.

Exemplo: Usando grep para Análise do Manifest em Aplicativos Android

Um uso simples, porém eficaz, da análise estática é utilizar a ferramenta de linha de comando grep para inspecionar o arquivo AndroidManifest.xml de um aplicativo Android. Por exemplo, você pode extrair a versão mínima do SDK (que indica a versão mais baixa do Android que o aplicativo suporta) com o seguinte comando grep:

grep 'android:minSdkVersion' AndroidManifest.xml

Este comando busca o atributo android:minSdkVersion dentro do arquivo de manifesto. Garantir um minSdkVersion mais alto pode reduzir riscos de segurança, uma vez que versões mais antigas do Android podem não incluir os recursos e correções de segurança mais recentes.

Exemplo: Usando semgrep para Identificar Seeds com Entropia Insuficiente

O semgrep é uma ferramenta mais avançada que pode ser usada para correspondência de padrões em código. É particularmente útil para identificar padrões complexos de codificação que podem levar a vulnerabilidades de segurança. Por exemplo, para encontrar instâncias onde uma seed determinística é usada com a classe SecureRandom (o que pode comprometer a aleatoriedade e, consequentemente, a segurança), você pode usar uma regra do semgrep como:

rules:
  - id: insecure-securerandom-seed
    patterns:
      - pattern: new SecureRandom($SEED)
      - pattern-not: $SEED = null
    message: "Using a deterministic seed with SecureRandom. Consider using a more secure seed."
    languages: [java]
    severity: WARNING

Esta regra sinalizará quaisquer instâncias no código onde SecureRandom é inicializado com uma seed específica, excluindo casos em que a seed é nula (o que implica em uma seed aleatória segura).