
Сканер механизмов персистентности macOS с проверкой цифровых подписей кода и отслеживанием временной шкалы.
Видите ВСЁ, что запускается на вашем Mac. Понимаете ПОЧЕМУ оно запускается. Решаете, ЧТО оставить.


MacPersistenceChecker показывает вам всё, что запускается автоматически на вашем Mac, объясняет, почему это важно, и помогает решить, что оставить или удалить.
→ Найдите вредоносное ПО → Обнаружьте скрытую персистентность → Поймите свою систему за минуты
Скачать MacPersistenceChecker v2.0.0 (DMG)
→ Сканируйте Mac менее чем за 30 секунд → Никакого мастера установки, просто откройте и запустите → Нативный macOS, универсальный (Apple Silicon и Intel), macOS 13+
Если macOS сообщает, что приложение повреждено:
xattr -cr /Applications/MacPersistenceChecker.app
Приложение изучает вашу систему и автоматически классифицирует тысячи элементов.
Быстрый старт:
Реалистичная стоимость: <$1/месяц при активном использовании, $0 в стабильном состоянии.
Приложение строит граф знаний каждого элемента персистентности на вашем Mac и использует Claude (Anthropic) для логических выводов. Быстро классифицируйте тысячи элементов, эскалируйте только то, что действительно важно, и изучайте свою систему, чтобы она отвечала на большинство вопросов без дополнительных вызовов ИИ.
┌──────────────────────────┐
│ Persistence scan │
│ (e.g. 6800 items) │
└─────────────┬────────────┘
▼
┌────────────────────────────────────────┐
│ Concept Extraction (deterministic) │
│ 6 extractors → vendor / software / │
│ pathCategory / pattern / mechanism / │
│ filename. No AI calls here. │
└─────────────┬──────────────────────────┘
▼
┌────────────────────────────────────────┐
│ Knowledge Graph (SQLite) │
│ • concepts (~280 typically) │
│ • concept_links (subsumes / instance) │
│ • item_concepts (m:n) │
│ • concept_verdicts │
└─────────────┬──────────────────────────┘
▼
┌────────────────────────────────────────┐
│ Concept Resolver │
│ for every item, picks the strongest │
│ verdict via a deterministic ladder: │
│ severity → confidence → specificity │
│ → source → recency. │
└─────────────┬──────────────────────────┘
│
┌───────────┴────────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────────┐ │ Item is already │ │ Item is unresolved │ │ classified. │ │ → goes to a cluster. │ │ Filter hides it │ └──────────┬───────────┘ │ from "Suspicious"│ ▼ └──────────────────┘ ┌──────────────────────┐ │ Cluster Builder │ │ groups items by │ │ identical concept │ │ signature (sorted │ │ ids). 6800 items → │ │ ~280 clusters. │ └──────────┬───────────┘ ▼ ┌──────────────────────────────────────────┐ │ User decides per cluster (one click = │ │ N items decided), OR sends batch to AI: │ │ │ │ • Trust / Watch / Block (manual) │ │ • Send unresolved clusters to AI │ │ → Haiku batch (15 cluster per call) │ │ → AI returns verdicts attached to │ │ concepts (not items) — propagate │ │ to ALL items linked to those │ │ concepts, including future ones. │ └──────────────────────────────────────────┘
### AI-инструменты
| Инструмент | Где найти | Модель | Стоимость / вызов |
|---|---|---|---|
| Анализ с помощью ИИ (один элемент) | Детали элемента → Граф знаний | Haiku | ~$0.003 |
| Пакетная умная сортировка | Панель инструментов → Сортировка | Haiku batch | ~$0.005 (15 кластеров) |
| Отчёт о системе | Панель инструментов → Отчёт | Sonnet | ~$0.05–0.10 |
| Охота за угрозами | Панель инструментов → Охота | Haiku | ~$0.003 |
| Сравнение снимков | История → Сравнить → Анализ с помощью ИИ | Haiku | ~$0.003 |
Дневной лимит вызовов (по умолчанию 30) настраивается в Настройки → ИИ. Жёсткий потолок — по достижении ИИ автоматически отключается.
### Контроль доверия
Пользовательские правила **всегда побеждают** те, что извлечены ИИ:
- **Доверять этому элементу** — правило для одного элемента, ваше решение переопределяет список наблюдения ИИ
- **Доверять этому шаблону** — правило на основе шаблона с привязкой по TeamID/подписи (только подписанные бинарники)
- **Убрать доверие** — удалить ошибочно добавленное пользовательское правило
- **Наблюдать / Блокировать** — применить вердикт «в списке наблюдения» или «вредоносный» ко всему кластеру в умной сортировке
</details>
---
## Сканирование персистентности
### Основные сканеры
- **Launch Daemons** — системные службы (`/Library/LaunchDaemons`, `/System/Library/LaunchDaemons`)
- **Launch Agents** — пользовательские агенты (`~/Library/LaunchAgents`, `/Library/LaunchAgents`)
- **Login Items** — приложения, запускающиеся при входе
- **Kernel Extensions** — устаревшие расширения ядра (kext)
- **System Extensions** — современные системные расширения (DriverKit, NetworkExtension, EndpointSecurity)
- **Privileged Helper Tools** — XPC-службы с повышенными привилегиями
- **Cron Jobs** — запланированные задачи
- **Configuration Profiles** — профили управления (MDM) и конфигурационные профили
- **Application Support** — фоновые приложения и вспомогательные программы
### Расширенные сканеры (опционально)
- **Periodic Scripts** — дневные, недельные, месячные скрипты в `/etc/periodic/`
- **Shell Startup Files** — `.zshrc`, `.bashrc`, `/etc/profile` с обнаружением подозрительных паттернов
- **Login/Logout Hooks** — устаревшие хуки входа/выхода через `com.apple.loginwindow`
- **Authorization Plugins** — плагины агента безопасности в `/Library/Security/SecurityAgentPlugins`
- **Spotlight Importers** — пользовательские импортёры метаданных
- **Quick Look Plugins** — генераторы предпросмотра, которые могут быть использованы злоумышленниками
- **Directory Services Plugins** — плагины аутентификации
- **Finder Sync Extensions** — расширения Finder через pluginkit
- **BTM Database** — записи управления фоновыми задачами (macOS 13+)
- **Dylib Hijacking** — обнаружение `DYLD_INSERT_LIBRARIES` и подозрительного внедрения dylib
- **TCC/Accessibility** — приложения с правами специальных возможностей в базе TCC
---
## Оценка рисков
Каждый элемент персистентности получает **оценку риска (0–100)** на основе нескольких факторов:
- Недействительные или отсутствующие подписи кода
- Отсутствие защиты Hardened Runtime
- Бинарники с ad-hoc подписью
- Подозрительные расположения файлов
- Постоянные автозапуски (RunAtLoad, KeepAlive)
- Известные паттерны вредоносного ПО
**Уровни серьёзности:** Низкий, Средний, Высокий, Критический — элементы отсортированы по риску для быстрого выявления угроз.
### Обнаружение аномалий частоты запуска
- **Микро-перезапуск** — StartInterval < 60 секунд (возможное злоупотребление watchdog)
- **Агрессивный watchdog** — комбинация KeepAlive + низкий StartInterval
- **Отсутствие ограничения частоты** — KeepAlive без ThrottleInterval (риск цикла аварийного перезапуска)
### Обнаружение «подписано, но опасно»
- **Опасные полномочия** — обнаружение рискованных entitlements (`com.apple.security.cs.disable-library-validation` и т.д.)
- **Имитация Apple** — не Apple-программы, пытающиеся выглядеть как продукты Apple
- **Скрытые расположения** — подписанные приложения в подозрительных каталогах
- **Пробелы в нотаризации** — недавние приложения без нотаризации
- **Анализ сертификатов разработчика** — проверка TeamID на соответствие известным разработчикам
### Обнаружение LOLBins (Living-off-the-Land Binaries)
Обнаруживает подозрительное использование легитимных бинарников macOS в контексте персистентности. **Важна комбинация:**
- **osascript + персистентность** = AppleScript с автозапуском (злоупотребление GUI-автоматизацией)
- **curl/wget + RunAtLoad** = паттерн «скачать и выполнить»
- **python + привилегированный помощник** = выполнение скрипта с повышенными правами
- **security + KeepAlive** = риск кражи учётных данных
- **launchctl + автозапуск** = мета-установщик персистентности
- **netcat + персистентность** = обратный шелл / канал C2
Отслеживается 40+ LOLBins с привязкой к MITRE ATT&CK и контекстной оценкой серьёзности.
### Репутация бинарников и поведенческий анализ
Продвинутые эвристики для обнаружения подозрительных поведенческих паттернов:
- **Скрытый защитник персистентности** — агент с KeepAlive без очевидной цели watchdog
- **Агрессивная персистентность** — RunAtLoad + KeepAlive на неслужебных элементах
- **Скрытый автозапуск** — фоновый процесс от неизвестного разработчика
- **Осиротевшая персистентность** — plist указывает на несуществующий исполняемый файл
- **Подозрительное расположение** — исполняемый файл в `/tmp/`, `/Users/Shared/` или скрытых каталогах
- **Риск повышения привилегий** — пользовательский агент, пытающийся выполнить привилегированные операции
- **Сетевая персистентность** — персистентность с сетевыми возможностями
- **Скриптовая персистентность** — встроенные скрипты через интерпретаторы
- **Имитация системных процессов** — элемент не от Apple, использующий название, похожее на Apple
- **Паттерн частого перезапуска** — StartInterval < 60 секунд
### Несоответствие намерений plist и бинарника
Обнаруживает, когда то, что объявлено в plist, не соответствует действиям бинарника — **именно так поступают современные дропперы:**
- **Невинный plist, тяжёлый бинарник** — простая конфигурация, но бинарник имеет опасные полномочия
- **Пассивный помощник с сетью** — фоновый помощник с доступом к клиенту/серверу сети
- **Пассивный помощник с загрузкой dylib** — помощник, способный загружать неподписанный код
- **Минимальная конфигурация, максимальные возможности** — минимальный plist, но обширные полномочия
- **Простая задача с доступом к связке ключей** — простая задача с доступом к учётным данным
### Возраст бинарника vs возраст персистентности
Обнаруживает подозрительные временные метки, указывающие на вредоносные обновления после установки:
- **Старый plist, новый бинарник** — классический паттерн «вредоносное обновление после установки»
- **Тихая замена бинарника** — бинарник изменён без изменения plist
- **Манипуляция временными метками** — дата изменения раньше даты создания (невозможно)
- **Подозрительное время изменения** — бинарник изменён в 2–5 часов ночи
- **Бинарник изменён после установки** — непрограмма обновления изменена после первоначальной установки
### Уровни доверия
- 🟢 **Apple** — Подписано Apple
- 🔵 **Известный разработчик** — Проверенное стороннее программное обеспечение
- 🟡 **Подписано** — Действительная подпись, но не нотаризовано
- ⚪ **Неизвестно** — Нет исполняемого файла для проверки
- 🟠 **Подозрительный** — Просроченный сертификат или подозрительный путь
- 🔴 **Не подписано** — Нет действительной подписи
---
## Хронология и криминалистика
Комплексная криминалистическая хронология для каждого элемента персистентности:
**Обнаружение**
- Первое появление — когда элемент был впервые обнаружен
**Конфигурационный файл (Plist)**
- Создан — временная метка создания файла
- Изменён — временная метка последнего изменения
**Исполняемый файл (бинарник)**
- Создан — временная метка создания бинарника
- Изменён — временная метка последнего изменения
- Последнее выполнение — время последнего доступа/выполнения
### Обнаружение аномалий временных меток
- **Timestomping** — дата создания позже даты изменения (техника анти-криминалистики)
- **Замена файла** — файл создан после первоначального обнаружения
- **Замена бинарника** — недавно изменённый бинарник со старым plist (возможный троян)
- **Недавнее выполнение** — бинарник недавно использовался, но в данный момент не загружен
---
## Интеграция с MITRE ATT&CK
Каждый механизм персистентности сопоставлен с фреймворком MITRE ATT&CK:
- **Тактики**: Persistence, Privilege Escalation, Defense Evasion, Execution
- **Техники**: T1543.001, T1543.004, T1547.001, T1547.015 и другие
- Прямые ссылки на документацию MITRE ATT&CK
---
## Отчёт о внедрении приложений
Комплексный анализ установленных приложений для оценки их уровня «внедрения»:
### Двойная система оценки
**Оценка персистентности (0–100)** — оценивает механизмы персистентности:
- Типы триггеров (RunAtLoad, KeepAlive)
- Уровни привилегий (LaunchDaemons, Kernel Extensions, Privileged Helpers)
- Устойчивость (автоматический перезапуск, обновления)
- Избыточность (несколько элементов от одного разработчика)
- Уровень доверия (штрафы за неподписанные/подозрительные)
**Оценка установки (0–100)** — оценивает «мусорный» след:
- Распространение файлов по папкам Library
- Общий объём дискового пространства
- Файлы-сироты (персистентность без соответствующего приложения)
- Раздувание кэша
- Системные установки
### Система оценок
Приложения получают оценку **от A до F** на основе комбинированного балла с подробным разбором всех факторов оценки.
---
## Визуализация
### Панель статистики
- **Гистограмма распределения рисков** — элементы по группам риска (Низкий, Средний, Высокий, Критический)
- **Кольцевая диаграмма уровней доверия** — распределение по уровням доверия
- **Диаграмма категорий** — элементы по категориям персистентности
- **Визуализация хронологии** — события жизненного цикла элемента (Создан, Изменён, Выполнен, Обнаружен)
### Интерактивный граф
- **Полный граф системы** — обзор всех элементов персистентности и их связей
- **Фокусированный граф элемента** — радиальный граф для анализа отдельного элемента
- **Режимы анализа**: Базовый (доверие/категории) или Полный (включает зависимости dylib, сетевые соединения)
- **Интерактивное полотно** — масштабирование, панорамирование, исследование связей
- **Цветовая кодировка по уровню доверия** — быстрая визульная оценка угрозы
### Радар профиля безопасности
Комплексная радиальная диаграмма, показывающая одним взглядом измерения: Доверие, Подпись, Безопасность, Стабильность, Прозрачность и Возраст.
---
## Мониторинг в реальном времени
Непрерывный мониторинг изменений персистентности с двумя режимами анализа.
### Режимы мониторинга
**Стандартный режим**
- Мониторинг файловой системы в реальном времени на основе FSEvents
- Интеллектуальное подавление шума с настраиваемым дебаунсингом
- Оценка релевантности для фильтрации незначительных изменений
- Немедленные уведомления для изменений высокой релевантности
**Режим ИИ** (требуется API-ключ Claude)
- Claude AI анализирует каждое обнаруженное изменение
- Полный контекст отправляется ИИ: информация о подписи, LOLBins, поведенческие аномалии, оценки риска
- ИИ решает, заслуживает ли изменение уведомления на основе реального уровня угрозы
- Настраиваемый интервал проверки (от 30 секунд до 1 часа)
- Фильтрация по порогу серьёзности (Info, Low, Medium, High, Critical)
### Интеграция в строку меню
- Индикатор статуса мониторинга в реальном времени
- Значок режима: «ИИ» или «Std»
- Быстрое управление (Запустить/Остановить мониторинг, запустить сканирование)
- Доступ к настройкам
- Счётчик неподтверждённых изменений
- Предпросмотр последнего обнаруженного изменения
### Дедупликация уведомлений
- Один и тот же элемент не будет вызывать повторные уведомления в течение периода охлаждения
- Настраиваемый период охлаждения (1–24 часа, по умолчанию 2 часа)
- Предотвращает утомление от уведомлений при часто изменяющихся элементах
### Уведомление о запуске
При запуске мониторинга вы получаете уведомление с подтверждением:
- Активный режим (режим ИИ или стандартный режим)
- Интервал проверки (ИИ) или «В реальном времени» (стандартный)
- Настройки порога уведомления
### Обнаружение изменений
- **Добавлено** — новые элементы персистентности
- **Удалено** — удалённые элементы
- **Изменено** — изменения конфигурации (включено/отключено, изменение путей и т.д.)
- **Включено/Отключено** — изменения состояния
### Детали анализа ИИ
При активном режиме ИИ каждое изменение отправляет полные данные элемента в Claude:
- Базовая информация (имя, категория, пути, содержимое plist)
- Детали подписи (подписано, Apple, нотаризовано, team ID, статус сертификата)
- Оценка риска (балл, подробный разбор)
- Обнаружения LOLBins с привязкой к MITRE
- Поведенческие аномалии
- Несоответствия намерений (plist vs бинарник)
- Аномалии возраста (анализ временных меток)
- Флаги «подписано, но опасно»
Claude отвечает:
- `shouldNotify` — уведомить ли пользователя
- `severity` — оценка уровня угрозы
- `title` — заголовок уведомления
- `explanation` — почему это подозрительно или нет
- `recommendation` — рекомендуемое действие
- `mitreTechniques` — соответствующие техники ATT&CK
### Настройка ИИ
Управляйте тем, как ИИ анализирует изменения, через **Настройки → ИИ**:
**Структурированные опции**
| Опция | По умолчанию | Эффект |
|-------|--------------|--------|
| Игнорировать подписанные Apple | Вкл | Понижать приоритет элементов, подписанных Apple (com.apple.*) |
| Игнорировать системные пути | Вкл | Понижать приоритет путей /System и /Library |
| Приоритет неподписанных | Вкл | Уделять повышенное внимание неподписанным исполняемым файлам |
| Фокус на LOLBins | Вкл | Приоритизировать обнаружение Living-off-the-Land Binaries |
| Минимальная оценка риска | 0 | Анализировать только элементы с риском >= порога |
| Игнорируемые пути | — | Пользовательские пути для пропуска (через запятую) |
**Порог уведомлений**
- `Info` — уведомлять обо всём
- `Low` — уведомлять о низкой серьёзности и выше
- `Medium` — уведомлять о средней и выше (по умолчанию)
- `High` — только высокие и критические
- `Critical` — только критические угрозы
**Пользовательский промпт**
Добавьте собственные инструкции, которые будут добавляться к промпту ИИ. Примеры:```
Always notify me if an item uses python or osascript.
Ignore anything from Microsoft.
Be more aggressive with unsigned items from ~/Downloads.
ИИ использует эти настройки для принятия более умных решений. Например:
/tmp/ → Критическое уведомлениеosascript с RunAtLoad → Высокое уведомлениеMacPersistenceChecker включает MCP-сервер (Model Context Protocol), который позволяет Claude Code, Claude Desktop и другим MCP-совместимым клиентам запрашивать данные о персистентности.
swift build --target MPCServer
The binary is created at `.build/debug/mpc-server`.
### Доступные инструменты MCP
| Инструмент | Описание |
|------|-------------|
| `get_current_state` | Получить все текущие элементы персистентности с опциональными фильтрами |
| `get_diff` | Получить изменения от базовой линии или конкретного снимка |
| `get_summary` | Компактный обзор с подсчетами и главными угрозами |
| `get_item_details` | Полные детали для конкретного элемента по идентификатору |
| `get_risk_analysis` | Агрегированный анализ рисков с рекомендациями |
| `get_snapshots` | Список доступных снимков с метаданными |
| `compare_snapshots` | Сравнить два снимка на наличие изменений |
### Конфигурация Claude Code
Добавьте в настройки MCP для Claude Code (`~/.claude/claude_desktop_config.json` или подобное):```json
{
"mcpServers": {
"macpersistence": {
"command": "/path/to/mpc-server",
"args": []
}
}
}
После настройки вы можете задавать Claude Code:
Экспорт в машиночитаемом формате для конвейеров безопасности:
Кнопка активна только после завершения сканирования.
Безопасная нейтрализация подозрительных элементов персистентности без постоянного удаления:








git clone https://github.com/Pinperepette/MacPersistenceChecker.git cd MacPersistenceChecker ./build.sh
Скопируйте `MacPersistenceChecker.app` в `/Applications/`.
### Требования
- macOS 13.0+
- Xcode 15+ или Swift 5.9+
### Зависимости
- [GRDB.swift](https://github.com/groue/GRDB.swift) — база данных SQLite
---
## Разрешения
Требует **Полного доступа к диску** для сканирования:
- `/Library/LaunchDaemons`
- Файлы системной конфигурации
- База данных TCC
- Стартовые файлы оболочки
Без Полного доступа к диску некоторые элементы могут быть не видны.
---
## Лицензия
Лицензия MIT — подробнее см. [LICENSE](https://github.com/pinperepette/macpersistencechecker/blob/main/LICENSE).
## Автор
**pinperepette** — 2025
## История звёзд
<a href="https://www.star-history.com/?repos=Pinperepette%2FMacPersistenceChecker&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=Pinperepette/MacPersistenceChecker&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=Pinperepette/MacPersistenceChecker&type=date&legend=top-left" />
График истории звёзд
</picture>
</a>
---
*Вдохновлено [Autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns) для Windows от Марка Руссиновича*