Современные системы контроля доступа научились узнавать сотрудников по лицу. Это удобно: не нужно носить на шее бейдж с RFID-чипом и прикладывать его к считывателю у каждой закрытой двери. Кажется, что будущее наступило: можно ходить по офису с гордо поднятой головой, а двери будут сами открываться, узнавая тебя. Мы изучили несколько популярных систем контроля доступа с распознаванием лиц и обнаружили целый букет уязвимостей. О самых опасных проблемах расскажем в этом посте.
Алгоритм работы классической системы управления доступом выглядит так:
Если применить этот алгоритм, заменив номер карты на изображение лица, наступит локальный апокалипсис, потому что картинка намного объёмнее, чем номер карты. А это значит, что её передача на сервер займёт больше времени, а сопоставление образов в базе данных на сервере — намного больше, чем поиск номера ключа. Если в офисе много сотрудников, которые постоянно перемещаются, имеется ненулевая вероятность, что придётся улыбаться замку в ожидании открытия двери по нескольку минут.
Чтобы избежать этого, вместо простой IP-камеры используют интеллектуальное устройство, мощности которого достаточно для распознавания лица, а база лиц хранится на устройстве. Обычно в качестве такого устройства выступает мощный Android-гаджет или компактный ПК под управлением Windows или Linux.
Центральный сервер в этом случае используется для синхронизации баз посетителей, обновления ПО считывателей и администрирования всей системы.
Перемещение вычислительной нагрузки с сервера на внешнюю границу устраняет необходимость отправки на обработку конфиденциальных данных, например, изображений. Время отклика становится приемлемым, требования к полосе пропускания уменьшаются.
Однако вместе с вычислительной мощностью на граничные узлы перемещаются и другие задачи. Это изменение добавляет две примечательные проблемы:
Мы тоже хотим поскорее оказаться в будущем, где для покупки билета достаточно улыбнуться турникету, но считаем необходимым исключить ситуацию, когда улыбнулся кто-то другой, а деньги списались у вас.
Как показывает наше исследование Identified and Authorized: Sneaking Past Edge-Based Access Control Devices, системы управления доступом с идентификацией по лицу имеют множество неприятных уязвимостей: их можно взломать, обмануть, предъявить вместо лица человека его фотографию на экране айфона и даже заделаться администратором и удалить всё начальство из списка допущенных в помещение.
Рассмотрим одно из самых уязвимых устройств нашего исследования — ZKTeco FaceDepot 7B
Система контроля доступа ZKTeco FaceDepot. Источник: Trend Micro
Устройство поставляется в прочном металлическом корпусе с экраном и фронтальной камерой, направленной на посетителя. Распознавание лиц происходит внутри устройства. Фото, сделанные при аутентификации, не отправляются на центральный сервер — процессорной мощности планшета вполне достаточно, чтобы проводить распознавание самостоятельно.
Типичное развёртывание СКД ZKTeco FaceDepot включает в себя несколько таких устройств и центральный сервер, через который синхронизируется между устройствами база пользователей.
Металлический корпус защищает СКД от физического вмешательства, но всё портит открытый USB-порт в нижней части устройства. Он предназначен для обслуживания устройства.
Уязвимость № 1 — открытый USB-порт. Источник: Trend Micro
Ещё одна глобальная уязвимость ZKTeco — прошивка устройства, которая базируется на версии Android Lollipop 5.1.1, выпущенной в апреле 2016 году. Сегодня актуальной версией Android является десятая. За прошедшие годы OS получила множество доработок, связанных с безопасностью. Очевидно, что в пятой версии ничего подобного не предусмотрено.
Экран с версией Android на СКД ZKTeco FaceDepot. Источник: Trend Micro
Поскольку это Android, пользователь может перейти на главный экран и запускать приложение. Например, он может запустить ApkInstaller и установить любой Android-пакет APK с подключённого к USB-порту носителя.
APK Installer, запущенный на СКД. Источник: Trend Micro
Производитель устройства ограничил возможность доступа к меню и приложениям только для пользователей с правами администратора, но как показало дальнейшее изучение устройства, это не является проблемой, потому что устройство всё-таки взаимодействует с сервером и делает это по HTTP.
Устройство взаимодействует с сервером по HTTP. Вся информация передаётся в открытом виде и может быть легко перехвачена. Хуже всего то, что в открытом виде передаются административные команды — регистрация пользователя, назначение пользователю роли администратора, удаление пользователя и синхронизация.
Злоумышленник, получивший доступ к сети, к которой подключён планшет, сможет прослушивать сетевой трафик между СКД и сервером и получить необходимую для проведения атак информацию.
Как ни печально, разработчикам устройства удалось дополнительно усилить уязвимость, связанную с отсутствием шифрования данных: они сделали совершенно дырявую процедуру аутентификации устройства.
Единственный признак легитимности устройства на сервере — это токен, который передаётся в cookie. Токен устанавливается при первой регистрации устройства на сервере и, по нашим данным, никогда не меняется.
Значение токена сохраняется как cookie. Источник: Trend Micro
Учитывая, что «секретный» токен передаётся открытым текстом, любой HTTP-клиент может выдать себя за легитимную СКД. Мы в наших экспериментах использовали curl — простую утилиту, работающую в командной строке.
Например, вот так мы зарегистрировали нового пользователя в системе и задали для него изображение:
Первая команда регистрирует на сервере пользователя с именем Bogus, вторая — устанавливает для него фотографию. Источник: Trend Micro
Файл userdata.post содержит данные, которые мы передали на сервер через POST. В нашем случае файл содержит следующие данные:
Содержимое файла с картинкой для передачи на сервер. Источник: Trend Micro
Существующий администратор может продвигать нового пользователя до администратора, используя консоль на устройстве. Текущий администратор должен сначала войти в систему устройства через распознавание лиц, а затем получить доступ к системной консоли для запуска процесса продвижения. Как только пользователь получает повышение до уровня администратора, устройство отправляет отчёт на сервер, уведомляя его об изменении статуса.
Но поскольку любой пользователь, владеющий токеном, может имитировать легитимный сетевой трафик между устройством и сервером, ничто не помешает ему выполнить следующую команду и сделать любого пользователя администратором:
Установка privilege=14 делает пользователя администратором. Источник: Trend Micro
После очередной синхронизации сервера и всех зарегистрированных на нём устройств СКД новый администратор будет признаваться во всей офисной сети.
URL сохранённых на сервере фотографий предсказуем, поэтому перечисление всех URL-адресов и загрузка фотографий — элементарная задача. Для получения доступа к этим URL не требуется никакой аутентификации.
Например, по следующему URL сервер отдаст фотографию пользователя с идентификатором «11111»:
Для сбора изображений можно сделать простой скрипт, который будет перебирать идентификаторы пользователей от «00000» до любого числа и скачать все имеющиеся в системе фото.
Поскольку вся связь между устройством и сервером происходит по HTTP, относительно легко перенаправить все устройства СКД на фальшивый сервер, используя отравление ARP (Address Resolution Protocol — протокол разрешения адресов).
После того, как мы заставили целевое устройство взаимодействовать с нашим поддельным сервером, мы смогли отправить устройству нужные нам обновления во время одного из его регулярных сеансов синхронизации. Эта техника может использоваться для различных атак. Например, можно подсунуть конечным устройствам фотографию пользователя, для которого требуется организовать незаконный доступ в помещение компании.
Учитывая количество возможных вариантов для атаки, проверка этого способа была уже в какой-то степени излишеством. Но учитывая простоту и доступность такой атаки даже для далёкого от техники человека, мы всё-таки проверили, получится ли обмануть СКД с помощью фотографии зарегистрированного в системе человека, имеющего доступ в офис. И были очень удивлены, когда после перебора нескольких вариантов атака сработала: камера ZKTeco FaceDepot оказалась благосклонна к фото, продемонстрированным на iPhone X и iPhone XS, но отказалась пропускать по этому же фото на экране смартфонов iPhone 6, Samsung A10, Samsung S8, Samsung S9, Samsung S10, Samsung S10+ и Samsung Note 10.
Устройство контроля доступа ZKTeco FaceDepot — не единственное протестированное в рамках нашего исследования. К сожалению, и другие устройства содержали серьёзные уязвимости, которые заставляют всерьёз усомниться в том, что с их помощью можно создать действительно защищённый периметр физического доступа в помещения компании.
Все обнаруженные в устройствах уязвимости присутствуют в перечне Top 10 Web Application Security Risks, составленного проектом OWASP:
Чтобы сделать устройства контроля доступа более безопасными, производителям следует руководствоваться следующими рекомендациями:
Карта или лицо: принципиальные отличия
Алгоритм работы классической системы управления доступом выглядит так:
- человек подносит карту к считывателю;
- считыватель получает номер карты и отправляет её на сервер;
- сервер проверяет разрешения для этого ключа и если доступ разрешён, возвращает статус «ОК»;
- контроллер замка получает команду на разблокировку двери.
Если применить этот алгоритм, заменив номер карты на изображение лица, наступит локальный апокалипсис, потому что картинка намного объёмнее, чем номер карты. А это значит, что её передача на сервер займёт больше времени, а сопоставление образов в базе данных на сервере — намного больше, чем поиск номера ключа. Если в офисе много сотрудников, которые постоянно перемещаются, имеется ненулевая вероятность, что придётся улыбаться замку в ожидании открытия двери по нескольку минут.
Чтобы избежать этого, вместо простой IP-камеры используют интеллектуальное устройство, мощности которого достаточно для распознавания лица, а база лиц хранится на устройстве. Обычно в качестве такого устройства выступает мощный Android-гаджет или компактный ПК под управлением Windows или Linux.
Центральный сервер в этом случае используется для синхронизации баз посетителей, обновления ПО считывателей и администрирования всей системы.
Перемещение вычислительной нагрузки с сервера на внешнюю границу устраняет необходимость отправки на обработку конфиденциальных данных, например, изображений. Время отклика становится приемлемым, требования к полосе пропускания уменьшаются.
Однако вместе с вычислительной мощностью на граничные узлы перемещаются и другие задачи. Это изменение добавляет две примечательные проблемы:
- на граничных узлах кроме примитивных операций по считыванию карты и открыванию двери добавляется полноценная бизнес-логика, которая является источником потенциальной уязвимости;
- более функциональное устройство требует более серьёзного подхода к физической защите, поскольку компрометация будет иметь значительно более печальные последствия.
Мы тоже хотим поскорее оказаться в будущем, где для покупки билета достаточно улыбнуться турникету, но считаем необходимым исключить ситуацию, когда улыбнулся кто-то другой, а деньги списались у вас.
Как показывает наше исследование Identified and Authorized: Sneaking Past Edge-Based Access Control Devices, системы управления доступом с идентификацией по лицу имеют множество неприятных уязвимостей: их можно взломать, обмануть, предъявить вместо лица человека его фотографию на экране айфона и даже заделаться администратором и удалить всё начальство из списка допущенных в помещение.
Рассмотрим одно из самых уязвимых устройств нашего исследования — ZKTeco FaceDepot 7B
Система контроля доступа ZKTeco FaceDepot. Источник: Trend Micro
Устройство поставляется в прочном металлическом корпусе с экраном и фронтальной камерой, направленной на посетителя. Распознавание лиц происходит внутри устройства. Фото, сделанные при аутентификации, не отправляются на центральный сервер — процессорной мощности планшета вполне достаточно, чтобы проводить распознавание самостоятельно.
Типичное развёртывание СКД ZKTeco FaceDepot включает в себя несколько таких устройств и центральный сервер, через который синхронизируется между устройствами база пользователей.
Незащищённый USB-порт
Металлический корпус защищает СКД от физического вмешательства, но всё портит открытый USB-порт в нижней части устройства. Он предназначен для обслуживания устройства.
Уязвимость № 1 — открытый USB-порт. Источник: Trend Micro
Устаревшая версия Android
Ещё одна глобальная уязвимость ZKTeco — прошивка устройства, которая базируется на версии Android Lollipop 5.1.1, выпущенной в апреле 2016 году. Сегодня актуальной версией Android является десятая. За прошедшие годы OS получила множество доработок, связанных с безопасностью. Очевидно, что в пятой версии ничего подобного не предусмотрено.
Экран с версией Android на СКД ZKTeco FaceDepot. Источник: Trend Micro
Возможность установки APK-пакетов
Поскольку это Android, пользователь может перейти на главный экран и запускать приложение. Например, он может запустить ApkInstaller и установить любой Android-пакет APK с подключённого к USB-порту носителя.
APK Installer, запущенный на СКД. Источник: Trend Micro
Производитель устройства ограничил возможность доступа к меню и приложениям только для пользователей с правами администратора, но как показало дальнейшее изучение устройства, это не является проблемой, потому что устройство всё-таки взаимодействует с сервером и делает это по HTTP.
Незашифрованный обмен с сервером
Устройство взаимодействует с сервером по HTTP. Вся информация передаётся в открытом виде и может быть легко перехвачена. Хуже всего то, что в открытом виде передаются административные команды — регистрация пользователя, назначение пользователю роли администратора, удаление пользователя и синхронизация.
Злоумышленник, получивший доступ к сети, к которой подключён планшет, сможет прослушивать сетевой трафик между СКД и сервером и получить необходимую для проведения атак информацию.
Как ни печально, разработчикам устройства удалось дополнительно усилить уязвимость, связанную с отсутствием шифрования данных: они сделали совершенно дырявую процедуру аутентификации устройства.
Уязвимая аутентификация устройства
Единственный признак легитимности устройства на сервере — это токен, который передаётся в cookie. Токен устанавливается при первой регистрации устройства на сервере и, по нашим данным, никогда не меняется.
Значение токена сохраняется как cookie. Источник: Trend Micro
Учитывая, что «секретный» токен передаётся открытым текстом, любой HTTP-клиент может выдать себя за легитимную СКД. Мы в наших экспериментах использовали curl — простую утилиту, работающую в командной строке.
Например, вот так мы зарегистрировали нового пользователя в системе и задали для него изображение:
Первая команда регистрирует на сервере пользователя с именем Bogus, вторая — устанавливает для него фотографию. Источник: Trend Micro
Файл userdata.post содержит данные, которые мы передали на сервер через POST. В нашем случае файл содержит следующие данные:
Содержимое файла с картинкой для передачи на сервер. Источник: Trend Micro
Регистрация администратора с помощью curl
Существующий администратор может продвигать нового пользователя до администратора, используя консоль на устройстве. Текущий администратор должен сначала войти в систему устройства через распознавание лиц, а затем получить доступ к системной консоли для запуска процесса продвижения. Как только пользователь получает повышение до уровня администратора, устройство отправляет отчёт на сервер, уведомляя его об изменении статуса.
Но поскольку любой пользователь, владеющий токеном, может имитировать легитимный сетевой трафик между устройством и сервером, ничто не помешает ему выполнить следующую команду и сделать любого пользователя администратором:
Установка privilege=14 делает пользователя администратором. Источник: Trend Micro
После очередной синхронизации сервера и всех зарегистрированных на нём устройств СКД новый администратор будет признаваться во всей офисной сети.
Загрузка всех фото пользователей
URL сохранённых на сервере фотографий предсказуем, поэтому перечисление всех URL-адресов и загрузка фотографий — элементарная задача. Для получения доступа к этим URL не требуется никакой аутентификации.
Например, по следующему URL сервер отдаст фотографию пользователя с идентификатором «11111»:
Для сбора изображений можно сделать простой скрипт, который будет перебирать идентификаторы пользователей от «00000» до любого числа и скачать все имеющиеся в системе фото.
Внедрение ложного сервера
Поскольку вся связь между устройством и сервером происходит по HTTP, относительно легко перенаправить все устройства СКД на фальшивый сервер, используя отравление ARP (Address Resolution Protocol — протокол разрешения адресов).
После того, как мы заставили целевое устройство взаимодействовать с нашим поддельным сервером, мы смогли отправить устройству нужные нам обновления во время одного из его регулярных сеансов синхронизации. Эта техника может использоваться для различных атак. Например, можно подсунуть конечным устройствам фотографию пользователя, для которого требуется организовать незаконный доступ в помещение компании.
Доступ по фото легального посетителя
Учитывая количество возможных вариантов для атаки, проверка этого способа была уже в какой-то степени излишеством. Но учитывая простоту и доступность такой атаки даже для далёкого от техники человека, мы всё-таки проверили, получится ли обмануть СКД с помощью фотографии зарегистрированного в системе человека, имеющего доступ в офис. И были очень удивлены, когда после перебора нескольких вариантов атака сработала: камера ZKTeco FaceDepot оказалась благосклонна к фото, продемонстрированным на iPhone X и iPhone XS, но отказалась пропускать по этому же фото на экране смартфонов iPhone 6, Samsung A10, Samsung S8, Samsung S9, Samsung S10, Samsung S10+ и Samsung Note 10.
Рекомендации изготовителям
Устройство контроля доступа ZKTeco FaceDepot — не единственное протестированное в рамках нашего исследования. К сожалению, и другие устройства содержали серьёзные уязвимости, которые заставляют всерьёз усомниться в том, что с их помощью можно создать действительно защищённый периметр физического доступа в помещения компании.
Все обнаруженные в устройствах уязвимости присутствуют в перечне Top 10 Web Application Security Risks, составленного проектом OWASP:
- отсутствие шифрование по умолчанию и отключение шифрования на стороне сервера;
- уязвимая аутентификация и система управления сеансами;
- устаревшие версии ОС.
Чтобы сделать устройства контроля доступа более безопасными, производителям следует руководствоваться следующими рекомендациями:
- скрывать чувствительную информацию с поверхности устройств — серийные номера, номера модели или любая подобная информация не должны быть заметны;
- использовать шифрование в обмене между устройствами и серверами управления;
- защищать устройства физически — никаких открытых USB-портов быть не должно;
- регулярно обновлять ПО устройств и сервера, использовать актуальные версии ОС.