Программное обеспечение

Найти «Триангуляцию»: утилита triangle_check

В первой публикации о вредоносной кампании «Операция Триангуляция» мы привели подробную инструкцию для самостоятельной проверки устройств на следы компрометации с помощью MVT. Такая проверка включает ручной поиск индикаторов и достаточно трудоемка, поэтому мы разработали специальную утилиту triangle_check для автоматического поиска следов заражения. Для проверки с помощью этой утилиты на ОС Windows и Linux достаточно скачать бинарную сборку, а на macOS е можно установить как Python-пакет.

Как сделать резервную копию устройства?

Windows

На ОС Windows резервную копию проще всего сделать при помощи iTunes:

  1. Подключите ваше устройство к компьютеру с установленным iTunes. Разблокируйте устройство и при необходимости подтвердите, что подключенному компьютеру можно доверять.

    Окно подтверждения доверия компьютеру

  2. Теперь ваше устройство должно отображаться в левой панели iTunes. Правой кнопкой мыши нажмите на имя устройства и выберите «Создать резервную копию».
  3. Созданная резервная копия будет храниться в директории %appdata%\Apple Computer\MobileSync\Backup.

macOS

На версиях macOS до 10.15 (Catalina) резервную копию можно сделать через iTunes. Процесс создания резервной копии такой же, как на ОС Windows. Начиная с macOS Catalina, резервную копию можно создать при помощи Finder.
1. Подключите устройство к компьютеру и при необходимости подтвердите доверие.
2. Ваше устройство должно отображаться в левой панели Finder. Выберите его и нажмите «Создать резервную копию сейчас».

3. Созданная резервная копия будет храниться в директории ~/Library/Application Support/MobileSync/Backup/.

Linux

Для создания резервной копии на Linux необходимо установить библиотеку libimobiledevice. Чтобы делать резервные копии устройств с актуальными версиями iOS, необходимо скомпилировать данную библиотеку из исходного кода(инструкции по сборке находятся в разделе Installation/Getting Started).
После установки библиотеки и подключения устройства к компьютеру резервную копию можно создать командой:
idevicebackup2 backup --full <директория, в которую будет сохранена копия>.
При этом может понадобиться несколько раз ввести на устройстве код-пароль.

Использование утилиты triangle_check

После того как резервная копия исследуемого устройства была успешно создана при помощи одного из методов, описанных выше, необходимо установить и запустить нашу утилиту triangle_check.

Python-пакет triangle_check

Универсальным методом для всех ОС является установка Python-пакета triangle_check, опубликованного в глобальном репозитории Python Package Index (PyPI) с помощью системы управления пакетами pip. Для этого требуется подключение к интернету и наличие утилиты pip (https://pip.pypa.io/en/stable/installation/).

  1. Установка пакета:
    a. для установки из репозитория PyPI (рекомендованный метод):
    python -m pip install triangle_check
    b. для ручной сборки и установки из GitHub-репозитория:
    git clone https://github.com/KasperskyLab/triangle_check
    cd triangle_check
    python -m build
    python -m pip install dist/triangle_check-1.0-py3-none-any.whl
  2. Использование:
    python -m triangle_check <путь до созданной резервной копии>
    Примечание: при использовании пакета на macOS возможно появление ошибки «MobileSync: Operation not permitted». Это связано с тем, что у утилиты терминала нет доступа к папке, где хранится созданная резервная копия. Для этого следует предоставить Full Disk Access программе Terminal. Подробнее.

Бинарные сборки

Для операционных систем Windows и Linux также можно использовать бинарные сборки утилиты triangle_check, опубликованные в GitHub-репозитории.

Windows

  1. Скачать архив triangle_check_win.zip из последней опубликованной версии на GitHub и распаковать его.
  2. Запустить интерпретатор командной строки cmd.exe или PowerShell.
  3. Перейти в директорию, в которую был распакован архив. Например:
    cd %userprofile%\Downloads\triangle_check_win
  4. Вызвать бинарную утилиту triangle_check.exe. Например:
    triangle_check.exe "%appdata%\Apple Computer\MobileSync\Backup\00008101-000824411441001E-20230530-143718"

Linux

  1. Скачать архив triangle_check_linux.zip из последней опубликованной версии на GitHub и распаковать его.
  2. Запустить терминал (командная строка).
  3. Перейти в директорию, в которую был распакован архив. Например:
    cd ~/Downloads/triangle_check_linux
  4. Установить разрешение на запуск файла:
    chmod +x triangle_check
  5. Вызвать бинарную утилиту triangle_check. Например:
    ./triangle_check ~/Desktop/my_backup/00008101-000824411441001E-20230530-143718

Интерпретация результатов

Утилита выводит результат «DETECTED«, когда обнаруживает конкретные индикаторы компрометации. Это означает, что устройство заражено.
Также она может вывести результат «SUSPICION«, означающий обнаружение совокупности менее однозначных индикаторов, указывающих на заражение.
Наконец, если отображается сообщение «No traces of compromise were identified«, то утилита не нашла следов заражения Operation Triangulation.

Найти «Триангуляцию»: утилита triangle_check

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

  1. Иван

    Есть проблема с запуском скрипта (как бинарной сборки, так и через установленный через pip пакет):
    KeyError: ‘netUsageBaseline’
    Traceback (most recent call last):
    File «triangle_check.py», line 8, in
    File «triangle_check\__main__.py», line 29, in main
    File «triangle_check\__init__.py», line 216, in scan_dir
    KeyError: ‘netUsageBaseline’
    [3896] Failed to execute script ‘triangle_check’ due to unhandled exception!

    1. Евгений

      правильность путей проверьте
      лучше копируйте именно свой адрес
      у меня c:\Users\admin\Apple\MobileSync\Backup\
      в статье …\Apple Computer\MobileSync\Backup.

    2. Securelist

      Какая у вас версия iOS?

  2. Oleg

    При запуске на Windows 7 выдает ошибку загрузки python310.dll

    1. Securelist

      Файл python310.dll находится в той же директории, что и triangle_check.exe. Попробуйте запускать программу triangle_check.exe из этой директории

  3. Денис

    Не получилось у меня выполнить проверку через эту утилиту, у меня почему то пишет «системе не удаётся найти правильный путь»

    1. Securelist

      На какой операционной системе запускаете утилиту и каким образом? Приложите лог командной строки.

      1. Денис

        Windows 11 KeyError: ‘netUsageBaseline’
        Traceback (most recent call last):
        File «triangle_check.py», line 8, in
        File «triangle_check\__main__.py», line 29, in main
        File «triangle_check\__init__.py», line 216, in scan_dir
        KeyError: ‘netUsageBaseline’
        [3896] Failed to execute script ‘triangle_check’ due to unhandled exception!

  4. Aleks

    Почему выдаёт такую ошибку: FileNotFoundError: [Errno 2] No such file or directory: ‘/Users/alekszakh/Library/Application/Manifest.plist’

    1. Securelist

      Попробуйте заключить путь до резервной копии в кавычки. Это нужно, так как в пути есть пробел в названии директории Application Support, Таким образом правильный вызов утилиты будет следующим: python -m triangle_check «/Users/имяпользователя/Library/Application Support/MobileSync/Backup/»

  5. Артур

    Все чётко, большое спасибо!

  6. chem

    На маке проверка завершается ошибками.
    Traceback (most recent call last):
    File «», line 198, in _run_module_as_main
    File «», line 88, in _run_code
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__main__.py», line 49, in
    main()
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__main__.py», line 29, in main
    results = checker.scan_dir(dir, password, ask_password)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__init__.py», line 208, in scan_dir
    path_osanalytics = self.decrypt_with_manifest(‘Library/Preferences/com.apple.osanalytics.addaily.plist’, ‘HomeDomain’)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__init__.py», line 69, in decrypt_with_manifest
    fileID, plist = cur.fetchone()
    ^^^^^^^^^^^^^
    TypeError: cannot unpack non-iterable NoneType object

  7. Alex

    У меня выводит ошибку:
    FileNotFoundError: [Errno 2] No such file or directory: ‘/Users/имяпользователя/Library/Application/Manifest.plist’

    1. Securelist

      Попробуйте заключить путь до резервной копии в кавычки. Это нужно, так как в пути есть пробел в названии директории Application Support, Таким образом правильный вызов утилиты будет следующим: python -m triangle_check «/Users/имяпользователя/Library/Application Support/MobileSync/Backup/»

  8. Максим

    Проверил три айфона — везде «No traces of compromise were identified»

  9. Иван

    А что делать если SUSPICION в пяти местах?

    1. Securelist

      Добрый день, Иван!

      Зависит от того, что именно показывает утилита. Можете прислать вывод целиком сюда или на почту triangulation@kaspersky.com. Спасибо!

  10. Sergey

    Traceback (most recent call last):
    File «», line 198, in _run_module_as_main
    File «», line 88, in _run_code
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__main__.py», line 49, in
    main()
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__main__.py», line 29, in main
    results = checker.scan_dir(dir, password, ask_password)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__init__.py», line 133, in scan_dir
    with open(os.path.join(self.dir, ‘Manifest.plist’), ‘rb’) as f:
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    FileNotFoundError: [Errno 2] No such file or directory: ‘/Users/admin/Library/Application/Manifest.plist’

  11. Глеб

    Какие данные должен включать в себя бэкап? Фото/приложения/музыка? Проясните, пожалуйста.

    1. Securelist

      Добрый день, Глеб!

      Нужен полный бэкап системы.

  12. Владимир

    Добрый день. подскажите, появляется ошибка после сканирования.
    Скан делал на винде, как через python, так и через скачивание архива в с гитлаба.
    Есть еще ньюас, бэкап составляет 569гб, делался через создание создание ссылки на другой диск, при бэкапе айфона с 50гб данных никаких ошибок не было. Эту ошибку уже тут писали, но ответа не поступило:

    Traceback (most recent call last):
    File «», line 198, in _run_module_as_main
    File «», line 88, in _run_code
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__main__.py», line 49, in
    main()
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__main__.py», line 29, in main
    results = checker.scan_dir(dir, password, ask_password)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__init__.py», line 208, in scan_dir
    path_osanalytics = self.decrypt_with_manifest(‘Library/Preferences/com.apple.osanalytics.addaily.plist’, ‘HomeDomain’)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «/opt/homebrew/lib/python3.11/site-packages/triangle_check/__init__.py», line 69, in decrypt_with_manifest
    fileID, plist = cur.fetchone()
    ^^^^^^^^^^^^^
    TypeError: cannot unpack non-iterable NoneType object

  13. Владимир

    что делать, если при проверке возникает такая ошибка?
    Traceback (most recent call last):
    File «», line 198, in run_module_as_main
    File «», line 88, in run_code
    File «C:\Users\admin\AppData\Local\Programs\Python\Python311\Scripts\triangle_check.exe__main.py», line 7, in
    File «C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\triangle_check_main_.py», line 29, in main
    results = checker.scan_dir(dir, password, ask_password)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\triangle_check_init_.py», line 208, in scan_dir
    path_osanalytics = self.decrypt_with_manifest(‘Library/Preferences/com.apple.osanalytics.addaily.plist’, ‘HomeDomain’)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\triangle_check_init_.py», line 69, in decrypt_with_manifest
    fileID, plist = cur.fetchone()
    ^^^^^^^^^^^^^
    TypeError: cannot unpack non-iterable NoneType object

  14. Руслан

    Здравствуйте , есть проблема , хочу попробовать утилиту на MacBook M1 , но он выдает ошибку «FileNotFoundError: [Errno 2] No such file or directory: ‘«~/Library/Application/Manifest.plist'» , причем я почитал комментарии и поставил ковычки. Помогите пожалуйста

    1. Securelist

      Здравствуйте, Руслан!

      Вы использовали неверный путь. Он должен быть формата: «~/Library/Application Support/MobileSync/Backup/00008101-000824411441001E-20230530-143718»

      1. Николай

        Добрый день!
        я так понимаю должен быть формат «~/Library/Application Support/MobileSync/Backup/папка с резервной копией-дата создания-время создания»?
        все равно выдает ошибку «FileNotFoundError: [Errno 2] No such file or directory: …

  15. Vitaliy

    Как проверить на iPhone, где не Mac OS?

    1. Securelist

      Добрый день, Виталий!

      Для того чтобы воспользоваться triangle_check, нужно сделать резервную копию вашего iPhone и сохранить на компьютере. Если вы используете компьютер с Windows/Linux, утилиту можно скачать по этой ссылке: https://github.com/KasperskyLab/triangle_check/releases

Отчеты

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

«Лаборатория Касперского» обнаружила новую APT-угрозу CloudSorcerer, нацеленную на российские государственные организации и использующую облачные службы в качестве командных серверов аналогично APT CloudWizard.

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике