Quando a Apple emitiu notificações de ameaça para utilizadores em 110 países em agosto, poucos perceberam que estava ali o rastilho para desmontar a maior operação de vigilância já documentada na Sérvia. Pelo menos 14 pessoas — entre elas líderes estudantis pró-democracia — foram alvo de spyware, incluindo o famigerado Pegasus, da NSO Group. Segundo o Observador.pt, o Citizen Lab confirmou forensicamente a infeção em pelo menos um dispositivo. O resto, é geopolítica. Mas o que me interessa, como engenheiro de software, é o que essa cadeia de eventos ensina sobre segurança móvel, deteção de intrusões e os limites do que conseguimos auditar em dispositivos fechados.
O que realmente aconteceu — e por que devs devem prestar atenção
Não é uma história distante. O Pegasus explora vulnerabilidades zero-click — basta receber uma mensagem, abrir um iMessage, ou em alguns casos nem isso. Não há clique, não há phishing, não há download. O payload explora falhas em parsers de imagem, em entitlements mal configurados, em cadeias de WebKit. Para quem desenvolve, isso obriga a repensar o velho modelo de “se o utilizador não fizer nada de errado, está seguro”. Esse modelo morreu.
A sérvia também viu o NoviSpy, um spyware que o Citizen Lab já associou em relatórios anteriores a autoridades estatais sérvias. A diferença prática: Pegasus é mercenário (vendido pela NSO a governos), NoviSpy parece caseiro. Ambos operam com a mesma filosofia — comprometer o dispositivo, extrair tudo, e deixar o mais silencioso possível.
Como funciona, na prática, um spyware como o Pegasus
Na minha experiência a auditar apps iOS, percebi que a maioria dos devs subestima três vetores:
- Parsers de mídia: o clássico é o
ImageIOda Apple. Vulnerabilidades em decoders de PDF, GIF, TIFF ou JPEG2000 são porta de entrada. - iMessage e FaceTime: processam conteúdo remoto antes do utilizador interagir. Um simples anexo basta.
- WebKit: qualquer renderização HTML serve como superfície de ataque.
O Pegasus opera em modo “kernel” depois de explorar uma cadeia. Ganha persistência, contorna o sandbox, e passa a ter acesso total ao dispositivo — microfone, câmara, ficheiros, mensagens cifradas. Quando você vê alguém afirmar que “Telegram é seguro”, lembre-se: se o telemóvel está comprometido, a criptografia ponta-a-ponta protege o trânsito, não os endpoints.
Como o Citizen Lab detetou isto — e o que podemos aprender
O laboratório canadiano usou uma combinação de análise forense de backups iTunes, logs de sistema, indicadores de comprometimento (IoCs) partilhados com a Apple, e o famoso Kingdom Triangle — sua base de dados de assinaturas de spywares mercenarios. O processo é parcialmente público através do projecto Citizen Lab e do seu kit de ferramentas MVT (Mobile Verification Toolkit), que é open-source e corre em Python.
Na Prática: replicar parte da análise com MVT
Se quiser testar o seu próprio dispositivo (ou de um familiar que esteja preocupado), pode instalar o MVT e fazer uma verificação básica de indicadores de Pegasus e Predator (outro spyware mercenário comum).
# 1. Instalar dependências (macOS/Linux)
git clone https://github.com/mvt-project/mvt.git
cd mvt
pip3 install .
# 2. Criar backup cifrado do iPhone via Finder/iTunes
# (desmarque "Encriptar backup local" e anote a senha)
# 3. Decodificar o backup
mvt-ios decrypt-backup -p SUA_SENHA -d backup_decoded backup_ios/
# 4. Verificar contra IoCs conhecidos
mvt-ios check-backup -i mvt/iocs/ios/ -o relatorio/ backup_decoded/
Se aparecer qualquer match, o MVT indica o módulo (iMessage, Safari, etc.) e o timestamp. Não é prova forense admissível em tribunal, mas é um excelente ponto de partida. Para perícia real, é necessário congelar o dispositivo e enviá-lo ao Citizen Lab ou à Amnesty Security Lab — lembre-se que reiniciar pode apagar artefactos voláteis.
O que a Apple fez certo — e o que ainda falha
A Threat Notification lançada em novembro de 2021 (e que disparou em massa em 2024) é o sistema de aviso mais agressivo que uma big tech já operou a nível global. Mas tem falhas:
- Só iOS. Utilizadores Android ficam às escuras — não por falta de spyware, mas porque a Google optou por um modelo de Play Protect e remoção silenciosa.
- Falsos negativos. O sistema detecta indicadores, não a totalidade das variantes. Um Pegasus atualizado pode escapar.
- Sem auditoria pública. Não sabemos o critério exato nem a lista de países sob vigilância ativa.
Para quem desenvolve em iOS, vale a pena estar atento aos Threat Notifications via API UNUserNotificationCenter e tratar este tipo de aviso como crítico na UX — bloquear fluxos sensíveis, exigir reautenticação, etc.
Erros comuns que devs cometem em apps sensíveis
Trabalho com equipas que desenvolvem apps para ativistas, jornalistas e advogados. Vejo os mesmos erros vezes sem conta:
- Confiar no Keychain do sistema como “inquebrável”: o Keychain é cifrado, mas se o dispositivo está comprometido em modo kernel, o atacante lê a memória enquanto a app autentica.
- Permitir screenshot em ecrãs sensíveis: o Pegasus captura ecrã programaticamente. Use
isProtectedDataAvailablee desative o conteúdo em segundo plano (applicationWillResignActive). - Não validar anexos do lado do servidor: se o seu backend aceita ficheiros que depois são abertos num app iOS, está a replicar a superfície de ataque da Apple.
- Logging verboso em produção: tokens, IDs de dispositivo, logs de crash com PII. Tudo lido por um spyware já instalado.
Detalhe técnico: proteger UI em apps sensíveis
// AppDelegate.swift
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var blurView: UIVisualEffectView?
func applicationWillResignActive(_ application: UIApplication) {
// App vai para background ou aparece screenshot/recording
guard let window = window else { return }
let blur = UIBlurEffect(style: .systemMaterial)
let v = UIVisualEffectView(effect: blur)
v.frame = window.bounds
window.addSubview(v)
blurView = v
}
func applicationDidBecomeActive(_ application: UIApplication) {
blurView?.removeFromSuperview()
blurView = nil
}
}
Pequeno gesto, mas diferença enorme quando o atacante está a capturar o ecrã de uma app bancária ou de mensagens entre ativistas.
Implicações para developers que não fazem apps de ativismo
Pode pensar “isto não é comigo”. Mas se trabalha em fintech, saúde, enterprise SaaS, ou qualquer coisa que toque dados confidenciais, está no raio de ação. A espionagem industrial com spyware mercenário já é real — basta lembrar do caso da empresa Silent Circle e do fork Blackphone, criados especificamente para mitigar isto. Mais recentemente, o grupo Predator foi usado contra executivos europeus, não só dissidentes.
Recomendo três práticas para qualquer equipa de produto:
- Threat-modelling sério: inclua “dispositivo do utilizador comprometido” como hipótese, não como exceção.
- Reautenticação sensível: pagamentos, alterações de credenciais, transferências — peça sempre um segundo fator não-OTP (FIDO2, chaves de hardware).
- Telemetria defensiva: detete anomalias no comportamento do dispositivo (movimento brusco do cursor, hooks no teclado, apps com permissões de acessibilidade) e bloqueie fluxos.
FAQ — Perguntas que devs realmente fazem
1. Um iPhone atualizado está imune a Pegasus?
Não. O Pegasus compra exploits zero-day à NSO Group. A Apple fecha as falhas via atualizações, mas há sempre uma janela em que o ataque funciona — e muitas vítimas estão em iOS atualizado.
2. Como saber se fui alvo sem enviar o telemóvel ao Citizen Lab?
Use o MVT (script acima), verifique a app Mail em Configurações > Privacidade > Mail > Proteção de Atividade (iOS 15+), e ative o Lockdown Mode se suspeitar de ameaça elevada.
3. O Lockdown Mode da Apple protege mesmo?
Reduz drasticamente a superfície de ataque — desativa previews de links em iMessage, perfis de configuração, convites FaceTime de desconhecidos. Não é bala de prata, mas elimina vários vetores de entrada de Pegasus e similares.
4. Existem alternativas ao Pegasus no mercado?
Sim: Predator (Cytrox/Intellexa), Candiru, DevilsTongue, e variantes regionais. O Citizen Lab mantém uma lista atualizada em CounterPunch e no repositório público de IoCs.
5. Devs devem apoiar spyware estatal em alguma circunstância?
Na minha leitura técnica e ética, não. A indústria já demonstrou (caso WhatsApp vs. NSO, 2019) que estas ferramentas são abusadas sistematicamente. Construir a próxima geração de apps seguras significa rejeitar ativamente integrações com vendors de spyware.
O que retiro deste caso sérvio
Além do óbvio político, este episódio mostra que a segurança móvel deixou de ser problema de TI e virou problema de produto. As notificações da Apple funcionaram — mas só porque houve jornalismo técnico sério (Citizen Lab + Access Now + Share Foundation). Para nós, devs, a lição é simples: a próxima fronteira de segurança não está no servidor, está no bolso do utilizador. E o atacante já está lá.
Se quiser aprofundar, recomendo o relatório “Sérvia civil society targeted” da Share Foundation e o módulo Pegasus/iOS do Citizen Lab. Vou publicar mais conteúdo sobre análise forense móvel e segurança ofensiva nos próximos artigos — fica atento.
Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.