В первой публикации о вредоносной кампании «Операция Триангуляция» мы привели подробную инструкцию для самостоятельной проверки устройств на следы компрометации с помощью MVT. Такая проверка включает ручной поиск индикаторов и достаточно трудоемка, поэтому мы разработали специальную утилиту triangle_check для автоматического поиска следов заражения. Для проверки с помощью этой утилиты на ОС Windows и Linux достаточно скачать бинарную сборку, а на macOS е можно установить как Python-пакет.
Как сделать резервную копию устройства?
Windows
На ОС Windows резервную копию проще всего сделать при помощи iTunes:
- Подключите ваше устройство к компьютеру с установленным iTunes. Разблокируйте устройство и при необходимости подтвердите, что подключенному компьютеру можно доверять.
- Теперь ваше устройство должно отображаться в левой панели iTunes. Правой кнопкой мыши нажмите на имя устройства и выберите «Создать резервную копию».
- Созданная резервная копия будет храниться в директории %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/).
-
Установка пакета:
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 - Использование:
python -m triangle_check <путь до созданной резервной копии>
Примечание: при использовании пакета на macOS возможно появление ошибки «MobileSync: Operation not permitted». Это связано с тем, что у утилиты терминала нет доступа к папке, где хранится созданная резервная копия. Для этого следует предоставить Full Disk Access программе Terminal. Подробнее.
Бинарные сборки
Для операционных систем Windows и Linux также можно использовать бинарные сборки утилиты triangle_check, опубликованные в GitHub-репозитории.
Windows
- Скачать архив triangle_check_win.zip из последней опубликованной версии на GitHub и распаковать его.
- Запустить интерпретатор командной строки cmd.exe или PowerShell.
- Перейти в директорию, в которую был распакован архив. Например:
cd %userprofile%\Downloads\triangle_check_win
- Вызвать бинарную утилиту triangle_check.exe. Например:
triangle_check.exe "%appdata%\Apple Computer\MobileSync\Backup\00008101-000824411441001E-20230530-143718"
Linux
- Скачать архив triangle_check_linux.zip из последней опубликованной версии на GitHub и распаковать его.
- Запустить терминал (командная строка).
- Перейти в директорию, в которую был распакован архив. Например:
cd ~/Downloads/triangle_check_linux
- Установить разрешение на запуск файла:
chmod +x triangle_check
- Вызвать бинарную утилиту triangle_check. Например:
./triangle_check ~/Desktop/my_backup/00008101-000824411441001E-20230530-143718
Интерпретация результатов
Утилита выводит результат «DETECTED«, когда обнаруживает конкретные индикаторы компрометации. Это означает, что устройство заражено.
Также она может вывести результат «SUSPICION«, означающий обнаружение совокупности менее однозначных индикаторов, указывающих на заражение.
Наконец, если отображается сообщение «No traces of compromise were identified«, то утилита не нашла следов заражения Operation Triangulation.
Найти «Триангуляцию»: утилита triangle_check
Иван
Есть проблема с запуском скрипта (как бинарной сборки, так и через установленный через 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!
Евгений
правильность путей проверьте
лучше копируйте именно свой адрес
у меня c:\Users\admin\Apple\MobileSync\Backup\
в статье …\Apple Computer\MobileSync\Backup.
Securelist
Какая у вас версия iOS?
Oleg
При запуске на Windows 7 выдает ошибку загрузки python310.dll
Securelist
Файл python310.dll находится в той же директории, что и triangle_check.exe. Попробуйте запускать программу triangle_check.exe из этой директории
Денис
Не получилось у меня выполнить проверку через эту утилиту, у меня почему то пишет «системе не удаётся найти правильный путь»
Securelist
На какой операционной системе запускаете утилиту и каким образом? Приложите лог командной строки.
Денис
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!
Aleks
Почему выдаёт такую ошибку: FileNotFoundError: [Errno 2] No such file or directory: ‘/Users/alekszakh/Library/Application/Manifest.plist’
Securelist
Попробуйте заключить путь до резервной копии в кавычки. Это нужно, так как в пути есть пробел в названии директории Application Support, Таким образом правильный вызов утилиты будет следующим: python -m triangle_check «/Users/имяпользователя/Library/Application Support/MobileSync/Backup/»
Артур
Все чётко, большое спасибо!
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
Alex
У меня выводит ошибку:
FileNotFoundError: [Errno 2] No such file or directory: ‘/Users/имяпользователя/Library/Application/Manifest.plist’
Securelist
Попробуйте заключить путь до резервной копии в кавычки. Это нужно, так как в пути есть пробел в названии директории Application Support, Таким образом правильный вызов утилиты будет следующим: python -m triangle_check «/Users/имяпользователя/Library/Application Support/MobileSync/Backup/»
Максим
Проверил три айфона — везде «No traces of compromise were identified»
Иван
А что делать если SUSPICION в пяти местах?
Securelist
Добрый день, Иван!
Зависит от того, что именно показывает утилита. Можете прислать вывод целиком сюда или на почту triangulation@kaspersky.com. Спасибо!
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’
Глеб
Какие данные должен включать в себя бэкап? Фото/приложения/музыка? Проясните, пожалуйста.
Securelist
Добрый день, Глеб!
Нужен полный бэкап системы.
Владимир
Добрый день. подскажите, появляется ошибка после сканирования.
Скан делал на винде, как через 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
Владимир
что делать, если при проверке возникает такая ошибка?
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
Руслан
Здравствуйте , есть проблема , хочу попробовать утилиту на MacBook M1 , но он выдает ошибку «FileNotFoundError: [Errno 2] No such file or directory: ‘«~/Library/Application/Manifest.plist'» , причем я почитал комментарии и поставил ковычки. Помогите пожалуйста
Securelist
Здравствуйте, Руслан!
Вы использовали неверный путь. Он должен быть формата: «~/Library/Application Support/MobileSync/Backup/00008101-000824411441001E-20230530-143718»
Николай
Добрый день!
я так понимаю должен быть формат «~/Library/Application Support/MobileSync/Backup/папка с резервной копией-дата создания-время создания»?
все равно выдает ошибку «FileNotFoundError: [Errno 2] No such file or directory: …
Vitaliy
Как проверить на iPhone, где не Mac OS?
Securelist
Добрый день, Виталий!
Для того чтобы воспользоваться triangle_check, нужно сделать резервную копию вашего iPhone и сохранить на компьютере. Если вы используете компьютер с Windows/Linux, утилиту можно скачать по этой ссылке: https://github.com/KasperskyLab/triangle_check/releases