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