28 августа 2013 в 09:06

Реверс-инжиниринг клиента Dropbox перевод

imageДо последнего времени существовали сомнения относительно возможности реверс-инжиниринга сильно обфусицированных приложений, написанных на Python. Недавний реверс-инжиниринг двумя программистами клиента Dropbox доказал, что это возможно.

В феврале этого года на Mobile World Congress, CEO Дрю Хьюстон радостно сообщал, что Dropbox, известный сервис для хранения данных, преодолел отметку в 100 миллионов пользователей, и эти 100 миллионов пользователей загружают более миллиона файлов на сервера Dropbox каждый день. Еще два года назад у Dropbox было всего 25 миллионов пользователей и гораздо меньше загрузок в день.

С какой целью я упомянул обо всем этом? Успех Dropbox наступил не без преодоления нескольких проблемных моментов, и похоже у команды сервиса теперь появится новая головная боль — и все из-за Dhiru Kholia и Przemysław Węgrzyn.

Заглядываем под капот

В своем отчете "Взгляд внутрь (Drop) box", Dhiru и Przemysław переходят сразу к делу:
«Мы описываем методы для обхода двухфакторной аутентификации Dropbox и для воровства Dropbox-аккаунтов. Кроме того, приводятся базовые принципы перехвата данных, передаваемых с помощью SSL, при помощи техник code injection и Monkey-Patching»

Dhiru и Przemysław достигли подобного результата благодаря реверс-инженирингу клиента Dropbox. Казалось бы, в этом ничего удивительного, но только если не учитывать главного — уникальность их работы в том, что им удалось выяснить, как можно сделать реверс-инжиниринг обфусицированного приложения на Python.

Клиент состоит из модифицированного интерпретатора Python, выполняющего обфусицированный байткод на Python. Однако, Dropbox — проприетарная платформа, исходные коды которой закрыты от клиентов, и более того — даже API, используемый клиентом, нигде не задокументирован. Поэтому все прошлые попытки реверс-инжениринга не увенчивались особым успехом. На этот же раз Dhiru и Przemysław не только умудрились достичь заметных результатов, но и выйти за рамки одного приложения, на что и намекает отчет:
«Описанные техники можно применить для реверсинга других закрытых приложений на Python»

Последствия

Исследователям удалось раскрыть много секретов Dropbox. Сначала они занялись изучением процессов регистрации, логина и функцией «Launch Dropbox Website» для кражи аккаунта. Затем им удалось выяснить еще и следующее:
  • Как перехватывать SSL трафик с серверов Dropbox
  • Как обходить двухфакторную аутентификацию Dropbox
  • Как создать open-source Dropbox клиент

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

Авторы исследования надеются, что проведенный инжиниринг вынудит разработчиков Dropbox сделать возможность его повторения в разы сложнее. В то же время, они ясно дают понять, что особого смысла в закрытом коде нет:
При этом, нам неясно, зачем Dropbox прилагает такие усилия для того, чтобы реверсинг стал невозможен. Большая часть их «секретных ингридиентов» все равно хранится на стороне сервера, который уже и так неплохо защищен. Мы не уверены, что меры по анти-реверсингу приносят какую-то пользу и пользователям, и Dropbox.

Как сообщают другие специалисты, в документе содержится пошаговые инструкции для «распаковки» исходного кода клиента Dropbox, чего явно не желала сама компания. Теперь же многие смогут взять этот исходный код и использовать его в своих целях. Другое дело в том, что нам неизвестно, не проделывал ли кто-то подобное и раньше, используя потом полученный реверсинг в своих целях.
Перевод: Michael Kassner
Владимир Маслов @HotWaterMusic
карма
168,7
рейтинг 6,4
Чёрный Отряд
Самое читаемое Разработка

Комментарии (18)

  • +2
    «100 миллионов пользователей загружают более миллиона пользователей на сервера Dropbox каждый день» — нет ли тут ошибки?
    • +5
      Спасибо, поправил.
      Хм, какая отличная рекурсия была.
  • +60
    Сам usenix'овский документ написан очень приятно.

    Кратко по опасностям: влезть в чужой дропбокс можно, только имея доступ к компьютеру жертвы, на котором установлен дропбокс.

    Обфускация не такая уж и сложная (сменен magic number в .pyc, зашифровано содержимое .pyc, изменены номера опкодов), способ обхода вполне классический (например, позволить dropbox'у самому расшифровать файлы и задампить их на диск). Для этого нужен довольно средний навык реверсинга. Далее — обычный декомпилятор для Питона.

    Сам сетевой протокол дропбокса, судя по всему, вполне вменяемый. То, необходимые данные могут быть извлечены с компьютера жертвы следует уже из того простого факта, что dropbox логинится на сервер автоматически после старта.

    Двухфакторная авторизация «обходится» тем, что при логине с компьютера она просто не используется (а что, кто-то этого не замечал?).

    SSL перехватывается путем внедрения в процесс dropbox (что опять же требует доступа на компьютер жертвы). MITM не проходит, т.к. сертификаты вшиты в сам клиент.

    Упомянутый remote exploit на самом не такой уж remote, потому что он подразумевает, что мы сначала через metasploit заходим на компьютер жертвы по ssh (что требует либо подбора пароля, либо багов в клиенте).

    Вроде ничего не забыл. В целом ничего трагичного не вижу :)
  • +5
    Действительно, открыли бы уже давно исходники своего клиента.
    Если раньше у них могли быть сомнения, то теперь бояться поздно нечего (:
  • +1
    … и сервера тоже!
  • +1
    До последнего времени существовали сомнения относительно возможности реверс-инжиниринга сильно обфусицированных приложений, написанных на Python.
    Эм… Я не пишу на Питоне, но вот же была статья habrahabr.ru/post/189772/ о трудностях обфускации Питоновского кода.
    • 0
      Ну, так вы почитайте, какие мега костыли там предлагают.
      • 0
        У дропбокса всё серьёзнее. :)
        Они применили сразу несколько техник, начиная от смены опкодов и заканчивая шифрованием pyc файлов, а я предложил просто шифровать py файлы. Так что у дропбокса костылей побольше будет, но и защита, относительно, понадёжнее.
        • 0
          Ну о том и разговор :)
  • 0
    Интересно, зачем они это делали, у Dropbox ведь вполне вменяемый публичный API.
  • +3
    Либо я чего-то путаю, либо что-то тут не так :) Всегда считал, что "«распаковка» исходного кода" это нечто иное, нежели реверс-инжиниринг. Реверс-инжинирингу обфускация исходного кода никак не должна мешать, так как в нём при разработке приходится отталкиваться от имеющегося функционала, а не кода… само собой наличие исодников сильно упростит процесс (и сделает его бесполезным?), но всё равно его смысл в другом…

    Поправьте, если ошибаюсь.
    • 0
      Насколько вижу я, это все же реверс-инжиниринг. Ведь в приложении не обычный Python байт-код, а неким образом преобразованный. Соответственно и интерпретатор другой.
      Так что чтобы расшифровать исходники на Python, нужно сначала зареверсить интерпретатор и понять, какие преобразования были применены.
  • –1
    >> 100 миллионов пользователей загружают более миллиона файлов на сервера Dropbox каждый день

    У меня одного стоит автоматическая синхронизация кода проектов в Дропбокс?
    • +5
      Для проектов больше подходят SVN/GIT/Mercurial/etc.
      • +1
        Я наверное неправильно выразился. Конечно есть репозиторий, но коммиичу я туда только выполненые таски. В промежутках между коммитами, для сохранности изменные файлы синхронизируются в дропбокс, синхронизацию выполняет IDE.
        • –1
          Для этого больше подходят Git/Mercurial/etc
          • +3
            Они больше подходят для контроля версий, а не для бэкапов и сихронизации рабочей копии.
  • 0
    Его не так уж и сложно расковыривать до некоторого уровня, я при минимальных навыках реверс-инжиниринга вполне смог вытащить всякие «скрытые» команды, которые можно в командный сокет посылать, а это уже кое-что, как минимум можно более удобный десктопный клиент/плагин написать. И не я один такой умный, в интернете/гитхабе можно достаточно результатов «расковыривания» найти, люди просто не особо пиарятся на этом.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.