В iPhone давно встроена простая защита: когда приложение включает камеру — на экране загорается зелёная точка, когда слушает через микрофон — оранжевая. Отключить их нельзя. Точнее, нельзя было, пока не появился Predator.
Исследователи компании Jamf Threat Labs разобрали по частям коммерческую шпионскую программу Predator и выяснили, как именно она скрывает от владельца iPhone факт слежки. И речь не о теоретической уязвимости — это разбор реального зловреда, который уже применялся против журналистов, активистов и политиков по всему миру.
Откуда взялись эти точки
Apple ввела оранжевую и зелёную точки в iOS 14 в 2020 году. Ими управляет системный процесс SpringBoard — тот самый, который отвечает за домашний экран и весь интерфейс iPhone. Обычное приложение физически не может их отключить: это сделано намеренно, чтобы пользователь всегда знал, когда за ним наблюдают.
Авторы исследования — специалисты Нир Аврам и Ху Кэ — сразу оговариваются: они не нашли новую дыру в iOS. Они объясняют, как ведёт себя уже установленный шпион на уже взломанном смартфоне. Попасть на устройство Predator может только через так называемые эксплойты нулевого дня — секретные уязвимости, о которых Apple сама ещё не знает. Их покупают или разрабатывают специально. Стоит это огромных денег, поэтому такое оружие применяют государственные структуры и спецслужбы, а не обычные мошенники.
Чем Predator отличается от других шпионов
Predator создан компанией Intellexa/Cytrox. В 2022 году другие исследователи описали технику NoReboot: шпион имитировал выключение телефона, хотя тот продолжал работать и подслушивать. Это грубый, заметный метод. Predator действует иначе — телефон выглядит и работает совершенно нормально, просто точки-предупреждения не появляются.
Внутри Predator есть модуль с говорящим названием HiddenDot. Именно его задача не дать SpringBoard нарисовать точку на экране.
Работает это так. Каждый раз, когда iOS хочет показать индикатор — например, потому что микрофон только что включился, — она вызывает внутреннюю функцию с длинным техническим названием SBSensorActivityDataProvider._handleNewDomainData:. Это сигнал: «эй, SpringBoard, обнови иконку в строке состояния». HiddenDot перехватывает именно этот момент.
Трюк элегантный. В языке программирования Objective-C, на котором написана iOS, есть особенность: если отправить команду нулевому объекту (то есть объекту, которого не существует) система просто проигнорирует её и не выдаст никакой ошибки. HiddenDot в нужный момент подменяет адрес получателя на ноль. SpringBoard пытается обновить индикатор, но команда уходит в никуда. Точка не появляется.
Самое важное: этот один-единственный перехват гасит сразу оба индикатора — и зелёный (камера), и оранжевый (микрофон). Дело в том, что функция SBSensorActivityDataProvider собирает данные обо всех датчиках в одном месте, до того как они попадают в интерфейс. Одна ловушка — и пользователь полностью слеп.
Попутно исследователи нашли в коде «мёртвую» функцию — CSWatcherSpawner::TestHooker(). Она написана, но нигде не используется. В ней — другой способ скрыть индикаторы, через прямые хуки на менеджер записи. Судя по всему, разработчики Predator попробовали этот подход, а потом отказались в пользу более изощрённого решения.
Запись звонков: слепое пятно шпиона
Отдельный модуль Predator записывает VoIP-звонки — разговоры в WhatsApp, Telegram и подобных приложениях. Он перехватывает аудиопоток на системном уровне, определяет качество звука (поддерживаются частоты дискретизации 16, 24, 32, 44,1 и 48 кГц), конвертирует его в компактный формат и сохраняет в файл.
Но у этого модуля есть изъян: он не умеет убирать оранжевую точку самостоятельно. Предполагается, что оператор шпиона заранее активирует HiddenDot вручную — иначе индикатор микрофона всё-таки появится на экране во время записи.
Модуль CameraEnabler: взлом без имён
Ещё один компонент — CameraEnabler — отвечает за скрытый доступ к камере. Он использует обход системы защиты PAC (Pointer Authentication Codes) — механизма Apple, который следит за тем, чтобы программы не подменяли адреса в памяти.
Вместо того чтобы искать функцию по имени (Apple может переименовать её в следующем обновлении), CameraEnabler сканирует память в поисках характерного набора команд — своеобразного «отпечатка» нужного кода рядом с функцией FigVideoCaptureSourceCreateWithSourceInfo во фреймворке CMCapture. Это делает шпиона устойчивым к обновлениям iOS: даже если Apple что-то переименует или переместит, Predator всё равно найдёт нужное место.
Как понять, что телефон заражён
Специалисты Jamf выделяют несколько признаков, на которые стоит обратить внимание при профессиональной (!) проверке устройства:
- В системных процессах SpringBoard и mediaserverd появляются нехарактерные области памяти — следы внедрённого кода
- Несистемный код регистрирует обработчики исключений и использует вызов
thread_set_stateдля подмены содержимого регистров процессора - Процесс mediaserverd обращается к нестандартным путям через функцию
ExtAudioFileWrite— туда, куда система в норме не пишет - Камера или микрофон работают, но соответствующий индикатор в строке состояния не появляется
Самостоятельно проверить телефон на все эти признаки невозможно — нужны специальные инструменты и экспертиза. Однако общая рекомендация проста: регулярно обновляйте iOS, поскольку Apple закрывает уязвимости, через которые Predator вообще попадает на устройство. Без первоначального взлома весь арсенал шпиона бесполезен.