Source: Jamf Threat Labs (19 février 2026). Contexte: publication d’une analyse technique d’un échantillon iOS de Predator (Intellexa/Cytrox) décrivant des mécanismes post‑compromis pour neutraliser les indicateurs d’enregistrement; il ne s’agit pas d’une nouvelle vulnérabilité ni d’un correctif, mais d’un éclairage destiné aux défenseurs.

Jamf explique que depuis iOS 14, les pastilles vertes/oranges signalent l’usage de la caméra/micro. Contrairement à la technique « NoReboot » (2022) qui simulait une extinction complète, Predator garde l’iPhone pleinement opérationnel et supprime sélectivement les indicateurs d’enregistrement 🔴🟢, rendant la surveillance plus discrète.

Côté technique, le module HiddenDot installe un hook unique sur SBSensorActivityDataProvider._handleNewDomainData: dans SpringBoard. Le callback force x0 (self) à NULL avant l’exécution, exploitant la sémantique Objective‑C où un message envoyé à nil est ignoré, ce qui bloque toutes les mises à jour de statut capteurs et empêche l’affichage des indicateurs. Un ancien code mort visait directement SBRecordingIndicatorManager, mais a été abandonné au profit de cette interception plus propre et universelle.

Le module VoIP recording n’intègre pas de suppression d’indicateur: il hooke AudioConverterNew et AudioConverterConvertComplexBuffer+52 pour capter l’audio (détection de taux d’échantillonnage, conversion float32→int16 NEON, downmix, écriture via ExtAudioFileWrite), suggérant que l’opérateur doit activer au préalable la suppression universelle via HiddenDot pour rester furtif.

Le module CameraEnabler utilise une redirection PAC (Pointer Authentication Code): il repère sa cible via recherche de motifs d’instructions ARM64 (autour de FigVideoCaptureSourceCreateWithSourceInfo), puis redirige conditionnellement l’exécution en s’appuyant sur une adresse de retour pré-signée (cache PAC) pour contourner un contrôle d’accès caméra.

Détection: les hooks impliquent une injection dans SpringBoard et mediaserverd. Pistes de détection évoquées: surveiller les mappages mémoire inattendus, l’enregistrement de ports d’exception non systèmes, des états de threads anormaux, ainsi que des indicateurs comportementaux (usage caméra/micro sans pastille, appels ExtAudioFileWrite inhabituels depuis mediaserverd, notifications capteurs non reflétées en UI). Conclusion: il s’agit d’une publication de recherche documentant des mécanismes d’évasion post‑exploitation afin d’aider à la détection côté défense.

IOCs (Indicateurs de compromission) 📍

  • Méthodes hookées: SBSensorActivityDataProvider._handleNewDomainData: (SpringBoard); AudioConverterNew (mediaserverd); AudioConverterConvertComplexBuffer+52 (mediaserverd); fonction trouvée par motif dans CMCapture.framework (mediaserverd)
  • Processus cibles: SpringBoard; mediaserverd
  • Chemins de frameworks: /System/Library/PrivateFrameworks/CMCapture.framework/CMCapture; /System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore

TTPs (Techniques, Tactiques et Procédures) 🛠️

  • Interception unique de SBSensorActivityDataProvider._handleNewDomainData: pour bloquer caméra et micro
  • Objective‑C nil messaging via mise à zéro de x0 (self) pour annuler les mises à jour capteurs
  • Hooking par exceptions Mach (DMHooker) avec « continuer l’exécution » après modification d’état de thread
  • Injection de code dans SpringBoard et mediaserverd
  • Bypass PAC avec redirection vers une adresse pré‑signée (cache PAC)
  • Pattern matching ARM64 pour découvrir des cibles internes non exportées
  • Hook de la chaîne audio VoIP (AudioConverter*) et écritures via ExtAudioFileWrite

Type d’article: publication de recherche visant à documenter des mécanismes d’évasion post‑compromis et à nourrir les capacités de détection des défenseurs.

🧠 TTPs et IOCs détectés

TTP

Interception unique de SBSensorActivityDataProvider._handleNewDomainData: pour bloquer caméra et micro; Objective-C nil messaging via mise à zéro de x0 (self) pour annuler les mises à jour capteurs; Hooking par exceptions Mach (DMHooker) avec ‘continuer l’exécution’ après modification d’état de thread; Injection de code dans SpringBoard et mediaserverd; Bypass PAC avec redirection vers une adresse pré-signée (cache PAC); Pattern matching ARM64 pour découvrir des cibles internes non exportées; Hook de la chaîne audio VoIP (AudioConverter*) et écritures via ExtAudioFileWrite

IOC

Méthodes hookées: SBSensorActivityDataProvider._handleNewDomainData: (SpringBoard); AudioConverterNew (mediaserverd); AudioConverterConvertComplexBuffer+52 (mediaserverd); fonction trouvée par motif dans CMCapture.framework (mediaserverd); Processus cibles: SpringBoard; mediaserverd; Chemins de frameworks: /System/Library/PrivateFrameworks/CMCapture.framework/CMCapture; /System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore


🔗 Source originale : https://www.jamf.com/blog/predator-spyware-ios-recording-indicator-bypass-analysis/