一、前言
互聯網金融是這兩年來在金融界的新興名詞,也是互聯網行業一個重要的分支,但互聯網金融不是互聯網和金融業的簡單結合,而是在實現安全、移動等網路技術水准上,被用戶熟悉接受後,適應新的需求而產生的新模式及新業務,現時除了常見的網上銀行、第三方支付,這兩年很多的民間融資貸款平臺也逐步興起,像P2P網貸、眾籌等。越直接涉及到金錢的業務就越敏感,這是眾所周知的,平臺的運作除了建立在强大的資金鏈之外,平臺自身的公信力也是很關鍵的,在陸陸續續的一些金融平臺出現過安全問題後,越來越多的此類平臺也逐步意識到安全的重要性。
我們曾經受邀請檢測過網上一些互聯網金融交易平臺,在檢測的過程曾發現部分平臺存在著嚴重的安全問題,在本期的技術專題中我們將針對所發現過的一些常見的安全問題進行總結,同時提出相應的解決辦法,希望對開發的人員程式碼安全能力有所提高。
二、安全性漏洞剖析
2.1統計
我們對曾測試對約多家金融交易平臺進行過一次漏洞統計,除了常見的一些如注入、跨站、CSRF、惡意上傳等Web漏洞外,部分金融平臺在業務功能上存在著嚴重的風險,如任意使用者密碼重置、交易參數惡意篡改等,與常見的注入、惡意上傳不同,這些業務邏輯的漏洞不會直接影響服務器的安全,但卻會直接影響用戶的資金、帳號的安全,其風險程度有過之而無不及,若被駭客所利用或被曝光,將嚴重影響平臺公信力。
我們對常見的漏洞進行過統計,發現其中越權操作的占比最高,在我們所測試過的平臺中基本都有發現,包括任意査詢用戶資訊、任意删除等行為;最嚴重的漏洞出現在帳號安全,包括重置任意使用者密碼、驗證碼暴力破解等。下麵我們將以舉例的管道給介紹一些常見的安全問題以及其解決方法。
2.2越權操作
漏洞描述
平行許可權越權操作其實是一種較為常見的安全性漏洞,在OWASP Top 10中也有所提及,分別為不安全對象引用和功能級別存取控制缺失。
其中不安全對象引用指的是平行許可權的存取控制缺失,比方說,A和B兩個同為一個網站的普通用戶,他們之間的個人資料是相互保密的,A用戶的個人資料可以被B用戶利用程式存取控制的缺失惡意查看,由於A用戶和B用戶之間是一個同級的帳號,囙此稱為平行許可權的存取控制缺失。功能級別存取控制缺失指的是垂直許可權的存取控制缺失,比方說,A帳號為普通帳號、B帳號為管理員帳號,B帳號的管理頁面時必須是以管理員許可權登入後方可查看,但A帳號可通過直接輸入管理頁面URL的管道繞過管理員登錄限制查看管理頁面,由於A用戶和B用戶的權限是垂直關係,囙此稱為垂直許可權的存取控制缺失。該類型屬於業務設計缺陷的安全問題,囙此傳統的掃描器是無法發現的,只能通過手工的滲透測試去進行檢查。在金融平臺中以平行許可權的存取控制缺失較為常見。
案例
在金融交易平臺中,該類型的安全性漏洞主要出現在帳號餘額查詢,帳號個人資料篡改等功能上。下麵我們通過幾個簡單的案例給大家進行說明
⑴任意修改使用者資料
某交易平臺的用戶可以通過該系統的個人資料修改頁面修改個人的昵稱和頭像。
截取發送修改請求的數据包抓取進行分析。我們發現在提交的過程中,其實請求自帶了一個隱藏的參數investor.loginName,其實investor.loginName為登入的手機號碼(或用戶名),investor.Name為重置的用戶名,通過直接修改掉參數investor.loginName為任意注册的用戶名或者手機號碼,即可成功篡改重置該用戶的用戶名。
⑵任意査詢用戶資訊
在對金融交易平臺測試的過程中,我們發現大部分平臺並未對査詢功能進行優化,使用用戶的uid之類的帳號標誌參數作為査詢的關鍵字,並且未對查詢範圍進行控制,導致出現任意資訊查詢的安全漏洞。該類型漏洞在手機用戶端較為常見,如在某交易平臺手機商城就發現了任意査詢其他用戶資訊的安全問題。
當點擊商城的個人資料修改處,系統會通過將當前用戶的phone_client_uuid提交到服務器進行査詢,調出個人資料的內容
但由於系統並未對該功能進行存取控制,導致可通過遍歷uuid的管道査詢平臺中任意用戶的資料,通過工具對phone_client_uuid的後5比特進行爆破嘗試,如下圖:
通過對返回值的length進行篩選,發現成功爆破部分phone_client_uuid所對應的用戶資訊。
程式碼防護
針對平行許可權的存取控制缺失,我們建議使用基於用戶或者會話的間接對象引用進行防護,比方說,一個某個選項包含6個授權給當前用戶的資源,它可以使用一串特殊的數位或者字串來訓示哪個是用戶選擇的值,而不是使用資源的資料庫關鍵字來表示,數位和字符串的生成可以結合帳號資訊進行生成,使得攻擊者難以猜測生成的管道。
針對垂直許可權的存取控制缺失,我們建議可以使用預設拒絕所有的訪問機制,然後對於每個功能的訪問,可以明確授予特定角色的存取權限,同時用戶在使用該功能時,系統應該對該用戶的許可權與存取控制機制進行校對。
2.3任意重置使用者密碼
漏洞描述
在眾多的交易平臺中,NSTRT發現任意重置使用者密碼這類型的問題也較為普遍,主要是出現在密碼找回、郵箱驗證等方面,部分漏洞從科技原理來說上來說它與越權操作時相似的,即用戶越權去修改其他用戶的資訊,如密保電話、密保郵箱等,由於它敏感性所以我們將它歸納成一類進行探討。
案例
繞過簡訊驗證碼
基本所有的金融交易平臺都有簡訊找回密碼的功能,但部分簡訊驗證的功能較為不完善導致可被利用重置任意用戶的帳號,同樣是某金融平臺的實際案例:
在已知對方用戶名和手機號碼的情况下,通過網站的密碼找回功能可繞過簡訊驗證碼直接重置該帳號密碼。下圖為密碼重置頁面:
該漏洞出現主要的原因在於開發人員在第二步設定新密碼時服務端沒有對手機驗證碼進行二次校驗,導致當攻擊者可以利用修改返回值的管道直接跳轉到設定新密碼頁面,然後重置用戶的密碼。
簡訊驗證碼暴力破解
部分金融交易平臺為了用戶登錄方便會設定簡訊驗證碼登入功能,但並未對驗證碼的登入錯誤次數進行限制,導致可利用驗證碼爆破的管道强行登入帳號。在某證券交易平臺就曾出現過該安全問題。
該平臺使用6比特數位隨機驗證碼進行登入,但並未對登入錯誤次數和驗證碼失效時間進行限制,導致可以暴力破解該驗證碼強制登入帳號。如下圖:
同樣是通過返回值的length欄位進行判斷是否登入成功。6比特欄位的爆破需要較長的時間,但4比特驗證碼的爆破時間最慢也僅需要約5分鐘左右。
程式碼防護
針對案例一中的漏洞,我們建議在第二步修改密碼時服務端再次驗證手機驗證碼,部分平臺所採用的做法是,第一步驗證碼提交成功後,將驗證碼隱藏在一個“hidden”表單中,並在第二步修改密碼中進行提交,服務端再次驗證簡訊驗證碼,保證準確性,同時對驗證碼的錯誤次數進行限制,當驗證錯誤超過特定次數,當前驗證碼無效。
針對案例二中的漏洞,我們同樣建議隨機驗證碼設定錯誤次數限制,當驗證錯誤超過特定次數,當前驗證碼即無效。
2.4惡意注册
漏洞描述
惡意注册,是指攻擊者利用網站註冊功能的安全性漏洞,注册大量的垃圾帳號,導致系統增多大量無用數據。一般網站開發者為了防止惡意注册的行為,在注册頁面均會在加入一些需要人工輸入的步驟,比方說簡訊驗證碼,郵箱驗證等。但是在對金融平臺測試的過程中,同樣也發現了部分驗證功能可被繞過。
案例
注册數据包重放繞過驗證碼
部分金融交易平臺為了保證註冊用戶的真實性,往往都會要求驗證手機,並通過發送驗證碼的管道來保證註冊帳號並非僵屍帳號,但是部分平臺的驗證碼可被多次重放,導致可注册大量垃圾帳號,在某交易商城的注册功能就存在該漏洞,下圖為註冊時需要給手機發送驗證碼的數据包:
短息碼驗證完後,直接注册寫資料庫,通過修改phoneNum的值可以實現批量註冊帳號:
通過修改phoneNum的值為15527xxxx96、15527xxxx97可成功注册這兩個帳號:
該漏洞出現的原因在於後臺未校驗驗證碼的使用次數和時間,只校驗了其準確性,囙此可被利用進行多次注册。
程式碼防護
現時遇到的大部分惡意注册類的安全性漏洞均為驗證碼可被多次使用造成,我們建議後臺對驗證碼的使用進行限制,任何的驗證碼應為一次性,防止驗證碼被多次使用。
2.5惡意簡訊
漏洞描述
惡意簡訊是一種類似於DDoS的攻擊方式,他是利用網站的簡訊相關的功能,對用戶的手機進行長時間的簡訊轟炸,導致手機癱瘓。除了單純的簡訊轟炸之外,我們在測試過程中也發現,部分金融交易平臺對所發送的短信內容也並沒有進行限制,導致可被利用進行簡訊欺詐。
案例
簡訊轟炸
在測試的過程中,我們發現眾多的金融交易平臺僅在前端通過JS校驗時間來控制短信發送按鈕,但後臺並未對發送做任何限制,導致可通過重放包的管道大量發送惡意簡訊。如某交易平臺的手機註冊處就出現過該類型漏洞。利用fiddler抓取數据包,並進行重放可以繞過前端的限制,大量發送惡意簡訊。
任意短信內容編輯
在某平臺的修改綁定手機功能就曾出現過可編輯短信內容的問題。
點擊“獲取簡訊驗證碼”,並抓取數据包內容,如下圖。通過分析數据包,可以發現參數sendData/insrotxt的內容有用戶端控制,可以修改為攻擊者想要發送的內容
將內容修改“恭喜你獲得由xx銀行所提供的iphone6一部,請登入http://www.xxx.com領取,驗證碼為236694”並發送該數据包,手機可收到修改後的短信內容,如下圖:
該類型漏洞對系統的影響不大,但若被攻擊者利用進行簡訊欺詐,將嚴重影響平臺的聲譽,甚至可能會惹上法律糾紛。
程式碼防護
針對惡意簡訊類的安全問題,我們建議可以通過以下兩種方式進行防護:
三、總結
隨著社會的進步,互聯網金融交易平臺將會越來越流行,平臺涉及用戶資訊、資金等敏感資訊,囙此平臺安全性應更應受到重視,開發商必須加强開發人員的程式碼安全意識,建立程式碼安全開發規範,同時結合協力廠商滲透測試和程式碼稽核的管道對即將上線的系統僅測試,提高平臺的安全性。
如果你覺得這篇文章有用,可以分享給自己的朋友,同樣希望更多的人也關注我們的微信公眾號trt917和微博NSTRT團隊,我們會定期分享一些資訊安全相關知識,希望能夠對大家有所幫助。
[作者/NTRST團隊,由團隊成員短信炸彈、EAST、Sampro編寫,屬FreeBuf原創獎勵計畫文章,未經許可禁止轉載]