當前位置:
首頁 > 最新 > 閃付卡隱私泄露原理

閃付卡隱私泄露原理

0×00 前言

說到閃付卡,首先要從EMV開始,EMV是由Europay,MasterCard和VISA制定的基於IC卡的支付標準規範。目前基於EMV卡的非接觸式支付的實現有三個:VISA的payWave,MasterCard的PayPass以及銀聯的閃付QuickPass。目前從外觀來看,銀聯發行的卡面有晶元的IC卡均支持閃付,部分銀行支持VISA的payWave。


0×01 閃付卡隱私泄露風險

想像一下當路人拿著巴掌大的設備靠近你的時候,你身上的銀行卡的卡號、發卡行、最近十筆的交易記錄等,甚至是姓名、身份證號都泄露出去將會有多恐怖。通過這些信息攻擊者就可以大致刻畫出卡主人的消費習慣和生活水平等等。當然,這並不是閃付卡或金融IC卡的「漏洞」,這些信息是需要在交易過程中由POS機發送給發卡行進行驗證的。


0×02 閃付卡工作流程

本文所指的工作流程只局限在跟信息泄露相關的流程上,不涉及數據認證、支付、聯機交易等內容。

應用選擇(2PAY.SYS.DDF01)

應用初始化

讀取數據

後續流程等


應用選擇

應用選擇包括目錄選擇法 與 AID列表法。讀卡器會首先使用目錄選擇法,如果失敗,則會使用AID列表法。簡單來說,目錄選擇法就是讀卡器從卡片讀取其所支持的所有應用,而AID列表法則是讀卡器將其所支持的所有應用一個一個發給卡片,當有響應時則卡片支持該應用,無響應則不存在。而後構造出一個支持的列表,供讀卡器或持卡人選擇。以目錄選擇法為例:



應用初始化

此處與交易有關,與本文隱私泄露關係不大,但因為是中間步驟,所以做簡單描述。在上一步應用選擇時卡片返回了PDOL(處理選項數據對象列表,可以理解為由卡片提供的組包格式),應用初始化時,按照PDOL組包向卡片發送GPO命令,包括金額、時間、國家代碼、貨幣代碼等。進入GPO就代表著交易的開始。


讀取數據

此部分是我們主要關注的位置,通過GET DATA或READ RECORD命令來讀取,READ RECORD通過SFI讀取數據內容,主要關注的是讀取個人化數據(DGI),GET DATA讀取一些標籤里的內容(如貨幣代碼、金額限制、上限、交易日誌格式等)。DGI的第一個位元組為01-1E,是SFI,第二個位元組是記錄編號。常用的DGI有0101(2磁軌等價數據、持卡人姓名(不建議存儲)、1磁軌自定義數據) 0102(2 磁軌等價數據、1磁軌自定義數據),0201(數據認證數據)等,具體的DGI表可參考《中國金融集成電路(IC)卡規範》的第十部分 表1。

GET DATA的命令報文的格式為80CA + 標籤 + 00

如讀取電子現金餘額(9F79)發送 80CA9F7900。

READ RECORD的命令報文的格式為00B2 + 記錄號 + 引用控制參數 + 00

其中引用控制參數為 SFI(Bin)左移三位 + 100(Bin)

如讀取DGI0101時,第一個01為SFI,第二個01為編號。計算引用控制參數如下,0000 0001左移三位得到00001 + 100 得到 0000 1100轉換為Hex為 0C,得到的APDU為 00 B2 01 0C 00。

0×03 測試過程

需要準備的工具如下:

ACR122u或同類支持APDU的讀卡器

讀卡器驅動及應用

支持閃付的銀行卡

本文使用的測試卡如下圖所示:

下面操作均會以ACR122U為讀卡器操作,在安裝好驅動及ACR122U Tool後,插入讀卡器並啟動ACR122U Tool。首先連接讀卡器設備,點擊菜單中的Reader Commands -> New connection

連接成功後,可以使用該工具直接發送APDU,點擊 Send Commands -> APDU Command

按照閃付卡的工作流程構造APDU發包,第一步是應用選擇,選擇qPBOC(2PAY.SYS.DDF01)

接下來可以進行讀取數據的部分了,首先讀取DGI0201里存儲的數據。其數據定義如下表:

要讀取DGI0201,計算APDU如下,0000 0010 左移三位 得到 00010 加 100 得到 0001 0100 即 14(Hex)

此處可以獲取卡的生效日期、失效日期、卡號等內容,接下來嘗試讀取磁條2和持卡人信息的數據,需要讀取DGI0101和DGI0102,,經過上述方法計算需要發送的APDU為:

APDU:00 B2 01 0C 00響應包如下70 15 (模板)57 13 62 26 22 10 06 40 45 00 (2磁軌卡號)D2 51 2 (有效期 25/12)2 20 00 98 78 32 00 00 0F (補足)90 00 (狀態字:成功)

接下來嘗試讀取一下交易記錄,這裡要注意首先要獲取交易記錄的格式,銀聯給出了推薦格式:

但是注意這裡只是推薦格式,每個銀行的卡片實現不一定相同,所以讀取交易記錄時應先獲取交易記錄的格式,使用GET DATA命令讀取9F4F標籤(交易日誌格式),根據該格式結合READ RECORD讀取出的交易日誌解析。首先讀取交易日誌格式:

經過比對發現與推薦格式相同,之後可以通過READ RECORD命令讀取從1-10讀取交易日誌。首先要找到在選擇AID的時候的回包,9F4D指出了交易日誌入口,通常為0B,根據上文計算其SFI為 0101 1100即5C。之後再構造APDU循環讀取其十條交易記錄

下表為使用手裡現有的銀行卡的測試情況。


0×04 腳本

我們已經可以使用APDU發送的工具,獲取想要獲得的信息,剩下的工作就是腳本化。可以使用ACR122U的SDK,其提供了Delphi,Java,VB,C#,C++等語言,但個人更願意通過Python來實現,通過使用Python的pyscard庫,可以實現該功能。


0×05 防護方式

防護的措施可以考慮與讀卡器保持足夠的距離、使用鋁箔包裹卡片、專業的Pacsafe下屬的RFIDSafe系列或簡單便捷的屏蔽卡套等措施。原理都是通過金屬或液體屏蔽來屏蔽高頻信號。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 瘋貓網路 的精彩文章:

Palo Alto防火牆遠程代碼執行漏洞分析
Linux下惡意文件大規模共性分析探討
後滲透工具Koadic:你真的了解我嗎?

TAG:瘋貓網路 |