分享嘉賓:宋宇昊,畢業于上海交通大學信息安全學院,碁震(KEEN)的聯合創始人,現擔任技術總監、高級研究員,曾任職于微軟(中國)安全響應中心,并于2010年獲得微軟中國突出貢獻獎。目前關注Android相關和智能設備領域的安全研究,同時致力于打造 GeekPwn 平臺,向廣大白帽子們征集智能設備漏洞,并且展現給大眾。
【KEEN 聯合創始人 宋宇昊】
這世上的騙局,到底誰買單?
隨著移動支付的普及,我們的生活變得越來越便利。我們甚至已經可以不帶錢包、現金、銀行卡出門,只用手機就能完成吃飯、娛樂、交通、購物的支付。
平時我們一講到支付安全,大家最容易想到的就是釣魚、詐騙。確實,釣魚和詐騙是支付領域最常見犯罪手段,它的犯罪成本低、易于實施。詐騙其實是社會工程攻擊的一種,犯罪者一般先通過各種方式獲取受害者的信息,比如聯系方式、甚至可能是受害者的個人隱私信息,然后犯罪者利用受害者心理弱點進行欺詐。例如洗錢調查開安全賬戶、家人生病等等都是常見的欺詐手段。最近幾天被廣泛傳播的《為什么一條短信就能騙走我所有的財產》文章中講的也是一種詐騙手段。
所有欺詐手段的共同點是,犯罪者都要誘使受害者犯錯,只有受害者執行了錯誤的操作才能夠讓犯罪者得逞。那么是不是只要用戶保持清醒的頭腦不受騙上當就安全了呢?
答案是否定的。除了用戶有犯錯的機會,產品廠商的設計者、開發者也會犯錯,他們犯的錯誤也可能導致用戶財產受到犯罪者的侵害,當然也可能導致廠商自己受侵害。大家都知道開發者寫代碼出錯,那叫Bug。而如果正好有某個Bug不巧,能夠被攻擊者利用,在沒有被授權的情況下訪問或者破壞系統,那這個Bug就叫做漏洞。
有些人會把這類攻擊者叫做黑客,但我這兒為了避免混淆不這么稱呼,因為在不同場合下黑客有不同含義。有時候,黑客被認為是利用技術研究成果實施計算機犯罪的人,這類人也被叫做黑帽黑客;有時候,黑客是指那些把研究成果用于幫助廠商改進產品,幫助保護用戶安全的人,這類叫做白帽黑客。
白帽子們會在各種渠道,例如 GeekPwn 這樣的平臺上分享并展示出自己的研究成果,然后我們將這些成果提供給廠商,以幫助他們提升產品安全。正因如此,這些案例中的漏洞并沒有被用于犯罪行為中,而是被廠商及時地修復了。今天我們就來看看我們能從中吸取到些什么經驗和教訓。
消費型App存在哪些問題?
所謂消費型APP是指所有能在其中進行充值、購物、購買服務等等消費行為的APP。在這個案例中,是一個O2O提供線下服務的APP,用戶可以在APP中充值余額。然而一個惡意的用戶可以做到在APP中充值任意多的錢,實際卻只支付1分錢或其他任意金額。這個場景中的受害者是這個APP服務的提供商。
那么這個任意占廠商便宜的漏洞是怎么產生的呢?在分析原因前,我們先看一下攻擊的流程。
這個場景中有手機APP、支付平臺、APP服務端三方。根據廠商的設想,他們預期的是這樣的支付流程,我們看下圖的左側:
1、手機APP首先生成了一個100元的充值訂單發送給APP服務端;
2、用戶獲得一個支付鏈接,依據鏈接向支付平臺支付100元;
3、支付平臺會向APP服務端發送消息,說某個訂單成功支付了100元;
4、APP服務端收到消息,檢查是否支付成功,如成功就往賬戶余額中增加100元。
這個流程問題在哪兒呢?我們看剛才那幅圖的右側:
如果這個APP用戶并不是一個老實的用戶,他并沒有按照訂單返回的支付信息支付100元,而是把它修改為支付0.01元,并且完成支付。在這個情況下,APP服務端同樣會收到支付平臺發來的消息,說某個訂單成功支付了0.01元。然而APP服務端卻并不管實際支付了多少錢,只關心這個訂單支付成功了,并且按照訂單金額給賬戶中充值了100元。這樣用戶就成功地坑了APP廠商99.99元。
導致這個問題的原因是什么呢?是一個APP服務端的漏洞,APP服務端沒有遵循支付平臺的API文檔標準,對支付平臺回調的支付結果信息做充分的校驗。
二維碼支付存在哪些問題?
我相信大多數朋友都用過二維碼支付,在實體店鋪中展示二維碼,掃一下就能完成支付,非常方便。我們這就來看一下二維碼掃碼支付的漏洞案例。在這個案例中,攻擊者到任意實體店鋪進行消費,以二維碼方式支付,但卻從受害者的賬戶中扣費。這里的受害者可以是任何一個在這個支付平臺上注冊過的用戶。在分析原因前,我們先來看一下攻擊流程。
這個場景中有用戶、實體店鋪和支付平臺三方。根據支付廠商的設想,預期這樣的支付流程:
用戶Alice點開掃碼支付,這時候支付客戶端會向支付平臺服務端請求一個二維碼,假設這里請求的AccountNo叫Alice,這樣支付平臺服務端就會返回一個二維碼,這個二維碼對應于Alice的賬戶,并且只能用一次,這就相當于一個支付令牌。
店鋪的二維碼掃描槍掃了一下這個二維碼,店鋪就獲得了這個支付令牌,它就可以從Alice的賬號中扣款了。然而有個叫Chuck的惡意用戶,它在向服務端請求支付二維碼的時候,在AccountNo當中填入了Alice,這時候店鋪掃描二維碼就會從Alice賬戶中扣款了。導致這個問題的原因,是支付平臺的二維碼支付協議的漏洞,任何用戶可以越權請求他人的支付二維碼。
手機POS機存在哪些問題?
很多小店鋪或者私營業主使用手機收款POS機來進行收費,這為刷卡消費提供了很多便利。在這個案例中,消費者到一家店鋪的POS機上進行刷卡消費。然而在消費者刷卡完成離開店鋪之后,惡意的POS機收款方雖然并沒有拿到消費者的銀行卡和銀行卡密碼,但依然可以從消費者的卡中扣除任意金額的資金,轉到自己賬戶中。分析原因前,我們先來看一下演示視頻。
這個視頻是我們GeekPwn和央視在315晚會上合作的一個短片,短片展示了之前描述的POS問題的案例。在視頻中,惡意的POS持有者在刷卡者刷卡消費完成之后,隨便拿了一張便利店的會員積分卡,輸入任意密碼就刷走了之前刷卡者銀行卡里的錢。在這里刷便利店的磁條卡和輸入任意密碼僅僅是為了觸發刷卡支付的相應步驟。由于315晚會時間的限制,短片沒能細致地解釋這個盜刷流程,因此不少觀眾以為演示的是復制磁條卡的問題,其實這個案例比復制磁條卡更進一步。在刷卡消費過程中,需要兩個要素,一是磁卡,二是磁卡的支付密碼,缺一不可。因此如果只是復制磁卡,那么還需要額外獲得磁卡的密碼。在這個案例中,受害者刷卡消費時,刷真實的卡,輸入正確的密碼,在收款客戶端中生成了一個扣款的令牌。然而這個扣款令牌并沒有實現一次一密,在刷卡完成后并沒有作廢,因此惡意的POS持有者就可以從手機內存中取出這個令牌,反復使用反復扣費。所以說,導致這個案例的原因,是支付平臺的POS支付協議的漏洞。
指紋支付存在哪些問題?
如果你的手機忘了鎖屏,放桌上被人拿走了,錢會被偷走嗎?你可能會想:“應該沒法轉走錢吧,畢竟支付的時候還需要再驗證一次。更何況我設置了指紋驗證,比支付密碼更安全。”大多數時候確實如此,但是如果這里有漏洞,那就不是這樣了。這個案例展示了攻擊者拿到一臺已經解鎖屏幕的手機,繞過指紋驗證進行支付的場景,受害者當然是手機被拿走的那個人。在分析原因前,我們先看一下攻擊流程。
按照正常的指紋支付流程,APP在受到支付請求時會要求驗證,讓指紋驅動提供相應賬戶的身份認證信息,比如說需要Alice用戶的身份信息。如果這時候是Alice本人在操作,那么指紋驅動控制硬件讀取Alice的指紋,并且跟之前登記的Alice的指紋進行特征比對。如果匹配成功,那么指紋驅動就會將Alice的身份認證信息提供給APP,APP就可以繼續支付流程。然而在這個案例中的這款手機里,指紋驅動有漏洞,它允許普通用戶開啟它的調試模式。而在打開調試模式的情況下,它不會再校驗指紋,不論刷什么人的指紋,它都將向APP提供手機中登記的身份認證信息。因此,無論誰只要能插上USB線調試這臺手機,就能完成支付流程。
我們很容易理解的是,誰犯的錯誤就應該由誰來避免或糾正。對于釣魚詐騙這類的威脅,是基于用戶的上當受騙而實施的犯罪,這時我們通常需要教育用戶,以免用戶上當受騙。而對于漏洞威脅,是基于產品廠商的設計者、開發者所犯的錯誤,那么當然主要就應該由廠商來擔負起應對威脅的責任。
有些建議的措施,就像“多鍛煉有益身體健康”這樣普遍適用普遍有效,比如:采用HTTPS等加密協議保護所有的通訊,盡快把磁條卡換成芯片卡等。除此之外,還需要針對性的措施,比如:修復掉所有被發現的漏洞。然而每一次漏洞被發現被修復的過程,代價都是高昂的,對于廠商而言,更經濟的做法是從根本上提升產品的安全性,這就需要增加設計與開發人員的安全教育,提升安全意識,并且在設計架構、設計協議、開發程序的過程中,引入安全開發流程。這樣可以盡可能地減少產品中的漏洞,把漏洞消滅在萌芽階段,從而減少安全應急的成本。
(演講到此結束,以下節選2個精彩問答分享)
精彩問答:
1、問:由于線上支付的場景非常多,消費型App校驗漏洞、二維碼支付協議漏洞,這種越權提取漏洞是否普遍存在?目前我們是否需要避免這類交易呢?
宋宇昊:根據我們的觀察,相當多的消費型APP廠商是成長型的中小公司,產品也處于發展初期,因此漏洞相對較多。而支付平臺的廠商一般都是大公司,產品相對比較成熟,這類危害嚴重的漏洞也就并不普遍了。軟硬件產品中的漏洞不可避免,作為消費者而言,不必過于恐慌,因噎廢食。
可以從兩方面考慮這個問題:
一方面從技術角度,考察監督一下廠商的產品是否持續性地暴露出低級錯誤高危漏洞、廠商是否及時修復被披露的漏洞;
另外從非技術角度,考察廠商是否有政策保障賠付用戶的意外損失,并且是否有能力賠付。
2、問:今天提到的攻擊方式,很多都帶有定向攻擊的屬性,例如:要針對某個消費型App寫充值攻擊代碼,或者需要拿到被害人的手機,這些都會提高黑客的攻擊成本,如何來理解攻擊成本和這些攻擊成真的可能性之間的關系呢?
攻擊成本確實是一個需要考慮的問題:
對于每一個漏洞而言,都需要編寫和使用專門針對性的攻擊代碼進行攻擊,攻擊成本遠遠高于批量群發的欺詐信息;
產品漏洞對于廠商而言是可控的(相較于可能受騙的各種用戶而言),一旦攻擊被廠商知曉,漏洞就會被修復,攻擊者也就無法繼續利用該漏洞。
因此在實際的移動支付犯罪案例中,絕大多數是欺詐、釣魚、木馬等案例,利用漏洞攻擊的相對較少,并不太普遍。但是考慮到支付領域的犯罪收益巨大,該領域漏洞攻擊的回報率也是非常高的,因此漏洞攻擊被投入實際應用的可能性很高。