Dropbox объяснил, почему внедряется в ядро операционной системы
Ровно месяц назад Dropbox анонсировал Dropbox Infinite — «революционно новый способ доступа к вашим файлам», как писала компания в корпоративном блоге. В демонстрационном видео показали, что десктопный клиент Dropbox предоставляет прямой доступ к облачному хранилищу файлов на уровне файловой системы, без необходимости запускать браузер. Локальный диск «увеличивается» на размер облачного хранилища, файлы доступны напрямую. Облачное хранилище может быть больше по размеру, чем локальный диск. Сейчас компания раскрыла технические подробности, как работает эта функция.
Сразу после первого анонса эксперты высказали опасения, что Project Infinite откроет доступ в систему посторонним, если они найдут уязвимости в клиенте Dropbox. Собственное расширение ядра от Dropbox станет тогда своеобразным бэкдором в системе.
В принципе, технические разъяснения Dropbox сейчас в какой-то степени подтверждают эти опасения. Действительно, Dropbox Infinite интегрируется на уровне ядра.
«Традиционно Dropbox работал полностью в пространстве пользователя, как любая другая программа на вашей машине, — пишет разработчик компании Дэмьен Девиль (Damien DeVille). — С Dropbox Infinite мы углубляемся ещё глубже: в пространство ядра. С этой технологией клиент Dropbox меняет роль от пассивного наблюдателя, который смотрит, что происходит на локальном диске, на активную роль в вашей файловой системе. Мы почти два года работали над тем, чтобы соединиться кусочки паззла вместе, чтобы они работали прозрачно».
Разработчик объясняет, что обычная схема FUSE не устраивает их с точки зрения производительности: каждая файловая операция обычно требует лишнего переключения контекста между пространством ядра и пространством пользователя, см. схему FUSE).
Такие переключения контекста довольно дорого обходятся с точки зрения производительности.
Деградация производительности при использовании FUSE
Производительность — не единственная причина. Dropbox считает, что замена стандартных библиотек FUSE на собственное расширение ядра устраняет излишнюю сложность и, следовательно, повышает безопасность системы.
Ещё одна полезная вещь: в расширении ядра работает проверка прав доступа через Kernel Authorization (Copy Hooks в Windows), чтобы детектировать и запрещать определённые операции в папке Dropbox.
Такая проверка осуществляется гораздо проще, чем можно было сделать через FUSE.
Если приложение работает в пространстве ядра, оно может позволить себе гораздо больше, чем обычная программа в пространстве пользователя. С точки зрения безопасности это довольно рискованно. «Если Dropbox в ядре, то может получить доступ к чему угодно, — говорит Сэм Боун (Sam Bowne), который ведёт курсы этического хакинга в колледже Сан-Франциско. — Если в клиенте Dropbox есть баг, его можно использовать для захвата всей системы».
Примерно таким образом хакеры использовали баг в антивирусном ПО от Symantec/Norton (CVE-2016–2208). Антивирусы тоже работают в пространстве ядра, куда пытается проникнуть и Dropbox.
Казалось бы, что может пойти не так?
Kernel memory corruption in Symantec/Norton antivirus, CVE-2016–2208 (more patches soon). https://t.co/Sqhm0a48Fp pic.twitter.com/F22xDIelSU
— Tavis Ormandy (@taviso) 17 мая 2016 г.
«Мы серьёзно относимся к безопасности и делаем всё, чтобы защитить своих пользователей и их данные, — пишет Dropbox. — Наши группы Red team [внутренние независимые подразделения для поиска уязвимостей] предлагают программы Bug Bounty и на регулярной основе приглашают независимых пентестеров, которые помогают искать уязвимости».
Dropbox осознаёт риск для безопасности. Расширение ядра уже почти год тестируют внутри компании, проверяя стабильность и целостность системы. Понимая все риски, компания считает, что это всё-таки будет удобная функция.