前言
我們是一家普通的 P2P 網(wǎng)貸平臺(tái),隨著用戶量和交易量的上漲,十幾個(gè)人的研發(fā)團(tuán)隊(duì)面臨了很大的挑戰(zhàn)。雙十一開(kāi)始,平臺(tái)受到了不少黑客的攻擊,保證安全的重任也落到了我們研發(fā)團(tuán)隊(duì)的身上。
看到過(guò)一個(gè)數(shù)字,在2014年,超過(guò)160家 P2P 平臺(tái)由于黑客攻擊造成系統(tǒng)癱瘓、數(shù)據(jù)被惡意篡改、資金被洗劫一空。為了讓平臺(tái)更好的抵御外部侵襲,我們做了很多努力,下面就分享下我們?cè)诎踩Wo(hù)方面的一些實(shí)踐。
成熟的企業(yè)主要通過(guò)以下幾個(gè)方面的工作來(lái)保障安全:
- 制定代碼規(guī)范和安全代碼規(guī)范,培訓(xùn)相關(guān)開(kāi)發(fā)人員熟悉代碼規(guī)范,在源頭保障代碼質(zhì)量
- 制定統(tǒng)一開(kāi)發(fā)模板,確保每個(gè)人編寫(xiě) code 格式一致
- 進(jìn)行嚴(yán)格的功能設(shè)計(jì),技術(shù)設(shè)計(jì),架構(gòu)設(shè)計(jì)和代碼的評(píng)審,確保設(shè)計(jì)和代碼質(zhì)量
- 在代碼提交時(shí)用類(lèi)似 checkstyle 等工具對(duì)代碼規(guī)范進(jìn)行檢查,確保代碼規(guī)范。
- 使用代碼靜態(tài)、動(dòng)態(tài)分析工具進(jìn)行掃描,比如 Java 使用 Findbugs,PWD 等工具。
- 最后就是購(gòu)買(mǎi)商業(yè)掃描工具進(jìn)行漏洞檢測(cè)。比如 Qualys 是特別好的漏洞掃描工具
不過(guò)感覺(jué)做了這么多,其實(shí)還是不能確保平臺(tái)的安全。第一、項(xiàng)目中通常會(huì)使用大量的第三方軟件,包括開(kāi)源的和商業(yè)軟件,這些軟件漏洞不是自己能掌控的。其次、所有的檢查都是有局限性和時(shí)效性的,只能確保修復(fù)這些軟件掃描出來(lái)的漏洞,無(wú)法保障運(yùn)行時(shí)新出現(xiàn)的漏洞,而通常這些新的攻擊也會(huì)經(jīng)常遇到。
而且在我們這種創(chuàng)業(yè)公司,這些安全方式很難實(shí)踐。作為 P2P 的平臺(tái),尤其是在創(chuàng)業(yè)階段,要求產(chǎn)品的迭代周期非常的快,實(shí)現(xiàn)功能和保障質(zhì)量是第一優(yōu)先級(jí)。人才招聘也是非常難的一件事情,尤其是找到能書(shū)寫(xiě)安全代碼的程序員幾乎是不可能的事情。如何保障產(chǎn)品安全,讓我們一直非常頭疼。沒(méi)有足夠的資源和時(shí)間,來(lái)按照大公司的安全實(shí)踐來(lái)保障產(chǎn)品的安全。但是安全又是互聯(lián)網(wǎng)金融產(chǎn)品至關(guān)重要的事情,一旦受到攻擊,進(jìn)而導(dǎo)致信息泄密或者數(shù)據(jù)庫(kù)破壞,后果不堪設(shè)想。
于是我們嘗試了以下兩種方法:
第一種是通過(guò)流程和靜態(tài)、動(dòng)態(tài)掃描工具來(lái)確保代碼符合安全規(guī)范。因?yàn)槊鎸?duì)功能和上線的壓力,再加上程序員的實(shí)操能力,都使我們的嘗試沒(méi)辦法較好的實(shí)施。通過(guò)代碼質(zhì)量來(lái)保障安全,就是0和1的游戲,減少漏洞是唯一的選擇。沒(méi)有漏洞被發(fā)現(xiàn)就是1,發(fā)現(xiàn)一個(gè)漏洞并被利用就是0。
第二種是通過(guò)掃描和滲透工具,感覺(jué)應(yīng)該是一種方便快捷的方式。它從使用者的角度來(lái)攻擊系統(tǒng),這樣的攻擊是非常實(shí)時(shí)和有針對(duì)性的。
我們使用了幾種在線的掃描工具:
1.阿里的掃描工具: http://sts.aliyun.com/ ,經(jīng)過(guò)掃描是安全的。

2.百度云測(cè) http://ce.baidu.com/ ,掃描結(jié)果同樣是安全的。


3.這樣的結(jié)果讓我們非常疑慮,沒(méi)有經(jīng)過(guò)安全流程考驗(yàn)的代碼居然沒(méi)有任何安全問(wèn)題,我有點(diǎn)懷疑這些掃描工具的效果了。于是下載了Nessus家庭版安裝到本地,對(duì)我們的服務(wù)平臺(tái)進(jìn)行掃描,結(jié)果也并不理想,沒(méi)有發(fā)現(xiàn)特別有意義的漏洞。

4.還有一種解決方案就是購(gòu)買(mǎi)Web應(yīng)用程序防火墻(WAF)。但通常 WAF 非常昂貴,比較好的 WAF 一般在幾十萬(wàn)上下。這對(duì)一般的創(chuàng)業(yè)企業(yè)是一筆很大的開(kāi)支。我們暫時(shí)還下不了這個(gè)決心去購(gòu)買(mǎi)。
使用這些掃描器后沒(méi)有發(fā)現(xiàn)嚴(yán)重的問(wèn)題,并沒(méi)有讓我們安心。
憑經(jīng)驗(yàn)感覺(jué),沒(méi)有經(jīng)過(guò)嚴(yán)格安全流程的代碼是不可能沒(méi)有漏洞的。于是我們就想通過(guò)類(lèi)似 SQL 注入的工具,通過(guò)單項(xiàng)滲透測(cè)試來(lái)檢查是否有漏洞。在百度上搜索「sql注入」的關(guān)鍵字,發(fā)現(xiàn)了一種實(shí)時(shí)應(yīng)用防護(hù)的方式 RASP。以前也曾經(jīng)關(guān)注過(guò)國(guó)外這方面的資訊,沒(méi)有想到,國(guó)內(nèi)公司現(xiàn)在也有了類(lèi)似產(chǎn)品 OneRASP,于是趕緊 down 下來(lái)試試。
團(tuán)隊(duì)經(jīng)過(guò)頭腦風(fēng)暴,決定把 Nessus 和 OneRASP 結(jié)合起來(lái)。Nessus 作為攻擊方,將 OneRASP 放入到應(yīng)用程序中,作為防御方(只啟動(dòng)監(jiān)控模式),這樣應(yīng)該能夠找到平臺(tái)的一些漏洞。說(shuō)干就干,安裝過(guò)程還是挺簡(jiǎn)單的。
首先需要注冊(cè)一個(gè)賬號(hào),然后下載一個(gè)探針,將探針解壓到tomcat目錄下。配置catalina.bat:set CATALINA_OPTS="-javaagent:C:\Users\one\Downloads\agent_a3483efc-a4ed-4a86-bde1-910012383309\OneAppDefender\lib\RaspAgent.jar %CATALINA_OPTS%"。最后重啟tomcat就 ok 了。
好了,萬(wàn)事俱備??纯葱Ч趺礃?。啟動(dòng) Nessus 對(duì)加了探針的程序再次進(jìn)行掃描,毫無(wú)疑問(wèn),得到的掃描結(jié)果沒(méi)有什么變化。不過(guò)我們最關(guān)心的還是 OneRASP 抓到什么內(nèi)容,于是登錄官網(wǎng)進(jìn)入后臺(tái)頁(yè)面。心里還真有點(diǎn)小激動(dòng),頁(yè)面雖然非常簡(jiǎn)單,但是抓到了不少漏洞,沒(méi)有讓我們的努力白費(fèi)。

所有漏洞一目了然,最有價(jià)值的就是可以將漏洞定位到應(yīng)用程序的代碼行。比如SQL注入發(fā)生在哪一行代碼里面,是哪個(gè) SQL 語(yǔ)句造成的,一目了然。

跨站攻擊發(fā)生在那個(gè) JSP 頁(yè)面也非常清楚。

有了這些信息,程序員就可以非常方便的知道,去哪行代碼里面修改這個(gè)漏洞。然后我們下載了幾個(gè)比較好的掃描工具,比如 Qualys,ZAP,AppScan 等,分別對(duì)我們的程序(綁定 OneRASP 探針)進(jìn)行掃描,兩天時(shí)間所有漏洞全部修復(fù)完畢。
通過(guò)這種組合掃描/修復(fù)的方式,對(duì)我們產(chǎn)品的安全性信心提高了很多,同時(shí)對(duì) RASP 這種方式也充滿了興趣。掃描工具畢竟是只能針對(duì)固定的攻擊手段,在實(shí)際的環(huán)境里攻擊手段是多種多樣的。很多攻擊是有針對(duì)性的攻擊,不是掃描工具能夠覆蓋的。
既然在監(jiān)控模式下能檢查出這么多的問(wèn)題,能不能把它放在我們的生產(chǎn)環(huán)境呢?任何東西放入生產(chǎn)環(huán)節(jié)都是有風(fēng)險(xiǎn)的,可能影響我們系統(tǒng)的性能以及穩(wěn)定性。為了避免這種風(fēng)險(xiǎn),我們對(duì)注入 OneRASP 安全探針的系統(tǒng)進(jìn)行為其兩天的高并發(fā)性能和壓力測(cè)試,結(jié)果和官方性能報(bào)告出入不大。對(duì)內(nèi)存、CPU 和響應(yīng)時(shí)間的影響在 5% 左右,沒(méi)有發(fā)生系統(tǒng)崩潰和內(nèi)存泄露問(wèn)題。系統(tǒng)啟動(dòng)時(shí)間增加了 4% 左右,這種性能消耗完全可以接受。以下是性能數(shù)據(jù):
內(nèi)存影響:

CPU 影響(我們這個(gè)程序?qū)PU使用比較高):

我們將 OneRASP 應(yīng)用到線上環(huán)境,為了避免誤殺,啟用了監(jiān)控模式運(yùn)行了大概一個(gè)禮拜。結(jié)果真是讓我們大吃一驚,一個(gè)禮拜的時(shí)間發(fā)現(xiàn)了不少攻擊行為,幸好問(wèn)題都不算太嚴(yán)重。在確認(rèn)沒(méi)有誤殺的情況,我們開(kāi)啟了保護(hù)模式。到現(xiàn)在為止基本沒(méi)有導(dǎo)致性能和系統(tǒng)問(wèn)題,防護(hù)效果也挺不錯(cuò)。下圖是初期監(jiān)控模式下,半個(gè)小時(shí)的攻擊情況:

經(jīng)過(guò)這么多的嘗試,發(fā)現(xiàn)將 OneRASP 的產(chǎn)品和掃描工具結(jié)合起來(lái),應(yīng)用在開(kāi)發(fā)和測(cè)試階段,是一種有效的滲透檢測(cè)手段。目前我們?cè)诔掷m(xù)使用,很容易上手,不需要專(zhuān)業(yè)的安全管理人員,而且不需要購(gòu)買(mǎi)額外的服務(wù)器和修改任何應(yīng)用程序代碼。
重點(diǎn)是,目前還免費(fèi)開(kāi)放使用,這對(duì)我們這種創(chuàng)業(yè)公司來(lái)說(shuō),是非常贊的。OneRASP 在非常短的時(shí)間里,可以將代碼安全等級(jí)提升一個(gè)檔次。不過(guò)唯一的代價(jià),就是額外消耗一些系統(tǒng)資源。不足的地方就是,現(xiàn)在支持的保護(hù)規(guī)則偏少,只有 XSS、SQL 注入、已知漏洞掃描工具檢測(cè)等6 種。而且頁(yè)面設(shè)計(jì)交互性不強(qiáng),沒(méi)有自定義規(guī)則等。不過(guò)對(duì)于大多數(shù)創(chuàng)業(yè)公司來(lái)講,第一階段的應(yīng)用防護(hù)應(yīng)該夠用了。
【編者按】本文經(jīng)過(guò)作者同意,已經(jīng)授權(quán) OneAPM 官方技術(shù)博客進(jìn)行轉(zhuǎn)載和發(fā)布。