« Dire qu'on se fiche de la vie privée parce qu'on n'a rien à cacher, c'est comme dire qu'on se fiche de la liberté d'expression parce qu'on n'a rien à dire. »

Edward Snowden

Ce guide est pensé pour l'Espagne : les numéros de téléphone et les lois sont donc ceux de ce pays.

Emblème d’UNHACK, Hacklab la Raíz

Avant de toucher à quoi que ce soit

1. N'efface rien, ne restaure rien

Tu perdrais les preuves.

2. Utilise un autre appareil

Pour chercher de l'aide et changer tes mots de passe, prends-en un de confiance.

3. Note ce qui se passe et préviens quelqu'un

Avec la date et des captures. Si c'est sérieux, qu'une personne de confiance soit au courant.

Qu'est-ce qui t'arrive ? Commence ici

Où se passe chaque intrusion

Schéma : sur ton téléphone, il peut y avoir une appli espionne ou un spyware payant, et ça peut se vérifier. Sur tes comptes, une session ouverte ou un compte volé, et ça peut aussi se vérifier. Chez ton opérateur, un renvoi d’appel ou un duplicata de SIM, qui se voient en appelant, ou une interception judiciaire, qui ne se voit pas. Ça touche aussi celles qui t’appellent : tes proches.
C'est quoi, exactement, chaque cas ?Il y a cinq cas différents, et l'un d'eux ne se voit pas depuis le téléphone.
Une interception : tu parles comme d'habitude et le réseau fait une copie pour qui écoute. Ton téléphone ne remarque rien.
Ce que c'estPeux-tu le voir toi-même ?
Renvoi d'appel ou duplicata de SIM. Tes appels ou tes SMS partent ailleurs.Oui. Étape 1.
Compte ouvert ailleurs. WhatsApp Web, Telegram ou Google sur un appareil qui n'est pas le tien. C'est l'un des cas les plus courants.Oui. Étape 2.
Appli espionne (stalkerware). Quelqu'un a eu ton téléphone en main et y a installé quelque chose.Souvent, oui. Étape 2.
Spyware payant (Pegasus, Predator, Graphite). Il vise des journalistes, des militantes et des personnes précises. Il peut entrer sans que tu touches à rien.À l'œil nu, non. Il faut un labo, et même là, il peut ne pas apparaître. Étape 3.
Interception judiciaire. C'est l'opérateur qui la réalise, sur ordre d'un tribunal.Non. Elle ne laisse aucune trace sur le téléphone et reste secrète tant qu'elle dure. Une fois terminée, tu as le droit de le savoir.

Grèves et manifestations

Dans la rue, si tu as peur qu’on te le prenne : téléphone éteint, pas en mode avion.

Avant

Pendant

  • Si tu crains qu'on te le prenne, éteins-le : le mode avion ne suffit pas.
  • Prends les photos depuis l'écran verrouillé, sans déverrouiller.

Après

  • Floute les visages avant de publier.
  • Si on t'a pris le téléphone, même un moment, vérifie-le : étape 2.

D'après le guide de l'EFF (s’ouvre dans un nouvel onglet), pensé pour les États-Unis, et ceux de TeknoKasa (s’ouvre dans un nouvel onglet). Ce n'est pas un conseil juridique : pour savoir quoi faire si on te demande ton téléphone en Espagne, parles-en à ton avocate ou à un collectif antirépression.

Guides de TeknoKasa (Madrid) : verrouillage du téléphone et arrestation (s’ouvre dans un nouvel onglet) Guide de l'EFF pour aller à une manifestation (en anglais) (s’ouvre dans un nouvel onglet)

Alerte d’Apple, Google ou WhatsApp

Une alerte sur ton téléphone ne veut pas dire que tu es infectée.
  1. Ne touche à aucun lien et ne donne aucun code. Dans ces alertes, Apple ne te demande jamais de cliquer sur des liens, d’installer quoi que ce soit ni de donner des mots de passe ou des codes. Si on te le demande, c’est faux.
  2. Vérifie sans passer par le message. Chez Apple, va à la main sur account.apple.com (s’ouvre dans un nouvel onglet) : si elle est réelle, une alerte s’affiche tout en haut. Chez Google ou WhatsApp, ouvre toi-même l’appli ou le site, pas le lien.
  3. Si elle est réelle : elle indique qu’il y a eu une tentative, pas que tu es infectée. N’efface rien, ne restaure pas et ne mets rien à jour.
  4. Demande de l’aide : lignes d’assistance.
1
Étape 1 sur 4 · 5 minutes

Appels et opérateur

Tu vas composer quelques codes et passer un appel.

Urgent. Plus de réseau d’un coup, avec des codes ou des alertes que tu n’as pas demandés ? C’est peut-être un duplicata de SIM.

  • Appelle tout de suite ton opérateur depuis un autre téléphone. Si le numéro court ne marche pas depuis une autre ligne, cherche le numéro long sur son site.
  • Change les mots de passe de ton mail et de ta banque depuis un appareil de confiance.
Duplicata de SIM : ta ligne passe sur une autre SIM. Chez toi, elle est coupée, et tes appels, SMS et codes arrivent à cette personne.

1.1 Regarde s'il y a des renvois

Ouvre l'appli Téléphone, compose le code comme un numéro normal et lance l'appel. Prends une photo ou une capture du résultat avant de changer quoi que ce soit.

Compose étoile dièse 21 dièse : si c'est écrit désactivé, il n'y a pas de renvoi ; si un numéro s'affiche, prends une photo et retire-le
Ce qui peut s'afficher en composant *#21#.
ComposeTe dit si les appels sont renvoyés…
*#21#tous, tout le temps. C'est le plus important.
*#61#quand tu ne réponds pas.
*#62#quand tu n'as pas de réseau ou que ton téléphone est éteint.
*#67#quand tu es déjà en ligne.
On t’appelle, ton téléphone ne sonne pas et l’appel aboutit sur un autre numéro.
Un renvoi envoie tes appels vers un autre numéro.

1.2 Ce que ça veut dire

NormalC'est écrit « désactivé » ou « pas de renvoi »

Il n'y a pas de renvoi. Ça veut dire ça, et rien de plus : ça ne dit rien des applis espionnes ni des interceptions.

Normal*#61#, *#62# ou *#67# affiche un numéro
  • C'est souvent ta messagerie vocale : c'est normal.
  • Demande à ton opérateur si ce numéro est le sien.
  • Sinon, retire-le avec ##61#, ##62# ou ##67#.
DouteUne erreur, ou aucune réponse

Ce n'est pas mauvais signe : avec les appels en 4G (VoLTE), certains codes ne marchent pas. Regarde dans l'appli de ton opérateur ou pose la question par téléphone.

Urgent*#21# affiche un numéro que tu ne connais pas

Tes appels partent vers ce numéro. Ton téléphone ne sonne même pas.

  • Prends l'écran en photo.
  • Compose ##21# pour le retirer.
  • Recompose *#21# : ça doit afficher « désactivé ».
  • Appelle ton opérateur et demande quand il a été activé.
  • Change tes mots de passe importants depuis un autre appareil.

1.3 Retire les renvois dont tu ne veux pas

  • ##21#, ##61#, ##62#, ##67# retirent chacun le leur.
  • ##002# les retire tous d'un coup. Attention, celui de la messagerie vocale aussi : si tu t'en sers, tu devras peut-être le réactiver.

Tu peux aussi vérifier dans les réglages :

  • iPhone : Réglages > Apps > Téléphone > Renvoi d'appel.
  • Android : appli Téléphone, ses paramètres, puis Renvoi d'appel.

L'intox du *#06#. Il paraît que si tu composes *#06# et que rien ne s'affiche, tu es sur écoute. Ce code montre seulement l'IMEI, le numéro de série du téléphone. Il ne détecte rien.

1.4 Appelle ton opérateur

Tu interroges ton opérateur sur les renvois, les duplicatas et les lignes, et il peut te répondre
Ce que ton opérateur peut te dire.
OpérateurTéléphoneHoraires
Movistar1004Tous les jours, de 9 h à 22 h
Vodafone2212324 h/24
Orange1470Du lundi au samedi, de 9 h à 22 h
Yoigo622
622 622 622 depuis un autre opérateur
24 h/24
O21551Tous les jours, de 9 h à 22 h
Digi1200Tous les jours, de 7 h à 24 h

Autre opérateur, ou numéro qui ne répond pas : regarde sur ta facture ou sur son site. Si tu te méfies de ta ligne, appelle depuis un autre téléphone.

Pose ces questions, telles quelles

  1. Y a-t-il un renvoi actif sur ma ligne ? Vers quel numéro ?
  2. Un duplicata de SIM ou un passage en eSIM a-t-il été fait récemment ? Quand et où ?
  3. Y a-t-il d'autres lignes à mon nom, ou une portabilité ou un changement de titulaire en cours ?
  4. Quelles mesures avez-vous contre les duplicatas de SIM ? Je veux les activer.

Profites-en pour changer le code PIN de ta messagerie vocale s'il est encore celui d'origine.

Et si c'est une interception judiciaire

Un tribunal ordonne l'interception, l'opérateur remet une copie secrète et rien ne se voit depuis ton téléphone
Comment fonctionne une interception judiciaire.
  • Ni les codes de renvoi ni un appel à l'opérateur ne la révèlent.
  • Tant qu'elle dure, elle est secrète.
  • Quand elle prend fin, tu as le droit de le savoir par le tribunal, avec des exceptions.
Ce que dit la loi, point par point
  • Les codes de renvoi ne la montrent pas non plus. Ils affichent les renvois normaux de ta ligne. Une interception ne renvoie pas l'appel : le réseau en fait une copie, et la norme technique (3GPP TS 33.106) (s’ouvre dans un nouvel onglet) exige qu'elle n'altère pas tes services et ne donne aucun signe.
  • En appelant, on ne te le dira pas. L'opérateur a l'obligation légale de garder le secret, et il peut être poursuivi pour désobéissance s'il ne le fait pas (LECrim, art. 588 ter e (s’ouvre dans un nouvel onglet)). Un « on ne voit rien d'anormal » ne l'écarte pas.
  • Tant qu'elle dure, elle est secrète : elle est traitée dans un dossier séparé et secret (art. 588 bis d (s’ouvre dans un nouvel onglet)).
  • Une fois terminée, tu as le droit de le savoir. Les parties à la procédure reçoivent une copie des enregistrements et des transcriptions. Et le tribunal doit en informer les personnes qui apparaissent dans les communications interceptées, sauf si c'est impossible, si cela demande un effort disproportionné ou si cela nuit à de futures enquêtes (art. 588 ter i (s’ouvre dans un nouvel onglet)).
  • Si tu penses qu'une procédure est ouverte contre toi, c'est ton avocate qui peut poser la question au tribunal.
  • Données entre les mains de la police : tu peux les demander, mais on peut te les refuser pour ne pas nuire à une enquête. Dans ce cas, tu peux exercer ce droit par l'intermédiaire de l'AEPD, l'autorité espagnole de protection des données (LO 7/2021, arts. 24 et 25 (s’ouvre dans un nouvel onglet)).
Et s’il s’agit d’une perquisition à distance du téléphone (art. 588 septies)2,5 millions · Fortier Europe · fabricant non divulgué

En octobre 2026, le BOE, le journal officiel espagnol, a annoncé (s’ouvre dans un nouvel onglet) que la Guardia Civil avait acheté pour 2 066 115,70 € (environ 2,5 millions TVA comprise) un système de « perquisitions à distance » de téléphones. Il peut « héberger un logiciel » sur Android et iOS pour un « accès transparent » aux contenus et aux communications.

Le marché a été attribué à Fortier Europe, de Boadilla del Monte, par procédure négociée sans publicité et avec une seule offre, au motif de l'exclusivité du fabricant.

Ce qu'on ne sait pas : qui le fabrique, comment il s'installe et si c'est Pegasus. L'avis ne le dit pas, et l'attribuer aujourd'hui à un produit précis relèverait de la spéculation.

La loi (LECrim, art. 588 septies (s’ouvre dans un nouvel onglet)) exige une autorisation judiciaire et le limite à certains délits, pendant un mois renouvelable jusqu'à trois. Auparavant, Citizen Lab a recensé (s’ouvre dans un nouvel onglet) au moins 65 personnes de la mouvance indépendantiste catalane attaquées avec Pegasus et Candiru.

Les données de ta ligne, par écrit

Ce que tu peux demander à l'opérateur, ce sont tes données, grâce au droit d'accès (s’ouvre dans un nouvel onglet) du RGPD (art. 15). Il a un mois pour répondre, et l'AEPD propose un formulaire (s’ouvre dans un nouvel onglet).

2
Étape 2 sur 4 · 15 minutes

Vérifie ton téléphone, ton ordinateur et tes comptes

Tu vas regarder ce qui est ouvert et ce qui est installé.

Si tu as de forts soupçons (alerte de spyware, ou tu es journaliste ou militante et il s'est passé quelque chose de précis) :

  • Ne restaure et n'efface rien : les preuves se perdent.
  • Ne mets pas à jour et, si tu peux, demande avant de redémarrer.
  • Regarder les menus, ça tu peux.
  • Va à l'étape 3.

2.1 Commence par tes comptes

Ton compte connecté à ton téléphone et à ton ordinateur portable ; on ferme une session sur un appareil inconnu
Une session ouverte sur un appareil qui n'est pas le tien.

C’est le plus rapide et c’est ce qui trouve le problème le plus souvent. Fais une capture d’écran, puis ferme ce que tu ne reconnais pas :

  • WhatsApp : Réglages > Appareils connectés. Active aussi Réglages > Compte > Validation en deux étapes.
  • Signal : Réglages > Appareils reliés.
  • Telegram : Paramètres > Appareils.
  • Google : myaccount.google.com/device-activity (s’ouvre dans un nouvel onglet).
  • E-mail : cherche dans les réglages des transferts ou des filtres que tu n'as pas mis toi-même.

Ne scanne pas de QR pour « vérifier » quoi que ce soit si ce n’est pas toi qui as lancé l’association.

Rien de bizarre et on sait toujours ce que tu écris ? Demande de l’aide.

Ensuite, change tes mots de passe depuis un appareil de confiance, pas depuis celui que tu soupçonnes.

Une loupe au-dessus d'un téléphone désigne une appli orange
Il s'agit de chercher ce que tu n'as pas mis toi-même.

2.2 Ce que veut dire ce que tu remarques

Batterie, codes que tu n’as pas demandés, liens bizarres, bruits...
Une batterie qui tient peu, c’est le plus souvent juste une vieille batterie.
Ce que tu remarquesCe que c'est, le plus souvent
Batterie qui tient peu, téléphone chaud, consommation de donnéesUne vieille batterie ou une appli normale. Ça peut être une appli espionne, mais à lui seul, ce signe ne prouve rien. Regarde laquelle consomme dans les réglages de la batterie.
Bruits ou écho pendant les appelsMauvais réseau. Une interception moderne ne s'entend pas.
Codes de vérification que tu n'as pas demandésQuelqu'un essaie d'entrer dans ce compte. Change le mot de passe et active la validation en deux étapes.
Message bizarre avec un lien, même s'il vient de ta banque ou d'« une amie »C’est une arnaque (phishing). Ne l’ouvre pas. Si tu l’as déjà ouvert, garde-le et continue ta lecture.
Quelqu'un sait des choses que tu n'as dites que par téléphoneRegarde d'abord les sessions ouvertes. S'il n'y a rien, passe à l'étape 3.
Alerte officielle d'Apple, de Google ou de WhatsApp sur des attaques de spywareCelle-ci est sérieuse : elle indique qu'il y a eu une tentative, pas que tu es infectée. Seule une analyse peut le confirmer. Étape 3.

Le spyware haut de gamme ne donne aucun signe. Qu'un téléphone marche bien ne l'écarte pas, et qu'il marche mal ne le confirme pas non plus.

Mythes et fausses alertesY compris l'« astuce » d'éteindre son téléphone cinq minutes.
Le chiffrement fonctionne toujours, mais si on te piège avec un QR code, un autre appareil reçoit tes nouveaux messages.

« Éteindre son téléphone cinq minutes par jour le protège. » C'est ce qu'a expliqué Pedro Sánchez (s’ouvre dans un nouvel onglet) en octobre. Il y a du vrai : beaucoup de spywares commerciaux ne survivent pas à un redémarrage, donc redémarrer souvent aide. Mais ça ne corrige pas la faille (s’ouvre dans un nouvel onglet) par laquelle ils sont entrés, et ils peuvent revenir.

« Batterie, chaleur ou clics = sur écoute. » À eux seuls, ces signes ne prouvent rien.

« Une appli dit que je suis propre, donc je le suis. » Ça veut seulement dire qu'elle n'a pas trouvé ce qui est déjà connu. C'est une fausse sécurité.

« Alerte d'Apple = infectée. » Elle indique une tentative (s’ouvre dans un nouvel onglet). La confirmation vient d'une analyse forensique.

« La première chose à faire, c'est de tout formater. » Ça détruit les preuves. Demande d'abord de l'aide.

« Avec Signal, personne ne me lit. » Le chiffrement fonctionne, mais si on te piège pour relier un autre appareil avec un QR code (s’ouvre dans un nouvel onglet), cet appareil reçoit tes nouveaux messages. Ne scanne aucun QR code pour « vérifier » quoi que ce soit si ce n'est pas toi qui as lancé la liaison.

« En mode avion, je suis invisible. » Seul le fait de l'éteindre (s’ouvre dans un nouvel onglet) offre une garantie.

« Je n'ai rien à cacher. » La surveillance touche aussi les personnes à qui tu parles : sources, camarades, famille.

2.3 Choisis ton appareil et touche pour ouvrir les étapes

iPhone, 7 étapes
Une appli espionne ou un spyware envoie tes messages, tes photos et ta position à une autre personne, sans que tu le voies.
  1. Regarde si Apple t'a prévenue. Les notifications de menace s'affichent sur l'écran verrouillé et dans Réglages, dans un e-mail de threat-notifications@email.apple.com et dans un avis tout en haut de account.apple.com (s’ouvre dans un nouvel onglet). Dans ces messages, Apple ne te demande jamais de cliquer sur des liens, d'installer quoi que ce soit ni de donner des mots de passe ou des codes. Si on te le demande, c'est un faux. Si c'est un vrai, passe à l'étape 3.
  2. Contrôle de sécurité : Réglages > Confidentialité et sécurité > Contrôle de sécurité > Gérer les partages et les accès. Tu y vois qui a accès à ta position et à tes affaires, et quels appareils sont sur ton compte. « Réinitialisation d'urgence » coupe tous les accès d'un coup.
  3. Profils : Réglages > Général > VPN et gestion de l'appareil. Si rien n'apparaît, tu n'en as aucun d'installé, ce qui est normal sur un téléphone personnel. Si tu vois un profil que tu ne reconnais pas, prends une photo et demande conseil avant de l'effacer. Si le téléphone appartient à ton entreprise ou à ton établissement scolaire, le profil vient peut-être de là.
  4. Face ID : Réglages > Face ID et code. S'il y a une « seconde apparence » qui n'est pas la tienne, une autre personne peut le déverrouiller. Change aussi le code si quelqu'un le connaît.
  5. Applis : descends jusqu'à la Bibliothèque d'apps, écris dans le champ de recherche et parcours la liste. Cherche ce que tu ne te souviens pas d'avoir installé.
  6. Mets à jour : Réglages > Général > Mise à jour logicielle. Sans soupçon sérieux, c'est l'une des meilleures choses à faire.
  7. Si tu cours un risque élevé : Réglages > Confidentialité et sécurité > Mode Isolement. Il limite pas mal de choses sur le téléphone, mais c'est sa défense la plus solide contre le spyware payant.
↑ Revenir au choix de l’appareil
Android, 7 étapes
Une appli espionne ou un spyware envoie tes messages, tes photos et ta position à une autre personne, sans que tu le voies.

Les menus changent selon la marque. Si tu ne trouves pas quelque chose, utilise la recherche en haut des Paramètres.

  1. Play Protect : dans le Play Store, icône de ton profil > Play Protect > Paramètres. Vérifie qu'il est toujours activé et lance une analyse. S'il est désactivé et que ce n'est pas toi qui l'as fait, c'est mauvais signe.
  2. Accessibilité : Paramètres > Accessibilité, dans la partie des applis installées ou téléchargées. Cette autorisation permet de lire l'écran : c'est la préférée des applis espionnes. S'il y en a une que tu ne connais pas, méfiance.
  3. Administrateurs : dans Paramètres > Sécurité, cherche « administration de l'appareil ». Sur un téléphone personnel, il ne devrait y avoir que ce qui vient de Google ou de la marque.
  4. Autorisations spéciales : dans Paramètres > Applis > Accès spéciaux des applis, regarde « Accès aux notifications » et « Installation d'applis inconnues ».
  5. Applis : dans Paramètres > Applis, affiche-les toutes, y compris celles du système. Méfie-toi des noms vides ou génériques, comme « Sync », « Service » ou « System », sans icône et avec des autorisations pour le micro, la position ou les SMS. Dans le doute, cherche-la depuis un autre appareil.
  6. Débogage USB : s'il est activé dans Options pour les développeurs et que ce n'est pas toi qui l'as fait, c'est un signe.
  7. Si tu cours un risque élevé : dans Paramètres > Sécurité et confidentialité > Autres paramètres > Protection Avancée, si ton téléphone l'a (Android 16 ou plus récent).
↑ Revenir au choix de l’appareil
Ordinateur, 5 étapes
  1. Contrôle à distance : cherche dans tes programmes TeamViewer, AnyDesk ou des logiciels similaires que tu n'as pas installés toi-même. Ils sont normaux, mais ils permettent de piloter ton ordinateur de l'extérieur. Windows : Paramètres > Applications > Applications installées. Mac : dossier Applications.
  2. Ce qui se lance tout seul : Windows : Gestionnaire des tâches > Applications de démarrage. Mac : Réglages Système > Général, dans les éléments d'ouverture. Cherche ce que tu ne reconnais pas.
  3. Gestion à distance sur Mac : Réglages Système > Général > Gestion des appareils. Si le Mac est personnel, rien ne devrait apparaître.
  4. Analyse : sous Windows, Sécurité Windows > Protection contre les virus et menaces, puis lance une analyse complète. Regarde dans les extensions du navigateur s'il y en a une que tu n'as pas ajoutée.
  5. Mets à jour le système et le navigateur, sauf si tu as de forts soupçons.
Ton ordinateur génère un rapport et tu décides à qui le donner

Si tu veux aller un peu plus loin, Zero Breach Toolkit cherche des traces de spywares connus sur l'ordinateur et n'envoie rien sur internet. Il ne regarde que cet ordinateur : il ne te dit pas si le téléphone est infecté.

↑ Revenir au choix de l’appareil

2.4 Que faire de ce que tu as vu

NormalTout est normal

Ça ne garantit pas que tu sois propre. Si tu n'as aucune raison de penser qu'on te vise, fais tes mises à jour, utilise des mots de passe différents et la validation en deux étapes.

DouteUne session ou une appli bizarre

Fais des captures d’écran avec la date et ferme cette session. Si ce n’est pas clair, va demander de l’aide.

UrgentAlerte officielle, profil inconnu ou raisons sérieuses de penser qu'on te vise

Arrête-toi là. N'efface rien, ne restaure rien et demande de l'aide.

2.5 Complique-leur la tâche pour la prochaine fois

Routine de 10 minutesÀ faire de temps en temps.
Redémarre, mets à jour et vérifie les appareils reliés
La routine, en trois étapes.
  1. Redémarre le téléphone.
  2. Installe les mises à jour en attente, du système et des applis.
  3. Passe en revue les appareils reliés à WhatsApp, Signal, Telegram et Google.
  4. Utilise un long code de déverrouillage, pas un schéma ni quatre chiffres.
  5. Efface les applis dont tu ne te sers plus.
Blinde tes comptesMots de passe, clés et vol du téléphone.
Une passkey ou une clé physique protègent mieux qu’un SMS.
Guide pas à pas : Digital First Aid Kit (s’ouvre dans un nouvel onglet)
3
Étape 3 sur 4

Demande de l'aide

Tu peux venir directement ici, sans faire ce qui précède.

Tu n’as pas à régler ça toute seule.

3.1 Lignes d'aide

QuiPour quoi
Access Now, Digital Security Helpline (s’ouvre dans un nouvel onglet)Militantes, journalistes, défenseuses des droits humains et collectifs. Gratuit, 24 h/24, y compris en espagnol. Ils vérifient d'abord qui tu es.
Amnesty International, Security Lab (s’ouvre dans un nouvel onglet)Journalistes, militantes et organisations exposées à des attaques ciblées.
INCIBE (s’ouvre dans un nouvel onglet) : 017
  • Pour tout le monde : arnaques et comptes volés.
  • Gratuit et confidentiel, de 8 h à 23 h.
  • Aussi sur WhatsApp (900 116 117) et Telegram (@INCIBE017).
  • C'est un organisme public : garde-le en tête si ton cas est politique.

3.2 Guides à suivre, en espagnol

3.3 Points de rencontre

Nous préparons des points pour vérifier les téléphones en personne. Nous les publierons ici.

Deux personnes à une table avec un téléphone entre elles
On regarde devant toi. Ton téléphone ne te quitte pas.
Si tu vas à un point de rendez-vous
  • Apporte ton téléphone chargé, son câble, ton code de déverrouillage en tête et une liste de ce qui t'est arrivé, avec les dates.
  • Tu as le droit de voir tout ce qui est fait et de dire non.
  • Personne n'a besoin de tes mots de passe. C'est toi qui les saisis.
  • Demande quelles données sont copiées, où elles sont stockées et quand elles sont effacées.
  • Méfie-toi de qui te propose sur internet de « nettoyer ton téléphone » : c'est une arnaque classique.
Comment noter ce qui se passeUn modèle pour ne pas perdre les preuves.
Note la date et l'heure, garde des captures et consigne tout
Ce qu'il faut noter pour chaque incident.

Ça te sert à toi et à la personne qui t'aide. Recopie ceci sur papier ou sur un appareil de confiance, avec une ligne par chose bizarre :

Date et heure :
Appareil ou compte :
Ce qui s'est passé :
Numéro, e-mail ou lien concerné :
Capture enregistrée (où) :
À qui je l'ai dit :
  • Fais les captures avant de bloquer ou de signaler un compte : il peut disparaître ensuite.
  • N'ouvre pas les liens suspects pour voir ce que c'est. Copie le texte sans cliquer.
  • Garde une copie chiffrée. Si c'est trop lourd pour toi, demande à une personne de confiance de s'en occuper.
  • Pour porter plainte en Espagne, ce guide (s’ouvre dans un nouvel onglet) explique comment présenter les preuves.
4
Étape 4 sur 4 · facultative

Zone techie : le labo

Pour les hacklabs et pour qui veut apprendre.

Cette partie sert à monter le labo. Tu n'en as pas besoin pour vérifier ton téléphone. Les commandes ne réparent rien à elles seules : un résultat « propre » ne veut pas dire propre, et une correspondance ne veut pas dire infection.

Consentement.

  • Seulement ton téléphone, ou celui d'une personne qui te le demande et qui est là.
  • Analyser celui d’une autre personne sans son accord peut être un délit.
  • La licence de MVT l'interdit expressément.

Logos de leurs projets respectifs, seulement pour les identifier. Ce hacklab n'a aucun lien avec eux.

À quoi sert chaque outil

OutilCe qu'il faitPour qui
Zero Breach ToolkitCherche des traces publiées de spyware sur les ordinateurs, dans les sauvegardes d'iPhone et dans ce qui est récupéré sur Android. Il a une interface graphique et donne le résultat en langage courant.Premier filtre, peu de connaissances techniques requises.
MVT (Amnesty)Analyse forensique : extrait des journaux et les compare à des listes d'indicateurs.Terminal. Le projet lui-même dit qu'il n'est pas fait pour l'autodiagnostic.
PiRogue (PTS)Un Raspberry Pi sert de routeur et analyse le trafic du téléphone. Il ne regarde pas à l'intérieur de l'appareil : il regarde à qui celui-ci parle.Pour qui s'y connaît en réseaux.

Ces outils se complètent : les deux premiers regardent ce qui reste stocké sur l'appareil, et PiRogue ce qu'il fait sur le réseau pendant que tu l'observes.

Comment monter le posteLa première chose à faire, avant de toucher au moindre téléphone.
  • Un ordinateur portable de confiance avec le disque chiffré, dédié si possible. Si l'ordinateur est compromis, tout l'est.
  • Les sauvegardes contiennent toute la vie de la personne : messages, photos, historique. Elles restent en local et chiffrées, et sont effacées quand elle le décide.
  • Rien sur le cloud ni sur des services d'analyse en ligne sans son autorisation.
  • Mets à jour les indicateurs le jour même. Avec de vieilles listes, le résultat ne vaut rien.
  • Face à un résultat positif crédible, arrête de toucher à quoi que ce soit et transmets le cas à Security Lab ou à Access Now.
Triage d’un casQuoi faire et dans quel ordre.

Ordre proposé par ce hacklab à partir des sources. Aucune n’impose d’ordre unique.

  • Avant de toucher à quoi que ce soit. Consentement explicite, qui elle craint et depuis quand. Dates : alerte d’Apple, message bizarre, arrestation, téléphone retenu. Sans hypothèse ni dates, la chronologie ne dit rien.
  • Risque élevé ou alerte officielle. Passe directement à Access Now ou à Security Lab. Pas besoin d’analyser d’abord pour demander de l’aide.
  • N’y touche pas plus que nécessaire. C’est notre critère : ni réinitialiser, ni mettre à jour, ni désinstaller avant d’acquérir. L’historique de Safari dure quelques mois, et réinitialiser les réglages peut effacer des traces.
  • Indicateurs à jour, sur ta machine et avant de brancher le téléphone.
  • Acquiers d’abord, analyse ensuite. Ce qui est acquis peut être réanalysé quand de nouveaux indicateurs sortent. Le téléphone, lui, ne sera plus dans le même état.
  • Calcule les hashes dès que c’est terminé.
  • Analyse et regarde d’abord la couverture : ce qui n’a pas pu être lu. Ensuite les alertes.
  • Le réseau à la fin. PiRogue demande des jours d’utilisation en wifi seulement. Ça sert si tu soupçonnes une activité en cours, et une capture propre ne dit rien du passé.

iPhone

pymobiledevice3 usbmux list
pymobiledevice3 lockdown info
mkdir -p ./caso/copia
pymobiledevice3 backup2 backup --full ./caso/copia/

Toujours chiffrée : sans chiffrement, il manque l’historique et l’état de Safari, et les appels. Si tu soupçonnes un accès physique, une copie ne suffit pas car elle ne contient pas ces journaux : il faut un sysdiagnose ou une extraction, de préférence entre des mains expertes. mvt-ios check-sysdiagnose sans plugins ne sort que des données sur l’appareil, et il le signale.

Android

sha256sum -c --ignore-missing checksums.txt
chmod +x androidqf_linux_amd64_1.8.3
./androidqf_linux_amd64_1.8.3 -output ./caso

Réponses raisonnables. Backup : Only SMS. Apps : Only non-system packages. Retirer celles signées avec un certificat de confiance : No. Hash sur le téléphone : No, car c’est lent et ça peut arrêter le collecteur. Intrusion Logs : Yes seulement s’ils étaient activés.

Intrusion Logs : DNS et connexions par appli, lancements de processus, commandes ADB. Android 16 ou supérieur, pour l’instant sur Pixel d’après Security Lab (mai 2026), avec la Protection Avancée. Ils ne sont pas rétroactifs : il faut les activer avant. Ils contiennent l’historique de navigation.

Sources : MVT iOS (s’ouvre dans un nouvel onglet), MVT Android (s’ouvre dans un nouvel onglet), AndroidQF (s’ouvre dans un nouvel onglet), Security Lab (s’ouvre dans un nouvel onglet), Zero Breach (s’ouvre dans un nouvel onglet).

Chaîne de possession et hashesQui a touché quoi, quand et avec quoi.

Ça sert à deux choses : qu’une autre analyste puisse se fier à ta copie et, si l’affaire finit devant un tribunal, démontrer qu’elle n’a pas été altérée. Sur sa valeur légale, demande à une avocate avant de commencer.

Registre

cas : 2026-001          personne : (pseudonyme ; la clé, à part)
consentement : date, portée, qui le recueille
appareil : modèle, OS, correctif, déverrouillé par elle ?
quand      qui     rôle       action                hash
2026-11-06 ana     analyste   reçoit et copie       -
2026-11-06 ana     analyste   sha256 de la copie    ab12...
2026-11-07 ana     analyste   remet à ligne d'aide  ab12...

Un identifiant par appareil, une ligne par personne qui le manipule, un scellé si tu le gardes. Heure en UTC. Note aussi les versions des outils.

iPhone

cd ./caso/copia/<UDID>
find . -type f -print0 | sort -z | xargs -0 sha256sum > ../copia.sha256
sha256sum -c --quiet ../copia.sha256

decrypt-backup et check-backup acceptent --hashes : l’option enregistre le SHA-256 de chaque fichier dans info.json et affiche le hash de ce info.json. Note-le.

Android

AndroidQF laisse dans le ZIP un hashes.csv (entrée et SHA-256 du contenu, sans en-tête) et acquisition.json avec l’état de chaque module.

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

Si la vérification n’affiche rien, tout correspond. hashes.csv est dans l’archive elle-même et ne protège pas contre quelqu’un qui referait le ZIP : d’où le hash externe, gardé ailleurs. Un module partial ou failed veut dire acquisition incomplète, et ça va dans le rapport.

Chiffrer dès l’origine

age-keygen -o privada.txt     # sur une autre machine ; elle ne voyage pas avec toi
# la clé publique (age1...) va dans key.txt, à côté du binaire
./androidqf_linux_amd64_1.8.3 -output ./caso
age --decrypt -i privada.txt -o <UUID>.zip <UUID>.zip.age

Avec key.txt, AndroidQF écrit <UUID>.zip.age et ne laisse pas de ZIP en clair. Celle qui transporte l’ordinateur portable ne peut pas déchiffrer, même sous la contrainte. Sans chiffrement, une panne peut laisser des fichiers temporaires en clair.

Partager et effacer

  • Demande à la ligne d’assistance comment elle veut le recevoir.
  • Indique avec TLP jusqu’où ça se partage et avec PAP ce qu’on peut en faire. PAP:RED : rien de détectable depuis l’extérieur.
  • Signature séparée pour démontrer l’origine : gpg --detach-sign caso.sha256.
  • Pour effacer, PTS indique shred -u. Sur SSD, ne t’y fie pas : ce qui protège, c’est le disque chiffré.

Sources : PTS g6 (s’ouvre dans un nouvel onglet), PTS g4 (s’ouvre dans un nouvel onglet), Colander : chaîne de possession (s’ouvre dans un nouvel onglet), AndroidQF : archives (s’ouvre dans un nouvel onglet).

Zero Breach ToolkitPremier filtre. Avec interface graphique.

Projet très jeune et anonyme. Le dépôt a été créé en octobre 2026, son README dit que le projet est anonyme et nous n’avons trouvé aucun audit indépendant. Les versions 2.0.0 à 2.0.2 pouvaient afficher du vert sans avoir fini de vérifier un téléphone : recommence avec la dernière version stable. Il existe des dépôts aux noms similaires. Télécharge uniquement depuis interplains/Zero-Breach-Toolkit (s’ouvre dans un nouvel onglet).

Installation. Télécharge le programme pour ton système (Windows, Mac ou Linux) et ouvre-le. Comme il n'est pas encore signé, le système et certains antivirus afficheront un avertissement. Vérifie d'abord son origine :

gh attestation verify <fichier> --repo interplains/Zero-Breach-Toolkit
gpg --verify SHA256SUMS.txt.asc SHA256SUMS.txt
sha256sum -c SHA256SUMS.txt

Mets à jour les listes d'indicateurs avant de lancer la vérification. L'analyse n'envoie rien sur internet.

Ordinateur. Ferme les navigateurs et les applis de messagerie, choisis la vérification « Standard » (15 ou 20 minutes) et clique sur « Start check ».

iPhone. On analyse une sauvegarde sur l'ordinateur, jamais sur le téléphone lui-même. Branche-le, touche Se fier et fais une sauvegarde en cochant « Chiffrer la sauvegarde locale » (Finder sur Mac, Appareils Apple sur Windows). Dans le programme, choisis « A phone » et fais glisser le dossier de la sauvegarde, qui se trouve ici :

Mac:     ~/Library/Application Support/MobileSync/Backup
Windows: %USERPROFILE%\Apple\MobileSync\Backup

Android. Active les Options pour les développeurs (touche sept fois Numéro de build) et le Débogage USB. Branche avec un câble de données et autorise l'ordinateur. Dans le programme, « A phone » et l'option de récupération depuis Android par USB. Garde le téléphone déverrouillé. À la fin, coupe le Débogage USB.

La collecte guidée d’Android est expérimentale. Réponds : Backup, Only SMS ; Apps, Only non-system ; Remove trusted, No ; le reste, No. Accepte « Back up my data » sur le téléphone.

Comment le lire

NormalVert : « No known indicators found »

Rien des listes publiques n'apparaît aux endroits qu'il a pu lire. Regarde la liste de ce qu'il n'a pas pu vérifier. Un spyware sans traces publiées n'apparaît pas.

Doute« Something matched »

Ça veut dire « regarde de plus près », pas « tu es infectée ». N'efface rien et ne visite pas l'adresse indiquée. Garde le rapport et transmets-le à la ligne d'aide. Un domaine partagé peut donner des correspondances innocentes.

MVT (Mobile Verification Toolkit)Analyse forensique en terminal.
On analyse une copie chiffrée, pas le téléphone.

Il faut Python 3.11 ou plus récent, et Linux ou Mac. Sous Windows, par WSL. Sa licence lui est propre et restreint l'usage sans consentement : ce n'est donc pas un logiciel libre au sens strict.

sudo apt install python3 python3-venv python3-pip sqlite3 libusb-1.0-0 pipx
pipx ensurepath
pipx install mvt
mvt download-iocs

Après pipx ensurepath, ouvre un autre terminal. MVT demande Python 3.11 : Ubuntu 22.04 ne convient donc pas tel quel.

Par défaut, MVT sort sur le réseau : il suit les liens raccourcis, ce qui peut toucher l’infrastructure du lien reçu. Pour le couper :

export MVT_NETWORK_ACCESS_ALLOWED=false

iPhone

Avec une sauvegarde chiffrée, on voit plus de journaux, comme l'historique de Safari. Tu peux la faire depuis Finder ou Appareils Apple, ou en terminal :

sudo apt install usbmuxd
pipx install pymobiledevice3
pymobiledevice3 lockdown pair
pymobiledevice3 backup2 encryption on 'MOTDEPASSE'
pymobiledevice3 backup2 backup --full ./copia/

S’il y avait déjà un mot de passe de sauvegarde, utilise celui-là. Réinitialiser les réglages, seulement en dernier recours : ça peut effacer des traces.

Ce mot de passe reste dans l'historique du shell : efface-le ensuite. Garde le téléphone déverrouillé. La sauvegarde apparaît dans un sous-dossier portant l'UDID du téléphone. Pour la déchiffrer et l'analyser :

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 n'analyse plus directement par ADB. La récupération se fait avec AndroidQF (s’ouvre dans un nouvel onglet) : active le Débogage USB, autorise l'ordinateur, exécute le binaire et réponds à ses questions. Ensuite :

unzip <UUID>.zip -d adq/
mvt-android check-androidqf --output ./salida ./adq

Extrais toujours le ZIP d’AndroidQF et utilise --output. Dans un test avec des données synthétiques, passer le ZIP directement a donné 0 alerte, sans avertissement clair. Ça n’a pas été confirmé avec un vrai téléphone.

L’option --virustotal est désactivée par défaut. Elle envoie les hashes des APK hors système et nécessite MVT_VT_API_KEY. Laisse-la désactivée, sauf si la personne l’accepte.

Documentation de MVT (s’ouvre dans un nouvel onglet)

PiRogue Tool SuiteUn Raspberry Pi qui analyse le trafic.
Le téléphone se connecte à la Raspberry Pi et, sur l’ordinateur portable, tu vois à qui il parle.

C'est un Raspberry Pi qui crée un wifi. Tu y connectes le téléphone et le Pi analyse en direct tout le trafic avec Suricata, à l'aide des règles ProofPoint ET Open et des indicateurs de stalkerware d'Echap.

Matériel : pour avoir des alertes, Raspberry Pi 4 de 4 ou 8 Go : la 3B, la 3B+ et la Pi 4 de 1 ou 2 Go ne font pas tourner Suricata. Elle gère 2 ou 3 téléphones. La Pi 5 utilise une image expérimentale à part. Ça peut aussi être un PC ou une machine virtuelle. Alimentation, microSD de 32 Go (64 Go pour les longues captures) et câble réseau.

Installation

Télécharge l'image de PiRogue OS depuis le guide officiel (s’ouvre dans un nouvel onglet), vérifie le hash et grave-la avec Balena Etcher. Branche le Pi par câble et connecte-toi :

sha256sum PiRogue-OS-*.img.xz
# mot de passe initial : raspberry, change-le à la connexion
ssh pi@pirogue.local
sudo apt update
sudo apt dist-upgrade -y
sudo apt install pirogue-base -y
sudo reboot

Pendant l'installation, réponds Non à l'enregistrement des règles de pare-feu IPv4 et IPv6, et Oui à la capture sans root. Récupère ensuite la clé du wifi et celle du tableau de bord (en version 2.x, elles sont aléatoires ; la 1.x est différente, le guide l'explique) :

pirogue-admin-client wifi get-configuration
pirogue-admin-client dashboard get-configuration

Le tableau de bord est sur https://pirogue.local/dashboard, avec un certificat autosigné. La télémétrie est activée d’origine : elle envoie chaque jour l’ID, l’ASN, le pays et le système d’exploitation. Coupe-la avant d’y connecter le téléphone de qui que ce soit :

sudo pirogue-telemetry config disable

Pour MVT, suis docs.mvt.re (s’ouvre dans un nouvel onglet) : le guide g7 de PTS utilise des commandes déjà supprimées.

Capture

Lance la capture avant d’allumer le wifi du téléphone, sinon tu perdras les premières connexions. Sur le téléphone : mode avion, wifi seulement et pas de VPN. Les flux apparaissent dans le tableau de bord au bout de 4 minutes environ. Laisse tourner environ 3 jours avec un usage normal. Le tableau de bord garde 5 jours.

Pour capturer dans un fichier et l'ouvrir ensuite dans Wireshark :

sudo tcpdump -i wlan0 -w $(date +%Y%m%d%H%M)_captura.pcap
scp pi@pirogue.local:~/*_captura.pcap .

Ce que ça veut dire

  • Alertes de sécurité : regarde l'heure, la gravité, le type de menace, le nom de la règle et les IP source et destination. Beaucoup sont du bruit, comme la publicité ou les traqueurs. Lis la règle avant de tirer des conclusions.
  • Liste des flux et carte : cherche des domaines bizarres, de gros envois de données à des heures creuses ou des connexions régulières quand le téléphone est au repos. Vérifie à qui appartient chaque destination. La plupart seront Apple, Google et les applis habituelles.
  • Limites : presque tout est chiffré, donc tu vois à qui il se connecte et le volume échangé, pas le contenu. Suricata ne détecte que ce qui est déjà connu. L'absence d'alertes ne garantit rien.
  • Vie privée : la capture dresse le portrait de la vie de la personne. Elle se traite comme toute autre sauvegarde : en local, chiffrée et effacée à la fin.

Le projet lui-même recommande que, dans les situations à risque, l'analyse soit suivie par des professionnelles. Guides de PTS (s’ouvre dans un nouvel onglet)

Indicateurs : d’où ils viennent et comment s’en servirSTIX2, mise à jour et limites.

Un indicateur est une donnée précise publiée après une enquête : domaine, nom de processus, hash, ID d’appli. S’il n’apparaît pas, ça veut seulement dire qu’il n’apparaît pas.

mvt download-iocs                  # sous Linux : ~/.local/share/mvt/indicators ; chargés automatiquement
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      # sur des résultats déjà extraits

Sur Android, pour appliquer de nouveaux indicateurs, relance check-androidqf sur l’acquisition enregistrée.

Sans réseau. MVT résout les liens raccourcis avec une requête HEAD et vérifie la version et les indicateurs :

export MVT_NETWORK_ACCESS_ALLOWED=false
mvt-ios --disable-update-check --disable-indicator-update-check check-backup ...

Ton propre STIX2

MVT implémente un sous-ensemble : une valeur par motif, sans expressions booléennes. Types : 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. Chaque module n’utilise que ceux qui le concernent.

{"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"}
]}

La collection prend le nom de l’objet malware et il apparaît dans l’alerte. Colander peut aussi exporter un flux STIX2.

Sources : MVT : IOCs (s’ouvre dans un nouvel onglet), PTS g7 (seulement la partie Colander) (s’ouvre dans un nouvel onglet).

Comment lire la sortie de MVTLes vrais fichiers et ce que veut dire chaque module.

D’abord : a-t-il lu quelque chose ?

grep -E 'not found|ERROR|WARNING' salida/command.log
jq -r '.[]|select(.missing==true)|.relative_path' salida/manifest.json | head

Un module qui ne trouve pas son fichier finit par dire no detections, exactement comme un module propre. Sur iPhone, "missing": true marque ce que la copie n’a pas acquis. Avec AndroidQF, extrais le ZIP et passe le dossier : dans notre test avec un ZIP synthétique, le passer directement a donné 0 alerte.

Les fichiers

  • alerts.json : toutes les alertes. Commence ici. N’existe que s’il y en a eu.
  • alerts_timeline.csv : les alertes par date. Remplace l’ancien timeline_detected.csv.
  • timeline.csv : tout, par date. C’est ici qu’on comprend une alerte : ce qui s’est passé avant et après. iOS en UTC ; Android, heure locale.
  • <módulo>.json et <módulo>_detected.json : ce qui a été extrait et ce qui correspond.
  • urls.json : liens de SMS, iMessage et WhatsApp, avec leur destination si elle a été résolue.
  • info.json : version de MVT, date, indicateurs utilisés et, avec --hashes, les hashes.
  • command.log : journal complet. Il accompagne le rapport.

Niveaux

CRITICAL est, en général, une correspondance avec un indicateur : regarde matched_indicator. HIGH : par exemple, VirusTotal. MEDIUM est souvent une heuristique : une appli installée via ADB, une redirection rapide, un réglage. INFO et LOW donnent du contexte. MVT le dit dans sa sortie : seule la revue experte confirme, et l’absence d’alertes n’est pas un certificat de bonne santé.

jq -r '.[]|[.level,.module,.event_time,.message]|@tsv' salida/alerts.json | sort
jq '.[]|select(.level=="CRITICAL")|.matched_indicator' salida/alerts.json

iPhone : les modules qui comptent

  • datausage : processus ayant une activité réseau, dans DataUsage.sqlite. N’enregistre pas le trafic wifi. Présent dans la copie. netusage seulement dans le système de fichiers.
  • os_analytics_ad_daily : utilisation de données par processus, une autre source pour dater des exécutions.
  • safari_history, safari_browser_state : seulement avec une copie chiffrée. Signale les redirections HTTP vers un autre domaine en moins d’une seconde.
  • webkit_session_resource_log, webkit_resource_load_statistics : domaines chargés, y compris intermédiaires.
  • sms, sms_attachments, whatsapp : liens et pièces jointes.
  • id_status_cache : comptes iMessage et FaceTime consultés. Vide ou absent depuis iOS 14.7.
  • configuration_profiles, profile_events, applications, tcc : profils, applis hors App Store, autorisations.
  • global_preferences : si le mode Isolement est actif. backup_info : modèle et version.
  • manifest : index de la copie, avec chemins et dates.
  • Seulement avec le système de fichiers : shutdown_log, cache_files, analytics, safari_favicon, webkit_indexeddb, webkit_local_storage.

Android : les modules qui comptent

  • aqf_packages : compare le nom, le hash et le certificat. Signale les applis installées par navigateur ou ADB, les paquets de root et la sécurité désactivée.
  • aqf_settings : Play Protect coupé, accessibilité, rapports désactivés. Quand Android l’enregistre, il dit qui a changé chaque réglage.
  • aqf_get_prop : correctif de sécurité. root_binaries, mounts : traces de root.
  • aqf_processes : lit ps.txt, mais AndroidQF 1.8.3 écrit processes.json. En attendant de tirer ça au clair, vérifie ce fichier à la main.
  • dns_event, connect_event, security_event : Intrusion Logs, s’il y en a. DNS et connexions comportent package_name.

Sources : MVT : registres iOS (s’ouvre dans un nouvel onglet), Intrusion Logs (s’ouvre dans un nouvel onglet), code de MVT (s’ouvre dans un nouvel onglet).

Traces de Pegasus selon AmnestyCe qui est documenté jusqu’en 2021. Pour comprendre, pas pour diagnostiquer.

Lis ça comme de l’histoire documentée. Le rapport date de 2021 et les traces changent. Chercher ces noms à la main n’est pas une méthode : c’est à ça que servent les indicateurs. Ce qui est utile, c’est la logique : plusieurs traces indépendantes qui concordent dans le temps avec l’histoire de la personne.

Processus

iOS garde les processus ayant une activité réseau dans DataUsage.sqlite (présent dans la copie) et netusage.sqlite (absent). Seuls apparaissent ceux qui ont utilisé le réseau. Amnesty a trouvé un processus bh juste après des visites à des domaines d’installation de Pegasus, et a vérifié qu’aucun binaire légitime ne portait ce nom dans les versions récentes d’iOS de l’époque.

La plupart imitent de vrais services : fmld pour fmfd, aggregatenotd pour aggregated, launchafd pour launchd, nehelprd pour nehelper, roleaccountd pour xpcroleaccountd. D’où l’importance de la graphie exacte.

jq -r '.[]|select(.bundle_id==null or .bundle_id=="")|[.first_isodate,.isodate,.proc_name]|@tsv' salida/datausage.json | sort -u

D’après MVT, les processus sans bundle_id valide peuvent mériter de l’attention. C’est une liste à recouper, pas un résultat.

Enregistrements à moitié effacés

Pegasus a effacé des noms de ZPROCESS sans effacer les lignes de ZLIVEUSAGE : il reste des lignes d’utilisation qui pointent vers un processus inexistant. Amnesty l’a toujours vu avec d’autres indicateurs, et jamais sur les iPhone propres qu’elle a analysés. Ça sert à dater. Ce n’est pas une preuve à soi seul.

jq -r '.[]|select(.proc_name==null or .proc_name=="")|[.live_isodate,.live_proc_id,.wwan_in,.wwan_out]|@tsv' salida/datausage.json

# directement sur la copie déchiffrée ; fichier 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;

Redirections de Safari

Dans l’injection réseau, la personne demandait un site normal et le navigateur finissait sur un autre : une visite sur Yahoo a sauté vers bun54l2b67.get1tn0w.free247downloads[.]com:30495/szev4hz. Ce qui attirait l’attention : le sous-domaine de quatrième niveau, le port élevé et le chemin aléatoire.

  • L’historique de Safari dure quelques mois et a pu être purgé. Amnesty a trouvé les mêmes domaines dans Favicon.db, que MVT ne lit que dans le système de fichiers.
  • Safari ne semble pas garder la chaîne complète : les domaines intermédiaires apparaissent dans les Session Resource logs (webkit_session_resource_log).
  • Ça arrive aussi hors du navigateur : un cas s’est produit en prévisualisant un lien dans l’appli Twitter.

Autres pistes du rapport

  • Library/Preferences/com.apple.CrashReporter.plist dans RootDomain : apparaît avec des infections, d’après Amnesty probablement pour couper les rapports de plantage vers Apple. Une piste, pas un indicateur.
  • Requêtes sur des comptes iMessage inconnus, dans idstatuscache, peu avant les processus. Vide ou absent depuis iOS 14.7.
  • D’après Amnesty, Pegasus semblait avoir cessé d’être persistant : le binaire ne se récupère pas sur le disque.
jq -r '.[]|select(.relative_path|test("CrashReporter"))|[.domain,.relative_path,.modified]|@tsv' salida/manifest.json

Android : Amnesty dit qu’il y a nettement moins de traces accessibles que sur iOS, donc l’absence de trace pèse encore moins.

Source : Amnesty : Forensic Methodology Report (s’ouvre dans un nouvel onglet).

Captures et règles SuricataDu tableau de bord au pcap.

NFStream agrège les paquets en flux et classe avec nDPI. Suricata alerte avec des règles. Les deux écrivent dans InfluxDB et Grafana l’affiche. Le tableau de bord efface au bout de 5 jours : exporte avant.

Capture

tmux                                                    # pour qu’elle ne meure pas avec le SSH
sudo tcpdump -i wlan0 -w $(date +%Y%m%d%H%M)_captura.pcap
# maintenant, wifi du téléphone. Environ 3 jours d’usage normal. Ctrl+C pour arrêter.
sha256sum *_captura.pcap

Exporter alertes et flux

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

Flux : requested_server_name, dst_ip, application_name, src2dst_bytes, dst2src_bytes, community_id. Alertes : alert_signature, alert_signature_id, alert_severity, community_id. Les deux tables ont community_id : utilise-le pour recouper une alerte avec son flux.

Regarder le pcap sans passer paquet par paquet

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
  • Sors les domaines uniques et enlève ce que tu reconnais : Apple, Google, les applis de la personne. Regarde ce qui reste.
  • Cherche une régularité quand le téléphone ne sert pas, et des envois disproportionnés : src2dst_bytes élevé.
  • Le pays du serveur ne tranche rien à lui seul. PTS le considère en lien avec la personne et son modèle de menace.
  • Avec du DNS chiffré, tu verras moins de noms. Une IP dans le cloud ne dit pas non plus à qui elle appartient.

Règles

Elles sont dans /var/lib/suricata/rules/suricata.rules et se mettent à jour chaque jour : ET Open et celles de PTS (s’ouvre dans un nouvel onglet) à partir d’Echap. Suricata tourne en mode IDS : il prévient, il ne bloque pas. Face à une alerte, cherche sa règle et lis-la :

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;)

C’est une correspondance de nom dans une requête DNS, et rien de plus. reference dit d’où ça vient et classtype comment c’est classé.

Pour ajouter des règles, ne modifie pas le fichier, il est écrasé. Publie-les sur une URL :

sudo suricata-update add-source MIAS https://ejemplo.org/mias.rules
sudo suricata-update
sudo suricatasc -c reload-rules

Pour réanalyser un pcap avec les règles actuelles :

mkdir -p suri/
sudo suricata -r c.pcap -S /var/lib/suricata/rules/suricata.rules -l suri/

Sources : architecture (s’ouvre dans un nouvel onglet), analyse de trafic (s’ouvre dans un nouvel onglet), exporter (s’ouvre dans un nouvel onglet), règles personnelles (s’ouvre dans un nouvel onglet), g2 (s’ouvre dans un nouvel onglet).

Déchiffrer le TLS d’une appli suspecteSur un téléphone de laboratoire. Jamais sur celui de la personne.

Ça ne se fait pas avec le téléphone de la personne. Il faut un Android rooté réservé à l’analyse, et ça sert à étudier une appli précise. Ce qui en sort contient des clés, du texte en clair et des identifiants de l’appareil : traite ça comme une preuve.

PiRogue installe Frida sur le téléphone de test et sort les clés TLS de la mémoire pendant qu’il capture le trafic. Toutes les bibliothèques TLS ne sont pas prises en charge, donc du trafic peut rester chiffré. Connecte le téléphone à la PiRogue en USB et à son wifi, installe l’appli et ne l’ouvre pas.

adb devices
pirogue-intercept-gated -o $(date +%Y%m%d%H%M)_salida
# « Waiting for data » : ouvre l’appli, utilise-la. Ctrl+C pour arrêter.
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

Si tu l’as lancé avec sudo, d’abord : sudo chown -R pi:pi <salida>. Tu peux aussi ouvrir le pcap dans Wireshark et indiquer sslkeylog.txt dans Settings, Protocols, TLS.

  • traffic.pcap : la capture. sslkeylog.txt : clés au format NSS.
  • socket_trace.json : pile d’appels de chaque opération de socket.
  • aes_info.json : opérations AES et RSA, avec texte en clair et chiffré.
  • device.json, ad_ids.txt, experiment.json, screen.mp4 : appareil, ID publicitaires, temps, vidéo.

Source : PTS g8 (s’ouvre dans un nouvel onglet).

Faux positifs et quand passer la mainAvant de dire quoi que ce soit à qui que ce soit.

Ce qui est souvent du bruit

  • Ta propre acquisition : elle laisse des traces de débogage USB et de shell ADB. Place ton activité sur la chronologie avant de la lire.
  • Applis hors Play Store : une boutique alternative, c’est INFO ; par navigateur ou ADB, MEDIUM. MVT ne sait pas si c’est normal pour elle.
  • Profils et MDM : normaux sur un téléphone de travail ou d’établissement scolaire, ou un filtre DNS qu’elle a mis elle-même.
  • Réglages : l’accessibilité activée ou les rapports désactivés peuvent être sa décision. Regarde qui et quand.
  • Correctif ancien : ça parle de risque, pas d’infection.
  • Redirection rapide (MEDIUM) : de HTTP vers un autre domaine en moins d’une seconde. C’est notre critère : la pub et les raccourcisseurs le font aussi.
  • Une page enregistrée qui mentionne l’adresse, c’est souvent un article sur le spyware. Un domaine partagé peut aussi donner des correspondances innocentes.
  • Processus sans bundle_id : à eux seuls, ils ne prouvent rien.
  • Règles Suricata : beaucoup sont du bruit, comme la pub ou les traqueurs. Lis la règle.
  • Rayhunter : fausses alertes à l’atterrissage d’un avion, chiffrement nul dû à une mauvaise configuration du réseau et heuristiques qui varient entre les États-Unis et l’Europe.

Avant de lui dire quoi que ce soit

C’est notre critère. Pour chaque correspondance :

  • Quel indicateur exact, de quelle collection, et quelle valeur du téléphone a correspondu ? Lis la source de l’indicateur.
  • La date concorde-t-elle avec son histoire et avec la campagne ?
  • Qu’y a-t-il avant et après dans timeline.csv ? Y a-t-il une deuxième trace indépendante ?
  • Fais vérifier par une autre personne. Dis « il y a quelque chose à vérifier », pas « tu es infectée », et n’utilise pas ce téléphone pour parler du cas.

Quand passer la main

  • Toute correspondance CRITICAL qui résiste à ce qui précède.
  • Alerte officielle d’Apple ou d’une autre plateforme, même si rien ne sort.
  • Journalistes, militantes ou défenseuses en danger, même si le résultat est propre : les indicateurs publics ne suffisent pas, et un accompagnement fiable demande des indicateurs non publics.
  • Soupçon d’accès physique : téléphone retenu ou outils d’extraction.
  • Une trace que tu ne comprends pas. Ça compte aussi.

Stop. Ne réinstalle pas, ne réinitialise pas, n’efface rien et ne visite pas les adresses. Garde l’acquisition, les hashes et command.log, et demande comment elles veulent les recevoir. Ne l’envoie nulle part.

Sources : MVT (s’ouvre dans un nouvel onglet), PTS g2 (s’ouvre dans un nouvel onglet), Rayhunter (s’ouvre dans un nouvel onglet), Zero Breach (s’ouvre dans un nouvel onglet).

Fausses antennes : 2G et RayhunterPour les organisatrices d'un événement ou d'une action.
Une fausse antenne, dans une camionnette par exemple, se fait passer pour celle de ton opérateur et identifie les téléphones proches.

Un IMSI catcher est une fausse antenne qui identifie les téléphones à proximité. Contrairement au spyware, il ne touche pas au téléphone, et la personne qui l'utilise doit être dans la zone.

Comment entre le spyware payant

Voici les trois voies documentées par les enquêtes d'Amnesty International. Savoir par où il entre aide à savoir quoi chercher.

Par un lien : il faut que tu cliques dessus.
Sans rien toucher (« zéro clic »).
Depuis le réseau : on te redirige vers un site piégé, monté à l’intérieur du réseau.

Schémas réalisés par nos soins à partir de Forensic Methodology Report: How to catch NSO Group's Pegasus (s’ouvre dans un nouvel onglet) (2021) et de Predator Files: Technical deep-dive (s’ouvre dans un nouvel onglet) (2023), d'Amnesty International. Ce hacklab n'a aucun lien avec Amnesty International.

Reprends le reste de ta vie numérique

Sur resetea.net.

À propos de ce guide

Il est tenu à jour par Hacklab la Raíz. Ce qu'il affirme vient des sources citées plus bas. Il ne remplace ni une analyse forensique ni une avocate. Si tu vois une erreur ou un menu qui a changé, écris à hacklab-laraiz@riseup.net.

Sources