科技趨勢

如果Android有顆心,這顆心會流血嗎?

OpenSSL Heartbleed漏洞讓遠端駭客利用竄改的封包並觸發緩衝區溢位來竊取記憶體中的機密資料[1]。Heartbleed漏洞震驚了業界,因為它能讓駭客傳送被竄改的SSL heartbeat訊息,並藉此竊取受駭網站上的機密資料。由於伺服器也能傳送heartbeat訊息給用戶端,因此惡意伺服器也能攻擊用戶端並竊取機密資料。我們在Android平台上發現某些Android程式含有具Heartbleed漏洞的OpenSSL函式庫,而且下載次數高達1.5億次。

目前Google Play中有17個號稱可偵測Heartbleed漏洞的防毒程式,其中六種會掃描Android平台上的OpenSSL函式庫,以找出漏洞。不過,這種方法並無法有效偵測出Android上的Heartbleed漏洞。除了特定Android版本(4.1.0-4.1.1為主),大部分的Android平台都沒有這樣的弱點,因為他們都是使用不會受影響的OpenSSL函式庫或已停用OpenSSL heartbeat功能。

不過,Android程式經常使用自建函式庫,因此會直接或間接地用到易受攻擊的OpenSSL函式庫。換句話說,即使Android平台本身安全無虞,駭客仍可對易受攻擊的程式發動攻擊,例如劫持網路連線、將程式導引至惡意伺服器,並將被竄改的heartbeat訊息傳送到程式,以竊取機密資料。

我們研究了有安全弱點的OpenSSL函式庫,並確認了攻擊的事實,結果發現易受攻擊的大多數是遊戲程式,以及少數的文書應用程式。雖然遊戲程式通常沒有太多重要資料,但駭客仍可竊取OAuth代碼(例如存取與更新代碼)並入侵玩家帳號,如此一來,駭客就能用這些資料入侵相關的社群網站帳號,並更改設定。至於遭受Heartbleed漏洞攻擊的辦公室文書軟體可能導致機密資料外洩,因此危險性較高。

在調查含有OpenSSL函式庫安全弱點的辦公室文書軟體時,我們很驚訝地發現它們並不會遭受Heartbleed攻擊。為什麼呢?經過深入探討,我們發現這些程式不是原生碼的連結有問題,就是含有無效的程式碼。因此,當駭客試圖啟動SSL功能時,程式會直接用Android作業系統內無安全弱點的OpenSSL函式庫,而不會用程式提供的有弱點函式庫。使用原生碼開發的Android應用程式經常會出現這種連結錯誤,沒想到這種錯誤卻歪打正著地降低了程式被攻擊的風險。

在Google Play的17個Heartbleed漏洞偵測程式中,只有六個會針對裝置上已安裝程式檢查Heartbleed漏洞。在這六個程式中,其中兩個的檢查結果顯示所有已安裝的程式都是安全的,包括我們確認已遭受攻擊的程式、其中一個未顯示任何掃描結果、另一個未掃描正確的OpenSSL版本,只有剩下的兩個程式有進行深度檢察。雖然這兩個程式把某些安全程式標記為受攻擊的程式,不過我們認同此份報告的有效性,因為內容提到了漏洞與連結錯誤。我們也發現這17種Heartbleed漏洞偵測程式中有幾個是虛有其表的,不僅無法實際偵測漏洞,也不會顯示偵測結果,因此充其量只是廣告軟體。

我們於4月10日檢視了5.4萬個Google Play上的應用程式(每個程式下載率都超過10萬次),發現至少有2.2億次的下載遭受Heartbleed漏洞攻擊。我們也通知程式的開發人員與函式庫廠商,告知產品有OpenSSL Heartbleed漏洞。幸虧大多數的開發人員與函式庫廠商都很重視Heartbleed漏洞這個問題,並於修復後推出更新版本。至4月17日為止,遭受攻擊的程式下載率已降到1.5億次。

[1] CVE-2014-0160漏洞摘要