你的銀行卡,我的錢——POS機安全初探
【前言】
現代社會,刷卡已經非普及了,所以POS系統(Point Of Sales System)的應用非常普遍,在商場、餐廳、酒店、醫院等場所都能見到它的身影。
移動支付體系下的新式的POS機一般是連接第三方支付機構使用銀行卡快捷支付,技術上引入了藍牙/WiFi/音頻(用于POS刷卡器與POS終端主機通訊)、Android/iOS(POS終端主機APP支持的系統),更便捷的同時引入更多安全問題。
我們針對幾個品牌的POS機進行了安全測試,結果卻讓人感覺害怕:把卡在黑客控制的POS機上刷一下后,銀行卡還在你手上,黑客卻可以繼續刷卡,刷光里面的錢(你的卡,我的錢)。
【場景演示】
我們分析了國內幾款知名的POS機,發現其系統設計都存在類似的安全漏洞,經過對數據篡改后,可以對刷卡的人扣取任意費用。
無圖無真相,看下圖。

漏洞原理比較簡單,但是影響卻讓人感覺害怕。我們遵循負責任的安全漏洞報告流程,漏洞細節已經報告給相關廠商修復。
【技術分析】
現在到了技術分析時間。
我們分析發現,該款POS機在向服務端發送指令時是包含了一個防止重放攻擊的隨機數,但是服務端卻沒有驗證隨機數,結果就是POS機向服務端發的包可以重放攻擊。同時,POS終端發出的指令包也沒有數字簽名,可以任意修改。
于是漏洞就產生了,攻擊者通過正常刷卡獲得受害者銀行卡的一些信息后,可以自行生成一個付款指令到服務端,這樣受害者的銀行卡就被扣款了。
大致的漏洞示意圖如下(具體的細節就略過):

修復方法也比較簡單,服務端校驗這個隨機數就可以了。這樣即使是重放,由于隨機數已經出現過了,所以攻擊會失效。但是問題又來了,黑客如果直接攔截改包而不是嗅探,那么怎么防護呢?加一個數字簽名吧。
這個漏洞的本質是信息化后不安全的IT系統洞穿了基于“擁有”(銀行卡)加基于“知道”(密碼)的身份認證體系。試想一下,未來的生物特征(指紋、聲紋、虹膜等)認證方式同樣是信息化的,是否也會存在這種隱患呢?
【延伸知識】
發達的資本主義國家早就遇到過POS機的安全問題。
2013年國外安全公司Arbor Networks就發現了感染POS終端和服務器的惡意軟件,下圖就是被感染的地域分布圖。從圖中我們可以看到,中國大陸幾乎不受影響,看起來是國內的POS系統跟國外不是一個技術架構,所以不受洋蠕蟲病毒的影響。

2014年1月,US-CERT針對POS惡意軟件發出預警,并給出了POS系統最佳安全實踐:

【防范惡意POS機】
通過上文可以看到,POS機的安全隱患還是較大的,現在我們的研究團隊成員出門刷卡時看到POS機心里就特緊張。
那么,怎么防范呢?
金融安全關系重大,特別是隨著互聯網金融的興起和發展,帶來的安全問題只會越來越多,監管機構、廠商和普通用戶都應該對此引起足夠重視。
對于監管機構來說,廠商發布的金融類產品的安全質量應有切實可行的規章制度流程來保證。
對于廠商來說,硬件設備要遵循SDL流程,將大部分安全風險消除在發布前——畢竟終端的升級成本會高于在線服務很多,而且隨著互聯網金融的發展,傳統金融行業隱匿起來的安全風險會被更多的發現。
對于普通用戶來說,為了防備惡意POS機,最好準備兩張卡,一張專門用于存錢,一張專門用于刷卡和網銀,這樣即使被盜刷了損失也可控;同時開通銀行的單筆消費通知(微信和短信雙管齊下),如果有異常消費就可以第一時間發現和處理了。

【后記】
隨著互聯網的發展,結合硬件、軟件、通訊架構下的智能設備的安全問題還很多,隨著時間的推移和業界的關注,這些問題會逐漸爆發出來(比如最近對部分省份電信DNS Server 產生DDoS攻擊的感染攝像頭的蠕蟲)。