Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 151, АВГУСТ 2011 г.

Шифрование для Dropbox. Dropbox: синхронизация файлов — просто, но небезопасно

Пользователи Dropbox сохраняют миллион файлов каждые 5 минут. Всего сервисом пользуются 25 миллионов человек. При этом создатели не гарантируют неприкосновенность твоих данных, а система аутентификации уже давала сбой.

Предыстория

Девятнадцатого июня Dropbox устроил своеобразный «день открытых дверей». В течение 4 часов кто угодно мог зайти в чужой аккаунт с помощью произвольного пароля. Создатели сервиса, возможно, даже и не заметили бы проблемы, если бы информацию об уязвимости не опубликовал независимый security-исследователь (pastebin.com/yBKwDY6T). За последнее время это уже не первая щекотливая история, связанная с безопасностью файлов, которые пользователи со всего мира так охотно доверяют облачному хранилищу Dropbox.

Тут надо напомнить, что с самого начала существования сервиса разработчики заверяли пользователей, что ответственно подходят к безопасности данных. Так, все файлы во время синхронизации передаются исключительно по защищенному SSL-соединению, а хранятся на сервере в зашифрованном виде (AES-256). Изменив недавно пользовательское соглашение, те же самые люди недвусмысленно дали понять, что лишь ограничивают доступ к файлам для своих сотрудников, но при появлении необходимости, в том числе по запросу правоохранительных органов, Dropbox непременно предоставит доступ к аккаунту любого юзера. Вот такое шифрование.

Я не параноик и скрывать мне, в общем-то, нечего, но открывать кому-либо свои личные файлы мне совершенно не хочется. К тому же я всегда был не в восторге от того, что данные в открытом виде лежат на каждом компьютере, который засинхронизирован с моим аккаунтом Dropbox. Самое время все это безобразие поправить.

Поднимаем EncFS

Справедливости ради стоит сказать, что у сервиса есть официальный wiki (wiki.dropbox.com), где приведены конкретные советы по тюнингу безопасности. Железобетонная правда заключается в том, что данные необходимо шифровать на локальной машине, а в облако их передавать уже в закриптованном виде. В частности, предлагается разместить в папке Dropbox’а контейнер TrueCrypt или FreeOTFE и уже внутри него хранить все конфиденциальные документы. Метод действенный — не поспоришь: даже если аккаунт будет скомпрометирован, злоумышленник не сможет расшифровать данные. И все бы было хорошо, если не одно «но». При таком подходе можно забыть о рациональной синхронизации файлов: при изменении любого документа будет синхронизироваться весь криптоконтейнер целиком, какого бы размера он ни был (например, 1 Гб). К тому же, в этом случае теряется важная опция Dropbox’а, позволяющая откатить любые изменения и вернуться к произвольной версии файла.

К счастью, более изящное решение предлагается все в том же wiki — использовать file-by-file-шифрование, то есть применять криптографию для каждого из файлов в отдельности. Для этого идеально подходит EncFS, вирту альная криптографическая файловая система. При монтировании EncFS указывается директория-источник (исходная директория с зашифрованными файлами, которая может располагаться в Dropbox’е) и точка монтирования. После монтирования каждому файлу в директории-точке монтирования соответствует определенный файл из зашифрованной директории. Таким образом, ты работаешь с файлами в открытом виде, а EncFS прозрачно размещает их зашифрованные версии внутри Dropbox’а. Поскольку каждый файл криптуется в отдельности, Dropbox может синхронизировать изменения инкрементально для каждого из них. Это очень добротная технология, которая давно используется под Linux’ом и основана на технологии FUSE (Filesystem in Userspace), позволяющей программистам создавать виртуальные файловые системы. Несмотря на свои корни, ее сейчас можно успешно использовать как под Mac OS X, так и Windows. Начнем с последней.

Windows

После неприятной истории с системой авторизации Dropbox предприимчивые немецкие ребята оперативно зарелизили утилиту BoxCryptor (www.boxcryptor.com), которая создает в системе виртуальный криптографический диск. Каждый помещенный на него файл автоматически шифруется с использованием стандарта AES-256.

Физически зашифрованные данные размещаются в произвольной директории, например, в папке Dropbox, в то время как на виртуальном диске они находятся в открытом виде, и к ним без проблем можно обратиться из любого приложения. Разработчики поступили очень мудро и не стали изобретать велосипед, а просто реализовали основные возможности EncFS для использования под Windows. И пусть BoxCryptor поддерживает пока не все возможности технологии, но этого вполне достаточно для надежной защиты данных.

Приложение после установки автоматически определяет папку, используемую Dropbox’ом, и предлагает разместить в ней директорию с зашифрованными файлами. Для шифрования данных тебе необходимо придумать парольную фразу, а также выбрать букву для диска, на котором будут располагаться файлы в открытом виде. Если ты не хочешь, чтобы данные без твоего ведома находились в открытом виде, пароль можно не сохранять и вводить его каждый раз, когда ты будешь монтировать диск. Поставив галку напротив «Advanced Mode», ты получишь доступ к некоторым тонким настройкам BoxCryptor. Это в частности может потребоваться, если есть необходимость использовать возможность Dropbox’а для отката к предыдущей версии файла.

Дело в том, что BoxCryptor по умолчанию шифрует и имена файлов, превращая их в абракадабру, тем самым мешая работе системы версионности, которая реализована в Dropbox. Поэтому если такая возможность тебе нужна, то шифрование имен файлов придется отключить.

С этого момента ты должен увидеть директорию BoxCryptor внутри своего Dropbox’а, а в системе должен появиться виртуальный диск (у меня — X:). Теперь у тебя в Dropbox’е есть папка, где ты можешь хранить конфиденциальные файлы. Тут важно запомнить два важных правила. Первое — никогда не сохраняй файлы напрямую в директорию BoxCryptor, это место, где данные хранятся в зашифрованном виде (и в таком же виде синхронизируются с облаком). Поэтому работать с документами надо через тот самый виртуальный диск. И второе — никогда не удаляй из папки BoxCryptor файл encfs6.xml. В нем находится важная для EncFS информация, которая необходима для того, чтобы дешифровать данные. В бесплатной версии программы можно создать логический раздел, объемом не более двух гигабайт, то есть ровно такого же раздела, сколько по умолчанию предоставляет Dropbox. На случай, если тебя это ограничение не устраивает, и деньги платить не хочется, есть открытая реализация EncFS для Windows — encfs4win (gitorious.org/encfs4win). В ней, само собой, никаких ограничений нет.

В основе, как и в случае с BoxCryptor, лежит библиотека Dokan (dokandev.net), которая является аналогом FUSE под Windows и необходима для монтирования в системе сторонних файловых систем.

Linux

Во многих дистрибутивах Linux все необходимое для использования EncFS встроено по умолчанию, но это не всегда упрощает задачу. Важно использовать самую свежую версию разработки (>= 1.7), в которой был исправлен ряд ошибок. А во многих дистрибутивах, к сожалению, поставляется более старый релиз (чаще всего 1.6). Это, к примеру, касается Ubuntu 10.10, которая установлена у меня на одном из ноутбуков. Большой проблемы здесь нет. Нужно лишь установить новую версию EncFS и для удобства работы с ней еще GUI-утилиту Cryptkeeper:

sudo apt-get install encfs cryptkeeper

После окончания установки мы можем запустить Cryptkeeper через меню «Applications - System Tools - Cryptkeeper» и импортировать зашифрованную директорию:

  1. В области уведомлений выбираем «Cryptkeeper - Import EncFS folder».
  2. Далее указываем директорию, где находятся зашифрованные файлы (то есть папку BoxCryptor’а).
  3. И определяем желаемую точку монтирования, через которую мы сможем обращаться к данным в открытом виде.

После этого в меню Cryptkeeper появится пункт для быстрого подключения тома EncFS: например, «Cryptkeeper > /home/step/Documents/Safe». После ввода пароля в системе появится необходимый нам том с расшифрованными файлами. Можно было обойтись и без всяких GUI-утилит, просто подключив EncFS-том в консоли:

encfs ~/Dropbox/BoxCryptor/ ~/BoxCryptor

Первый параметр указывает на расположение зашифрованного тома, а второй — на точку монтирования файлов в открытом виде.

Mac OS X

Установка EncFS под Mac OS X, пожалуй, сложнее всего реализуется из-за необходимости инсталлировать дополнительные инструменты. Но это все равно не займет много времени, а установленные инструменты все равно еще не раз пригодятся в работе. Главная загвоздка тут в том, что все распространяемые бинарники EncFS для макоси безнадежно устарели, поэтому нам придется все собирать вручную.

Порядок действий здесь такой:

1. Чтобы сразу обзавестись компилятором и другими необходимыми инструментами для сборки EncFS, лучше всего установить пакет разработчика. XCode(developer.apple.com). Идеально подойдет бесплатная 3-я версия.

2. Далее потребуется MacFUSE (code.google.com/p/macfuse), портированная под Mac OS X версия проекта FUSE, который в свою очередь использует EncFS. Просто запускаем загруженный MacFUSE.pkg, и установщик все сделает сам.

3. Далее можно было бы установить уже и сам EncFS, но так как это проще всего сделать через менеджер пакетов (а конкретно Homebrew), то придется заинсталлить и его:

ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

4. Вот теперь мы можем загрузить исходники EncFS и собрать их у себя на компьютере. Homebrew сделает все за нас, подгрузив все необходимые зависимости (не зря же мы его ставили):

brew install encfs

5. Все — EncFS в системе! Можно зайти в терминал и примонтировать к системе каталог BoxCryptor’а (чаще всего это ~/Dropbox/BoxCryptor) в ту папку, где будут располагаться файлы в открытом виде (скажем, ~/ Dropbox/BoxCryptor):

encfs ~/Dropbox/BoxCryptor ~/BoxCryptor

От работы в консоли избавит отличная GUI-утилита MacFusion (www.macfusionapp.org) с подключенным плагином для поддержки EncFS (thenakedman.wordpress.com/encfs).

Выбираем альтернативу

BoxCryptor и EncFS, в принципе, не единственная разработка, предлагающая дополнительный слой шифрования поверх Dropbox. Аналогичный функционал (с шифрованием по AES-256) предлагает также SecretSync (getsecretsync.com/ss). На официальном сайте проекта сейчас доступны версии для Windows и Linux, а релиз для OS X обещается в самом ближайшем будущем. Правда, написан клиент на Java, а я при всем своем уважении к этому языку программирования, очень не любою реализованные с его помощью десктопные приложения.

Так что можно сказать, что BoxCryptor повезло :). Попробуем теперь посмотреть на проблему с другой стороны. Раз сам сервис не выполняет те обязанности, которые мы от него ожидаем, то может быть его просто поменять на что-то другое? Задача, как ни крути, не уникальна — есть целый ряд проектов, предлагающих синхронизацию файлов между разными компьютерами и устройствами, но со значительно большим упором на безопасность данных.

Один из наиболее нашумевших из них — Wuala (www.wuala.com), который позиционируется создателями как «безопасное онлайнхранилище». Сервис в последнее время агрессивно развивается и предлагает практически все те же самые возможности, что есть у Dropbox’а. Уже сейчас доступны клиенты для Windows, Linux, Mac, а также iPhone и Android.

Для аутентификации Wuala использует стандарт RSA-2048, а для шифрования файлов — AES-128. Безопасность добавляет еще и распределенный подход сервиса к хранению ресурсов. Дело в том, что в основе сервиса лежит технология, снижающая затраты серверов благодаря использованию простаивающих ресурсов. Когда в хранилище добавляется новый файл, он шифруется и разбивается на большое количество фрагментов. Угадай, где размещаются эти фрагменты? В облаке и... компьютерах других пользователей. Да-да, сервис предлагает юзерам программу «торговли» своими мощностями. Все честно: если пользователь поделится частью своего диска с сетью Wuala, он получает дополнительное пространство в облаке (для этого необходимо, чтобы компьютер был включен не менее 4 часов в день).
Таким образом, жесткие диски Wuala-юзеров составляют распределенную сеть, которая используется сервисом для улучшения скорости загрузки файлов, доступности и сокращения своих расходов. Чтобы гарантировать, что данные никогда не будет утеряны, применяются алгоритмы коррекции ошибок и серьезная избыточность. На старте пользователю бесплатно выделяется 1 Гб, но он может прокачать аккаунт за счет реферальной программы, привлекая других людей (так же, как в Dropbox’е), а также «продажи» своего дискового пространства. По правде говоря, полностью перейти на Wuala я пока не решился.

Есть несколько мелочей, которые пока мешают это сделать. В моей папке Dropbox есть несколько общих папок, которые мы активно используем с другими сотрудниками для совместной работы над документами. Это значит, что перейти на Wuala придется всем.

Приложение для мобильного телефона, хотя и предоставляет доступ к файлам в облаке, но пока сильно ограничено в возможностях. А интерфейс для доступа к файлам через браузер реализован через тормозной Java-апплет. Поэтому связка Drobox+BoxCryptor — мой выбор на данный момент. Все работает, все привычно, все безопасно — короче говоря, мне нравится.

Доступ к шифрованным файлам через веб

При использовании BoxCryptor ты уже не сможешь просмотреть защищенные файлы через веб. Точнее говоря, скачать-то их можно, но только в зашифрованном виде. Выручить может Portable-версия BoxCryptor, которая поможет расшифровать загруженные из облака файлы. Правда, если ты не отключил шифрование имен файлов, то найти нужные документы может быть ой как непросто. Имей это в виду. Вообще Portable-версия BoxCryptor предназначена для использования в тех ситуациях, когда у пользователя ограничены права в системе. Она, к слову, отлично ладит с перемещаемой сборкой Dropbox’а — DropboxPortableAHK (dropportable.ho.am).

Хроника фейлов Dropbox

7 апреля — исследователь Дерек Ньютон рассказал в своем блоге (bit.ly/dropbox_fail) некоторые подробности об авторизации Dropbox. Оказалось, всю информацию для аутентификации программа хранит в файле config.db. Он находится в %APPDATA%Dropbox и представляет собой базу данных SQLite.

Среди многих других полей одно из них — host_id — наиболее интересное. Оно определяется клиентом после первой авторизации и не меняется со временем. И вот в чем засада. Его значение никак не привязано к системе. Скопировав config.db на другую машину, злоумышленник легко получает доступ к данным чужого аккаунта. Без уведомления пользователя! Более того, даже если юзер сменит логин и пароль, тоже ничего не изменится — host_id все равно останется валидным. На данный момент идентификатор привязывается к конкретному устройству и может быть отозван через веб-интерфейс.

19 апреля — Dropbox меняет пользовательское соглашение, напрямую заявляя, что при необходимости может расшифровать файлы пользователей и предоставить их для следствия по законам США.

26 апреля — на GitHub’е появляется открытый проект Dropship (github.com/driverdan/dropship), позволяющий быстро получить в своем аккаунте любой файл, который есть в облаке Dropbox. Все, что необходимо, — знать его хэш. С автором — Владимиром ван дер Лааном — тут же связался главный технический директор сервиса и вежливо попросил убрать исходники. Пользователи программы отреагировали созданием многочисленных зеркал проекта на github и на самом Dropbox. В течение короткого времени им также пришла просьба представителя Dropbox о немедленном удалении файлов проекта.

19 июня — в работу сервиса был запущен релиз с серьезной уязвимостью в системе авторизации. В результате любой пользователь мог зайти в чужой аккаунт, не зная пароля. Dropbox оправдывается, что за время, которое ушло на исправления уязвимости, вход осуществляли менее 1% пользователей.

Содержание
ttfb: 12.770175933838 ms