金融行業(yè)平臺(tái)常見安全漏洞與防御
一、前言
互聯(lián)網(wǎng)金融是這兩年來在金融界的新興名詞,也是互聯(lián)網(wǎng)行業(yè)一個(gè)重要的分支,但互聯(lián)網(wǎng)金融不是互聯(lián)網(wǎng)和金融業(yè)的簡(jiǎn)單結(jié)合,而是在實(shí)現(xiàn)安全、移動(dòng)等網(wǎng)絡(luò)技術(shù)水平上,被用戶熟悉接受后,適應(yīng)新的需求而產(chǎn)生的新模式及新業(yè)務(wù),目前除了常見的網(wǎng)上銀行、第三方支付,這兩年很多的民間融資貸款平臺(tái)也逐步興起,像P2P網(wǎng)貸、眾籌等。越直接涉及到金錢的業(yè)務(wù)就越敏感,這是眾所周知的,平臺(tái)的運(yùn)作除了建立在強(qiáng)大的資金鏈之外,平臺(tái)自身的公信力也是很關(guān)鍵的,在陸陸續(xù)續(xù)的一些金融平臺(tái)出現(xiàn)過安全問題后,越來越多的此類平臺(tái)也逐步意識(shí)到安全的重要性。
我們?cè)?jīng)受邀請(qǐng)檢測(cè)過網(wǎng)上一些互聯(lián)網(wǎng)金融交易平臺(tái),在檢測(cè)的過程曾發(fā)現(xiàn)部分平臺(tái)存在著嚴(yán)重的安全問題,在本期的技術(shù)專題中我們將針對(duì)所發(fā)現(xiàn)過的一些常見的安全問題進(jìn)行總結(jié),同時(shí)提出相應(yīng)的解決辦法,希望對(duì)開發(fā)的人員代碼安全能力有所提高。
二、安全漏洞剖析
2.1統(tǒng)計(jì)
我們對(duì)曾測(cè)試對(duì)約多家金融交易平臺(tái)進(jìn)行過一次漏洞統(tǒng)計(jì),除了常見的一些如注入、跨站、CSRF、惡意上傳等Web漏洞外,部分金融平臺(tái)在業(yè)務(wù)功能上存在著嚴(yán)重的風(fēng)險(xiǎn),如任意用戶密碼重置、交易參數(shù)惡意篡改等,與常見的注入、惡意上傳不同,這些業(yè)務(wù)邏輯的漏洞不會(huì)直接影響服務(wù)器的安全,但卻會(huì)直接影響用戶的資金、賬號(hào)的安全,其風(fēng)險(xiǎn)程度有過之而無不及,若被黑客所利用或被曝光,將嚴(yán)重影響平臺(tái)公信力。
我們對(duì)常見的漏洞進(jìn)行過統(tǒng)計(jì),發(fā)現(xiàn)其中越權(quán)操作的占比最高,在我們所測(cè)試過的平臺(tái)中基本都有發(fā)現(xiàn),包括任意查詢用戶信息、任意刪除等行為;最嚴(yán)重的漏洞出現(xiàn)在賬號(hào)安全,包括重置任意用戶密碼、驗(yàn)證碼暴力破解等。下面我們將以舉例的方式給介紹一些常見的安全問題以及其解決方法。
2.2越權(quán)操作
漏洞描述
平行權(quán)限越權(quán)操作其實(shí)是一種較為常見的安全漏洞,在OWASP Top 10中也有所提及,分別為不安全對(duì)象引用和功能級(jí)別訪問控制缺失。
其中不安全對(duì)象引用指的是平行權(quán)限的訪問控制缺失,比方說,A和B兩個(gè)同為一個(gè)網(wǎng)站的普通用戶,他們之間的個(gè)人資料是相互保密的,A用戶的個(gè)人資料可以被B用戶利用程序訪問控制的缺失惡意查看,由于A用戶和B用戶之間是一個(gè)同級(jí)的賬號(hào),因此稱為平行權(quán)限的訪問控制缺失。功能級(jí)別訪問控制缺失指的是垂直權(quán)限的訪問控制缺失,比方說,A賬號(hào)為普通賬號(hào)、B賬號(hào)為管理員賬號(hào),B賬號(hào)的管理頁面時(shí)必須是以管理員權(quán)限登錄后方可查看,但A賬號(hào)可通過直接輸入管理頁面URL的方式繞過管理員登錄限制查看管理頁面,由于A用戶和B用戶的權(quán)限是垂直關(guān)系,因此稱為垂直權(quán)限的訪問控制缺失。該類型屬于業(yè)務(wù)設(shè)計(jì)缺陷的安全問題,因此傳統(tǒng)的掃描器是無法發(fā)現(xiàn)的,只能通過手工的滲透測(cè)試去進(jìn)行檢查。在金融平臺(tái)中以平行權(quán)限的訪問控制缺失較為常見。
案例
在金融交易平臺(tái)中,該類型的安全漏洞主要出現(xiàn)在賬號(hào)余額查詢,賬號(hào)個(gè)人資料篡改等功能上。下面我們通過幾個(gè)簡(jiǎn)單的案例給大家進(jìn)行說明
⑴ 任意修改用戶資料
某交易平臺(tái)的用戶可以通過該系統(tǒng)的個(gè)人資料修改頁面修改個(gè)人的昵稱和頭像。
截取發(fā)送修改請(qǐng)求的數(shù)據(jù)包抓取進(jìn)行分析。我們發(fā)現(xiàn)在提交的過程中,其實(shí)請(qǐng)求自帶了一個(gè)隱藏的參數(shù)investor.loginName,其實(shí)investor.loginName為登錄的手機(jī)號(hào)碼(或用戶名),investor.Name為重置的用戶名,通過直接修改掉參數(shù)investor.loginName為任意注冊(cè)的用戶名或者手機(jī)號(hào)碼,即可成功篡改重置該用戶的用戶名。
⑵ 任意查詢用戶信息
在對(duì)金融交易平臺(tái)測(cè)試的過程中,我們發(fā)現(xiàn)大部分平臺(tái)并未對(duì)查詢功能進(jìn)行優(yōu)化,使用用戶的uid之類的賬號(hào)標(biāo)志參數(shù)作為查詢的關(guān)鍵字,并且未對(duì)查詢范圍進(jìn)行控制,導(dǎo)致出現(xiàn)任意信息查詢的安全漏洞。該類型漏洞在手機(jī)客戶端較為常見,如在某交易平臺(tái)手機(jī)商城就發(fā)現(xiàn)了任意查詢其他用戶信息的安全問題。
當(dāng)點(diǎn)擊商城的個(gè)人資料修改處,系統(tǒng)會(huì)通過將當(dāng)前用戶的phone_client_uuid提交到服務(wù)器進(jìn)行查詢,調(diào)出個(gè)人資料的內(nèi)容
但由于系統(tǒng)并未對(duì)該功能進(jìn)行訪問控制,導(dǎo)致可通過遍歷uuid的方式查詢平臺(tái)中任意用戶的資料,通過工具對(duì)phone_client_uuid的后5位進(jìn)行爆破嘗試,如下圖:
通過對(duì)返回值的length進(jìn)行篩選,發(fā)現(xiàn)成功爆破部分phone_client_uuid所對(duì)應(yīng)的用戶信息。
代碼防護(hù)
針對(duì)平行權(quán)限的訪問控制缺失,我們建議使用基于用戶或者會(huì)話的間接對(duì)象引用進(jìn)行防護(hù),比方說,一個(gè)某個(gè)選項(xiàng)包含6個(gè)授權(quán)給當(dāng)前用戶的資源,它可以使用一串特殊的數(shù)字或者字符串來指示哪個(gè)是用戶選擇的值,而不是使用資源的數(shù)據(jù)庫關(guān)鍵字來表示,數(shù)字和字符串的生成可以結(jié)合賬號(hào)信息進(jìn)行生成,使得攻擊者難以猜測(cè)生成的方式。
針對(duì)垂直權(quán)限的訪問控制缺失,我們建議可以使用缺省拒絕所有的訪問機(jī)制,然后對(duì)于每個(gè)功能的訪問,可以明確授予特定角色的訪問權(quán)限,同時(shí)用戶在使用該功能時(shí),系統(tǒng)應(yīng)該對(duì)該用戶的權(quán)限與訪問控制機(jī)制進(jìn)行校對(duì)。#p#
2.3任意重置用戶密碼
漏洞描述
在眾多的交易平臺(tái)中,NSTRT發(fā)現(xiàn)任意重置用戶密碼這類型的問題也較為普遍,主要是出現(xiàn)在密碼找回、郵箱驗(yàn)證等方面,部分漏洞從技術(shù)原理來說上來說它與越權(quán)操作時(shí)相似的,即用戶越權(quán)去修改其他用戶的信息,如密保電話、密保郵箱等,由于它敏感性所以我們將它歸納成一類進(jìn)行探討。
案例
繞過短信驗(yàn)證碼
基本所有的金融交易平臺(tái)都有短信找回密碼的功能,但部分短信驗(yàn)證的功能較為不完善導(dǎo)致可被利用重置任意用戶的賬號(hào),同樣是某金融平臺(tái)的實(shí)際案例:
在已知對(duì)方用戶名和手機(jī)號(hào)碼的情況下,通過站點(diǎn)的密碼找回功能可繞過短信驗(yàn)證碼直接重置該賬號(hào)密碼。下圖為密碼重置頁面:
該漏洞出現(xiàn)主要的原因在于開發(fā)人員在第二步設(shè)置新密碼時(shí)服務(wù)端沒有對(duì)手機(jī)驗(yàn)證碼進(jìn)行二次校驗(yàn),導(dǎo)致當(dāng)攻擊者可以利用修改返回值的方式直接跳轉(zhuǎn)到設(shè)置新密碼頁面,然后重置用戶的密碼。
短信驗(yàn)證碼暴力破解
部分金融交易平臺(tái)為了用戶登錄方便會(huì)設(shè)置短信驗(yàn)證碼登錄功能,但并未對(duì)驗(yàn)證碼的登錄錯(cuò)誤次數(shù)進(jìn)行限制,導(dǎo)致可利用驗(yàn)證碼爆破的方式強(qiáng)行登錄賬號(hào)。在某證券交易平臺(tái)就曾出現(xiàn)過該安全問題。
該平臺(tái)使用6位數(shù)字隨機(jī)驗(yàn)證碼進(jìn)行登錄,但并未對(duì)登錄錯(cuò)誤次數(shù)和驗(yàn)證碼失效時(shí)間進(jìn)行限制,導(dǎo)致可以暴力破解該驗(yàn)證碼強(qiáng)制登錄賬號(hào)。如下圖:
同樣是通過返回值的length字段進(jìn)行判斷是否登錄成功。6位字段的爆破需要較長(zhǎng)的時(shí)間,但4位驗(yàn)證碼的爆破時(shí)間最慢也僅需要約5分鐘左右。
代碼防護(hù)
針對(duì)案例一中的漏洞,我們建議在第二步修改密碼時(shí)服務(wù)端再次驗(yàn)證手機(jī)驗(yàn)證碼,部分平臺(tái)所采用的做法是,第一步驗(yàn)證碼提交成功后,將驗(yàn)證碼隱藏在一個(gè)“hidden”表單中,并在第二步修改密碼中進(jìn)行提交,服務(wù)端再次驗(yàn)證短信驗(yàn)證碼,保證準(zhǔn)確性,同時(shí)對(duì)驗(yàn)證碼的錯(cuò)誤次數(shù)進(jìn)行限制,當(dāng)驗(yàn)證錯(cuò)誤超過特定次數(shù),當(dāng)前驗(yàn)證碼無效。
針對(duì)案例二中的漏洞,我們同樣建議隨機(jī)驗(yàn)證碼設(shè)置錯(cuò)誤次數(shù)限制,當(dāng)驗(yàn)證錯(cuò)誤超過特定次數(shù),當(dāng)前驗(yàn)證碼即無效。
2.4惡意注冊(cè)
漏洞描述
惡意注冊(cè),是指攻擊者利用網(wǎng)站注冊(cè)功能的安全漏洞,注冊(cè)大量的垃圾賬號(hào),導(dǎo)致系統(tǒng)增多大量無用數(shù)據(jù)。一般網(wǎng)站開發(fā)者為了防止惡意注冊(cè)的行為,在注冊(cè)頁面均會(huì)在加入一些需要人工輸入的步驟,比方說短信驗(yàn)證碼,郵箱驗(yàn)證等。但是在對(duì)金融平臺(tái)測(cè)試的過程中,同樣也發(fā)現(xiàn)了部分驗(yàn)證功能可被繞過。
案例
注冊(cè)數(shù)據(jù)包重放繞過驗(yàn)證碼
部分金融交易平臺(tái)為了保證注冊(cè)用戶的真實(shí)性,往往都會(huì)要求驗(yàn)證手機(jī),并通過發(fā)送驗(yàn)證碼的方式來保證注冊(cè)賬號(hào)并非僵尸賬號(hào),但是部分平臺(tái)的驗(yàn)證碼可被多次重放,導(dǎo)致可注冊(cè)大量垃圾賬號(hào),在某交易商城的注冊(cè)功能就存在該漏洞,下圖為注冊(cè)時(shí)需要給手機(jī)發(fā)送驗(yàn)證碼的數(shù)據(jù)包:
短息碼驗(yàn)證完后,直接注冊(cè)寫數(shù)據(jù)庫,通過修改phoneNum的值可以實(shí)現(xiàn)批量注冊(cè)賬號(hào):
通過修改phoneNum的值為15527xxxx96、15527xxxx97可成功注冊(cè)這兩個(gè)賬號(hào):
該漏洞出現(xiàn)的原因在于后臺(tái)未校驗(yàn)驗(yàn)證碼的使用次數(shù)和時(shí)間,只校驗(yàn)了其準(zhǔn)確性,因此可被利用進(jìn)行多次注冊(cè)。
代碼防護(hù)
目前遇到的大部分惡意注冊(cè)類的安全漏洞均為驗(yàn)證碼可被多次使用造成,我們建議后臺(tái)對(duì)驗(yàn)證碼的使用進(jìn)行限制,任何的驗(yàn)證碼應(yīng)為一次性,防止驗(yàn)證碼被多次使用。#p#
2.5惡意短信
漏洞描述
惡意短信是一種類似于DDoS的攻擊方式,他是利用網(wǎng)站的短信相關(guān)的功能,對(duì)用戶的手機(jī)進(jìn)行長(zhǎng)時(shí)間的短信轟炸,導(dǎo)致手機(jī)癱瘓。除了單純的短信轟炸之外,我們?cè)跍y(cè)試過程中也發(fā)現(xiàn),部分金融交易平臺(tái)對(duì)所發(fā)送的短信內(nèi)容也并沒有進(jìn)行限制,導(dǎo)致可被利用進(jìn)行短信欺詐。
案例
短信轟炸
在測(cè)試的過程中,我們發(fā)現(xiàn)眾多的金融交易平臺(tái)僅在前端通過JS校驗(yàn)時(shí)間來控制短信發(fā)送按鈕,但后臺(tái)并未對(duì)發(fā)送做任何限制,導(dǎo)致可通過重放包的方式大量發(fā)送惡意短信。如某交易平臺(tái)的手機(jī)注冊(cè)處就出現(xiàn)過該類型漏洞。利用fiddler抓取數(shù)據(jù)包,并進(jìn)行重放可以繞過前端的限制,大量發(fā)送惡意短信。
任意短信內(nèi)容編輯
在某平臺(tái)的修改綁定手機(jī)功能就曾出現(xiàn)過可編輯短信內(nèi)容的問題。
點(diǎn)擊“獲取短信驗(yàn)證碼”,并抓取數(shù)據(jù)包內(nèi)容,如下圖。通過分析數(shù)據(jù)包,可以發(fā)現(xiàn)參數(shù)sendData/insrotxt的內(nèi)容有客戶端控制,可以修改為攻擊者想要發(fā)送的內(nèi)容
將內(nèi)容修改“恭喜你獲得由xx銀行所提供的iphone6一部,請(qǐng)登錄http://www.xxx.com領(lǐng)取,驗(yàn)證碼為236694”并發(fā)送該數(shù)據(jù)包,手機(jī)可收到修改后的短信內(nèi)容,如下圖:
該類型漏洞對(duì)系統(tǒng)的影響不大,但若被攻擊者利用進(jìn)行短信欺詐,將嚴(yán)重影響平臺(tái)的聲譽(yù),甚至可能會(huì)惹上法律糾紛。
代碼防護(hù)
針對(duì)惡意短信類的安全問題,我們建議可以通過以下兩種方式進(jìn)行防護(hù):
1、從服務(wù)端限制每個(gè)號(hào)碼的發(fā)送頻率和每天的發(fā)送次數(shù),防止攻擊者利用短信接口進(jìn)行惡意轟炸。
2、發(fā)送短信的內(nèi)容應(yīng)直接由系統(tǒng)內(nèi)部進(jìn)行定義,客戶端可通過數(shù)字或字符的方式,對(duì)所需要發(fā)送的內(nèi)容進(jìn)行選擇,如messagetype=1 為密碼找回,messtype=2為注冊(cè),然后通過數(shù)字來索引要發(fā)送的內(nèi)容。
三、總結(jié)
隨著社會(huì)的進(jìn)步,互聯(lián)網(wǎng)金融交易平臺(tái)將會(huì)越來越流行,平臺(tái)涉及用戶信息、資金等敏感信息,因此平臺(tái)安全性應(yīng)更應(yīng)受到重視,開發(fā)商必須加強(qiáng)開發(fā)人員的代碼安全意識(shí),建立代碼安全開發(fā)規(guī)范,同時(shí)結(jié)合第三方滲透測(cè)試和代碼審計(jì)的方式對(duì)即將上線的系統(tǒng)僅測(cè)試,提高平臺(tái)的安全性。