互聯(lián)網+時代的到來,人們充分享受新時代科技創(chuàng)新成果的便利同時,萬物互聯(lián)帶來的信息安全風險也日漸提高,信息泄密事件層出不窮,在資金體量龐大、 用戶信息集中、安全隱患影響深遠的金融領域,所面臨的安全問題尤為凸顯。人們真切地感知到,原有的金融服務模式被顛覆,網銀、第三方支付、互聯(lián)網金融等新 興模式異軍突起。用戶也在這些新的業(yè)務模式下,將自身姓名、身份證號碼、手機號碼等身份認證信息與業(yè)務緊密綁定關聯(lián)。所以說,互聯(lián)網的發(fā)展為傳統(tǒng)的信息防 御體系劃開了一道口子,打破看似牢不可破的安全防護狀態(tài),直逼用戶核心數據。在這樣的背景下,本次安華金和數據庫攻防實驗室選擇以近三個月金融行業(yè)數據安 全高危漏洞為分析樣本,就金融行業(yè)安全漏洞的分布狀態(tài)、原因分析及對應的安全防御辦法詳盡描述。
金融行業(yè)漏洞細分狀況分析
金融數據泄露原因分析
金融行業(yè)漏洞入侵防御建議
2015年9月至11月三個月的時間里,安華金和在烏云漏洞平臺上匯總金融行業(yè)已被客戶確認的安全漏洞共206個。其中高危漏洞195個,中危漏洞9個,低危漏洞2個。而這206個漏洞中,直接與數據泄露相關的漏洞110個,占漏洞總量的的53%。
近幾年來隨著行業(yè)政策和市場需求的推動,金融行業(yè)已經開始嘗試服務互聯(lián)網化,普通業(yè)務以及更深層次的業(yè)務也會逐漸互聯(lián)網化,逐漸促進整個金融行業(yè)向 互聯(lián)網全面遷移。由于金融業(yè)多金的本質,各類不法分子一直對這個行業(yè)虎視眈眈;一些內部從業(yè)人員,也會因為利益的驅使,放下道德底線,從內部竊取數據,導 致安全堡壘從內部被攻破,內外安全問題集中,使得金融業(yè)的安全更加危機四伏。金融行業(yè)多年沉淀的邊界安全防御機制應面對互聯(lián)網帶來的新問題往往顯得力不從 心。
安華金和本次將金融行業(yè)安全漏洞進行了細分,以銀行、保險、互聯(lián)網金融、金融機構(包括證券、基金、期貨、支付和與金融相關的其他機構)四類進行漏 洞劃分。近三個月時間在烏云已經確認的金融行業(yè)206個漏洞中,其中銀行42個,保險和互聯(lián)網金融各47個,其余來自證券、基金、期貨、支付等金融機構。 平均每月各細分領域曝出的漏洞在10個到20個之間。
金融機構由于包含業(yè)務種類繁多,漏洞數量最高、新興互聯(lián)網金融,由于對業(yè)務的追趕速度和要求遠高于安全需求,雖然業(yè)務發(fā)展不長,但暴露的安全數量和威脅卻名列前茅。截至2015年11月底,全國范圍內近100家互聯(lián)網金融平臺被爆出存在漏洞。
安華金和通過對大量金融行業(yè)安全漏洞進行統(tǒng)計分析,發(fā)現SQL注入依然是金融業(yè)最大威脅。命令執(zhí)行(框架漏洞)緊隨其后占據了13%的比例。而其中越權類漏洞數量占比明顯高于其他行業(yè)。
按照各行業(yè)深入探查不難發(fā)現:
1.銀行行業(yè)中民營銀行安全漏洞數量明顯高于國有銀行。
2.金融業(yè)漏洞威脅大,高危漏洞占到總漏洞數的94.56%
3.銀行的APP業(yè)務成為隱含漏洞的重災區(qū)
4.應用系統(tǒng)權限繞過漏洞五花八門
5.雖然有WAF,但SQl注入依然強勁。
整個金融行業(yè)中漏洞種類最全的就是互聯(lián)網金融。下面我們著重介紹一下互聯(lián)網金融業(yè)中的漏洞。
互聯(lián)網金融業(yè)的漏洞數量雖然不是最多,但種類最全,分布也較為平衡。因為簡單易用,用戶對互聯(lián)網金融的接受度普遍比 較高。從各種寶到名目繁雜的P2P,互聯(lián)網金融是金融業(yè)界的新寵兒。但由于該行業(yè)缺乏嚴格的政策管理和代碼審計,業(yè)務發(fā)展的速度又遠超安全可提供的支撐能 力,前臺代碼質量較低,導致出現大量設計邏輯錯誤、SQL注入、跨站腳本攻擊;從業(yè)人員安全意識低,管理不到位,導致出現大量弱口令、框架漏洞、配置錯 誤、敏感信息泄露;軟件更新緩慢,導致框架錯誤。
其中最為嚴重的是系統(tǒng)設計邏輯安全威脅。這些設計錯誤多體現在失敗的權限約束上,形成一系列越權漏洞和SQL注入。 越權本質并不復雜,例如平行越權查詢、平行越權修改、垂直越權操作、批量注冊、人以用戶密碼修改、密碼暴力破解、平行越權下載、身份偽造漏洞、退出功能失 效、任意郵箱注冊漏洞、郵箱激活功能漏洞、刷積分漏洞、邀請碼暴力破解、一號多戶問題等等。
其中越權類查詢在設計錯誤中占到了29%左右。舉個簡單的例子比如A用戶的訂單是111。B用戶的訂單號是112。 A原本不能查詢B的訂單,但A用戶可以通過修改訂單號來越權查詢B的訂單,這就是一個平行越權漏洞。這類問題主要就是程序代碼自身邏輯錯誤導致。這和很多 互聯(lián)網企業(yè)過度注重擴展速度,不關注自身安全的行為很相似,需要加強代碼審計來規(guī)避這種風險。
例如烏云上爆出的 wuyun-2015-147026漏洞是一個標準的因為設計權限導致可充值任意用戶密碼的漏洞。按照流程在網站上注冊一個用戶,選擇忘記密碼。去郵箱打開鏈接。重新輸入密碼和確認密碼。點擊發(fā)送,劫持客戶端的網絡包。
在包中把當前用戶名替換成目標用戶名再發(fā)送給服務器,達到修改目標用戶密碼的目的。至此入侵者獲得一組被人的賬號,為入侵者可進一步實施入侵奠定基礎。
面對SQL注入雖然有WAF的輔助,但WAF難免有關鍵字過濾不到的時候。于是在金融業(yè)界出現了大量的SQL注入漏洞。由于WAF采用的是正則匹配的方式,于是出現了以下3種常見繞過WAF的手段:
(1)編碼繞過
在大小寫繞過的基礎上開始出現編碼繞過,主要出現了三種:URL編碼、十六進制編碼、Unicode編碼。在瀏覽器中輸入URL會進行一次URL編 碼,黑客會通過多次編碼來進行WAF繞過,例如:Id.php?id=1%2520union/**/select ,數據庫得到的 Id.php?id=1 union/**/select。如果只解碼一次得到的是Id.php?id=1%20union/**/select,很有可能繞過WAF入侵數據庫。 針對這一問題可以采用多次循環(huán)解碼來應對。其中Unicode編碼種類很多,如果只是基于黑名單過濾,無法處理全部情況,其中UTF-32曾經實現過對 GOOGLE的繞過。
(2)注釋繞過
不但可以采用編碼改寫關鍵字,還可以采用注釋改寫關鍵字,避免正則匹配。例如z.com/index.php?page_id=- 15 %55nION/**/%53ElecT 1,2,3,4 'union%a0select pass from users# 。就是用符號編碼代替一部分字母和判定的空格來逃避正則匹配。(selectxxx不會被攔截,因為可能是函數名等。select 空格xxx則一定會被攔截,去掉空格成為繞過的關鍵)。同樣還有針對MYSQL版本的/*!5000union*/系列。
(3)等價替換
等價替換是個比較大的分類,主要可以分為等價函數、等價符號、特殊符號、比較符號等4類。
等價函數,就是同功能函數替換。WAF禁止了一些函數,但對另外一些函數沒有禁止例如 Substring()可以用mid(),substr()這些函數來替換。還將可以采用生僻函數迂回完成原函數的功能,進行WAF關鍵字繞過。and or 這種關鍵字在PHP中可以用|| 和&&代替。于是語句id=1 or 1=1就可以寫成id=1 || 1=來進行繞過。同樣!= 、>、<等都可以代替等號進行繞過。
除去繞過關鍵字和關鍵符號外,最關鍵的是繞過空格。想各種方式避免空格出現。
例如 原句 id=1 or 1=1
可以寫成 id=1+or+1=1
id=1%0bor%0b1=1
id=1--s%0aor--s%0a1=1
id=1/*!or*/1=1
id=1()or(1=1) 等多種形式進行嘗試繞過
金融行業(yè)除去人為因素造成的漏洞外,最主要的兩大類漏洞分別是SQL注入和程序邏輯錯誤。
1.解決人為因素
人為因素會造成弱口令、錯誤配置等。人為因素只能從人的角度進行規(guī)范。通過加強安全團隊建設、人員安全意識培訓等方式應該可以解決人為因素造成的問題。
2.解決SQL注入
SQL注入是金融行業(yè)數據安全面臨的最大威脅。只依賴WAF不足以完全保障程序免收SQL注入的困擾。這是由于WAF擅長解析過濾http協(xié)議,不 能對SQL進行解析過濾。針對這個缺陷,可以在WEB應用和數據庫之間加入數據庫防火墻進行SQL部分的解析和過濾。數據庫防火墻對從WEB應用發(fā)向數據 庫的SQL語句進行語法解析,可以理解SQL語句的真實含義,并做以下四點判斷:
1、語句是否含有明顯的SQL注入特征;
2、語句訪問的對象是否屬于該用戶訪問權限;
3、語句的關鍵謂詞是否被禁用;
4、限制語句的返回行數,把危險控制在最低限。
加入數據庫防火墻后,數據庫防火墻會在WEB應用和數據庫之間獲取WEB應用發(fā)送給數據庫的SQL語句。通過拿到的 SQL語句,按照不同數據庫進行SQL協(xié)議解析,通過協(xié)議解析把應用發(fā)送的SQL語句還原成標準模式(去掉各種加入的符號,轉譯碼等),防止黑客利用上述 繞過WAF的手法繞過數據庫防火墻進行SQL注入。
首先還原后的SQL語句和黑名單中的禁止語句結構進行匹配,如果認為是威脅語句,則禁止該語句發(fā)送到數據庫端,并通過發(fā) 送短信、郵件等方式及時通知管理員進行處理;語句結構判斷沒有問題后防火墻接下來會對語句中的操作對象和謂詞進行判斷,如果對象或謂詞有控制,則依舊禁止 該語句發(fā)送到數據庫端;最后即便規(guī)則全部符合,SQL語句被發(fā)送到數據庫端,數據庫防火墻還可以通過行數控制來限制數據庫每次的返回行數把威脅減到最小。
3.解決程序邏輯錯誤
程序邏輯錯誤主要指每個用戶權限的劃分時存在邏輯問題。這需要對業(yè)務系統(tǒng)中邏輯錯誤進行代碼修改,并加強關鍵部分的邏輯 防守。特別需要注意加強防守的功能點有購物車、支付功能、提現功能、用戶數據查詢、訂單數據查詢、API接口、密碼設置/重置等。同時要注重重要業(yè)務系統(tǒng) 的運維管理、遵循安全開發(fā)最佳實踐、對密碼本身進行可靠的存儲(數據庫中只存儲加鹽的HASH而不是密碼本身)、使用加密的傳輸協(xié)議。
安全其實就是這樣一種形態(tài),平時不出狀況看不到安全的效果,一旦爆發(fā)數據泄露事件,無論對于企業(yè)還是用戶本身,甚至國家信息安全,其損失不可估量。業(yè)務在發(fā)展,安全領域攻與防的對抗將長期持續(xù)。