· Droidwatch Security Research team · 11 min de leitura · Static Analysis Deep-Dives triagem-apk trojan-bancario malware-android
🌐 Read in English → 🌐 Leer en español →

Triagem de um APK suspeito: o fluxo do SOC

Fluxo de triagem estática em seis etapas para classificar um aplicativo Android desconhecido, extrair indicadores acionáveis e decidir o que escalar.

Triagem de um APK suspeito: o fluxo do SOC

Um cliente encaminha o APK que recebeu depois de uma ligação de alguém que dizia falar pelo departamento de fraudes do banco. Um canal de inteligência publica um nome de pacote que imita o aplicativo de banco móvel da instituição. Um funcionário instala um arquivo entregue por uma campanha de smishing com o pretexto de atualização obrigatória.

Nos três casos o SOC enfrenta a mesma pergunta, e ela não é se a amostra é malware. É se a organização deve agir, e com base em qual evidência.

Este documento estabelece um fluxo de triagem estática: uma classificação defensável mais um conjunto de indicadores adequados para detecção, produzidos sem dispositivo, sem emulador e sem ambiente de laboratório.

O escopo da triagem

A triagem responde a quatro perguntas, em sequência:

  1. O aplicativo é o que afirma ser?
  2. Quais capacidades o manifesto solicita?
  3. O código está ocultando sua função?
  4. Com qual infraestrutura ele se comunica?

A triagem não estabelece a cadeia de ataque completa nem a atividade do operador após o comprometimento. Esses são objetivos de engenharia reversa, e confundir os dois planos é a principal causa de acúmulo nas filas de triagem móvel.

Um limite prático: quando uma classificação não foi alcançada em cerca de dez minutos de trabalho do analista, a amostra pertence a uma fila de engenharia reversa, não a uma de triagem. A triagem é o processo que determina qual das duas.

Manuseio da amostra

Todo APK desconhecido é tratado como malware vivo durante o processo.

Etapa 1 — Verificação de identidade

A análise começa pelos componentes que um atacante é obrigado a expor para que o pacote sequer seja instalado.

Nome de pacote. Compara-se com o pacote do aplicativo legítimo na Google Play. Aplicativos bancários reempacotados raramente reutilizam o nome exato: usam uma variação próxima, um domínio invertido em outra ordem ou uma cadeia aleatória. Um nome de pacote ausente da Play cujo rótulo corresponde a uma instituição financeira conhecida já é motivo suficiente de escalonamento.

Certificado de assinatura. É o sinal de identidade mais sólido disponível em um APK. Examinam-se quatro propriedades:

Verificação contra a Play. Quando o pacote existe na Play mas o certificado não coincide com o distribuído por ela, a amostra é um aplicativo reempacotado. Isso é um incidente de fraude, não um achado de malware, e cabe imediatamente à área de proteção de marca.

No Droidwatch essas saídas são resolvidas antes de o restante da análise terminar.

Etapa 2 — Análise do manifesto

As permissões constituem uma declaração de capacidade pretendida. Para fins de triagem, o que um aplicativo é capaz de fazer costuma ser suficiente.

Permissões que exigem leitura atenta:

Permissão Significado
BIND_ACCESSIBILITY_SERVICE A permissão de maior sinal no malware Android. Serviços de acessibilidade leem o conteúdo da tela e injetam entrada, base dos ataques de sobreposição e da fraude no dispositivo.
SYSTEM_ALERT_WINDOW Desenha sobre outros aplicativos. Combinada com acessibilidade, é o par padrão do phishing por sobreposição.
RECEIVE_SMS / READ_SMS Interceptação de códigos de uso único. Em contexto bancário, deve ser tratada como o propósito do aplicativo até que se estabeleça o contrário.
BIND_NOTIFICATION_LISTENER_SERVICE Lê o conteúdo das notificações, inclusive códigos que nunca chegam ao banco de dados de SMS.
REQUEST_INSTALL_PACKAGES Instala outros aplicativos. É a característica que define um dropper.
BIND_DEVICE_ADMIN Resiste à desinstalação; pode bloquear ou apagar o dispositivo.
QUERY_ALL_PACKAGES Enumera os aplicativos instalados, normalmente para escolher a sobreposição bancária correspondente.

Uma única permissão perigosa é uma pergunta. BIND_ACCESSIBILITY_SERVICE junto de SYSTEM_ALERT_WINDOW e QUERY_ALL_PACKAGES é o conjunto de capacidades estabelecido de um trojan bancário Android.

Os componentes são lidos junto das permissões:

Etapa 3 — Ocultação de código

O objetivo nesta fase não é ler o código, mas estabelecer se ele foi construído para resistir à leitura.

Uma amostra com ofuscação intensa, carregamento de código em tempo de execução e REQUEST_INSTALL_PACKAGES pode ser classificada sem a leitura de um único método.

Etapa 4 — Extração de infraestrutura

Extraem-se todos os endpoints embutidos: URLs, endereços IP isolados, domínios presentes nas tabelas de strings e, quando a configuração é criptografada, a configuração descriptografada.

As saídas relevantes são:

Esses indicadores são o componente da triagem que chega à pilha de detecção. Uma classificação protege um cliente; um domínio C2 incluído em uma blocklist de DNS protege todos os usuários por trás dela. O Droidwatch os emite como bundle STIX 2.1, de modo que a passagem de amostra para regra de detecção não exige transcrição manual.

Etapa 5 — Mapeamento para frameworks

O mapeamento é o que torna um achado móvel legível para responsáveis que nunca examinam a amostra.

Técnicas recorrentes nesta classe de amostra:

Comportamento MITRE ATT&CK Mobile
Sobreposição capturando credenciais T1417.002 — GUI Input Capture
Registro de teclas via acessibilidade T1417.001 — Keylogging
Entrada automatizada para fraude no dispositivo T1516 — Input Injection
Leitura e interceptação de SMS T1582 — SMS Control
Acesso a notificações T1517 — Access Notifications
Coleta de contatos, registro de chamadas e mensagens T1636 — Protected User Data
Escalonamento para administrador de dispositivo T1626.001 — Device Administrator Permissions
Evasão de ferramentas de segurança T1629 — Impair Defenses
Empacotamento ou criptografia de strings T1406.002 — Software Packing
Persistência após reinicialização T1624.001 — Broadcast Received
Recuperação de carga de segundo estágio T1544 — Ingress Tool Transfer
Canal de comando e controle criptografado T1521 — Encrypted Channel

Para as áreas de segurança de aplicações, os mesmos achados mapeiam para categorias do OWASP MASVS: MASVS-NETWORK para transmissão em texto claro e falhas de pinning, MASVS-STORAGE para dados locais expostos, MASVS-CODE para carregamento dinâmico, MASVS-RESILIENCE para deficiências de antiadulteração. O MASTG fornece o procedimento de teste correspondente quando um resultado precisa ser demonstrado.

O Droidwatch produz ambos os mapeamentos em cada execução, ao lado de um sinal de classificador medido em F1 macro 0,9873 sobre um holdout de 1.661 amostras, treinado com 6.642 amostras do CICMalDroid 2020. O classificador contribui para o veredito; os achados acima são o que um relatório defende.

Etapa 6 — Classificação e escalonamento

O Droidwatch pontua o risco de 0 a 100, onde a pontuação mais alta indica risco maior. Quatro saídas, cada uma com um responsável definido:

Veredito Score Definição Destino
Malicious 65 ou mais Família identificada, ou conjunto de capacidades sem interpretação legítima possível Resposta a incidentes imediatamente; indicadores para o SIEM
High Risk 40-64 Capacidades perigosas com anomalias de identidade; família não confirmada Chamado de IR mais fila de engenharia reversa
Suspicious 20-39 Anomalias sem padrão malicioso coerente; frequentemente adware ou aplicativo legítimo mal construído Watchlist; reanalisar em caso de reincidência
Benign Abaixo de 20 Nada além do normal para a categoria do aplicativo Encerrar com o relatório anexado

O artefato importa mais do que o rótulo. Um relatório que afirma «malicioso» é uma asserção. Um relatório que contém o hash, a análise do certificado, o conjunto de permissões, os domínios C2, o mapeamento ATT&CK e o raciocínio por trás da pontuação é evidência, e evidência é o que resiste a uma revisão semanas depois. O Droidwatch exporta isso em PDF, DOCX, JSON, CSV ou STIX 2.1.

Limitações da triagem estática

Executando o fluxo na plataforma

As seis etapas acima descrevem o processo analítico. A mecânica é um único envio:

  1. Envie o .apk (ou .xapk, .aab, .dex, .ipa) para o analisador. Um APK de 50 MB conclui em dois a cinco minutos; pacotes acima de 100 MB levam em média de oito a dez.
  2. Revise o relatório: veredito e pontuação, achados ordenados por severidade, certificado e comparação com a Play, mapeamento ATT&CK Mobile, cobertura MASVS, indicadores extraídos.
  3. Exporte no formato que o destinatário exigir — STIX 2.1 para o SIEM, PDF ou DOCX para o registro do incidente.

Em volume, o fluxo roda pela API: POST /api/upload devolve um upload_id; POST /api/analyze devolve um job_id e um run_id; consulta-se GET /api/jobs/{job_id} até que o status seja done ou failed; o relatório é obtido em GET /api/runs/{run_id}/artifact/report.json. A autenticação aceita um cabeçalho X-API-Key ou um bearer token. Quando o arquivo já foi analisado antes, a resposta traz cached: true com o job_id nulo e não há o que consultar. O guia rápido documenta a sequência completa.

Perguntas frequentes

Quanto deve durar a triagem de um APK? Cerca de dez minutos de trabalho do analista até uma classificação. Amostras que ultrapassam esse limite de forma sistemática pertencem a uma fila de engenharia reversa.

O VirusTotal basta para este fluxo? O VirusTotal responde se um hash já foi observado e como os motores participantes o classificaram, e é a primeira consulta adequada. Não fornece o conjunto de permissões, as anomalias do certificado, o mapeamento ATT&CK nem o raciocínio necessário para produzir um relatório de incidente. As duas ferramentas ocupam posições diferentes do fluxo. Há uma comparação detalhada disponível.

Por que não operar o MobSF diretamente? O MobSF é um motor de análise sólido e boa parte da disciplina de segurança móvel foi construída sobre ele. O custo é operacional, não analítico: orquestração de contêineres, escalonamento de workers, manutenção de dependências, e a ausência de multi-tenant, controle de acesso por papéis e trilha de auditoria em ambientes multicliente. A comparação completa documenta o trade-off.

Qual é o resultado quando uma amostra se revela benigna? Um relatório assinado que estabelece essa conclusão, produzido em dez minutos. Resultados negativos são uma saída necessária de qualquer processo de triagem.


Os indicadores das amostras analisadas na plataforma são publicados no threat feed público sob licença CC BY 4.0. As práticas de manuseio e divulgação estão documentadas na página de confiança.

Threat Research

Droidwatch's research team analyzes Android & iOS malware — banking trojans, spyware, droppers and overlay kits — and writes up the static and dynamic signals that give them away. Every post is grounded in real platform output.

Analyze your first app free — drag an APK or iOS .ipa onto the homepage for a full static report in about a minute. Get started free