臉部辨識裝置爆資安漏洞

為了進一步了解臉部辨識裝置的資安問題,趨勢科技分析了四款不同裝置,結果發現這些裝置都有可能遭駭客用於不法用途。

生物辨識保全設備,如指紋掃描機、虹膜掃描機、臉部辨識攝影機等等,已廣泛應用於各種場所的出入管制。但這些生物辨識驗證設備通常需仰賴大量的電腦運算,例如,傳統臉部辨識保安設備會透過外部服務來進行電腦運算,以辨識使用者。安裝在現場的攝影機只負責擷取影像,然後將影像傳送至雲端服務來進行運算。當部署在大規模環境時,使用者的身分驗證過程就可能發生延遲,此外,當有大量的影像資料必須傳送到驗證中心時,網路頻寬的消耗也會是個問題。 

為了解決這些問題,保全業者開始在臉部辨識門禁裝置中導入邊緣運算能力。在此一架構下,裝置本身就是一個邊緣運算節點,具備完整的運算能力直接可以對使用者的影像進行驗證。這些具備邊緣運算能力的裝置只有在一些協調和維護工作時才會需要用到外部服務。 

這樣的架構既可降低延遲,又不必占用網路頻寬,因為不需在網路上傳輸使用者的影像。然而,讓這些低功耗的「非智慧」裝置具備更強大的運算能力並承擔更多的認證責任,卻可能引起資安上的疑慮。

為了進一步深入了解臉部辨識裝置的資安問題,趨勢科技分析了四款不同裝置的安全性:ZKTeco FaceDepot-7B、Hikvision DS-K1T606MF、Telpo TPS980 與 Megvii Koala。

實驗環境 


這些裝置與後端伺服器 (若有的話) 都安裝在一個隔離的測試網路內。我們將模擬這些裝置在一般企業環境內的正常運作方式。如圖 1 所示,此環境包含三大元素: 

  • 門禁裝置:也就是我們實驗測試的對象。 
  • 中間人 (MitM) 裝置:此裝置用來擷取門禁裝置與後端伺服器之間的網路封包。 
  • 管理伺服器:門禁裝置在出廠時通常會搭配一套伺服器軟體,伺服器軟體就安裝在這台管理伺服器上。
A diagram of the setup we used to evaluate the security of the access control devices
圖 1:用來驗證門禁裝置安全性的測試環境。

裝置硬體的弱點

ZKTeco FaceDepot 7B 室內臉部辨識工作站


儘管此裝置本身是一台強固型平板,但裝置底部卻有一個外露的 USB-A 連接埠 (參見圖 2),所以有可能被駭客所利用。這個 USB 連接埠原本是用來讓技術人員更新裝置的韌體,但不肖的使用者同樣也能透過這個連接埠在裝置上安裝惡意的 Android 軟體套件 (APK) 檔案。

An exposed USB port at the bottom of the ZKTeco access control device
圖 2:ZKTeco 門禁裝置底部外露的 USB 連接埠。

Telpo TPS980 門禁管制終端機

此裝置具備一顆前置鏡頭,用來進行臉部辨識,高階機型則有兩顆鏡頭及一個紅外線相機。如圖 3 所示,裝置的背面提供了 RS-485、Wiegand 以及 數位輸出介面,還有一個用來除錯的 USB 連接埠,裝置的背面還印著裝置的序號。我們將在後面討論這些功能如何遭駭客利用。

The front and back of the Telpo access control device
The front and back of the Telpo access control device
圖 3:Telpo 門禁裝置的正面和背面。

濫用系統管理權限 



此裝置唯一的安全機制就是密碼。然而,只要取得裝置背面所印的序號,我們就能利用  cURL 發送一個指令到 Telpo 的雲端伺服器來取得裝置的密碼與其他敏感資訊: 

cURL command
cURL command

取得密碼之後,我們就能自由管理該裝置,例如:註冊一個新的使用者、變更裝置參數 (例如活體偵測參數) 等等。(活體偵測是一種用來分辨靜態影像與真人影像的功能)。如果將裝置的這項功能關閉,裝置就很容易被靜態影像所騙。)

此外,所有綁定同一個 Telpo 雲端帳號的裝置都共用相同的密碼,所以我們也可以存取其他的裝置。

使用「client_secret」這個參數和裝置序號所得到的資訊 (參見前面的程式碼),我們還可以再利用「access_token」這個參數來取得遠端管理裝置所需的金鑰,例如下圖的 cURL 指令: 

cURL command 2
cURL command 2

取得了 access_token 之後,我們就能從遠端管理連網的裝置。遠端管理可執行的動作包括:取得使用者名單 (及照片) 、註冊新的使用者、更新使用者詳細資訊 (姓名和照片)。駭客在使用這項技巧時,唯一不方便地方的只有金鑰在產生之後一個小時就會自動過期失效。

透過 USB 連接埠植入惡意檔案


此裝置就像一般的 Android 裝置一樣,換句話說,駭客可以使用 USB 連接埠來啟動 MTP (媒體傳輸協定) 功能,並且 (在裝置預設情況下) 雙向傳輸檔案。所幸,Telpo 已經停用了裝置上的 Android Debug Bridge (adb) 指令列工具,所以使用者無法直接在裝置上安裝應用程式、修改系統設定、傳輸檔案或其他裝置功能。 

不過,駭客還是可以連接 USB 埠來蒐集使用者資訊。所有已註冊使用者的臉部照片都儲存在「/Telpo_face/Registered Image/」目錄底下。駭客可取得這些檔案,每個檔案都是以使用者的名稱加上內部識別碼來命名,例如「John Doe-1368.jpg」。

無加密也無安全機制的網路流量

ZKTeco FaceDepot 7B 室內臉部辨識工作站


裝置與伺服器之間的網路流量全都透過純文字 HTTP 通訊進行,這等於是敞開大門讓駭客進出,因為駭客只要連上 IP 攝影機所在的網路,然後監聽裝置與伺服器之間的網路封包,就能蒐集到所有他們想要的資訊。 

其中對駭客最重要的資料就是存取金鑰,這是裝置與伺服器之間所共同保守的機密資料,通常是在裝置首次向伺服器註冊時所產生。但我們卻能取得這個金鑰,因為它會隨附在裝置發出的每一個 HTTP 請求的 Cookie 當中 (參見圖 4)。

The token value stored as a cookie
The token value stored as a cookie
圖 4:Cookie 中的金鑰。

根據我們所觀察到的情況,伺服器辨識 IP 攝影機的唯一方式就是根據這個金鑰。所以,一旦取得這個金鑰,任何 HTTP 用戶端都能假冒成門禁裝置跟伺服器溝通。在測試時,我們在取得了金鑰之後便能使用 cURL 來假冒成門禁裝置。此外我們也觀察到這個金鑰似乎永遠不會過期,我們在兩星期之後再使用相同的金鑰來做相同的實驗,結果還是一樣有效。 

使用 cURL 來註冊新使用者

只要是擁有邊緣攝影機裝置系統管理權限的使用者,就能註冊新的使用者。當系統管理員提供新使用者的照片和個人資料之後,裝置就會將這些資料上傳到伺服器。正如前面所述,伺服器是透過金鑰來辨認裝置 (而該金鑰卻很容易從純文字通訊封包中取得)。 

擷取到的金鑰之後,我們就能發送 HTTP 請求給伺服器來註冊新使用者。以下兩道 cURL 指令示範如何向伺服器註冊新使用者: 

cURL command 3
cURL command 3

第一道 cURL 指令先註冊新使用者的 Metadata,此範例將使用者 ID 和 PIN 碼都設為「11111」,權限設為「0」(一般使用者),並取名為「Bogus」。第二道 cURL 指令設定新使用者的照片,該照片將作為臉部辨識的基礎。裝置會將照片上傳到伺服器,接著再由伺服器發送到其他連網的門禁裝置。 

「userdata.post」檔案中含有我們經由 POST 請求送交給伺服器的資料。此範例中的內容如下: 

cURL command D
cURL command D

當下次伺服器與所有連網裝置同步時,所有裝置就會認得新的使用者。

利用 cURL 將使用者提升為系統管理員

前述的金鑰可用來將使用者提升為系統管理員,我們使用以下 cURL 指令來執行這項工作: 

cURL command E
cURL command E

cURL 指令將使用者權限設定成「14」,這樣就能將使用者變成系統管理員。當下次伺服器與所有連網的 IP 攝影機同步時,所有裝置就會認得新的系統管理員。

如同前面所示,任何人只要取得了金鑰,就能假冒裝置來跟伺服器溝通。此外我們也發現還可以蒐集使用者的照片並擷取更新指令的資料。

Megvii Koala 臉部辨識閘門


Megvii Koala 共有兩種版本:一個是線上版本 (資料庫放在雲端),另一個是離線版本 (資料庫放在企業內)。在離線版本中,門禁裝置與伺服器之間的通訊是透過 HTTP 協定,但由於 HTTP 協定是使用純文字內容,因此很容易遭到遠端攻擊。 

我們發現我們可以假冒某個連網的門禁裝置來發送資料給伺服器,且伺服器可辨識並接受這些資料。我們使用的是裝置的網路卡 (MAC) 位址,該位址可利用 Nmap 在純文字的網路封包中找到,有時候也會印在裝置的背面。我們在 cURL 指令中使用此 MAC 位址來騙過伺服器,讓伺服器對某個已註冊的使用者進行身分驗證,然後打開門鎖。以下示範這項技巧:

cURL Command F
cURL Command F

指令中所用到的數值說明如下: 

  • MACADDRESS:這是門禁裝置的網路卡 (MAC) 位址。 
  • 0:此數值用來設定「fmp_threshold」參數以便關閉活體偵測功能。 
  • mugshot.jpg:這是已註冊使用者預先拍好的照片。伺服器會使用這張照片來進行臉部辨識。 

如果作業成功,伺服器會傳回以下 JSON 資料: 

JSON Data
JSON Data

在回傳的 JSON 資料當中,最重要的是: 

JSON Data B
JSON Data B

若「can_door_open」數值為「true」,那麼門鎖就會打開。 

要使用這項技巧,駭客必須先拿到一張已註冊使用者的照片,但這其實一點都不難,隨便上社群網站搜尋一下就能找到某家公司員工的照片。有了照片之後,駭客就能從遠端開門,即便使用者根本不在場。


Hikvision DS-K1T606M 臉部辨識終端機


我們發現這套裝置與伺服器溝通時似乎是使用客製化編碼的二進位格式。不過有跡象顯示其通訊協定並無加密,例如,我們可以從網路封包當中讀取到裝置的序號。

但就算它是使用二進位編碼的通訊協定,在手邊沒有文件說明的情況下,我們還是可以從伺服器與裝置之間的網路封包中擷取出一些資料。當有新的使用者註冊自己的個人資料及大頭照時,裝置會在下次與伺服器同步時將該資料上傳。在同步的過程中,我們就能從網路封包當中擷取到使用者資訊,甚至是臉部辨識用的照片。

最佳實務原則與防範措施


針對某種特殊技術的資安最佳實務原則,通常很少能夠應用在其他領域。這一點從 HTTP 協定應用在 API 通訊時就很顯而易見。HTTP 協定是 1990 年代針對桌上型電腦網路瀏覽器而設計,多年來也出現了一些強化其安全的實務作法,例如:強化通訊協定本身、將通訊加密、確保連線階段無法被重複使用等等。邊緣運算是從舊技術衍生出來的一個相對較新的領域,許多邊緣運算裝置的製造商都尚未導入前述安全實務作法。根據我們研究的個案顯示,雖然一些重要裝置 (如門禁攝影機) 使用的是 HTTP 這類經過時間考驗的通訊協定,但是其相關系統卻缺少了一些重要的資安措施。

要防範這類裝置所衍生的風險,企業使用者可遵從以下幾項安全原則:

  • 檢查裝置本身的安全性,並針對邊緣運算裝置進行風險評估。 
  • 妥善管理硬體本身的弱點,例如印在裝置上的識別資訊,以及暴露在外的連接埠。
  • 將邊緣裝置與相關伺服器隔離在自己的網路內,讓外界無法存取。 
  • 導入網路式 IP 過濾 (例如採用防火牆或存取控管清單),只允許經過核准的網路端點之間彼此通訊。

我們在研究報告當中還發現了一些其他資安問題,同時也提供了額外的防範建議,詳細內容請參閱「身分辨識與驗證:如何騙過門禁邊緣裝置」(Identified and Authorized: Sneaking Past Edge-Based Access Control Devices)。

原文出處:Exploitable Flaws Found in Facial Recognition Devices 作者:Vincenzo Ciancaglini、Joey Costoya、Philippe Lin、Roel Reyes
2020 年 9 月 22 日