柳市做網(wǎng)站網(wǎng)上賣產(chǎn)品怎么推廣
iOS內(nèi)購欺詐漏洞
- 1.iOS內(nèi)購欺詐漏洞概述
- 2.偽造的憑證
- 3.漏洞修復(fù)方案
1.iOS內(nèi)購欺詐漏洞概述
黑產(chǎn)別的App上低價(jià)充值(比如1元)換取蘋果真實(shí)憑證,再在目標(biāo)App上下單高價(jià)(648元)商品,傳入該憑證,如果目標(biāo)App服務(wù)端蘋果憑證校驗(yàn)接口存在漏洞,只校驗(yàn)了憑證中商品和訂單信息,未校驗(yàn)憑證中App來源(bundleID),則會驗(yàn)證通過,進(jìn)而發(fā)貨
對黑產(chǎn)來說,黑產(chǎn)實(shí)際只支付了1元,就能買到目標(biāo)App的648元商品;對于目標(biāo)App來說,他連這1元都沒得到(因?yàn)槭窃趧e的App上充的),完全被白嫖648元商品??芍^傷害極大
還原盜刷步驟:
- 黑產(chǎn)通過破解(比如抓網(wǎng)絡(luò)請求)目標(biāo)App客戶端,獲得648元商品的蘋果商品id(product_id)值。
- 黑產(chǎn)自己上架一款A(yù)pp,在蘋果后臺添加一款1元的內(nèi)購商品,設(shè)置蘋果商品id(product_id)值和目標(biāo)App一致。
- 黑產(chǎn)在自己的App里真實(shí)付款1元商品,拿到蘋果返回的真實(shí)憑據(jù)(receipt)和蘋果交易id(transaction_id)。
- 黑產(chǎn)破解目標(biāo)App客戶端后,直接調(diào)目標(biāo)App的蘋果憑證校驗(yàn)接口,把上面獲得的憑據(jù)(receipt)和蘋果交易id(transaction_id)作為參數(shù)傳進(jìn)去。
- 目標(biāo)App服務(wù)端拿著憑據(jù)去蘋果后臺校驗(yàn),由于憑據(jù)是真實(shí)的,蘋果驗(yàn)證通過。目標(biāo)App服務(wù)端解析憑證,校驗(yàn)憑證內(nèi)參數(shù),核對product_id正確、核對transaction_id唯一性通過,全部校驗(yàn)通過,發(fā)貨。
漏洞的主要原因:
- 蘋果后臺,蘋果商品id(不同開發(fā)者賬號下)可以重復(fù);
- 目標(biāo)App服務(wù)端憑證校驗(yàn)接口,未校驗(yàn)憑證中App來源(bundleID)。
2.偽造的憑證
下面是被攻擊App服務(wù)端提供的一段日志,記錄了“偽造的”憑證樣式
- 最外層的bundle_id,并不是目標(biāo)App的包名,而是一個(gè)不認(rèn)識的App包名。這個(gè)就是黑產(chǎn)真實(shí)充值的App。
- in_app數(shù)組里面product_id,卻是目標(biāo)App里有效的蘋果商品id,正是648元商品的product_id。
- 再看transaction_id。這里的transaction_id實(shí)際上是黑產(chǎn)App內(nèi)充值產(chǎn)生的,并不是目標(biāo)App內(nèi)產(chǎn)生的。因?yàn)閠ransaction_id只有在蘋果內(nèi)購付款成功后才會生成,且只能由客戶端傳給服務(wù)端,所以服務(wù)端是沒法校驗(yàn)transaction_id是否來源于自己的App。服務(wù)端能做的就是判斷transaction_id是否重復(fù),防止重放攻擊。因?yàn)楹诋a(chǎn)每次充值都會真實(shí)的充一筆,所以transaction_id并不會重復(fù),這也是目標(biāo)App服務(wù)器驗(yàn)證transaction_id通過的原因。
{"receipt_type": "Production","adam_id": 6441231333,"app_item_id": 6441231333,"bundle_id": "com.apps.slanCaizhuang", //這并不是目標(biāo)App的bundleID,而是黑產(chǎn)自己的的App"application_version": "3","download_id": 502222222222222222,"version_external_identifier": 855304439,"receipt_creation_date": "2023-04-12 16:59:25 Etc/GMT","receipt_creation_date_ms": "1681318765000","receipt_creation_date_pst": "2023-04-12 09:59:25 America/Los_Angeles","request_date": "2023-04-12 17:16:54 Etc/GMT","request_date_ms": "1681319814498","request_date_pst": "2023-04-12 10:16:54 America/Los_Angeles","original_purchase_date": "2023-03-11 05:00:05 Etc/GMT","original_purchase_date_ms": "1678510805000","original_purchase_date_pst": "2023-03-10 21:00:05 America/Los_Angeles","original_application_version": "3","in_app": [{"quantity": "1","product_id": "com.xiaomi.haha123", //這里卻是目標(biāo)App的product_id"transaction_id": "210000000000000",//黑產(chǎn)自己App上支付產(chǎn)生的transaction_id"original_transaction_id": "210000000000000","purchase_date": "2023-04-12 16:59:25 Etc/GMT","purchase_date_ms": "1681318765000","purchase_date_pst": "2023-04-12 09:59:25 America/Los_Angeles","original_purchase_date": "2023-04-12 16:59:25 Etc/GMT","original_purchase_date_ms": "1681318765000","original_purchase_date_pst": "2023-04-12 09:59:25 America/Los_Angeles","is_trial_period": "false","in_app_ownership_type": "PURCHASED"}],"environment": "Production","status": 0
}
3.漏洞修復(fù)方案
1、服務(wù)端憑證校驗(yàn)時(shí),加上bundleID的校驗(yàn)即可
即服務(wù)端去蘋果那邊校驗(yàn)通過后,還需核對憑證內(nèi)以下參數(shù):
- bundle_id,是否為你們自己的App(防止跨App充值);
- product_id,是否為下單時(shí)對應(yīng)的商品id(防止App內(nèi)部以小博大);
- transaction_id,是否已經(jīng)發(fā)過貨(防止重放攻擊)
2、共享密鑰(推薦)
服務(wù)端請求蘋果憑證校驗(yàn)接口時(shí),除了傳receipt-data字段,再額外傳一個(gè)password參數(shù)(蘋果后臺生成的共享密鑰)。這樣蘋果那邊核對憑證時(shí),除了驗(yàn)證憑證是否有效,還會核對憑證和密鑰是否匹配。如果不匹配蘋果會返回錯(cuò)誤信息
官方文檔地址:https://developer.apple.com/documentation/appstorereceipts/requestbody?language=objc