В практике автоматизации мобильной торговли часто возникает критическая ситуация: торговый представитель или выездной специалист увольняется, его учетная запись в центральной базе блокируется, но на его личном или даже корпоративном планшете остается установленное приложение 1С с локальной базой данных. В этой базе могут содержаться конфиденциальные коммерческие данные: цены, остатки товаров, контакты клиентов, история взаиморасчетов и отчеты продаж.
В рамках данной статьи мы подробно разберем, как решить проблему присутствия корпоративного приложения и данных на устройстве ушедшего сотрудника. Мы проанализируем технические ограничения операционной системы Android, рассмотрим практическое решение внутри платформы 1С, выявим его уязвимости, предложим надежный офлайн-алгоритм самоликвидации данных, а также рассмотрим современные стандарты администрирования мобильных устройств (MDM/EMM).
С технической точки зрения, разработчики часто ищут способ вызвать команду удаления самого apk-пакета приложения из кода мобильной платформы. Однако операционная система Android построена на строгих принципах безопасности, которые существенно ужесточились в последних версиях ОС:
Поэтому фокус внимания разработчика должен сместиться с удаления самого исполняемого приложения (которое без данных представляет собой лишь пустую оболочку) на гарантированное уничтожение коммерческих данных внутри локальной базы.
Самый быстрый способ нейтрализовать информационную базу на устройстве сотрудника — выполнить полную очистку данных при очередной попытке обмена или при получении управляющего сигнала. Для этого используется встроенный метод платформы.
Рассмотрим пошагово, как реализовать этот механизм:
УдалитьДанныеИнформационнойБазы().Посмотрим на пример кода, который вызывается на мобильном устройстве при получении признака блокировки от сервера:
Процедура ОбработатьБлокировкуУстройства() Экспорт
// Отключаем регистрацию изменений, чтобы не тратить ресурсы
ПланыОбмена.Мобильные.УстановитьГлавныйУзел(Неопределено);
// Очищаем базу данных мобильного устройства полностью
Попытка
УдалитьДанныеИнформационнойБазы();
ЗавершитьРаботуСистемы(Ложь, Истина);
Исключение
ЗаписатьЛогОшибки(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Метод УдалитьДанныеИнформационнойБазы() работает чрезвычайно быстро, так как он физически очищает таблицы базы данных SQLite, используемой мобильной платформой 1С, не тратя время на объектное удаление каждого элемента справочника или документа.
Для мгновенной отправки команды очистки (не дожидаясь, пока сотрудник сам запустит сеанс синхронизации) рекомендуется использовать механизм Push-уведомлений (через сервисы Google Cloud Messaging / Firebase Cloud Messaging). При получении специального push-сообщения мобильное приложение в фоновом режиме активируется и вызывает процедуру очистки.
Описанное выше решение имеет одну критическую уязвимость: оно полностью зависит от наличия интернет-соединения. Если уволенный сотрудник догадывается о возможной блокировке, он может перевести устройство в авиарежим ("в самолете") или просто извлечь SIM-карту. В этом случае приложение продолжит работать локально в офлайн-режиме, предоставляя злоумышленнику полный доступ ко всей базе клиентов и истории продаж.
Для устранения этой уязвимости в мобильное приложение необходимо внедрить алгоритм автономной защиты — "таймер мертвеца".
Суть алгоритма заключается в следующем: приложение должно регулярно подтверждать свою легитимность на сервере. Если подтверждения не было в течение установленного лимита времени, база данных уничтожается локально без каких-либо внешних команд.
Разберем реализацию этого алгоритма по шагам:
ПриНачалеРаботыСистемы мобильного приложения прописывается проверка текущей даты.Проанализируем пример реализации в модуле управляемого приложения мобильного клиента или мобильного приложения:
Процедура ПриНачалеРаботыСистемы()
// Задаем лимит работы в офлайне (в секундах)
// 5 дней = 5 * 24 * 3600 = 432 000 секунд
ДопустимыйИнтервалОфлайна = 432000;
ДатаПоследнегоОбмена = Константы.ДатаПоследнейСинхронизации.Получить();
ТекущаяДатаУстройства = ТекущаяДата();
Если ЗначениеЗаполнено(ДатаПоследнегоОбмена) Тогда
ИнтервалБезОбмена = ТекущаяДатаУстройства - ДатаПоследнегоОбмена;
Если ИнтервалБезОбмена > ДопустимыйИнтервалОфлайна Тогда
// Превышен лимит автономности, уничтожаем данные
ПоказатьПредупреждение(, "Превышен лимит автономной работы. Доступ заблокирован.");
УдалитьДанныеИнформационнойБазы();
ЗавершитьРаботуСистемы(Ложь, Истина);
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Важное примечание: Чтобы пользователь не мог обойти эту проверку, просто переведя системное время на смартфоне назад, рекомендуется записывать и сверять не только системное время, но и монотонный счетчик времени работы или проверять, чтобы новая дата запуска была строго больше даты предыдущего успешного запуска приложения, сохраненной локально.
Если вам требуется именно физическое удаление самого приложения с устройства без участия пользователя, эту задачу невозможно решить внутри кода 1С. Проблема должна решаться на уровне администрирования операционной системы Android с использованием концепции BYOD (Bring Your Own Device) и систем класса MDM (Mobile Device Management) / EMM (Enterprise Mobility Management).
Современные версии Android предоставляют технологию Android Enterprise, которая позволяет разделить личное и рабочее пространство на одном смартфоне с помощью механизма Work Profile (Рабочий профиль).
Как работает этот подход на практике:
При этом личные фотографии, контакты, личные аккаунты и игры сотрудника остаются абсолютно нетронутыми. Данный подход полностью снимает любые юридические риски неправомерного доступа к личной информации сотрудника, так как компания управляет исключительно созданным ею контейнером.
Для построения надежной системы защиты мобильных данных при увольнении персонала рекомендуется использовать комбинированный подход: