《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 對(duì)React Native 生物識(shí)別庫(kù)的安全性分析研究

對(duì)React Native 生物識(shí)別庫(kù)的安全性分析研究

2021-06-03
來(lái)源: 嘶吼專(zhuān)業(yè)版

  0x01 基礎(chǔ)概述

  許多應(yīng)用程序要求用戶(hù)在訪(fǎng)問(wèn)任何內(nèi)容之前先在應(yīng)用程序內(nèi)部進(jìn)行身份驗(yàn)證。根據(jù)其中包含的信息的敏感性,應(yīng)用程序通常有兩種方法:

  · 用戶(hù)進(jìn)行一次身份驗(yàn)證,然后保持身份驗(yàn)證,直到他們手動(dòng)注銷(xiāo)為止;

  · 用戶(hù)保持登錄狀態(tài)的時(shí)間不會(huì)太長(zhǎng),并且在一段時(shí)間不活動(dòng)后必須重新進(jìn)行身份驗(yàn)證。

  第一種策略雖然對(duì)用戶(hù)非常方便,但顯然不是很安全。第二種方法相當(dāng)安全,但是對(duì)用戶(hù)來(lái)說(shuō)卻是一個(gè)負(fù)擔(dān),因?yàn)樗麄兠看味急仨気斎肫鋺{據(jù)。實(shí)施生物特征認(rèn)證可以減輕這種負(fù)擔(dān),因?yàn)檎J(rèn)證方法對(duì)用戶(hù)而言變得相當(dāng)容易和快速。

  開(kāi)發(fā)人員通常不會(huì)從頭開(kāi)始編寫(xiě)與操作系統(tǒng)的集成,而通常會(huì)使用框架或第三方提供的庫(kù)。當(dāng)使用跨平臺(tái)的移動(dòng)應(yīng)用程序框架(例如Flutter,Xamarin或React Native)時(shí),尤其如此,其中需要在特定于平臺(tái)的代碼中實(shí)現(xiàn)此類(lèi)集成。由于身份驗(yàn)證是一項(xiàng)對(duì)安全性至關(guān)重要的功能,因此重要的是驗(yàn)證這些第三方庫(kù)是否已安全地實(shí)現(xiàn)了所需的功能。

  在此博客文章中,我們將首先看一下生物特征認(rèn)證的基本概念,以便我們隨后可以研究提供生物特征認(rèn)證支持的多個(gè)React Native庫(kù)的安全性。

  我們分析了五個(gè)提供生物特征認(rèn)證的React Native庫(kù)。對(duì)于這些庫(kù)中的每一個(gè),我們分析了生物識(shí)別認(rèn)證的實(shí)現(xiàn)方式以及它是否正確使用操作系統(tǒng)提供的加密原語(yǔ)來(lái)保護(hù)敏感數(shù)據(jù)。

  我們的分析表明,五個(gè)分析的庫(kù)中只有一個(gè)提供了基于結(jié)果的安全生物特征認(rèn)證。其他庫(kù)僅提供基于事件的身份驗(yàn)證,這是不安全的,因?yàn)閮H對(duì)生物特征認(rèn)證進(jìn)行驗(yàn)證,而實(shí)際上并未以密碼方式保護(hù)任何數(shù)據(jù)。

  0x02 生物特征識(shí)別

  生物特征認(rèn)證允許用戶(hù)使用其生物特征數(shù)據(jù)(指紋或面部識(shí)別)對(duì)應(yīng)用進(jìn)行認(rèn)證。通常,可以通過(guò)兩種不同的方式來(lái)實(shí)現(xiàn)生物特征認(rèn)證:

  · 基于事件:生物統(tǒng)計(jì)API僅將身份驗(yàn)證嘗試的結(jié)果返回給應(yīng)用程序(“成功”或“失敗”),這種方法被認(rèn)為是不安全的;

  · 基于結(jié)果:身份驗(yàn)證成功后,生物統(tǒng)計(jì)API會(huì)檢索一些加密對(duì)象(例如解密密鑰)并將其返回給應(yīng)用程序。失敗時(shí),不會(huì)返回任何加密對(duì)象。

  基于事件的身份驗(yàn)證是不安全的,因?yàn)樗鼉H包含返回的布爾值(或類(lèi)似值)。因此,可以使用代碼工具(例如Frida)通過(guò)修改返回值或手動(dòng)觸發(fā)成功流程來(lái)繞過(guò)它。如果實(shí)現(xiàn)是基于事件的,則還意味著敏感信息以不安全的方式存儲(chǔ)在某處:在應(yīng)用程序從生物識(shí)別API接收到“成功”之后,它仍將需要使用一些身份驗(yàn)證向后端進(jìn)行用戶(hù)身份驗(yàn)證。一種憑證,將從本地存儲(chǔ)中檢索,無(wú)需解密密鑰即可完成此操作,否則,實(shí)現(xiàn)將不是基于事件的,這意味著憑據(jù)無(wú)需適當(dāng)加密即可存儲(chǔ)在本地存儲(chǔ)中的某個(gè)位置。

  另一方面,良好的基于結(jié)果的生物特征認(rèn)證將無(wú)法通過(guò)Frida之類(lèi)的工具來(lái)繞過(guò)。要實(shí)現(xiàn)基于結(jié)果的安全生物特征認(rèn)證,應(yīng)用程序必須使用硬件支持的生物特征API。

  存儲(chǔ)憑證

  盡管我們?cè)诖宋恼轮惺褂谩皯{證”一詞,但我們并不主張存儲(chǔ)用戶(hù)的憑證(即用戶(hù)名和密碼)。無(wú)論用戶(hù)的憑據(jù)存儲(chǔ)方式如何,將其存儲(chǔ)在設(shè)備上對(duì)于高安全性應(yīng)用程序從來(lái)都不是一個(gè)好主意。相反,上述“憑證”應(yīng)該是專(zhuān)用于生物認(rèn)證的憑證(例如高熵字符串),這些憑證是在生物認(rèn)證的激活期間生成的。

  要在Android上實(shí)施基于結(jié)果的安全生物身份驗(yàn)證,必須生成需要用戶(hù)身份驗(yàn)證的加密密鑰。這可以通過(guò)使用setUserAuthenticationRequired生成密鑰時(shí)的方法來(lái)實(shí)現(xiàn)。每當(dāng)應(yīng)用程序嘗試訪(fǎng)問(wèn)密鑰時(shí),Android將確保提供有效的生物識(shí)別信息。然后必須使用密鑰來(lái)執(zhí)行加密操作,從而解鎖憑據(jù),然后可以將憑據(jù)發(fā)送到后端。這是通過(guò)向CryptoObject生物識(shí)別API提供以上一個(gè)密鑰開(kāi)頭的來(lái)完成的。例如,BiometricPrompt類(lèi)提供了一個(gè)authenticate方法,該方法采用CryptoObject作為一個(gè)論點(diǎn)。然后,可以通過(guò)result參數(shù)在成功回調(diào)方法中獲得對(duì)該鍵的引用??梢栽趂-secure的這篇非常不錯(cuò)的博客文章中找到有關(guān)在Android上實(shí)現(xiàn)安全生物特征認(rèn)證的更多信息。

  在iOS上,必須生成一個(gè)加密密鑰并將其存儲(chǔ)在key串中。key串中的條目必須設(shè)置有訪(fǎng)問(wèn)控制標(biāo)志biometryAny。然后必須使用密鑰執(zhí)行加密操作,以解鎖可發(fā)送到后端的憑據(jù)。通過(guò)向key串查詢(xún)受密鑰保護(hù)的biometryAnyiOS,iOS將確保用戶(hù)使用其生物識(shí)別數(shù)據(jù)解鎖所需的key?;蛘撸覀兛梢詫{據(jù)本身直接存儲(chǔ)在biometryAny保護(hù)下,而不是將密碼密鑰存儲(chǔ)在“key串”中。

  指紋認(rèn)證

  Android和iOS允許你信任“設(shè)備上已注冊(cè)的所有指紋”或“設(shè)備上當(dāng)前已注冊(cè)的所有指紋”。在后一種情況下,如果添加或刪除了指紋,則加密對(duì)象將無(wú)法使用。對(duì)于Android,默認(rèn)值為“所有指紋”,而在將指紋添加到設(shè)備的情況下,你可以使用setInvalidatedByBiometricEnrollment刪除CryptoObject。對(duì)于iOS,可以在biometryAny和biometryCurrentSet之間進(jìn)行選擇。雖然“當(dāng)前已注冊(cè)”選項(xiàng)是最安全的,但在本文中,我們不會(huì)對(duì)這種區(qū)別給予重視。

  基于事件的身份驗(yàn)證真的不安全嗎?是的。這完全取決于你的移動(dòng)應(yīng)用程序的威脅模型。應(yīng)用程序提供基于結(jié)果的身份驗(yàn)證的要求是OWASP MASVS(MSTG-AUTH-8)中的2級(jí)要求。級(jí)別2表示你的應(yīng)用程序正在處理敏感信息,通常用于金融,醫(yī)療或政府部門(mén)的應(yīng)用程序。

微信圖片_20210603104329.jpg

OWASP MASVS驗(yàn)證級(jí)別

  如果你的應(yīng)用程序使用基于事件的生物特征認(rèn)證,則將發(fā)生特定的攻擊,這些攻擊將使用戶(hù)的憑據(jù)可供攻擊者使用:

  · 使用取證軟件進(jìn)行物理提取

  · 從備份文件中提取數(shù)據(jù)(例如iTunes備份或adb備份)

  · 具有root權(quán)限訪(fǎng)問(wèn)設(shè)備的惡意軟件

  最后一個(gè)示例也將能夠攻擊使用基于結(jié)果的生物特征認(rèn)證的應(yīng)用程序,因?yàn)橛锌赡茉趹{據(jù)已在內(nèi)存中解密后立即注入到應(yīng)用程序中,但這種攻擊的門(mén)檻比只需復(fù)制應(yīng)用程序的本地存儲(chǔ)。




電子技術(shù)圖片.png


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話(huà)通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話(huà):010-82306118;郵箱:aet@chinaaet.com。