Безопасность

Nuke Device: удалённый сброс Android через Firebase

Nuke Device — система удалённого управления Android-устройствами, которую я разработал для корпоративных сценариев безопасности. Когда нужна возможность удалённо стереть, заблокировать или проверить связь с устройством в поле — и это должно работать даже когда приложение убито. Система использует Firebase Realtime Database и FCM push-уведомления для гарантированной доставки команд.

Зачем я создал Nuke Device

Управление корпоративными устройствами — реальная проблема. Устройства теряются, крадутся, компрометируются. Традиционные MDM-решения дорогие и избыточные. Мне нужно было что-то лёгкое, надёжное и разворачиваемое за минуты. Nuke Device решает это двухкомпонентной архитектурой: Flutter-приложение для Android с правами Device Admin и Python-пульт управления через Firebase.

Критическое требование: команды wipe и lock должны работать даже когда приложение убито. Это достигается через FCM high-priority data messages, которые будят устройство и выполняют команду через фоновый Kotlin-сервис — без участия пользователя.

Архитектура: как работает Nuke Device удалённый сброс

Система работает по простому, но надёжному принципу: Firebase Realtime Database — шина команд, FCM push — гарантия доставки даже при убитом процессе.

Android-приложение (Flutter + Kotlin) регистрируется как Device Admin, получает FCM-токен и начинает слушать команды по пути commands/{device_id}. Каждые 30 секунд отправляет heartbeat со статусом — батарея, Wi-Fi, IP-адреса, тип блокировки экрана, права администратора.

Python-пульт читает реестр устройств из devices/, показывает дашборд состояния и записывает команды в Firebase. Есть CLI и GUI (Tkinter). При отправке команды параллельно шлёт FCM push с высоким приоритетом для пробуждения устройства.

Три ключевые команды

  • Hello Test — проверка связи. Устройство пишет подтверждение обратно в Firebase, а префикс в ответе показывает способ доставки: через DB listener (приложение открыто) или FCM service (приложение убито)
  • Lock — удалённая блокировка экрана через DevicePolicyManager.lockNow(). Работает мгновенно в фоне и на переднем плане
  • Wipe — ядерная опция. Вызывает DevicePolicyManager.wipeData(0) для полного сброса до заводских настроек. Перед wipe FCM-сервис синхронно записывает подтверждение через CountDownLatch с таймаутом 3 секунды — потому что после wipeData() процесс умирает

Безопасность Firebase

Система использует Firebase Anonymous Auth для аутентификации устройств. Каждое устройство идентифицируется по ANDROID_ID из Settings.Secure — уникальный и персистентный между переустановками. Структура базы чётко разделяет ответственность:

  • devices/{id} — устройство пишет статус, пульт читает
  • commands/{id} — пульт пишет команды, устройство читает и выполняет

FCM-сервис берёт WakeLock на 10 секунд при получении сообщения, чтобы Android не убил процесс до завершения команды. Для wipe-команд подтверждение записывается синхронно перед вызовом wipeData() — критическое архитектурное решение, поскольку factory reset немедленно убивает процесс.

Стек технологий

  • Android-приложение: Flutter (Dart UI) + Kotlin native (Method Channel для DevicePolicyManager, FCM Service, API устройства)
  • Пульт управления: Python + firebase-admin SDK, CLI и Tkinter GUI
  • Бэкенд: Firebase Realtime Database (шина команд + статусы), Firebase Cloud Messaging (push-доставка), Firebase Anonymous Auth
  • Android API: DevicePolicyManager (lock, wipe), Device Admin Receiver, WakeLock, ConnectivityManager, WifiManager

Практическое применение

В моей работе внештатного CTO я внедрял решения для управления устройствами в разных отраслях. Корпоративные парки Android-планшетов в закрытых сетевых средах требуют возможности удалённого сброса. POS-терминалы в рознице, складские сканеры, полевые планшеты — всё это риски утечки данных при потере или краже.

Nuke Device демонстрирует лёгкий подход по сравнению с полными MDM-платформами. Для организаций с 10-100 устройствами и базовыми требованиями безопасности эта архитектура обеспечивает основные контроли — удалённый сброс, блокировку и мониторинг здоровья — без лицензионных расходов enterprise MDM.

Исходный код

Исходный код доступен по запросу. Свяжитесь со мной для получения доступа к репозиторию. Репозиторий включает Flutter-приложение, Kotlin-сервисы, Python-пульт (CLI + GUI) и конфигурацию Firebase.

Для консультаций по корпоративной безопасности и управлению устройствами — свяжитесь со мной. За плечами более 15 лет опыта в информационной безопасности и 6 патентов.

FAQ

Работает ли Nuke Device когда приложение принудительно закрыто?

Да. FCM high-priority data messages доставляются в фоновый Kotlin-сервис даже когда Flutter-приложение убито. Сервис берёт WakeLock для выполнения команды (wipe, lock или hello test) без необходимости запуска основного приложения.

Как подтверждается factory reset?

Перед вызовом wipeData(0) FCM-сервис синхронно записывает wipeAck в Firebase через CountDownLatch с таймаутом 3 секунды. Это гарантирует что пульт управления получит подтверждение доставки команды до того, как устройство сотрёт себя.

Какие разрешения нужны приложению?

Приложение требует права Device Admin (для блокировки и сброса), разрешение на уведомления, исключение из оптимизации батареи (чтобы оставаться активным в фоне) и доступ к сети. Device Admin активируется пользователем через системный диалог.

Можно ли использовать для управления парком устройств?

Да. Python-пульт поддерживает множество устройств через реестр Firebase. Каждое устройство идентифицируется уникальным ANDROID_ID и отправляет статус каждые 30 секунд — батарея, Wi-Fi, IP-адреса, права администратора. Для больших парков (100+ устройств) рекомендую переход на полноценное MDM-решение.

Илья Арестов — Внештатный CTO | Dubai Airport Free Zone (DAFZ), Dubai, UAE | Алматы, ул. Зенкова 59, Казахстан | +971-585-930-600 | https://t.me/getmonolith
Оцените статью