香港電腦保安事故協調中心發表 “應用程式保安風險報告”,但內容錯漏百出不盡不實

香港 Google Play 商店應用程式保安風險報告

香港電腦保安事故協調中心 (HKCERT) 在官方網頁內發表 “香港地區 Google Play 商店應用程式保安風險報告 (2019年4月)” [1],內裏提到檢測中發現 4款應用程式為高風險,包括;蘋果動新聞, 三國殺繁體版,但細閱報告分析後發現錯漏百出,而且內容不盡不實。

HKCERT 聯同國家互聯網應急中心 (CNCERT) 合作,從 Play Store 下載的應用程式進行惡意及可疑行為檢測。報告檢測了 200 款 App,發現其中 4 款為高風險應用程式,並指根據程式行為的安全威脅,列出的應用程式可被定義為高風險應用程式。

HKCERT App Check

細看 “深度分析” 附件
這份報告內有一個 “高風險應用程式深度分析” 附件 [2],詳列了上述四個 App 內的所謂可疑高危之處例如:讀取手機號碼, 通過連線訪問網絡 等,我們就抽取一些來研究一下。

讀取手機號碼
報告提到 “蘋果動新聞” 讀取手機號碼,並附了下面一段程式碼,報告更 Highlight 了 getLineNumber() 這一行。

HKCERT App Check

getLineNumber 就是讀取手機號碼?? 看看 getLineNumber() 是從 variable arg7 進行的,而 arg7 本身是一個 StackTraceElement 的 Variable。

StackTraceElement [3] 在 Android Java Program 內是用於追查程式碼執行時遇到的錯誤,而 getLineNumber() 就可找到對應程式碼行數,讓開發人員方便 Debug。

public int getLineNumber ()

Returns the line number of the source line containing the execution point represented by this stack trace element. Generally, this is derived from the LineNumberTable attribute of the relevant class file

getLineNumber() 跟電話號碼完全沒有關係的,到底要怎樣才可會將 StackTraceElement getLineNumber() 當成電話號碼呢?

通過連線訪問網絡
報告指連線訪問網絡是可疑之處,但 “蘋果動新聞” 這個 App 又怎可能不連線上網呢。再看看報告內貼出 “連線訪問網絡” 所謂可疑程式碼。

HKCERT App Check

這段程式碼是執行 http connection getResponseCode(),跟著再比較是否細過 200 或大過 300,到底是甚麼意思呢?大家上網偶然都會遇 404 Not Found 的網頁,404 就是網站傳回的 Response Code。當瀏覽網頁時,網站會傳回 Response Code 標示成功或錯誤,而 200 就是 OK, Success的意思,其他數值例如 301, 400, 404, 500 就用於代表不同的錯誤如網頁搬遷, 找不到, 伺服器錯誤 [4]。這段程式碼純粹判別是否有錯誤,根本就是零風險。

傳送手機資料
報告又指 App 會傳送手機資料。

HKCERT App Check

看看報告內貼出的程式碼,會看到是一個 shareToMessenger 的 function,內裏就是呼喚 Android 系統內的 Intent [5] 功能進行 SEND 動作傳送至 com.facebook.orca,而 external_uri 應該就是網址。其實這段程式碼就是一般 App 內的分享功能,App A 透過 Android Intent 將資料傳遞至App B,例如在App內將文章分享至 Facebook, 分享至 Whatsapp 都會使用到 Android Intent 進行。整段程式碼都是使用十分標準的 Android 功能,而對應的也是 Facebook Messenger package 名稱,就是將網址分享至 Facebook Messenger。分享至 Facebook Messenger 完全跟傳送手機資料無關係呢。

Soul Knight App 讀取手機號碼
報告內提到另一隻 Soul Knight App 有 “讀取手機號碼”,指這是高風險行為,我們可以看看報告內貼出的程式碼。

同樣地標記著 v3 variable 的 getLineNumber() 這個 Function,大家可以看看程式碼內 v3 其他 functions,包括有 getClassName(), getMethodName(),這些都應該是關乎程式碼的功能,並不是跟電話號碼相關呢。再看看緊接幾行的 y.a, y.b function 內容,有 timestamp, message, sourceFile, lineNumber, methodName, stackTrace 這些幾可肯定是用作 log 記錄程式碼內的錯誤問題呢,甚麼 source 檔案, 第幾行, 那一個 method 還有 stacktrace,怎可能跟電話號碼相關呢。

又是跟上面一樣,不知所謂地將 getLineNumber() 當成讀取電話號碼。

沒有分析的報告
細看這份所謂的深度分析,每一個所謂可疑之處都只是單純 call function,沒有交代程式碼 call function 後獲得資料的用途。一個 App 讀取一項資料並不代表它有可疑,讀取了的資料之後如何應用,取用一個權限是否合理才是重點。”蘋果動新聞” 連線訪問網絡有甚麼可疑呢?若果單純 “連線訪問網絡” 就是可疑,那麼天文台天氣 App 又或交通 App 都會有可疑。

整份報告完全沒有進行分析,只是單純看到程式碼有 call function 就判斷為危險,而且內容更是錯漏百出,將 StackTraceElement 的操作當成讀取電話號碼。這份報告真是連學生做的 Project 也不如,HKCERT 枉為一個 IT 專業呢。

References:
[1] 香港地區 Google Play 商店應用程式保安風險報告 (2019年4月)
[2] 香港地區 Google Play 商店應用程式保安風險報告 (2019年4月) 附件二
[3] Android Developer Documentation Reference – StackTraceElement
[4] HTTP/1.1: Status Code Definitions
[5] Android Developer Documentation Reference – Intent

6 Comments on “香港電腦保安事故協調中心發表 “應用程式保安風險報告”,但內容錯漏百出不盡不實”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。