按 Enter 到主內容區
:::

TWCERT-電子報

:::
發布日期:
字型大小:

更新Mac OS平台專屬Google Updater以改善本機擴權缺點

CVE編號 CVE-2018-6084
影響產品 Updater 1.2.10.105之前版本
張貼日 2018-03-23
上稿單位 TWCERT/CC

●概述:
在Mac OS X 10.4版以後作業系統,能運行Google Updater,即是Google產品安裝工具,能集中檢視已安裝及可供安裝之軟體現況,及執行安裝、更新、解除等管理層操作,近日Updater遭披露漏洞,因Updater服務要求root級權限,所產生distributed objects卻不具備安全使用條件,本機駭客利用plist序列化程式碼錯誤處理物件,將假造內容當作CFString來處理,繼之賦予函數_flattenPlist( )惡性參數值,恐導致stack指標大幅偏差,落於有效堆疊空間之外,觸發memory corruption及後續損害,Google基於安全顧慮,平素罕見其公開弱點細節,且該弱點被視為高危險程度,想來是修補版已釋出,加上Updater能自體更新,索性讓Project Zero成員ianbeer主動介紹探勘技術也無妨,但據悉尚有數十處潛藏類情,可能讓攻擊者有機可趁,原因在開發階段未導入安全設計規範,致使程式結構存在眾多不當跨越權限邊界的分散式物件。
●編註:
(1)簡述Distributed computing
資訊科學領域中,分散式運算(Distributed computing)議題,旨在研究分散式系統(Distributed system)運作方式,計算過程牽涉分散式物件(distributed objects) — 以下縮寫D.O.,D.O.是跨記憶體位址、跨程序、甚至跨網路電腦的物件,藉此實踐資料共享與交互援引服務。
(2)Google Updater序列化錯誤
這回漏洞源頭正是distributed objects,在Mac OS平臺Updater隨著 Chrome一起運行,為管理眾多軟體,必須建立root級的service,該服務為com.google.Keystone.Daemon.UpdateEngine,位於/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/GoogleSoftwareUpdateDaemon,如此高權限的服務,提供一個D.O.並開啟API以進行Google軟體更新,跨權限邊界的D.O.幾乎無法安全使用。GoogleSoftwareUpdateDaemon程序也沒真正過濾物件,僅僅序列化或反序列化,將object轉換成plist。
在Mac的世界裡,Core Foundation(CF)架構是C語言介面,並非由Objective-C實現,CF為iOS應用程序提供基本資料管理和服務,設想本機攻擊者打算從plist序列化程式碼入手,憑藉著D.O.放行proxy物件,便可越權載入全體objective-c method呼叫,詐騙plist序列化程式碼把惡意內容當作 CFString來處理,讓Updater序列化過程出紕漏,之後再偽造CFTypeID回傳給 CoreFoundation的某段函數_flattenPlist( ),駭客假冒成CFDictionary,胡亂回傳數值供運算,若給定某負數用來計算stack空間,造成堆疊指標大幅偏差,遠離stack配置位址,則觸發memory corruption,此為其中一類攻擊手段,畢竟濫用分散式物件相應之root權力,能做的事還很多。
(3)程式隱憂
前段所提及plist序列化程式碼,原非設計來對抗惡意proxy物件,因為D.O.壓根就不該跨越權限邊界,本文僅論及單一漏洞個案,按ianbeer研究員說法,尚有數十處潛藏類情,讓攻擊著有機可趁,控制proxy物件與系統code互動,然而系統code本就不預期作如此用途,可以預測隨時間推移,還有更多CVE編號消耗在此類事件。
歸根究底還是開發階段未曾導入安全性設計規範,只要開發者不跨權限使用D.O.,可省下很多麻煩,Apple公司對開發者有二條忠告,第一是思考背景程序如何運作,其次思考如何與其他程序溝通,在mac OS平台開發軟體,應結合沙箱與XPC權限隔離機制,個別process會配給獨立沙箱以規範所能行使的操作種類,每個process僅能擁有所需最低權限,而非完整程式所需的較大權限,工作職掌切割,同時也對權力切割,就是權限隔離。

回頁首