一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

拒絕應(yīng)用程序被越獄,App Attest可防護(hù)(附源碼)

如意 ? 來(lái)源:知識(shí)小集 ? 作者:Bruno Rocha ? 2020-08-27 11:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

當(dāng)越獄在 iOS 設(shè)備第一次流行起來(lái)時(shí),iOS 開發(fā)人員會(huì)嘗試各種方法來(lái)保護(hù)自己的應(yīng)用程序,以讓應(yīng)用免受盜版等不確定因素的困擾。有許多方法可以做到這一點(diǎn),包括檢查 Cydia 是否存在、檢測(cè)應(yīng)用程序是否可讀取自身沙箱之外的文件、在檢測(cè)到調(diào)試器時(shí)讓應(yīng)用程序崩潰等等。

然而,事實(shí)證明這些防御措施并不是那么有效。如果攻擊者可以直接訪問(wèn)物理設(shè)備,那么這些措施就不再有效。對(duì)于高手來(lái)說(shuō),他們可以讓設(shè)備看上去并沒(méi)有越獄以有效地繞過(guò)這些措施,過(guò)去可以,現(xiàn)在也可以。同時(shí)對(duì)于一些越獄用戶來(lái)說(shuō),他們可能并不是想要干壞事,而僅僅是想要一些酷炫的功能,比如說(shuō)可定制的主屏幕。

隨著近來(lái)越獄可能再度流行,Apple 給出了一套自己的解決方案。在 iOS 14 中,新的 App Attest API 為應(yīng)用提供了一種對(duì)服務(wù)器請(qǐng)求進(jìn)行簽名的方法,以嘗試向服務(wù)器證明這些請(qǐng)求來(lái)自應(yīng)用程序的合法版本。

需要了解的是,App Attest 不會(huì)告訴服務(wù)器“這個(gè)設(shè)備是越獄的么?”,因?yàn)檫@種方案被一次次證明是不可行的。相反,其目標(biāo)是保護(hù)服務(wù)器請(qǐng)求,以讓攻擊者更難創(chuàng)建非法的應(yīng)用版本來(lái)解鎖高級(jí)功能或植入作弊功能。再次強(qiáng)調(diào)的是:由于攻擊者可以物理訪問(wèn)設(shè)備,因此在這種情況下,沒(méi)有任何辦法可以完全保護(hù)你的應(yīng)用。

由于無(wú)法信任應(yīng)用可以自我保護(hù),因此 App Attest 要求在應(yīng)用的后端采取必要的工作來(lái)實(shí)施這個(gè)安全策略。由于這是 Swift 相關(guān)的內(nèi)容,所以這里不介紹后端應(yīng)該如何處理,只是會(huì)順帶提及。

生成一對(duì)密鑰以簽署請(qǐng)求

App Attest 依賴于使用非對(duì)稱公鑰/密鑰對(duì)來(lái)工作。最終目的是讓應(yīng)用程序使用密鑰對(duì)服務(wù)器請(qǐng)求進(jìn)行簽名,然后將數(shù)據(jù)發(fā)送到后端,在后端用公鑰來(lái)確認(rèn)請(qǐng)求的合法性。如果攻擊者攔截了請(qǐng)求,他并沒(méi)有辦法更改內(nèi)容,這樣就不會(huì)影響后端的驗(yàn)證。

要生成密鑰對(duì),可以導(dǎo)入 DeviceCheck 框架,并調(diào)用 DCAppAttestService 單例對(duì)象的 generateKey 方法:

import DeviceCheck let service = DCAppAttestService.shared service.generateKey { (keyIdentifier, error) in guard error == nil else { return } }

App Attest 生成的密鑰對(duì)會(huì)安全地存儲(chǔ)在設(shè)備的 Security Enclave 中。由于無(wú)法直接訪問(wèn),所以這個(gè)方法返回的是一個(gè) keyIdentifier 屬性,在需要時(shí)可以用來(lái)找到對(duì)應(yīng)的密鑰。我們需要存儲(chǔ)它,以便后續(xù)用來(lái)驗(yàn)證應(yīng)用程序的請(qǐng)求。

值得一提的是,并非所有類型的設(shè)備都支持App Attest,如果查看了 Apple 的文檔,會(huì)發(fā)現(xiàn)我們需要先檢查是否支持,并要求服務(wù)器做降級(jí)處理以應(yīng)用例外的情況:

if service.isSupported { 。.. }

但是不要這么做!就像之前所說(shuō)的,攻擊者可以可以輕松地偽裝成設(shè)備不支持這一操作。Apple 也沒(méi)有相應(yīng)的應(yīng)對(duì)措施,這個(gè)檢查的原因更多的是因?yàn)橛行?Macbook 沒(méi)有支持它的芯片。根據(jù) Guilherme Rambo 的調(diào)查,大部分 iOS 設(shè)備都支持這一功能,所以對(duì)應(yīng) iOS 應(yīng)用來(lái)說(shuō),不需要這個(gè)兼容性檢測(cè)。

將公鑰發(fā)送到后端

為了對(duì)請(qǐng)求進(jìn)行簽名,需要為后端提供一種校驗(yàn)簽名的方法。我們需要為后端提供上述生成的公鑰的訪問(wèn)權(quán)限,來(lái)完成校驗(yàn)。但是我們不能簡(jiǎn)單地創(chuàng)建一個(gè)請(qǐng)求來(lái)發(fā)送公鑰,因?yàn)楣粽吆苋菀讛r截請(qǐng)求并發(fā)送自己的公鑰,這樣他們可以完全控制應(yīng)用發(fā)送到后端的內(nèi)容。

這個(gè)問(wèn)題的解決方法是讓 Apple 來(lái)證明我們發(fā)送的密鑰是來(lái)自應(yīng)用的合法版本??梢哉{(diào)用 attestKey 方法來(lái)完成,該方法接收密鑰的標(biāo)識(shí)符作為參數(shù):

service.attestKey(keyIdentifier, clientDataHash: hash) { attestation, error in guard error == nil else { return } let attestationString = attestation?.base64EncodedString() // Send the attestation to the server. It now has access to the public key! // If it fails, throw the identifier away and start over. }

這個(gè)方法會(huì)訪問(wèn)遠(yuǎn)程 Apple 服務(wù)器,并返回一個(gè) “attestation” 對(duì)象,這個(gè)對(duì)象不僅包含了公鑰,而且還包含有關(guān)應(yīng)用程序的大量信息,以表明這是經(jīng)過(guò) Apple 認(rèn)證的合法的公鑰??蛻舳耸盏竭@個(gè)對(duì)象后,必須將其完整發(fā)送到后端,后端需要執(zhí)行多步驗(yàn)證,以確認(rèn)未被篡改。如果驗(yàn)證了 “attestation” 對(duì)象是合法的,后端便可以從中安全地提取應(yīng)用的公鑰。

目前尚不清楚 Apple 是否嘗試在此過(guò)程中檢查用戶的設(shè)備是否越獄。文檔并沒(méi)有提到這種情況,不過(guò)他們也指出 App Attest 不能確切地設(shè)備是否越獄,這至少說(shuō)明他們嘗試過(guò)??梢钥隙ǖ卣f(shuō),并沒(méi)有辦法指出設(shè)備是否越獄,而且 attest 這個(gè)詞只表示請(qǐng)求未被攔截或篡改。

attestation 請(qǐng)求的附加 clientDataHash 參數(shù)與校驗(yàn)的過(guò)程本身無(wú)關(guān),但對(duì)安全性卻至關(guān)重要。實(shí)際上,這個(gè)請(qǐng)求的很容易做重放攻擊,攻擊者可以攔截驗(yàn)證請(qǐng)求并竊取從 Apple 發(fā)送的 “attestation” 對(duì)象,以便后續(xù)可以在應(yīng)用程序的非法版本中 “重放” 相同的驗(yàn)證請(qǐng)求來(lái)欺騙服務(wù)器。

解決這個(gè)問(wèn)題的方法是簡(jiǎn)單粗暴地不允許驗(yàn)證請(qǐng)求被隨意地執(zhí)行??蛻舳丝梢蕴峁┮粋€(gè)一次性使用令牌(或會(huì)話ID),服務(wù)器希望該令牌與請(qǐng)求一起使用以確保其有效性。如果兩次使用相同的令牌,則請(qǐng)求將失敗。這就是 clientDataHash 的目的:通過(guò)向驗(yàn)證請(qǐng)求提供令牌的哈希版本,Apple 會(huì)將其嵌入到最終對(duì)象中,并為您的服務(wù)器提供一種提取它的方式。有了這個(gè),對(duì)于攻擊者來(lái)說(shuō),僅通過(guò)攔截請(qǐng)求就很難創(chuàng)建您應(yīng)用程序的非法版本。

let challenge = getSessionId().data(using: .utf8)! let hash = Data(SHA256.hash(data: challenge)) service.attestKey(keyIdentifier, clientDataHash: hash) { 。.. }

如前所述,Apple 并不建議你重用密鑰,而應(yīng)該對(duì)設(shè)備中的每個(gè)用戶帳戶執(zhí)行整個(gè)過(guò)程。

由于這個(gè)請(qǐng)求依賴于遠(yuǎn)程 Apple 服務(wù)器,因此可能會(huì)失敗。如果錯(cuò)誤是服務(wù)器不可用,Apple 表示你可以重試,但是如果其他原因,則應(yīng)丟棄密鑰標(biāo)識(shí)符并重新開始這一流程。例如,當(dāng)用戶重新安裝您的應(yīng)用程序時(shí),可能會(huì)發(fā)生這種情況:你生成的密鑰在正常的應(yīng)用程序更新中仍然有效,但是在重新安裝應(yīng)用程序,設(shè)備遷移或從備份還原設(shè)備后仍然會(huì)發(fā)生錯(cuò)誤。對(duì)于這些情況,您的應(yīng)用需要能夠重新執(zhí)行密鑰生成過(guò)程。

從服務(wù)器方面來(lái)說(shuō),還值得一提的是,“attestation” 對(duì)象還包含一張回執(zhí),你的服務(wù)器可以使用該回執(zhí)來(lái)向 Apple 請(qǐng)求欺詐評(píng)估指標(biāo)。這使你可以檢查生成的密鑰的數(shù)量以及與它們關(guān)聯(lián)的設(shè)備,以檢測(cè)可能的欺詐情況。蘋果公司特別提到了攻擊的可能性,即用戶可能使用一個(gè)設(shè)備向越獄設(shè)備提供有效的斷言,這種欺詐評(píng)估可以通過(guò)定位具有異常高數(shù)量的斷言請(qǐng)求的用戶來(lái)檢測(cè)到。

加密請(qǐng)求

在驗(yàn)證了密鑰的有效性之后,后端將可以訪問(wèn)公鑰。從現(xiàn)在開始,每次處理敏感內(nèi)容時(shí),都可以安全地對(duì)請(qǐng)求進(jìn)行簽名。用于此目的的 generateAssertion 方法的工作原理與密鑰的驗(yàn)證非常相似,只是這次需要要驗(yàn)證請(qǐng)求本身:

let challenge = getSessionId().data(using: .utf8)! let requestJSON = “{ ‘requestedPremiumLevel’: 300, ‘sessionId’: ‘\(challenge)’ }”.data(using: .utf8)! let hash = Data(SHA256.hash(data: challenge)) service.generateAssertion(keyIdentifier, clientDataHash: hash) { assertion, error in guard error == nil else { return } let assertionString = assertion?.base64EncodedString() // Send the signed assertion to your server. // The server will validate it, grab your request and process it. }

與之前一樣,后端必須支持使用一次性令牌來(lái)防止重放攻擊。這次,由于請(qǐng)求本身就是我們的 clientDataHash,因此我們將令牌添加到 JSON 中。對(duì)于給定鍵可以進(jìn)行的斷言數(shù)量沒(méi)有限制。但是,盡管如此,通常仍應(yīng)保留它們,以在應(yīng)用程序發(fā)出請(qǐng)求保護(hù)敏感信息,例如下載內(nèi)容。

在這種情況下,額外保護(hù)來(lái)源于請(qǐng)求被散列并且只能使用一次。由于整個(gè)請(qǐng)求都是由私鑰簽名的,因此攻擊者無(wú)法簡(jiǎn)單地?cái)r截請(qǐng)求并利用它們來(lái)制作自己的請(qǐng)求。他們必須弄清楚你請(qǐng)求的參數(shù)來(lái)自何處,并手動(dòng)嘗試對(duì)其進(jìn)行簽名,這比簡(jiǎn)單附加代理要更多的技術(shù)。如開頭所述,要破解這種保護(hù)并不是沒(méi)有可能,只是需要更加努力。

測(cè)試及實(shí)施

App Attest 服務(wù)記錄了你無(wú)法重置的標(biāo)記。為防止這種情況,非生產(chǎn)環(huán)境中的應(yīng)用程序?qū)⑹褂蒙澈邪姹?。如果你想在生產(chǎn)環(huán)境中進(jìn)行測(cè)試,則應(yīng)將 com.apple.developer.devicecheck.appattest-environment 授權(quán)添加到你的應(yīng)用中,并將其值設(shè)置為 production。

如果你的用戶群很大,Apple 建議你逐步啟用此功能,因?yàn)閷?duì) attestKey 的請(qǐng)求受網(wǎng)速限制。

結(jié)論

通過(guò)在客戶端和后端中實(shí)現(xiàn)此功能,攻擊者更難創(chuàng)建應(yīng)用程序的非法版本。但是,請(qǐng)注意這并不意味著不可能!如前所述,你無(wú)法確定用戶是否擁有越獄設(shè)備,也無(wú)法確定阻止其攻擊你的應(yīng)用的方法。與大多數(shù)安全措施一樣,App Attest 的目的是使此過(guò)程足夠困難,以使只有一個(gè)非常熟練和專業(yè)的攻擊者才能找到闖你您的應(yīng)用程序的途徑-而這種牛人很少。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • APP
    APP
    +關(guān)注

    關(guān)注

    33

    文章

    1587

    瀏覽量

    74260
  • iOS
    iOS
    +關(guān)注

    關(guān)注

    8

    文章

    3399

    瀏覽量

    153092
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3337

    瀏覽量

    59038
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【有獎(jiǎng)體驗(yàn)】+安卓APP自動(dòng)生成源碼

    ,這里的應(yīng)用并不是指的產(chǎn)品,而是指的服務(wù)里的“應(yīng)用配置”這里。 在應(yīng)用配置中新建一個(gè)應(yīng)用,配置應(yīng)用時(shí),要選擇你的應(yīng)用程序的類型了,是蘋果的ISO,還是安卓的APP,還是微信的小程序呢,比較不錯(cuò)的是支持微
    發(fā)表于 07-09 16:50

    請(qǐng)問(wèn)如何驗(yàn)證“psa_initial_attest_get_token”生成的令牌?

    請(qǐng)告知如何驗(yàn)證“psa_initial_attest_get_token”生成的令牌。我的測(cè)試套件是 B-U585I-IOT02A,測(cè)試應(yīng)用程序是 TFM。
    發(fā)表于 12-15 06:27

    企業(yè)通訊錄app源碼

    企業(yè)通訊錄app源碼這是android 上的源碼。
    發(fā)表于 03-28 10:02 ?23次下載

    越獄工具下載!iOS10.1/iOS10.1.1越獄教程

    萬(wàn)眾期待的iOS10.1/iOS10.1.1越獄工具終于來(lái)了,但這次越獄依舊是不完美越獄,手機(jī)重啟后需要重新激活越獄,詳細(xì)的iOS10.1/iOS10.1.1
    發(fā)表于 12-23 22:38 ?5468次閱讀

    VC串口編程應(yīng)用程序以及源碼的詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是VC串口編程的應(yīng)用程序以及其源碼的詳細(xì)資料免費(fèi)下載
    發(fā)表于 07-16 08:00 ?5次下載
    VC串口編程<b class='flag-5'>應(yīng)用程序</b>以及<b class='flag-5'>源碼</b>的詳細(xì)資料免費(fèi)下載

    LED燈RGB色盤算法應(yīng)用程序APP的詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是LED燈RGB色盤算法應(yīng)用程序APP的詳細(xì)資料免費(fèi)下載。
    發(fā)表于 09-03 08:00 ?11次下載
    LED燈RGB色盤算法<b class='flag-5'>應(yīng)用程序</b><b class='flag-5'>APP</b>的詳細(xì)資料免費(fèi)下載

    西瓜影音APP視頻軟件應(yīng)用程序免費(fèi)下載

    本文檔的作用內(nèi)容詳細(xì)介紹的是西瓜影音APP軟件應(yīng)用程序免費(fèi)下載。
    發(fā)表于 09-13 08:00 ?35次下載

    應(yīng)用程序屏蔽和應(yīng)用程序內(nèi)保護(hù)哪個(gè)更安全?

    正在使用應(yīng)用程序屏蔽,有時(shí)稱為“應(yīng)用程序強(qiáng)化(app hardening)”來(lái)緩解攻擊者對(duì)應(yīng)用程序發(fā)起的各種攻擊。
    的頭像 發(fā)表于 08-26 16:02 ?4627次閱讀

    利用Python實(shí)現(xiàn)網(wǎng)頁(yè)應(yīng)用程序,可圖片識(shí)別狗的類型(源碼

    在這篇文章中,將教大家實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)應(yīng)用程序,該程序可以接收狗的圖片,然后輸出其品種,其準(zhǔn)確率超過(guò)80%!
    的頭像 發(fā)表于 10-08 14:45 ?3038次閱讀
    利用Python實(shí)現(xiàn)網(wǎng)頁(yè)<b class='flag-5'>應(yīng)用程序</b>,可圖片識(shí)別狗的類型(<b class='flag-5'>附</b><b class='flag-5'>源碼</b>)

    2021年開始,蘋果可能會(huì)刪除未經(jīng)允許跟蹤用戶的應(yīng)用程序

    Tracking Transparency,本來(lái)計(jì)劃年初時(shí)推出,但后來(lái)因故推遲。蘋果想給開發(fā)者更多時(shí)間調(diào)整App,解決隱私問(wèn)題。蘋果威脅稱,如果App拒絕支持這項(xiàng)新功能,蘋果將會(huì)從App
    的頭像 發(fā)表于 12-09 09:30 ?2002次閱讀

    蘋果宣布新計(jì)劃:降低應(yīng)用程序App Store的傭金

    據(jù)外媒報(bào)道,在與Fortnite制造商Epic的競(jìng)爭(zhēng)中,蘋果宣布了一項(xiàng)新計(jì)劃,蘋果將降低年收入低于100萬(wàn)美元的小企業(yè)的應(yīng)用程序App Store的傭金。目前,蘋果已經(jīng)開始接受小企業(yè)項(xiàng)目下的開發(fā)者應(yīng)用程序,開發(fā)者也收到了蘋果公
    的頭像 發(fā)表于 12-25 10:32 ?1792次閱讀

    電機(jī)正反轉(zhuǎn)互鎖控制應(yīng)用程序源碼下載

    電機(jī)正反轉(zhuǎn)互鎖控制應(yīng)用程序源碼下載
    發(fā)表于 04-06 17:23 ?42次下載
    電機(jī)正反轉(zhuǎn)互鎖控制<b class='flag-5'>應(yīng)用程序</b><b class='flag-5'>源碼</b>下載

    蜂鳴器播放音樂(lè)設(shè)計(jì)與實(shí)現(xiàn)(源碼

    蜂鳴器播放音樂(lè)設(shè)計(jì)與實(shí)現(xiàn)(源碼
    發(fā)表于 04-24 11:00 ?90次下載
    蜂鳴器播放音樂(lè)設(shè)計(jì)與實(shí)現(xiàn)(<b class='flag-5'>附</b><b class='flag-5'>源碼</b>)

    適用于Covid-19的免費(fèi)診斷移動(dòng)應(yīng)用程序和DIY防護(hù)面罩

    電子發(fā)燒友網(wǎng)站提供《適用于Covid-19的免費(fèi)診斷移動(dòng)應(yīng)用程序和DIY防護(hù)面罩.zip》資料免費(fèi)下載
    發(fā)表于 11-28 10:20 ?0次下載
    適用于Covid-19的免費(fèi)診斷移動(dòng)<b class='flag-5'>應(yīng)用程序</b>和DIY<b class='flag-5'>防護(hù)</b>面罩

    蘋果發(fā)布《App Store透明度報(bào)告》:2023年拒絕176萬(wàn)款App

    此報(bào)告揭示,2022年App Store共審核了6892500款應(yīng)用程序,其中拒絕1763812款。這些應(yīng)用主要因?yàn)樾阅?、設(shè)計(jì)與法律問(wèn)題未達(dá)到標(biāo)準(zhǔn)。同時(shí),有277923款應(yīng)用得到修改并成功上線。
    的頭像 發(fā)表于 05-18 10:18 ?1082次閱讀