精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

讓你的應用遠離越獄:iOS 14 App Attest 防護功能

移動開發
當越獄在 iOS 設備第一次流行起來時,iOS 開發人員會嘗試各種方法來保護自己的應用程序,以讓應用免受盜版等不確定因素的困擾。有許多方法可以做到這一點,包括檢查 Cydia 是否存在、檢測應用程序是否可讀取自身沙箱之外的文件、在檢測到調試器時讓應用程序崩潰等等。

當越獄在 iOS 設備第一次流行起來時,iOS 開發人員會嘗試各種方法來保護自己的應用程序,以讓應用免受盜版等不確定因素的困擾。有許多方法可以做到這一點,包括檢查 Cydia 是否存在、檢測應用程序是否可讀取自身沙箱之外的文件、在檢測到調試器時讓應用程序崩潰等等。

[[339459]]

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

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

需要了解的是,App Attest 不會告訴服務器“這個設備是越獄的么?”,因為這種方案被一次次證明是不可行的。相反,其目標是保護服務器請求,以讓攻擊者更難創建非法的應用版本來解鎖高級功能或植入作弊功能。再次強調的是:由于攻擊者可以物理訪問設備,因此在這種情況下,沒有任何辦法可以完全保護你的應用。

由于無法信任應用可以自我保護,因此 App Attest 要求在應用的后端采取必要的工作來實施這個安全策略。由于這是 Swift 相關的內容,所以這里不介紹后端應該如何處理,只是會順帶提及。

生成一對密鑰以簽署請求

App Attest 依賴于使用非對稱公鑰/密鑰對來工作。最終目的是讓應用程序使用密鑰對服務器請求進行簽名,然后將數據發送到后端,在后端用公鑰來確認請求的合法性。如果攻擊者攔截了請求,他并沒有辦法更改內容,這樣就不會影響后端的驗證。

要生成密鑰對,可以導入 DeviceCheck 框架,并調用 DCAppAttestService 單例對象的 generateKey 方法:

  1. import DeviceCheck 
  2. let service = DCAppAttestService.shared 
  3. service.generateKey { (keyIdentifier, error) in 
  4.     guard error == nil else { 
  5.         return 
  6.     } 

App Attest 生成的密鑰對會安全地存儲在設備的 Security Enclave 中。由于無法直接訪問,所以這個方法返回的是一個 keyIdentifier 屬性,在需要時可以用來找到對應的密鑰。我們需要存儲它,以便后續用來驗證應用程序的請求。

值得一提的是,并非所有類型的設備都支持App Attest,如果查看了 Apple 的文檔,會發現我們需要先檢查是否支持,并要求服務器做降級處理以應用例外的情況:

  1. if service.isSupported { ... } 

但是不要這么做!就像之前所說的,攻擊者可以可以輕松地偽裝成設備不支持這一操作。Apple 也沒有相應的應對措施,這個檢查的原因更多的是因為有些 Macbook 沒有支持它的芯片。根據 Guilherme Rambo 的調查,大部分 iOS 設備都支持這一功能,所以對應 iOS 應用來說,不需要這個兼容性檢測。

將公鑰發送到后端

為了對請求進行簽名,需要為后端提供一種校驗簽名的方法。我們需要為后端提供上述生成的公鑰的訪問權限,來完成校驗。但是我們不能簡單地創建一個請求來發送公鑰,因為攻擊者很容易攔截請求并發送自己的公鑰,這樣他們可以完全控制應用發送到后端的內容。

這個問題的解決方法是讓 Apple 來證明我們發送的密鑰是來自應用的合法版本。可以調用 attestKey 方法來完成,該方法接收密鑰的標識符作為參數:

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

這個方法會訪問遠程 Apple 服務器,并返回一個 "attestation" 對象,這個對象不僅包含了公鑰,而且還包含有關應用程序的大量信息,以表明這是經過 Apple 認證的合法的公鑰。客戶端收到這個對象后,必須將其完整發送到后端,后端需要執行多步驗證,以確認未被篡改。如果驗證了 "attestation" 對象是合法的,后端便可以從中安全地提取應用的公鑰。

目前尚不清楚 Apple 是否嘗試在此過程中檢查用戶的設備是否越獄。文檔并沒有提到這種情況,不過他們也指出 App Attest 不能確切地設備是否越獄,這至少說明他們嘗試過。可以肯定地說,并沒有辦法指出設備是否越獄,而且 attest 這個詞只表示請求未被攔截或篡改。

attestation 請求的附加 clientDataHash 參數與校驗的過程本身無關,但對安全性卻至關重要。實際上,這個請求的很容易做重放攻擊,攻擊者可以攔截驗證請求并竊取從 Apple 發送的 "attestation" 對象,以便后續可以在應用程序的非法版本中 “重放” 相同的驗證請求來欺騙服務器。

解決這個問題的方法是簡單粗暴地不允許驗證請求被隨意地執行。客戶端可以提供一個一次性使用令牌(或會話ID),服務器希望該令牌與請求一起使用以確保其有效性。如果兩次使用相同的令牌,則請求將失敗。這就是 clientDataHash 的目的:通過向驗證請求提供令牌的哈希版本,Apple 會將其嵌入到最終對象中,并為您的服務器提供一種提取它的方式。有了這個,對于攻擊者來說,僅通過攔截請求就很難創建您應用程序的非法版本。

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

如前所述,Apple 并不建議你重用密鑰,而應該對設備中的每個用戶帳戶執行整個過程。

由于這個請求依賴于遠程 Apple 服務器,因此可能會失敗。如果錯誤是服務器不可用,Apple 表示你可以重試,但是如果其他原因,則應丟棄密鑰標識符并重新開始這一流程。例如,當用戶重新安裝您的應用程序時,可能會發生這種情況:你生成的密鑰在正常的應用程序更新中仍然有效,但是在重新安裝應用程序,設備遷移或從備份還原設備后仍然會發生錯誤。對于這些情況,您的應用需要能夠重新執行密鑰生成過程。

從服務器方面來說,還值得一提的是,"attestation" 對象還包含一張回執,你的服務器可以使用該回執來向 Apple 請求欺詐評估指標。這使你可以檢查生成的密鑰的數量以及與它們關聯的設備,以檢測可能的欺詐情況。蘋果公司特別提到了攻擊的可能性,即用戶可能使用一個設備向越獄設備提供有效的斷言,這種欺詐評估可以通過定位具有異常高數量的斷言請求的用戶來檢測到。

加密請求

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

  1. let challenge = getSessionId().data(using: .utf8)! 
  2. let requestJSON = "{ 'requestedPremiumLevel': 300, 'sessionId': '\(challenge)' }".data(using: .utf8)! 
  3. let hash = Data(SHA256.hash(data: challenge)) 
  4. service.generateAssertion(keyIdentifier, clientDataHash: hash) { assertion, error in 
  5.     guard error == nil else { return } 
  6.     let assertionString = assertion?.base64EncodedString() 
  7.     // Send the signed assertion to your server. 
  8.     // The server will validate it, grab your request and process it. 

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

在這種情況下,額外保護來源于請求被散列并且只能使用一次。由于整個請求都是由私鑰簽名的,因此攻擊者無法簡單地攔截請求并利用它們來制作自己的請求。他們必須弄清楚你請求的參數來自何處,并手動嘗試對其進行簽名,這比簡單附加代理要更多的技術。如開頭所述,要破解這種保護并不是沒有可能,只是需要更加努力。

測試及實施

App Attest 服務記錄了你無法重置的標記。為防止這種情況,非生產環境中的應用程序將使用沙盒版本。如果你想在生產環境中進行測試,則應將 com.apple.developer.devicecheck.appattest-environment 授權添加到你的應用中,并將其值設置為 production。

如果你的用戶群很大,Apple 建議你逐步啟用此功能,因為對 attestKey 的請求受網速限制。

結論

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

責任編輯:未麗燕 來源: Medium
相關推薦

2018-07-23 15:50:43

iOS越獄蘋果

2012-01-05 09:19:25

iOSApp應用

2016-01-06 09:09:10

移動開發app store

2011-10-09 13:29:11

HTML5App Store蘋果

2013-07-30 15:24:53

App應用體驗

2015-10-10 11:38:10

ios9spotlight

2020-03-24 14:23:08

iOS 14查找蘋果

2010-08-31 15:03:18

網絡釣魚

2011-06-22 15:47:16

2018-01-30 17:35:39

LinuxPythonNmon分析器

2019-09-29 16:17:25

Java代碼性能編程語言

2019-12-26 08:24:19

僵尸網絡網絡安全網絡攻擊

2018-04-03 12:26:14

2013-07-12 13:24:19

App誘惑

2021-01-04 11:34:44

iOS 14越獄iPhone

2021-04-02 17:12:42

CoolStariOS 14越獄

2017-07-25 16:08:18

AndroidRecyclervie

2020-10-12 09:50:10

iOS 14蘋果功能

2025-07-31 06:40:00

2013-04-16 16:01:51

APP支持iPhoneiOS開發
點贊
收藏

51CTO技術棧公眾號

av在线麻豆| 国产午夜视频在线播放| 另类一区二区三区| 亚洲美腿欧美偷拍| 国产一级二级三级精品| 综合网在线观看| 91欧美日韩| 亚洲第一网中文字幕| 91日韩视频在线观看| 在线h片观看| 2014亚洲片线观看视频免费| 国产欧美精品在线播放| 精品久久免费视频| 我不卡手机影院| 日韩av综合中文字幕| 自拍偷拍一区二区三区四区| 川上优av中文字幕一区二区| 国产精品白丝在线| 久久免费一区| 国产精品久久无码一三区| 在线综合视频| 欧美大学生性色视频| 一级在线观看视频| 欧美日韩精品一区二区三区在线观看| 欧美久久高跟鞋激| 成人av一级片| 丁香高清在线观看完整电影视频| 国产精品少妇自拍| 欧美精品欧美精品系列c| av无码精品一区二区三区宅噜噜| 日韩精品久久理论片| 欧美日韩国产成人高清视频| 日本在线观看网址| 久久93精品国产91久久综合| 亚洲精品一区二区三区蜜桃下载| 男女视频在线观看网站| 欧美色片在线观看| 欧美午夜激情视频| 亚洲美免无码中文字幕在线| av免费看在线| 最新成人av在线| 四虎影院一区二区三区| 国产三级在线看| 久久亚洲影视婷婷| 久久久久久亚洲精品不卡4k岛国| 成人久久久精品国产乱码一区二区| 乱一区二区av| 国产拍精品一二三| 亚洲一区二区三区网站| 免费在线视频一区| 国产精品一区二区久久久久| 97人妻精品视频一区| 久久综合图片| 国产成人极品视频| 天堂网视频在线| 亚洲欧美激情诱惑| 日韩免费av在线| 国产精品久久久久久久久久久久久久久久久 | 欧美人体一区二区三区| 一本到高清视频免费精品| 亚洲欧洲日产国码无码久久99| 涩涩视频网站在线观看| 第一福利永久视频精品| 熟女性饥渴一区二区三区| 欧产日产国产精品视频| 欧美午夜片欧美片在线观看| 那种视频在线观看| 欧美韩国亚洲| 欧美视频自拍偷拍| 91视频福利网| 激情亚洲另类图片区小说区| 日韩精品欧美国产精品忘忧草| 9.1成人看片免费版| av永久不卡| 久久精品国产久精国产一老狼| 成人免费视频网站入口::| 亚洲午夜电影| 欧美中文在线观看国产| 在线观看av大片| 国产精品 日产精品 欧美精品| 官网99热精品| 青青国产在线| 综合精品久久久| 美女黄色免费看| 全亚洲第一av番号网站| 欧美人体做爰大胆视频| 91porn在线| 久久av影视| 九九热精品视频| 日本中文字幕在线| 久久99精品久久久久婷婷| 超碰97在线资源| 国产免费av在线| 一区二区三区四区中文字幕| 欧美丰满熟妇bbbbbb百度| 欧美激情三区| 日韩成人在线免费观看| 国产一二三av| 香蕉成人久久| 5g国产欧美日韩视频| 青青久在线视频免费观看| 综合av第一页| 精品国产成人av在线免| 欧洲美女精品免费观看视频| 亚洲精品在线观看视频| 国产中文字幕久久| 国产精品最新自拍| 91精品入口蜜桃| 成人三级黄色免费网站| 亚洲国产精品久久一线不卡| 9久久婷婷国产综合精品性色| 999久久久精品一区二区| 中文字幕亚洲激情| 天堂网av手机版| 国产传媒一区在线| 在线观看成人av| 日韩欧美另类一区二区| 精品国产自在久精品国产| 欧美 日韩 成人| 亚洲综合二区| 国产三级精品在线不卡| 成年人黄视频在线观看| 91精品91久久久中77777| 日本人妻一区二区三区| 婷婷亚洲五月| 国产精品三级网站| 美女欧美视频在线观看免费 | 懂色av蜜臀av粉嫩av喷吹| 国产suv精品一区二区883| www.午夜色| 成人国产一区| 国产一区二区三区在线看| 国产一级淫片a| 国产999精品久久| 中文字幕99| 欧美黄色网络| www.欧美精品| 91tv国产成人福利| 国产欧美日韩在线视频| 亚洲精品无码久久久久久| 农村少妇一区二区三区四区五区| 欧美交受高潮1| 亚洲AV午夜精品| 亚洲一卡二卡三卡四卡| 性生交大片免费看l| 自拍偷拍欧美| 18成人在线| 国精产品一区一区三区mba下载| 日韩欧美不卡在线观看视频| 日韩欧美123区| 国产呦萝稀缺另类资源| 国产又粗又爽又黄的视频| gogo大尺度成人免费视频| 精品久久久999| 国产乱淫a∨片免费观看| **性色生活片久久毛片| 亚洲综合在线一区二区| 欧美黄免费看| 国产精品一区视频| 国产激情视频在线看| 日韩电影免费在线观看中文字幕| 欧美三日本三级少妇99| 91日韩一区二区三区| 日韩中文字幕二区| 日韩激情免费| 亚洲综合精品一区二区| caoporn-草棚在线视频最| 亚洲精品久久久久久久久久久| 日韩特级黄色片| 国产人成亚洲第一网站在线播放| 在线免费观看av的网站| 91精品一区二区三区综合| 99re在线国产| 在线天堂新版最新版在线8| 亚洲欧美在线免费| 亚洲一卡二卡在线观看| 一区二区三区高清在线| 日韩乱码人妻无码中文字幕久久| 免费观看在线色综合| 日本a在线天堂| 欧美电影在线观看完整版| 日本一区二区在线播放| 黄色精品免费看| 日韩电视剧在线观看免费网站| 中文永久免费观看| 亚洲综合在线五月| 中国毛片在线观看| 国产一区欧美日韩| 国产特级黄色大片| 99欧美视频| 久久国产日韩欧美| 亚洲伦理网站| 欧美孕妇孕交黑巨大网站| 91porn在线观看| 亚洲国产成人av在线| 中文永久免费观看| 亚洲成a天堂v人片| 午夜激情视频在线播放| 99久久国产综合精品色伊| 日韩av卡一卡二| 国产精品综合| wwwwww欧美| 日本在线电影一区二区三区| 精品国产一区二区三区免费| 欧美亚洲黄色| 日本中文字幕成人| 蜜臀av在线播放| 日韩中文字幕免费| 日韩精品123| 精品国精品国产| 人人草在线观看| 亚洲天天做日日做天天谢日日欢 | 亚洲欧美网站在线观看| 国产精品综合久久久久久| 日韩精品免费观看视频| 国内精品在线一区| av网站免费在线观看| 在线观看国产精品91| 污视频在线免费观看| 91麻豆精品国产综合久久久久久| 国产一级免费视频| 调教+趴+乳夹+国产+精品| 欧美日韩偷拍视频| 亚洲人成人一区二区在线观看| 中国女人特级毛片| www国产精品av| 少妇被狂c下部羞羞漫画| 国产一区二区不卡在线| 亚洲免费黄色录像| 蜜桃av一区二区| 亚洲成人福利在线观看| 久久国产免费| 日本一区二区黄色| 国产亚洲精品v| 激情五月宗合网| 亚洲免费成人| 北条麻妃69av| 99精品视频免费观看视频| 国产精品igao激情视频| 欧美99在线视频观看| 老司机午夜网站| 中文字幕日韩欧美精品高清在线| 亚洲一区影院| 色喇叭免费久久综合网| 亚洲国产一区二区三区在线播| 国产成人三级| 日韩欧美在线观看强乱免费| av中字幕久久| 一区二区在线观| 亚洲精品久久| 久久亚洲国产成人精品无码区 | 国产精品福利一区二区三区| 久久久久久国产免费a片| 欧美激情一区二区三区四区| 少妇精品无码一区二区免费视频 | 精品香蕉一区二区三区| 亚洲欧美日韩成人在线| 亚洲精品日韩在线| 毛片免费在线观看| 在线看国产精品| 免费在线毛片网站| 欧美激情视频在线免费观看 欧美视频免费一| 国产cdts系列另类在线观看| 欧美老肥婆性猛交视频| 美女精品视频| 青青久久av北条麻妃黑人| 日韩视频网站在线观看| 国产免费一区二区三区在线观看| 91精品福利观看| 99视频免费观看蜜桃视频| 久久a爱视频| 欧美影视一区二区| 婷婷伊人综合| 黄色一级片在线看| 丝袜美腿高跟呻吟高潮一区| 国产精品久久久久久9999| 国产超碰在线一区| 毛片网站免费观看| 国产精品久久久久久久浪潮网站| 三级影片在线看| 黄网站色欧美视频| 在线免费看91| 亚洲第一精品夜夜躁人人爽| 成人在线高清视频| 欧美激情视频三区| 天堂久久午夜av| 97影院在线午夜| 久久91精品| 妺妺窝人体色www看人体| 久久精品一本| 成人在线短视频| 国产欧美一区二区精品性色 | 黄色av网站在线播放| 午夜精品一区二区三区在线视频| 欧美xnxx| 精品一区二区日本| 五月天久久网站| 波多野结衣50连登视频| 久88久久88久久久| 日本xxx在线播放| 亚洲男人天堂一区| 加勒比在线一区| 精品国一区二区三区| av资源在线观看免费高清| 性欧美xxxx| 国产精品一区二区美女视频免费看 | 国产97在线观看| 在这里有精品| 这里只有精品66| 日本 国产 欧美色综合| 亚洲熟女乱综合一区二区三区| 亚洲三级小视频| 一级久久久久久| 精品伊人久久97| 爱福利在线视频| 2022国产精品| 婷婷综合网站| 久久这里只精品| 久久久精品影视| 国产精品第一页在线观看| 欧美高清你懂得| av色图一区| 国产成人高清激情视频在线观看| 福利电影一区| 国产精品三级一区二区| 精品影视av免费| 国产一二三四视频| 日本韩国视频一区二区| 色视频免费在线观看| 国外视频精品毛片| 国产女人18毛片水真多18精品| 992tv快乐视频| 国产精品一区一区| 538任你躁在线精品视频网站| 欧美色男人天堂| 9i精品一二三区| 国产精品成人av性教育| 国产传媒欧美日韩成人精品大片| 欧美牲交a欧美牲交| 99视频一区二区| 97免费在线观看视频| 亚洲精品国精品久久99热一| 国产精品论坛| 久久精品人成| 久久字幕精品一区| 91视频免费在观看| 欧美日韩日日摸| 精品视频在线一区二区| 亚洲伊人久久大香线蕉av| 亚洲色图欧美| 极品白嫩少妇无套内谢| 亚洲线精品一区二区三区八戒| 欧美视频一二区| 欧美一区二区三区……| 精品国产aⅴ| 一路向西2在线观看| 18涩涩午夜精品.www| 国内精品久久久久久久久久久| 欧美成人免费播放| 99精品中文字幕在线不卡 | 97精品国产99久久久久久免费| 欧美亚洲国产免费| 免费观看一级特黄欧美大片| 91麻豆精品成人一区二区| 日韩欧美123| 人狥杂交一区欧美二区| 欧洲一区二区日韩在线视频观看免费| 日日摸夜夜添夜夜添精品视频| 亚洲欧美另类日本| 日韩一级欧美一级| ****av在线网毛片| 日韩av影视| 国产一区中文字幕| 91精品国产乱码在线观看| 亚洲欧美资源在线| 91麻豆精品| av之家在线观看| 国产精品久久久久久妇女6080| www.五月婷婷| 日本一区二区在线播放| 国产精品传媒精东影业在线| 亚洲婷婷在线观看| 色狠狠桃花综合| 26uuu亚洲电影在线观看| 激情五月综合色婷婷一区二区| 视频一区二区不卡| 国产免费无码一区二区视频| 精品丝袜一区二区三区| 日韩专区视频网站| 9久久9毛片又大又硬又粗| 国产精品久久久久久久久免费樱桃| 国产www免费观看| 国产成+人+综合+亚洲欧洲| 91精品一区二区三区综合| 国产艳俗歌舞表演hd| 欧美男生操女生| 亚洲欧洲高清| 亚洲高潮无码久久| 国产婷婷精品av在线| 亚洲国产精品无码久久|