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

對React Native 生物識別庫的安全性分析研究

2021-06-03
來源: 嘶吼專業(yè)版
關(guān)鍵詞: 生物識別庫 安全性

  0x01 基礎(chǔ)概述

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

  · 用戶進行一次身份驗證,,然后保持身份驗證,,直到他們手動注銷為止,;

  · 用戶保持登錄狀態(tài)的時間不會太長,,并且在一段時間不活動后必須重新進行身份驗證,。

  第一種策略雖然對用戶非常方便,,但顯然不是很安全,。第二種方法相當安全,,但是對用戶來說卻是一個負擔,因為他們每次都必須輸入其憑據(jù),。實施生物特征認證可以減輕這種負擔,,因為認證方法對用戶而言變得相當容易和快速。

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

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

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

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

  0x02 生物特征識別

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

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

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

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

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

  存儲憑證

  盡管我們在此文章中使用“憑證”一詞,但我們并不主張存儲用戶的憑證(即用戶名和密碼),。無論用戶的憑據(jù)存儲方式如何,將其存儲在設(shè)備上對于高安全性應(yīng)用程序從來都不是一個好主意,。相反,,上述“憑證”應(yīng)該是專用于生物認證的憑證(例如高熵字符串),這些憑證是在生物認證的激活期間生成的,。

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

  在iOS上,必須生成一個加密密鑰并將其存儲在key串中,。key串中的條目必須設(shè)置有訪問控制標志biometryAny,。然后必須使用密鑰執(zhí)行加密操作,,以解鎖可發(fā)送到后端的憑據(jù)。通過向key串查詢受密鑰保護的biometryAnyiOS,,iOS將確保用戶使用其生物識別數(shù)據(jù)解鎖所需的key,。或者,,我們可以將憑據(jù)本身直接存儲在biometryAny保護下,,而不是將密碼密鑰存儲在“key串”中。

  指紋認證

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

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

微信圖片_20210603104329.jpg

OWASP MASVS驗證級別

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

  · 使用取證軟件進行物理提取

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

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

  最后一個示例也將能夠攻擊使用基于結(jié)果的生物特征認證的應(yīng)用程序,,因為有可能在憑據(jù)已在內(nèi)存中解密后立即注入到應(yīng)用程序中,但這種攻擊的門檻比只需復制應(yīng)用程序的本地存儲,。




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


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