Antes de tocar nada
Pérdense as probas.
Para buscar axuda e cambiar contrasinais, un de confianza.
Con data e capturas. Se é serio, que o saiba alguén de confianza.
Que che pasa? Empeza por aquí
Vou á folga ou a unha maniQue facer co móbil antes, durante e despois.
Chegoume un aviso de Apple, Google ou WhatsAppComo saber se é real e que facer.
Quedei sen liña, chéganme códigos ou as miñas chamadas van rarasPrimeiro o urxente. Despois, cinco minutos.
Alguén sabe o que escribo por WhatsApp ou por correoMira en que aparellos está aberta a túa conta.
Creo que me espían ou me meteron algo no móbil ou no ordenadorQuince minutos. Pasos para iPhone, Android e ordenador.
Pode ser unha intervención xudicial?Que se pode saber e que di a lei.
Veño montar o laboratorioZero Breach Toolkit, MVT e PiRogue.
Onde se produce cada pinchazo
Que é exactamente cada cousa?Son cinco casos distintos, e un non se ve desde o móbil.
| Que é | Podes velo ti? |
|---|---|
| Desvío de chamadas ou duplicado de SIM. As túas chamadas ou SMS van a outro sitio. | Si. Paso 1. |
| Conta aberta noutro sitio. WhatsApp Web, Telegram ou Google nun aparello que non é teu. É do máis común. | Si. Paso 2. |
| App espía (stalkerware). Alguén tivo o teu móbil na man e instaloulle algo. | Moitas veces si. Paso 2. |
| Spyware de pago (Pegasus, Predator, Graphite). Vai contra xornalistas, activistas e xente concreta. Pode entrar sen que toques nada. | A ollo, non. Fai falta laboratorio, e aínda así pode non aparecer. Paso 3. |
| Intervención xudicial. Faina a compañía por orde dun xulgado. | Non. Non deixa rastro no móbil e é secreta mentres dura. Ao rematar, tes dereito a sabelo. |
Folga e manifestacións
Antes
- Fai copia de seguridade.
- Pon un código longo e quita Face ID ou pegada.
- Acordade un punto de encontro por se non hai rede.
- Valora levar un móbil con poucos datos, ou ningún.
- Repasa os dispositivos vinculados e activa a verificación en dous pasos.
- Se organizas algo, mira as antenas falsas.
Durante
- Se temes que cho quiten, apágao: o modo avión non abonda.
- Fai as fotos desde a pantalla de bloqueo, sen desbloquear.
Despois
- Difumina as caras antes de publicar.
- Se che quitaron o móbil, aínda que sexa un anaco, revísao: paso 2.
Baseado na guía da EFF (ábrese noutra lapela), pensada para os EUA, e nas de TeknoKasa (ábrese noutra lapela). Non é asesoría legal: para saber que facer se che piden o móbil en España, fala coa túa avogada ou cunha colectiva antirrepresiva.
Guías de TeknoKasa (Madrid): bloqueo do móbil e detención (ábrese noutra lapela) Guía da EFF para ir a unha protesta (en castelán) (ábrese noutra lapela)Aviso de Apple, Google ou WhatsApp
- Non toques ligazóns nin deas códigos. Apple nunca che pide nestes avisos premer en ligazóns, instalar nada nin dar contrasinais ou códigos. Se cho piden, é falso.
- Compróbao sen usar a mensaxe. En Apple, entra a man en account.apple.com (ábrese noutra lapela): se é de verdade, sae un aviso arriba de todo. En Google ou WhatsApp, abre ti a app ou a web, non a ligazón.
- Se é real: indica que o intentaron, non que te infectasen. Non borres, non restaures e non actualices.
- Pide axuda: liñas de axuda.
Chamadas e compañía
Vas marcar uns códigos e facer unha chamada.
Urxente. Sen cobertura de súpeto e con códigos ou avisos que non pediches? Pode ser un duplicado de SIM.
- Chama xa á túa compañía desde outro teléfono. Se o número curto non funciona desde outra liña, mira o longo na súa web.
- Cambia os contrasinais do correo e do banco desde un aparello de confianza.
1.1 Mira se hai desvíos
Abre a app de Teléfono, marca o código coma se fose un número e preme chamar. Saca foto ou captura do resultado antes de cambiar nada.
| Marca | Indícache se se desvían as chamadas… |
|---|---|
*#21# | todas, sempre. Este é o que máis importa. |
*#61# | cando non contestas. |
*#62# | cando estás sen cobertura ou apagado. |
*#67# | cando estás comunicando. |
1.2 Que significa
Non hai desvío. Só significa iso: non di nada de apps espía nin de intervencións.
- Adoita ser o teu buzón de voz: é normal.
- Pregúntalle á túa compañía se ese número é seu.
- Se non o é, quítao con
##61#,##62#ou##67#.
Non significa nada malo: con chamadas por 4G (VoLTE) algúns códigos non funcionan. Mírao na app da túa compañía ou pregunta por teléfono.
As túas chamadas están indo a ese número. A ti nin che soa o móbil.
- Saca foto da pantalla.
- Marca
##21#para quitalo. - Marca
*#21#outra vez: debe poñer "desactivado". - Chama á túa compañía e pregunta cando se activou.
- Cambia os contrasinais importantes desde outro aparello.
1.3 Quita os desvíos que non queiras
##21#,##61#,##62#,##67#quitan cada un o seu.##002#quítaos todos de golpe. Ollo, tamén o do buzón de voz: se o usas, se cadra tes que volver activalo.
Tamén o podes mirar nos axustes:
- iPhone: Ajustes > Apps > Teléfono > Desvío de llamadas.
- Android: app de Teléfono, os seus axustes e Desvío de chamadas.
O boato do *#06#. Circula que se marcas *#06# e non sae nada estás pinchada. Ese código só mostra o IMEI, o número de serie do móbil. Non detecta nada.
1.4 Chama á túa compañía
| Compañía | Teléfono | Horario |
|---|---|---|
| Movistar | 1004 | Todos os días, 9 a 22 |
| Vodafone | 22123 | 24 horas |
| Orange | 1470 | De luns a sábado, 9 a 22 |
| Yoigo | 622 622 622 622 desde outra compañía | 24 horas |
| O2 | 1551 | Todos os días, 9 a 22 |
| Digi | 1200 | Todos os días, 7 a 24 |
Outra compañía ou un número que non responde: mírao na túa factura ou na súa web. Se desconfías da túa liña, chama desde outro teléfono.
Pregunta isto, tal cal
- Hai algún desvío activo na miña liña? A que número?
- Fíxose hai pouco un duplicado de SIM ou un cambio a eSIM? Cando e onde?
- Hai outras liñas ao meu nome, ou algunha portabilidade ou cambio de titular solicitado?
- Que medidas tedes contra duplicados de SIM? Quero activalas.
Aproveita e cambia o PIN do buzón de voz se segue sendo o de fábrica.
E se é unha intervención xudicial
- Nin os códigos de desvío nin chamar á compañía a descobren.
- Mentres dura, é secreta.
- Ao rematar, tes dereito a sabelo polo xulgado, con excepcións.
Que di a lei, punto por punto
- Cos códigos de desvío tampouco se ve. Eses códigos amosan os desvíos normais da túa liña. Unha intervención non desvía a chamada: a rede saca unha copia, e a norma técnica (3GPP TS 33.106) (ábrese noutra lapela) esixe que non altere os teus servizos nin dea ningún sinal.
- Chamando non cho van dicir. A compañía ten obriga legal de gardar segredo, e pode cometer desobediencia se non o fai (LECrim, art. 588 ter e (ábrese noutra lapela)). Un "non vemos nada raro" non a descarta.
- Mentres dura, é secreta: tramítase nunha peza separada e secreta (art. 588 bis d (ábrese noutra lapela)).
- Cando remata, si tes dereito a sabelo. Quen é parte recibe copia das gravacións e transcricións. E o xulgado debe notificarllo a quen aparece nas comunicacións interceptadas, agás que sexa imposible, esixa un esforzo desproporcionado ou prexudique futuras investigacións (art. 588 ter i (ábrese noutra lapela)).
- Se cres que hai unha causa aberta contra ti, quen pode preguntar é a túa avogada, no xulgado.
- Datos en mans da policía: podes pedilos, pero poden denegarcho para non prexudicar unha investigación. Nese caso podes exercer o dereito a través da AEPD (LO 7/2021, arts. 24 e 25 (ábrese noutra lapela)).
E se é un rexistro remoto do móbil (art. 588 septies)2,5 millóns · Fortier Europe · fabricante sen publicar
En outubro de 2026 o BOE publicou (ábrese noutra lapela) que a Garda Civil comprou por 2.066.115,70 € (uns 2,5 millóns con IVE) un sistema de "registros remotos" de móbiles. Pode "alojar software" en Android e iOS para o "acceso transparente" a contidos e comunicacións.
Adxudicouse a Fortier Europe, de Boadilla del Monte, por procedemento negociado sen publicidade e cunha soa oferta, alegando a exclusividade do fabricante.
O que non se sabe: quen o fabrica, como se instala e se é Pegasus. O anuncio non o di, e atribuílo a un produto concreto hoxe sería especular.
A lei (LECrim, art. 588 septies (ábrese noutra lapela)) esixe autorización xudicial e limítao a certos delitos, durante un mes prorrogable ata tres. Antes, Citizen Lab documentou (ábrese noutra lapela) polo menos 65 persoas do contorno independentista catalán atacadas con Pegasus e Candiru.
Os teus datos de liña, por escrito
O que si podes pedir á compañía son os teus datos co dereito de acceso (ábrese noutra lapela) do RGPD (art. 15). Teñen un mes para contestar e a AEPD ten un formulario (ábrese noutra lapela).
Aínda tes dúbidas? Revisa o teu móbil ↓Revisa o teu móbil, o teu ordenador e as túas contas
Vas mirar que hai aberto e que hai instalado.
Se tes unha sospeita forte (alerta de spyware, ou es xornalista ou activista e pasou algo concreto):
- Non restaures nin borres nada: pérdense as probas.
- Non actualices e, se podes, pregunta antes de reiniciar.
- Mirar os menús si podes.
- Vai ao paso 3.
2.1 Empeza polas túas contas
É o máis rápido e o que máis veces dá co problema. Saca unha captura e despois pecha o que non recoñezas:
- WhatsApp: Ajustes > Dispositivos vinculados. Activa tamén Ajustes > Cuenta > Verificación en dos pasos.
- Signal: Axustes > Dispositivos vinculados (Ajustes).
- Telegram: Ajustes > Dispositivos.
- Google: myaccount.google.com/device-activity (ábrese noutra lapela).
- Correo: busca nos axustes reenvíos ou filtros que non puxeses ti.
Non escanees un QR para "verificar" nada se non empezaches ti a vinculación.
Non hai nada raro e seguen sabendo o que escribes? Pide axuda.
Despois cambia os contrasinais desde un aparello de confianza, non desde aquel do que sospeitas.
2.2 Que significa o que notas
Batería, códigos que non pediches, ligazóns raras, ruídos...
| O que notas | O que adoita ser |
|---|---|
| Batería que dura pouco, móbil quente, gasta datos | Batería vella ou unha app normal. Pode ser unha app espía, pero por si só non proba nada. Mira cal gasta nos axustes de batería. |
| Ruídos ou eco nas chamadas | Mala cobertura. Unha intervención moderna non soa. |
| Códigos de verificación que non pediches | Alguén está tentando entrar nesa conta. Cambia o contrasinal e activa a verificación en dous pasos. |
| Mensaxe rara cunha ligazón, aínda que sexa do teu banco ou de "unha amiga" | É un engano (phishing). Non o abras. Se xa o abriches, gárdao e segue lendo. |
| Alguén sabe cousas que só dixeches polo móbil | Mira primeiro as sesións abertas. Se non hai nada, vai ao paso 3. |
| Alerta oficial de Apple, Google ou WhatsApp sobre ataques de spyware | Esta si que é seria: indica que o intentaron, non que te infectasen. Só unha análise o confirma. Paso 3. |
O spyware caro non dá sinais. Que o móbil vaia ben non o descarta, e que vaia mal tampouco o confirma.
Mitos e falsas alarmasIncluído o "truco" de apagar o móbil cinco minutos.
"Apagar o móbil cinco minutos ao día protéxeo." Contouno Pedro Sánchez (ábrese noutra lapela) en outubro. Ten parte de verdade: moito spyware comercial non sobrevive a un reinicio, así que reiniciar a miúdo axuda. Pero non corrixe o fallo (ábrese noutra lapela) polo que entrou e poden volver entrar.
"Batería, calor ou clics = pinchada." Por si sós non proban nada.
"Unha app di que estou limpa, así que o estou." Só significa que non atopou o que xa se coñece. Dá falsa seguridade.
"Aviso de Apple = infectada." Indica un intento (ábrese noutra lapela). A confirmación dáa unha análise forense.
"O primeiro é formatear." Destrúe as probas. Primeiro pide axuda.
"Con Signal ninguén me le." O cifrado funciona, pero se te enganan para vincular outro aparello cun QR (ábrese noutra lapela), ese aparello recibe as túas mensaxes novas. Non escanees un QR para "verificar" nada se non empezaches ti a vinculación.
"En modo avión son invisible." Só apagalo (ábrese noutra lapela) dá garantía.
"Non teño nada que ocultar." A vixilancia tamén afecta a quen está ao outro lado: fontes, compañeiras, familia.
2.3 Elixe o teu aparello e toca para abrir os pasos
iPhone, 7 pasos
- Mira se Apple te avisou. As alertas de ameazas saen na pantalla de bloqueo e en Ajustes, nun correo de
threat-notifications@e nun aviso arriba de todo en account.apple.com (ábrese noutra lapela). Apple nunca che pide nelas premer ligazóns, instalar nada nin dar contrasinais ou códigos. Se cho piden, é falsa. Se é de verdade, vai ao paso 3.email.apple.com - Comprobación de seguridad: Ajustes > Privacidad y seguridad > Comprobación de seguridad > Gestionar accesos y datos compartidos. Mostra quen ve a túa localización e as túas cousas, e que aparellos están na túa conta. "Restablecimiento de emergencia" corta todos os accesos de golpe.
- Perfís: Ajustes > General > VPN y gestión de dispositivos. Se non aparece nada, non tes ningún instalado, que é o normal nun móbil persoal. Se hai un perfil que non recoñeces, saca unha foto e pregunta antes de borralo. Se o móbil é da empresa ou do centro de estudos, pode ser seu.
- Face ID: Ajustes > Face ID y código. Se hai unha "apariencia alternativa" que non é túa, outra persoa pode desbloquealo. Cambia tamén o código se alguén o coñece.
- Apps: baixa ata a Biblioteca de apps, escribe no buscador e repasa a lista. Busca o que non lembres ter instalado.
- Actualiza: Ajustes > General > Actualización de software. Se non hai sospeita forte, é do mellor que podes facer.
- Se corres risco alto: Ajustes > Privacidad y seguridad > Modo de aislamiento. Limita bastantes cousas do móbil, pero é a defensa máis forte que ten fronte ao spyware de pago.
Android, 7 pasos
Os menús cambian segundo a marca. Se non atopas algo, usa o buscador de arriba en Configuración. Aquí vai o nome en galego e, entre parénteses, en castelán.
- Play Protect: en Play Store, a icona do teu perfil > Play Protect > Ajustes. Comproba que segue activado e lanza unha análise. Se está apagado e non o apagaches ti, mal sinal.
- Accesibilidade: Configuración > Accesibilidade (Ajustes > Accesibilidad), no apartado de apps instaladas ou descargadas. Este permiso deixa ler a pantalla e é o favorito das apps espía. Se hai unha que non coñeces, ollo.
- Administradores: en Configuración > Seguranza (Ajustes > Seguridad), busca "administración de dispositivos". Nun móbil persoal debería estar só o de Google ou o da marca.
- Permisos especiais: en Configuración > Aplicacións > Acceso especial das aplicacións (Ajustes > Aplicaciones > Acceso especial), mira "Acceso a notificaciones" e "Instalar aplicaciones desconocidas".
- Apps: en Configuración > Aplicacións (Ajustes > Aplicaciones), mostra todas, tamén as do sistema. Desconfía de nomes baleiros ou xenéricos, como "Sync", "Service" ou "System", sen icona e con permisos de micro, localización ou SMS. Se dubidas, búscaa desde outro aparello.
- Depuración por USB: se en Opcións de programación (Opciones de desarrollador) está activada e non fuches ti, é un sinal.
- Se corres risco alto: en Ajustes > Seguridad y privacidad > Otros ajustes > Protección Avanzada, se o teu móbil o ten (Android 16 ou superior).
Ordenador, 5 pasos
- Control remoto: busca nos teus programas TeamViewer, AnyDesk ou parecidos que non instalases ti. Son normais, pero con eles pódese manexar o teu ordenador desde fóra. Windows: Configuración > Aplicaciones > Aplicaciones instaladas. Mac: cartafol Aplicaciones.
- O que arranca só: Windows: Administrador de tareas > Aplicaciones de arranque. Mac: Ajustes del Sistema > General, nos elementos de inicio. Busca o que non recoñezas.
- Xestión remota en Mac: Ajustes del Sistema > General > Gestión de dispositivos. Se o Mac é persoal, non debería aparecer nada.
- Análise: en Windows, Seguridad de Windows > Protección contra virus y amenazas e lanza un exame completo. Mira nas extensións do navegador se hai algunha que non puxeches ti.
- Actualiza o sistema e o navegador, agás que teñas sospeita forte.
Se queres ir un paso máis alá, Zero Breach Toolkit busca trazas de spyware coñecido no ordenador e non sobe nada a internet. Só mira ese ordenador: non che di se o móbil está infectado.
↑ Volver elixir aparello2.4 Que facer co que viches
Non garante que esteas limpa. Se non tes motivos para pensar que te teñen no punto de mira, actualiza, usa contrasinais distintos e verificación en dous pasos.
Saca capturas con data e pecha esa sesión. Se non che queda claro, vai pedir axuda.
Detente aí. Non borres nin restaures nada e pide axuda.
2.5 Déixao máis difícil para a próxima
Rutina de 10 minutosFaina de cando en vez.
- Reinicia o móbil.
- Instala as actualizacións pendentes, do sistema e das apps.
- Repasa os dispositivos vinculados de WhatsApp, Signal, Telegram e Google.
- Usa un código de desbloqueo longo, non un patrón nin catro cifras.
- Borra as apps que xa non usas.
Blinda as túas contasContrasinais, chaves e roubo do móbil.
- Evita o SMS como segundo factor se tes outra opción: é o máis débil (ábrese noutra lapela). Mellor unha passkey ou unha app de códigos.
- Chaves físicas se corres risco: rexistra dúas, porque se perdes a única quedas fóra.
- iPhone roubado: activa a Protección en caso de robo (ábrese noutra lapela) en Ajustes > Face ID y código.
- Antes da folga ou dunha mani, mira esta parte.
Pide axuda
Podes vir directa aquí, sen facer o anterior.
3.1 Liñas de axuda
| Quen | Para que |
|---|---|
| Access Now, Digital Security Helpline (ábrese noutra lapela) | Activistas, xornalistas, defensoras de dereitos humanos e colectivos. De balde, 24 horas, tamén en castelán. Fan unha comprobación previa de quen es. |
| Amnistía Internacional, Security Lab (ábrese noutra lapela) | Xornalistas, activistas e organizacións en risco por ataques dirixidos. |
| INCIBE (ábrese noutra lapela): 017 |
|
3.2 Guías para seguir, en castelán
- Kit de primeiros auxilios dixitais (ábrese noutra lapela): guíate segundo o que che pase.
- Guías de autodefensa dixital de TeknoKasa (ábrese noutra lapela), de Madrid: bloqueo do móbil, detención e máis.
- Avalía os teus riscos (ábrese noutra lapela), da EFF: seis preguntas para facer o teu plan.
- Spyware mercenario (ábrese noutra lapela), de SocialTIC.
- Data Detox Kit (ábrese noutra lapela), de Tactical Tech.
- Autocoidado para quen pasa por isto (ábrese noutra lapela), do mesmo kit.
3.3 Puntos de encontro
Estamos a preparar puntos para revisar móbiles en persoa. Publicarémolos aquí.
Se vas a un punto de encontro
- Trae o móbil cargado, o seu cable, o código de desbloqueo na cabeza e unha lista do que che pasou, con datas.
- Tes dereito a ver todo o que se fai e a dicir que non.
- Ninguén necesita os teus contrasinais. Escríbelos ti.
- Pregunta que datos se copian, onde se gardan e cando se borran.
- Desconfía de quen che ofreza por internet "limparche o móbil": é unha estafa clásica.
Como apuntar o que pasaUnha plantilla para non perder as probas.
Sérveche a ti e a quen che axude. Copia isto nun papel ou nun aparello de confianza, cunha liña por cada cousa rara:
Data e hora: Aparello ou conta: Que pasou: Número, correo ou ligazón implicada: Captura gardada (onde): A quen llo contei:
- Saca as capturas antes de bloquear ou denunciar unha conta: despois pode desaparecer.
- Non abras ligazóns sospeitosas para ver que son. Copia o texto sen premelo.
- Garda unha copia cifrada. Se te abruma, pídelle a alguén de confianza que o leve.
- Para denunciar en España, esta guía (ábrese noutra lapela) explica como presentar as probas.
Zona techie: o laboratorio
Para hacklabs e para quen queira aprender.
Esta parte é para montar o laboratorio. Para revisar o teu móbil non fai falta. Os comandos non arranxan nada por si sós: un "limpo" non significa limpo e unha coincidencia non significa infección.
Consentimento.
- Só co teu móbil ou co de alguén que cho pide e está diante.
- Analizar o doutra persoa sen permiso pode ser delito.
- A licenza de MVT prohíbeo de forma expresa.
MVT + AndroidQF (ábrese noutra lapela)
PiRogue Tool Suite (ábrese noutra lapela)
Rayhunter (ábrese noutra lapela)Logos dos seus respectivos proxectos, só para identificalos. Este hacklab non ten relación con eles.
Que é cada ferramenta
| Ferramenta | Que fai | Para quen |
|---|---|---|
| Zero Breach Toolkit | Busca trazas publicadas de spyware en ordenadores, en copias de iPhone e no recollido de Android. Ten xanela e dá o resultado en linguaxe normal. | Primeiro filtro, con pouco nivel técnico. |
| MVT (Amnistía) | Análise forense: extrae rexistros e compáraos con listas de indicadores. | Terminal. O propio proxecto di que non é para autodiagnóstico. |
| PiRogue (PTS) | Unha Raspberry Pi fai de router e analiza o tráfico do móbil. Non mira dentro do teléfono: mira con quen fala. | Para quen sabe de redes. |
Compleméntanse: as dúas primeiras miran o que queda gardado no aparello e PiRogue o que fai na rede mentres o observas.
Como montar o postoO primeiro, antes de tocar ningún móbil.
- Un portátil de confianza co disco cifrado, dedicado se pode ser. Se o ordenador está comprometido, estao todo.
- As copias conteñen a vida enteira da persoa: mensaxes, fotos, historial. Quedan en local e cifradas, e bórranse cando ela o decida.
- Nada á nube nin a servizos de análise en liña sen que o autorice.
- Actualiza os indicadores o mesmo día. Con listas vellas, o resultado non vale.
- Ante un positivo crible, deixa de tocar e pasa o caso a Security Lab ou a Access Now.
Triaxe dun casoQue facer e en que orde.
╔══════════════════╗ ╔════════╗ ╔════════════════════╗ ╔══════════╗ ╔═════════════╗ ╔══════════════╗ ║ CASO ║ ║ IOC ║ ║ ADQUIRIR ║ ║ HASH ║ ║ ANALIZAR ║ ║ ESCALAR ║ ╟──────────────────╢ ╟────────╢ móbil ╟────────────────────╢ ╟──────────╢ ╟─────────────╢ se hai dúbida ╟──────────────╢ ║ consentimento ║─────▶║ ao día ║──────────▶║ copia ou AndroidQF ║─────▶║ custodia ║─────▶║ 1 cobertura ║──────────────────▶║ Access Now ║ ║ hipótese e datas ║ ╚════════╝ ╚════════════════════╝ ╚══════════╝ ║ 2 alertas ║ ║ Security Lab ║ ╚══════════════════╝ ╚═════════════╝ ╚══════════════╝
╔══════════════════╗
║ CASO ║
╟──────────────────╢
║ consentimento ║
║ hipótese e datas ║
╚══════════════════╝
│
▼
╔════════╗
║ IOC ║
╟────────╢
║ ao día ║
╚════════╝
│ móbil
▼
╔════════════════════╗
║ ADQUIRIR ║
╟────────────────────╢
║ copia ou AndroidQF ║
╚════════════════════╝
│
▼
╔══════════╗
║ HASH ║
╟──────────╢
║ custodia ║
╚══════════╝
│
▼
╔═════════════╗
║ ANALIZAR ║
╟─────────────╢
║ 1 cobertura ║
║ 2 alertas ║
╚═════════════╝
│ se hai dúbida
▼
╔══════════════╗
║ ESCALAR ║
╟──────────────╢
║ Access Now ║
║ Security Lab ║
╚══════════════╝
Orde proposta por este hacklab a partir das fontes. Ningunha fixa unha orde única.
- Antes de tocar nada. Consentimento explícito, a quen teme e desde cando. Datas: aviso de Apple, mensaxe rara, detención, móbil retido. Sen hipótese nin datas, a liña temporal non di nada.
- Risco alto ou aviso oficial. Pasa directamente a Access Now ou a Security Lab. Non fai falta analizar antes para pedir axuda.
- Non o toques máis do necesario. Criterio noso: nin restablecer, nin actualizar, nin desinstalar antes de adquirir. O historial de Safari dura poucos meses, e restablecer axustes pode borrar trazas.
- Indicadores ao día, na túa máquina e antes de conectar o móbil.
- Adquire primeiro, analiza despois. O adquirido pódese reanalizar cando saian indicadores novos. O móbil xa non estará igual.
- Calcula hashes nada máis rematar.
- Analiza e mira primeiro a cobertura: que non se puido ler. Despois as alertas.
- Rede ao final. PiRogue esixe días de uso con só wifi. Serve se sospeitas actividade presente, e unha captura limpa non di nada do pasado.
iPhone
pymobiledevice3 usbmux list pymobiledevice3 lockdown info mkdir -p ./caso/copia pymobiledevice3 backup2 backup --full ./caso/copia/
Cifrada sempre: sen cifrar faltan o historial e o estado de Safari, e as chamadas. Se sospeitas acceso físico, unha copia non abonda porque non contén eses rexistros: cómpre sysdiagnose ou extracción, mellor en mans expertas. mvt-ios check-sysdiagnose sen plugins só saca datos do aparello, e avísao.
Android
sha256sum -c --ignore-missing checksums.txt chmod +x androidqf_linux_amd64_1.8.3 ./androidqf_linux_amd64_1.8.3 -output ./caso
Respostas razoables. Backup: Only SMS. Apps: Only non-system packages. Quitar as asinadas con certificado de confianza: No. Hash no móbil: No, porque é lento e pode parar o recolector. Intrusion Logs: Yes só se estaban activados.
Intrusion Logs: DNS e conexións por app, arranques de procesos, comandos ADB. Android 16 ou superior, polo momento en Pixel segundo Security Lab (maio de 2026), con Protección Avanzada. Non son retroactivos: hai que activalos antes. Conteñen historial de navegación.
Fontes: MVT iOS (ábrese noutra lapela), MVT Android (ábrese noutra lapela), AndroidQF (ábrese noutra lapela), Security Lab (ábrese noutra lapela), Zero Breach (ábrese noutra lapela).
Cadea de custodia e hashesQuen tocou que, cando e con que.
Serve para dúas cousas: que outra analista poida confiar na túa copia e, se o caso acaba nun xulgado, demostrar que non se alterou. Sobre a súa validez legal, pregúntalle a unha avogada antes de empezar.
Rexistro
caso: 2026-001 persoa: (pseudónimo; a clave, á parte) consentimento: data, alcance, quen o recolle aparello: modelo, SO, parche, desbloqueado por ela? cando quen rol acción hash 2026-11-06 ana analista recibe e fai copia - 2026-11-06 ana analista sha256 da copia ab12... 2026-11-07 ana analista entrega a liña axuda ab12...
Un identificador por aparello, unha liña por cada persoa que o manexe, precinto se queda contigo. Hora en UTC. Anota tamén as versións das ferramentas.
iPhone
cd ./caso/copia/<UDID> find . -type f -print0 | sort -z | xargs -0 sha256sum > ../copia.sha256 sha256sum -c --quiet ../copia.sha256
decrypt-backup e check-backup aceptan --hashes: garda o SHA-256 de cada ficheiro en info.json e imprime o hash dese info.json. Anótao.
Android
AndroidQF deixa dentro do ZIP un hashes.csv (entrada e SHA-256 do contido, sen cabeceira) e acquisition.json co estado de cada módulo.
sha256sum <UUID>.zip >> caso.sha256
unzip -q <UUID>.zip -d adq/ && cd adq/
python3 -c "
import csv,hashlib
for n,h in csv.reader(open('hashes.csv')):
if hashlib.sha256(open(n,'rb').read()).hexdigest()!=h: print('MAL',n)"
jq -r '.module_results[]|select(.status!="completed")|[.name,.status,.error]|@tsv' acquisition.json
Se a comprobación non imprime nada, todo coincide. hashes.csv vai dentro do propio arquivo e non protexe contra quen refaga o ZIP: por iso o hash externo, gardado noutro sitio. Un módulo partial ou failed significa adquisición incompleta, e iso vai ao informe.
Cifrar desde a orixe
age-keygen -o privada.txt # noutra máquina; non viaxa contigo # a chave pública (age1...) vai a key.txt, xunto ao binario ./androidqf_linux_amd64_1.8.3 -output ./caso age --decrypt -i privada.txt -o <UUID>.zip <UUID>.zip.age
Con key.txt, AndroidQF escribe <UUID>.zip.age e non deixa ZIP en claro. Quen leva o portátil non pode descifrar aínda que a obriguen. Sen cifrado, un fallo pode deixar temporais en claro.
Compartir e borrar
- Pregunta á liña de axuda como quere recibilo.
- Marca con TLP ata onde se comparte e con PAP que se pode facer con iso. PAP:RED: nada detectable desde fóra.
- Sinatura separada para demostrar a orixe:
gpg --detach-sign caso.sha256. - Ao borrar, PTS indica
shred -u. En SSD non te fíes del: o que protexe é o disco cifrado.
Fontes: PTS g6 (ábrese noutra lapela), PTS g4 (ábrese noutra lapela), Colander: custodia (ábrese noutra lapela), AndroidQF: arquivos (ábrese noutra lapela).
Zero Breach ToolkitPrimeiro filtro. Ten xanela.
Proxecto moi novo e anónimo. O repositorio creouse en outubro de 2026, o seu README di que o proxecto é anónimo e non atopamos ningunha auditoría independente. As versións 2.0.0 a 2.0.2 podían dar en verde sen terminar de comprobar un móbil: repite coa última estable. Hai repositorios con nomes parecidos. Descarga só de interplains/Zero-Breach-Toolkit (ábrese noutra lapela).
Instalación. Baixa o programa do teu sistema (Windows, Mac ou Linux) e ábreo. Como aínda non está asinado, o sistema e algúns antivirus avisarán. Comproba antes a súa orixe:
gh attestation verify <ficheiro> --repo interplains/Zero-Breach-Toolkit gpg --verify SHA256SUMS.txt.asc SHA256SUMS.txt sha256sum -c SHA256SUMS.txt
Actualiza as listas de indicadores antes de lanzar a comprobación. A análise non sobe nada a internet.
Ordenador. Pecha os navegadores e as apps de mensaxaría, elixe a comprobación "Standard" (15 ou 20 minutos) e preme "Start check".
iPhone. Analízase unha copia no ordenador, nunca no propio móbil. Conéctao, preme Confiar e fai unha copia marcando "Encriptar copia local" (Finder en Mac, Apple Devices en Windows). No programa elixe "A phone" e arrastra o cartafol da copia, que está aquí:
Mac: ~/Library/Application Support/MobileSync/Backup Windows: %USERPROFILE%\Apple\MobileSync\Backup
Android. Activa as Opcións de programación (Opciones de desarrollador; preme sete veces en Número de compilación) e a Depuración por USB. Conecta cun cable de datos e autoriza o ordenador. No programa, "A phone" e a opción de recoller desde Android por USB. Mantén o móbil desbloqueado. Ao rematar, apaga a Depuración por USB.
A recollida guiada de Android é experimental. Responde: Backup, Only SMS; Apps, Only non-system; Remove trusted, No; o resto, No. Acepta "Back up my data" no móbil.
Como lelo
Non aparece nada das listas públicas nos sitios que puido ler. Revisa a lista do que non puido comprobar. O spyware sen trazas publicadas non sae.
Significa "mira máis de preto", non "estás infectada". Non borres nada nin visites o enderezo que indica. Garda o informe e pásallo á liña de axuda. Un dominio compartido pode dar coincidencias inocentes.
MVT (Mobile Verification Toolkit)Análise forense por terminal.
Pide Python 3.11 ou superior e Linux ou Mac. En Windows, por WSL. A súa licenza é propia e restrinxe o uso sen consentimento, así que non é software libre en sentido estrito.
sudo apt install python3 python3-venv python3-pip sqlite3 libusb-1.0-0 pipx pipx ensurepath pipx install mvt mvt download-iocs
Tras pipx ensurepath, abre outra terminal. MVT pide Python 3.11, así que Ubuntu 22.04 non serve de serie.
MVT sae á rede por defecto: segue as ligazóns acurtadas, o que pode tocar a infraestrutura da ligazón recibida. Apágao así:
export MVT_NETWORK_ACCESS_ALLOWED=false
iPhone
Con copia cifrada vense máis rexistros, como o historial de Safari. Podes facela desde Finder ou Apple Devices, ou por terminal:
sudo apt install usbmuxd pipx install pymobiledevice3 pymobiledevice3 lockdown pair pymobiledevice3 backup2 encryption on 'CONTRASINAL' pymobiledevice3 backup2 backup --full ./copia/
Se xa tiña contrasinal de copia, usa ese. Restablecer axustes, só como último recurso: pode borrar trazas.
Ese contrasinal queda no historial da shell: bórrao despois. Mantén o móbil desbloqueado. A copia aparece nun subcartafol co UDID do móbil. Para descifrala e analizala:
read -rs MVT_IOS_BACKUP_PASSWORD; export MVT_IOS_BACKUP_PASSWORD mvt-ios decrypt-backup -d ./descifrada ./copia/<UDID> unset MVT_IOS_BACKUP_PASSWORD mvt-ios check-backup --output ./salida ./descifrada
Android
MVT xa non analiza por ADB directamente. A recollida faise con AndroidQF (ábrese noutra lapela): activa a Depuración por USB, autoriza o ordenador, executa o binario e responde ao que pregunta. Logo:
unzip <UUID>.zip -d adq/ mvt-android check-androidqf --output ./salida ./adq
Extrae sempre o ZIP de AndroidQF e usa --output. Nunha proba con datos sintéticos, pasar o ZIP directamente deu 0 alertas e sen aviso claro. Non se confirmou cun móbil real.
A opción --virustotal está apagada por defecto. Envía hashes das APK que non son de sistema, e require MVT_VT_API_KEY. Déixaa apagada salvo que a persoa o acepte.
PiRogue Tool SuiteRaspberry Pi que analiza o tráfico.
É unha Raspberry Pi que crea unha wifi. Conectas o móbil a ela e a Pi analiza en directo todo o tráfico con Suricata, usando regras de ProofPoint ET Open e os indicadores de stalkerware de Echap.
Material: para ter alertas, Raspberry Pi 4 de 4 ou 8 GB: a 3B, a 3B+ e a Pi 4 de 1 ou 2 GB non executan Suricata. Admite 2 ou 3 móbiles. A Pi 5 usa unha imaxe experimental á parte. Tamén pode ser un PC ou virtualizada. Fonte de alimentación, microSD de 32 GB (64 GB para capturas longas) e cable de rede.
Instalación
Baixa a imaxe de PiRogue OS desde a guía oficial (ábrese noutra lapela), comproba o hash e gravaa con Balena Etcher. Conecta a Pi por cable e entra:
sha256sum PiRogue-OS-*.img.xz # contrasinal inicial: raspberry, cámbiao ao entrar ssh pi@pirogue.local sudo apt update sudo apt dist-upgrade -y sudo apt install pirogue-base -y sudo reboot
Durante a instalación responde Non a gardar as regras de devasa IPv4 e IPv6, e Si á captura sen root. Logo saca a clave da wifi e a do panel (na versión 2.x son aleatorias; a 1.x é distinta, explícao a guía):
pirogue-admin-client wifi get-configuration pirogue-admin-client dashboard get-configuration
O panel está en https://pirogue.local/, con certificado autoasinado. A telemetría vén activada de serie: envía a diario ID, ASN, país e sistema operativo. Apágaa antes de meter o móbil de ninguén:
sudo pirogue-telemetry config disable
Para MVT, segue docs.mvt.re (ábrese noutra lapela): a guía g7 de PTS usa comandos xa eliminados.
Captura
Arrinca a captura antes de acender a wifi do móbil, ou perderás as primeiras conexións. No móbil, modo avión, só wifi e sen VPN. Os fluxos aparecen no panel aos 4 minutos, máis ou menos. Déixao uns 3 días con uso normal. O panel garda 5 días.
Para capturar a ficheiro e abrilo logo en Wireshark:
sudo tcpdump -i wlan0 -w $(date +%Y%m%d%H%M)_captura.pcap scp pi@pirogue.local:~/*_captura.pcap .
Que significa
- Alertas de seguridade: miras a hora, a gravidade, o tipo de ameaza, o nome da regra e as IP de orixe e destino. Moitas son ruído, como publicidade ou rastrexadores. Le a regra antes de sacar conclusións.
- Lista de fluxos e mapa: busca dominios raros, envíos grandes de datos a horas mortas ou conexións regulares co móbil en repouso. Comproba de quen é cada destino. A maioría serán Apple, Google e as apps de sempre.
- Límites: case todo vai cifrado, así que ves a quen se conecta e canto, non o contido. Suricata só detecta o xa coñecido. Sen alertas non hai garantía de nada.
- Privacidade: a captura retrata a vida da persoa. Trátase coma calquera outra copia: en local, cifrada e borrada ao acabar.
O propio proxecto recomenda que, en situacións de risco, a análise a sigan profesionais. Guías de PTS (ábrese noutra lapela)
Indicadores: de onde saen e como se usanSTIX2, actualización e límites.
╔═════════════════════════╗ ╔═════════════════╗ ║ INVESTIGACIÓNS ║ STIX2 ║ mvt-indicators ║ ╔═══════════════════╗ ╔═════╗ ╟─────────────────────────╢──────────▶╟─────────────────╢─────▶║ mvt download-iocs ║─────▶║ MVT ║ ║ Amnistía, Echap, outras ║ ║ indicators.yaml ║ ╚═══════════════════╝ ╚═════╝ ╚═════════════════════════╝ ╚═════════════════╝
╔═════════════════════════╗
║ INVESTIGACIÓNS ║
╟─────────────────────────╢
║ Amnistía, Echap, outras ║
╚═════════════════════════╝
│ STIX2
▼
╔═════════════════╗
║ mvt-indicators ║
╟─────────────────╢
║ indicators.yaml ║
╚═════════════════╝
│
▼
╔═══════════════════╗
║ mvt download-iocs ║
╚═══════════════════╝
│
▼
╔═════╗
║ MVT ║
╚═════╝╔═════════════════╗ a diario ╔════════════════╗ ╔══════════╗ ║ ET OPEN + ECHAP ║─────────────▶║ suricata.rules ║─────▶║ SURICATA ║ ╚═════════════════╝ ╚════════════════╝ ╚══════════╝
╔═════════════════╗
║ ET OPEN + ECHAP ║
╚═════════════════╝
│ a diario
▼
╔════════════════╗
║ suricata.rules ║
╚════════════════╝
│
▼
╔══════════╗
║ SURICATA ║
╚══════════╝
Un indicador é un dato concreto publicado tras unha investigación: dominio, nome de proceso, hash, ID de app. Que non apareza só significa que non aparece.
- mvt-indicators (ábrese noutra lapela): a lista que descarga MVT. Pegasus, Predator, RCS Lab, stalkerware e outras.
- AmnestyTech/investigations (ábrese noutra lapela): os das investigacións de Amnistía.
- Echap (ábrese noutra lapela): stalkerware. Tamén alimenta as regras de PiRogue.
mvt download-iocs # en Linux: ~/.local/share/mvt/indicators; cárganse sós mvt-ios check-backup --iocs caso.stix2 --output ./salida ./descifrada export MVT_STIX2="/ruta/uno.stix2:/ruta/dos.stix2" mvt-ios check-iocs --iocs nuevo.stix2 ./salida # sobre resultados xa extraídos
En Android, para aplicar indicadores novos, repite check-androidqf sobre a adquisición gardada.
Sen rede. MVT resolve ligazóns acurtadas cunha petición HEAD e comproba versión e indicadores:
export MVT_NETWORK_ACCESS_ALLOWED=false mvt-ios --disable-update-check --disable-indicator-update-check check-backup ...
STIX2 propio
MVT implementa un subconxunto: un valor por patrón, sen expresións booleanas. Tipos: domain-name:value, url:value, process:name, email-addr:value, file:name, file:path, file:hashes.md5/.sha1/.sha256, app:id, configuration-profile:id, android-property:name. Cada módulo só usa os que lle afectan.
{"type":"bundle","id":"bundle--11111111-1111-4111-8111-111111111111","objects":[
{"type":"malware","spec_version":"2.1","id":"malware--22222222-2222-4222-8222-222222222222",
"created":"2026-11-06T00:00:00.000Z","modified":"2026-11-06T00:00:00.000Z",
"name":"caso-prueba","is_family":false},
{"type":"indicator","spec_version":"2.1","id":"indicator--33333333-3333-4333-8333-333333333333",
"created":"2026-11-06T00:00:00.000Z","modified":"2026-11-06T00:00:00.000Z",
"pattern":"[app:id='com.ejemplo.sospechosa']","pattern_type":"stix",
"valid_from":"2026-11-06T00:00:00.000Z","indicator_types":["malicious-activity"]},
{"type":"relationship","spec_version":"2.1","id":"relationship--44444444-4444-4444-8444-444444444444",
"created":"2026-11-06T00:00:00.000Z","modified":"2026-11-06T00:00:00.000Z",
"relationship_type":"indicates",
"source_ref":"indicator--33333333-3333-4333-8333-333333333333",
"target_ref":"malware--22222222-2222-4222-8222-222222222222"}
]}
A colección toma o nome do obxecto malware e sae na alerta. Colander tamén pode exportar un feed STIX2.
Fontes: MVT: IOCs (ábrese noutra lapela), PTS g7 (só a parte de Colander) (ábrese noutra lapela).
Como ler a saída de MVTFicheiros reais e que significa cada módulo.
╔═════════════════╗
╔═══════════════╗ ╔════════════════╗ ╔═══════════════╗ ║ SAÍDA ║
╔════════╗ ║ COPIA CIFRADA ║ ║ DESCIFRAR ║ ║ CHECK-BACKUP ║ ╟─────────────────╢
║ IPHONE ║ USB ╟───────────────╢ ╟────────────────╢ ╟───────────────╢ ║ alerts.json ║
╚════════╝────────▶║ backup2 ║─────▶║ decrypt-backup ║─────▶║ + indicadores ║─────▶║ timeline.csv ║
║ <UDID>/ ║ ╚════════════════╝ ╚═══════════════╝ ║ *_detected.json ║
╚═══════════════╝ ║ command.log ║
╚═════════════════╝ ╔════════╗
║ IPHONE ║
╚════════╝
│ USB
▼
╔═══════════════╗
║ COPIA CIFRADA ║
╟───────────────╢
║ backup2 ║
║ <UDID>/ ║
╚═══════════════╝
│
▼
╔════════════════╗
║ DESCIFRAR ║
╟────────────────╢
║ decrypt-backup ║
╚════════════════╝
│
▼
╔═══════════════╗
║ CHECK-BACKUP ║
╟───────────────╢
║ + indicadores ║
╚═══════════════╝
│
▼
╔═════════════════╗
║ SAÍDA ║
╟─────────────────╢
║ alerts.json ║
║ timeline.csv ║
║ *_detected.json ║
║ command.log ║
╚═════════════════╝
╔════════════════╗ ╔════════════╗ ╔══════════════════╗ ╔═══════════════════╗ ╔═════════════╗
║ ANDROID ║ ║ ANDROIDQF ║ ║ <UUID>.zip[.age] ║ ║ CHECK-ANDROIDQF ║ ║ SAÍDA ║
╟────────────────╢ adb ╟────────────╢ ╟──────────────────╢ extraer ╟───────────────────╢ ╟─────────────╢
║ depuración USB ║────────▶║ recolector ║─────▶║ hashes.csv ║────────────▶║ cartafol extraído ║─────▶║ alerts.json ║
╚════════════════╝ ║ no móbil ║ ║ acquisition.json ║ ║ + indicadores ║ ║ command.log ║
╚════════════╝ ╚══════════════════╝ ╚═══════════════════╝ ╚═════════════╝ ╔════════════════╗
║ ANDROID ║
╟────────────────╢
║ depuración USB ║
╚════════════════╝
│ adb
▼
╔════════════╗
║ ANDROIDQF ║
╟────────────╢
║ recolector ║
║ no móbil ║
╚════════════╝
│
▼
╔══════════════════╗
║ <UUID>.zip[.age] ║
╟──────────────────╢
║ hashes.csv ║
║ acquisition.json ║
╚══════════════════╝
│ extraer
▼
╔═══════════════════╗
║ CHECK-ANDROIDQF ║
╟───────────────────╢
║ cartafol extraído ║
║ + indicadores ║
╚═══════════════════╝
│
▼
╔═════════════╗
║ SAÍDA ║
╟─────────────╢
║ alerts.json ║
║ command.log ║
╚═════════════╝
Primeiro: leu algo?
grep -E 'not found|ERROR|WARNING' salida/command.log jq -r '.[]|select(.missing==true)|.relative_path' salida/manifest.json | head
Un módulo que non atopa o seu ficheiro remata dicindo no detections, igual ca un limpo. En iPhone, "missing": true marca o que a copia non adquiriu. Con AndroidQF, extrae o ZIP e pasa o cartafol: na nosa proba cun ZIP sintético, pasalo directamente deu 0 alertas.
Os ficheiros
alerts.json: todas as alertas. Empeza aquí. Só existe se houbo algunha.alerts_timeline.csv: as alertas por data. Substitúe o antigotimeline_detected.csv.timeline.csv: todo, por data. Aquí enténdese unha alerta: que pasou antes e despois. iOS en UTC; Android, hora local.<módulo>.jsone<módulo>_detected.json: o extraído e o que coincide.urls.json: ligazóns de SMS, iMessage e WhatsApp, co seu destino se se resolveu.info.json: versión de MVT, data, indicadores usados e, con--hashes, hashes.command.log: rexistro completo. Vai co informe.
Niveis
CRITICAL é, en xeral, coincidencia cun indicador: mira matched_indicator. HIGH: por exemplo, VirusTotal. MEDIUM adoita ser heurística: unha app instalada por ADB, unha redirección rápida, un axuste. INFO e LOW son contexto. MVT dino na súa saída: só a revisión experta confirma, e que falten alertas non é un certificado de saúde.
jq -r '.[]|[.level,.module,.event_time,.message]|@tsv' salida/alerts.json | sort jq '.[]|select(.level=="CRITICAL")|.matched_indicator' salida/alerts.json
iPhone: módulos que importan
datausage: procesos con actividade de rede, enDataUsage.sqlite. Non rexistra tráfico wifi. Está na copia.netusagesó en sistema de ficheiros.os_analytics_ad_daily: uso de datos por proceso, outra fonte para datar execucións.safari_history,safari_browser_state: só con copia cifrada. Avisa de redireccións HTTP a outro dominio en menos dun segundo.webkit_session_resource_log,webkit_resource_load_statistics: dominios cargados, incluídos intermedios.sms,sms_attachments,whatsapp: ligazóns e anexos.id_status_cache: contas de iMessage e FaceTime consultadas. Baleiro ou ausente desde iOS 14.7.configuration_profiles,profile_events,applications,tcc: perfís, apps de fóra da App Store, permisos.global_preferences: se o Modo de illamento está activo.backup_info: modelo e versión.manifest: índice da copia, con rutas e datas.- Só con sistema de ficheiros:
shutdown_log,cache_files,analytics,safari_favicon,webkit_indexeddb,webkit_local_storage.
Android: módulos que importan
aqf_packages: compara nome, hash e certificado. Avisa de apps instaladas por navegador ou ADB, paquetes de root e seguridade desactivada.aqf_settings: Play Protect apagado, accesibilidade, informes desactivados. Cando Android o rexistra, di quen cambiou cada axuste.aqf_get_prop: parche de seguridade.root_binaries,mounts: rastros de root.aqf_processes: leps.txt, pero AndroidQF 1.8.3 escribeprocesses.json. Ata aclaralo, revisa ese ficheiro a man.dns_event,connect_event,security_event: Intrusion Logs, se os hai. DNS e conexións levanpackage_name.
Fontes: MVT: rexistros iOS (ábrese noutra lapela), Intrusion Logs (ábrese noutra lapela), código de MVT (ábrese noutra lapela).
Trazas de Pegasus segundo AmnistíaO documentado ata 2021. Para entender, non para diagnosticar.
Le isto como historia documentada. O informe é de 2021 e as trazas cambian. Buscar estes nomes a man non é un método: para iso están os indicadores. O útil é a lóxica: varias trazas independentes que encaixan no tempo coa historia da persoa.
Procesos
iOS garda procesos con actividade de rede en DataUsage.sqlite (está na copia) e netusage.sqlite (non está). Só aparecen os que usaron a rede. Amnistía atopou un proceso bh xusto despois de visitas a dominios de instalación de Pegasus, e comprobou que non había binarios lexítimos con ese nome nas versións recentes de iOS de entón.
A maioría imita servizos reais: fmld por fmfd, aggregatenotd por aggregated, launchafd por launchd, nehelprd por nehelper, roleaccountd por xpcroleaccountd. Por iso importa a grafía exacta.
jq -r '.[]|select(.bundle_id==null or .bundle_id=="")|[.first_isodate,.isodate,.proc_name]|@tsv' salida/datausage.json | sort -u
Segundo MVT, os procesos sen bundle_id válido poden merecer atención. É unha listaxe para cruzar, non un resultado.
Rexistros borrados a medias
Pegasus borrou nomes de ZPROCESS sen borrar as filas de ZLIVEUSAGE: quedan filas de uso que apuntan a un proceso que non existe. Amnistía viuno sempre xunto a outros indicadores, e nunca nos iPhones limpos que analizou. Serve para datar. Non é proba por si só.
jq -r '.[]|select(.proc_name==null or .proc_name=="")|[.live_isodate,.live_proc_id,.wwan_in,.wwan_out]|@tsv' salida/datausage.json # directo sobre a copia descifrada; ficheiro 0d/0d609c54856a9bb2d56729df1d68f2958a88426b SELECT l.Z_PK, l.ZHASPROCESS, datetime(l.ZTIMESTAMP+978307200,'unixepoch') FROM ZLIVEUSAGE l LEFT JOIN ZPROCESS p ON l.ZHASPROCESS=p.Z_PK WHERE p.Z_PK IS NULL;
Redireccións de Safari
Na inxección de rede, a persoa pedía unha web normal e o navegador acababa noutra: unha visita a Yahoo saltou a bun54l2b67.get1tn0w.free247downloads[.]com:30495/szev4hz. Chamaba a atención polo subdominio de cuarto nivel, o porto alto e a ruta aleatoria.
- O historial de Safari dura poucos meses e pode terse purgado. Amnistía atopou os mesmos dominios en
Favicon.db, que MVT só le en sistema de ficheiros. - Safari non parece gardar a cadea completa: os dominios intermedios aparecen nos Session Resource logs (
webkit_session_resource_log). - Tamén pasa fóra do navegador: un caso ocorreu ao previsualizar unha ligazón dentro da app de Twitter.
Outras pistas do informe
Library/Preferences/com.apple.CrashReporter.plistenRootDomain: aparece xunto a infeccións, segundo Amnistía probablemente para cortar informes de fallos a Apple. Pista, non indicador.- Consultas a contas de iMessage descoñecidas, en
idstatuscache, pouco antes dos procesos. Baleiro ou ausente desde iOS 14.7. - Segundo Amnistía, Pegasus semellaba ter deixado de ser persistente: o binario non se recupera do disco.
jq -r '.[]|select(.relative_path|test("CrashReporter"))|[.domain,.relative_path,.modified]|@tsv' salida/manifest.json
Android: Amnistía di que hai bastantes menos trazas accesibles ca en iOS, así que a ausencia de rastro pesa aínda menos.
Fonte: Amnistía: Forensic Methodology Report (ábrese noutra lapela).
Capturas e regras SuricataDo panel ao pcap.
╔═════════╗ ╔══════════════╗ ╔══════════╗ ╔═════════╗ ║ TRÁFICO ║ ║ NFSTREAM ║ ║ INFLUXDB ║ ║ GRAFANA ║ ╟─────────╢─────▶╟──────────────╢─────▶╟──────────╢─────▶╟─────────╢ ║ wlan0 ║ ║ fluxos, nDPI ║ ║ 5 días ║ ║ panel ║ ╚═════════╝ ╚══════════════╝ ╚══════════╝ ╚═════════╝
╔═════════╗
║ TRÁFICO ║
╟─────────╢
║ wlan0 ║
╚═════════╝
│
▼
╔══════════════╗
║ NFSTREAM ║
╟──────────────╢
║ fluxos, nDPI ║
╚══════════════╝
│
▼
╔══════════╗
║ INFLUXDB ║
╟──────────╢
║ 5 días ║
╚══════════╝
│
▼
╔═════════╗
║ GRAFANA ║
╟─────────╢
║ panel ║
╚═════════╝╔═════════╗ ╔════════════════╗ ╔══════════╗ ╔═════════╗ ║ TRÁFICO ║ ║ SURICATA ║ ║ INFLUXDB ║ ║ GRAFANA ║ ╟─────────╢─────▶╟────────────────╢─────▶╟──────────╢─────▶╟─────────╢ ║ wlan0 ║ ║ ET Open, Echap ║ ║ 5 días ║ ║ panel ║ ╚═════════╝ ╚════════════════╝ ╚══════════╝ ╚═════════╝
╔═════════╗
║ TRÁFICO ║
╟─────────╢
║ wlan0 ║
╚═════════╝
│
▼
╔════════════════╗
║ SURICATA ║
╟────────────────╢
║ ET Open, Echap ║
╚════════════════╝
│
▼
╔══════════╗
║ INFLUXDB ║
╟──────────╢
║ 5 días ║
╚══════════╝
│
▼
╔═════════╗
║ GRAFANA ║
╟─────────╢
║ panel ║
╚═════════╝╔═════════╗ ╔═════════╗ ║ TRÁFICO ║ ╔═════════╗ ║ .pcap ║ ╟─────────╢─────▶║ TCPDUMP ║─────▶╟─────────╢ ║ wlan0 ║ ╚═════════╝ ║ á parte ║ ╚═════════╝ ╚═════════╝
╔═════════╗
║ TRÁFICO ║
╟─────────╢
║ wlan0 ║
╚═════════╝
│
▼
╔═════════╗
║ TCPDUMP ║
╚═════════╝
│
▼
╔═════════╗
║ .pcap ║
╟─────────╢
║ á parte ║
╚═════════╝
NFStream agrega paquetes en fluxos e clasifica con nDPI. Suricata alerta con regras. Os dous escriben en InfluxDB e Grafana amósao. O panel borra aos 5 días: exporta antes.
Captura
tmux # que non morra co SSH sudo tcpdump -i wlan0 -w $(date +%Y%m%d%H%M)_captura.pcap # agora, wifi do móbil. Uns 3 días de uso normal. Ctrl+C para parar. sha256sum *_captura.pcap
Exportar alertas e fluxos
influx -database 'suricata' -execute 'SELECT * FROM "suricata"."suricata_5d"."alert"' -format 'csv' > alertas.csv influx -database 'flows' -execute 'SELECT * FROM "flows"."flows_5d"."flow"' -format 'csv' > flujos.csv
Fluxos: requested_server_name, dst_ip, application_name, src2dst_bytes, dst2src_bytes, community_id. Alertas: alert_signature, alert_signature_id, alert_severity, community_id. Ambas as táboas teñen community_id: úsao para cruzar unha alerta co seu fluxo.
Mirar o pcap sen ir paquete a paquete
tshark -r c.pcap -Y 'dns.flags.response==0' -T fields -e frame.time_epoch -e dns.qry.name tshark -r c.pcap -Y 'tls.handshake.type==1' -T fields -e frame.time_epoch -e ip.dst -e tls.handshake.extensions_server_name tshark -r c.pcap -q -z conv,ip
- Saca dominios únicos e quita o que recoñeces: Apple, Google, as apps da persoa. Mira o que queda.
- Busca regularidade co móbil quieto e envíos desproporcionados:
src2dst_bytesalto. - O país do servidor non decide nada por si só. PTS formúlao en relación coa persoa e o seu modelo de ameaza.
- Con DNS cifrado verás menos nomes. Unha IP na nube tampouco di de quen é.
Regras
Están en /var/lib/suricata/rules/suricata.rules e actualízanse a diario: ET Open e as de PTS (ábrese noutra lapela) a partir de Echap. Suricata corre en modo IDS: avisa, non bloquea. Ante unha alerta, busca a súa regra e le o que di:
grep -F 'sid:1000001;' /var/lib/suricata/rules/suricata.rules alert dns $HOME_NET any -> any any (msg:"PTS STALKERWARE TheTruthSpy (copy9[.]com)"; metadata: type stalkerware; dns.query; content:"copy9.com"; depth:9; nocase; endswith; fast_pattern; reference:url,github.com/AssoEchap/stalkerware-indicators; classtype:targeted-activity; sid:1000001; rev:1;)
É unha coincidencia de nome nunha consulta DNS, e só iso. reference di de onde sae e classtype como se clasifica.
Para engadir regras, non edites o ficheiro, que se sobrescribe. Publícaas nun URL:
sudo suricata-update add-source MIAS https://ejemplo.org/mias.rules sudo suricata-update sudo suricatasc -c reload-rules
Para reanalizar un pcap con regras actuais:
mkdir -p suri/ sudo suricata -r c.pcap -S /var/lib/suricata/rules/suricata.rules -l suri/
Fontes: arquitectura (ábrese noutra lapela), análise de tráfico (ábrese noutra lapela), exportar (ábrese noutra lapela), regras propias (ábrese noutra lapela), g2 (ábrese noutra lapela).
Descifrar o TLS dunha app sospeitosaNun móbil de laboratorio. Nunca no da persoa.
╔══════════════════╗ ╔═════════════════════════╗ ╔════════════════╗ ║ ANDROID ROOTEADO ║ ║ PIROGUE ║ ║ .pcap + CHAVES ║ ╟──────────────────╢ USB e wifi ╟─────────────────────────╢ ╟────────────────╢ ║ Frida ║───────────────▶║ pirogue-intercept-gated ║─────▶║ traffic.pcap ║ ║ só laboratorio ║ ╚═════════════════════════╝ ║ sslkeylog.txt ║ ╚══════════════════╝ ╚════════════════╝
╔══════════════════╗
║ ANDROID ROOTEADO ║
╟──────────────────╢
║ Frida ║
║ só laboratorio ║
╚══════════════════╝
│ USB e wifi
▼
╔═════════════════════════╗
║ PIROGUE ║
╟─────────────────────────╢
║ pirogue-intercept-gated ║
╚═════════════════════════╝
│
▼
╔════════════════╗
║ .pcap + CHAVES ║
╟────────────────╢
║ traffic.pcap ║
║ sslkeylog.txt ║
╚════════════════╝╔══════════════════╗ tshark ╔══════════════╗ ╔══════════════════╗ ║ decrypted.pcapng ║───────────▶║ traffic.json ║─────▶║ pirogue-view-tls ║ ╚══════════════════╝ ╚══════════════╝ ╚══════════════════╝
╔══════════════════╗
║ decrypted.pcapng ║
╚══════════════════╝
│ tshark
▼
╔══════════════╗
║ traffic.json ║
╚══════════════╝
│
▼
╔══════════════════╗
║ pirogue-view-tls ║
╚══════════════════╝
Isto non se fai co móbil da persoa. Esixe un Android rooteado dedicado a análise, e serve para estudar unha app concreta. O que sae inclúe chaves, texto en claro e identificadores do aparello: trátao como evidencia.
PiRogue instala Frida no móbil de probas e saca as chaves TLS da memoria mentres captura o tráfico. Non todas as bibliotecas TLS están soportadas, así que pode quedar tráfico sen descifrar. Conecta o móbil á PiRogue por USB e pola súa wifi, instala a app e non a abras.
adb devices pirogue-intercept-gated -o $(date +%Y%m%d%H%M)_salida # "Waiting for data": abre a app, úsaa. Ctrl+C para parar. cd <salida> editcap --inject-secrets tls,sslkeylog.txt traffic.pcap decrypted.pcapng tshark -2 -T ek --enable-protocol communityid -Ndmn -r decrypted.pcapng > traffic.json pirogue-view-tls -i traffic.json -t socket_trace.json
Se o lanzaches con sudo, antes: sudo chown -R pi:pi <salida>. Tamén podes abrir o pcap en Wireshark e indicar sslkeylog.txt en Settings, Protocols, TLS.
traffic.pcap: a captura.sslkeylog.txt: chaves en formato NSS.socket_trace.json: pila de chamadas de cada operación de socket.aes_info.json: operacións AES e RSA, con texto en claro e cifrado.device.json,ad_ids.txt,experiment.json,screen.mp4: aparello, IDs de publicidade, tempos, vídeo.
Fonte: PTS g8 (ábrese noutra lapela).
Falsos positivos e cando escalarAntes de dicirlle nada a ninguén.
O que adoita ser ruído
- A túa propia adquisición: deixa rastro de depuración USB e shell de ADB. Coloca a túa actividade na liña temporal antes de lela.
- Apps de fóra de Play Store: unha tenda alternativa é INFO; por navegador ou ADB, MEDIUM. MVT non sabe se iso é normal para ela.
- Perfís e MDM: normais nun móbil de traballo ou de centro educativo, ou un filtro DNS que puxo ela.
- Axustes: accesibilidade activada ou informes desactivados poden ser decisión súa. Mira quen e cando.
- Parche antigo: fala de risco, non de infección.
- Redirección rápida (MEDIUM): de HTTP a outro dominio en menos dun segundo. Criterio noso: a publicidade e os acurtadores tamén o fan.
- Unha páxina gardada que menciona o enderezo adoita ser unha noticia sobre o spyware. Un dominio compartido tamén pode dar coincidencias inocentes.
- Procesos sen
bundle_id: por si sós non proban nada. - Regras Suricata: moitas son ruído, como publicidade ou rastreadores. Le a regra.
- Rayhunter: falsas alarmas ao aterrar un avión, cifrado nulo por mala configuración da rede e heurísticas que varían entre os EUA e Europa.
Antes de dicirlle nada
Criterio noso. Para cada coincidencia:
- Que indicador exacto, de que colección, e que valor do móbil coincidiu? Le a fonte do indicador.
- A data encaixa coa súa historia e coa campaña?
- Que hai antes e despois en
timeline.csv? Hai unha segunda traza independente? - Que o revise outra persoa. Comunica "hai algo que require revisión", non "estás infectada", e non uses ese móbil para falar do caso.
Cando escalar
- Calquera coincidencia CRITICAL que sobreviva ao anterior.
- Aviso oficial de Apple ou doutra plataforma, aínda que non saia nada.
- Xornalistas, activistas ou defensoras en risco, aínda que saia limpo: os indicadores públicos non abondan, e un soporte fiable require indicadores non públicos.
- Sospeita de acceso físico: móbil retido ou ferramentas de extracción.
- Unha traza que non entendes. Iso tamén vale.
Para. Non reinstales, non restablezas, non borres nada e non visites os enderezos. Garda adquisición, hashes e command.log, e pregunta como queren recibilos. Non o subas a ningún sitio.
- Access Now Digital Security Helpline (ábrese noutra lapela): sociedade civil, activistas, medios, defensoras. Gratuíta, 24/7, 10 idiomas, tamén castelán. Din responder en dúas horas. Comproban que o caso entre no seu mandato.
help@accessnow.org, con PGP (ábrese noutra lapela). - Amnesty Security Lab (ábrese noutra lapela): xornalistas, activistas e organizacións en risco de ataques dirixidos.
Fontes: MVT (ábrese noutra lapela), PTS g2 (ábrese noutra lapela), Rayhunter (ábrese noutra lapela), Zero Breach (ábrese noutra lapela).
Antenas falsas: 2G e RayhunterPara organizadoras dun evento ou unha acción.
Un IMSI catcher é unha antena falsa que identifica os móbiles que ten preto. A diferenza do spyware, non toca o teléfono, e hai que estar na zona.
- Apaga o 2G: a Protección Avanzada de Android (ábrese noutra lapela) evítao en móbiles compatibles, e en iPhone o Modo de illamento (ábrese noutra lapela) desactiva 2G e 3G. Podes quedar sen rede onde só haxa esas.
- Rayhunter (ábrese noutra lapela) (EFF) busca sinais de antenas falsas cun router móbil barato. En Europa recomendan (ábrese noutra lapela) o TP-Link M7350, pero non compres a versión de hardware 10.0 (ábrese noutra lapela): é a que se vende nova e non funciona. Búscao de segunda man e confirma a versión antes de pagar. Leva SIM dunha operadora local, aínda que non teña plan activo, e tarxeta SD en FAT.
./installer tplink # panel en http://192.168.0.1:8080 rayhunter-check -p captura.qmdl # reanalizar no ordenador
Desactiva o aforro de enerxía no panel de TP-Link ou deixará de gravar. As heurísticas (ábrese noutra lapela) miran peticións de IMSI sen autenticación, baixadas a 2G, cifrado nulo e SIB incompletos. Unha alerta non proba que haxa unha antena falsa. A captura pode conter o teu IMSI e as antenas próximas, o que pode revelar onde estabas. A EFF aconsella consultar unha avogada fóra dos EUA.
Como entra o spyware de pago
Son as tres vías que documentan as investigacións de Amnistía Internacional. Saber por onde entra axuda a saber que buscar.
Esquemas de elaboración propia a partir de Forensic Methodology Report: How to catch NSO Group's Pegasus (ábrese noutra lapela) (2021) e Predator Files: Technical deep-dive (ábrese noutra lapela) (2023), de Amnistía Internacional. Este hacklab non ten relación con Amnistía Internacional.
Recupera o resto da túa vida dixital
En resetea.net.
Sobre esta guía
Mantena Hacklab la Raíz. O que afirma sae das fontes ligadas abaixo. Non substitúe unha análise forense nin unha avogada. Se ves un erro ou un menú que cambiou, escribe a hacklab-laraiz@riseup.net.
Fontes
Revisado en novembro de 2026. Os menús e os teléfonos cambian: se algo non coincide, fíate da fonte oficial.
- Amnistía Internacional: metodoloxía forense de Pegasus (ábrese noutra lapela) e Predator Files (ábrese noutra lapela)
- BOE-B-2026-33966: contrato da Garda Civil (ábrese noutra lapela)
- Digital First Aid Kit (ábrese noutra lapela), EFF: Surveillance Self-Defense (ábrese noutra lapela), Coalition Against Stalkerware (ábrese noutra lapela) e Tactical Tech: Holistic Security (ábrese noutra lapela)
- Apple: notificacións de ameazas (ábrese noutra lapela), modo de aislamiento (ábrese noutra lapela) e Comprobación de seguridad (ábrese noutra lapela)
- Google: Play Protect (ábrese noutra lapela) e Protección Avanzada (ábrese noutra lapela)
- Vodafone: desvío de chamadas (ábrese noutra lapela) e O2: contacto (ábrese noutra lapela)
- Selectra: códigos de desvío 2026 (ábrese noutra lapela)
- Zero Breach Toolkit (ábrese noutra lapela), MVT (ábrese noutra lapela), AndroidQF (ábrese noutra lapela) e PiRogue Tool Suite (ábrese noutra lapela)