你的網(wǎng)站安全嗎?WEB應(yīng)用安全總結(jié)
應(yīng)用安全越來越重要 —— 互聯(lián)網(wǎng)上看到的大多數(shù)安全事件基本都和應(yīng)用安全,尤其是 WEB 應(yīng)用安全有關(guān)(隨便翻翻 wooyun 之類的就知道了)。最近幾年的工作基本都和應(yīng)用安全有關(guān)系,借著這個(gè)機(jī)會也總結(jié)一下自己的一些觀點(diǎn)。
WEB 應(yīng)用安全的常見思路
這篇文章不包含 DDoS 和業(yè)務(wù)相關(guān)的問題 —— DDoS 主要是網(wǎng)絡(luò)層解決的問題,我沒有把放到 WEB 應(yīng)用安全這個(gè)領(lǐng)域討論;業(yè)務(wù)相關(guān)的安全,特別是業(yè)務(wù)特性或者業(yè)務(wù)規(guī)則帶來的安全問題也不在這個(gè)討論范圍之內(nèi)。
下面只是大概的分類,并不嚴(yán)謹(jǐn)。
通過工具來增強(qiáng) WEB 應(yīng)用的安全
工具往往對應(yīng)用開發(fā)過程影響非常小,只需要在部署的時(shí)候做些配置通常即可起到防護(hù)作用。工具主要以防火墻、WAF 和各類掃描產(chǎn)品為主。這些產(chǎn)品通常基于特征,很難做到深入理解被防護(hù)的 WEB 應(yīng)用,這類產(chǎn)品通常會遇到很多挑戰(zhàn)。
由于被保護(hù)的 WEB 應(yīng)用對這些傳統(tǒng)工具而言屬于“黑盒”,要做到有效防護(hù)的代價(jià)很高。個(gè)人認(rèn)為目前傳統(tǒng)的產(chǎn)品更適合做大范圍、簡單、一致的控制,作為基礎(chǔ)設(shè)施提供無差別的防護(hù);也比較適合做應(yīng)急措施,用來縮短 Heartbleed、Struts2 遠(yuǎn)程代碼執(zhí)行 這類漏洞的響應(yīng)時(shí)間,為徹底修復(fù)贏得足夠的時(shí)間窗口。
誤報(bào)率和漏報(bào)率:這個(gè)大家都懂的,從防病毒軟件到 IDS、IPS 到掃描器到 WAF,只要是基于特征庫,基本都走在這個(gè)“平衡木”上,很難做到既誤報(bào)低又漏報(bào)少。
0day:WEB 應(yīng)用的 0day 太容易發(fā)現(xiàn),WEB 應(yīng)用數(shù)量又是海量,真正充分考慮到安全的 WEB 應(yīng)用更是鳳毛麟角。因此,無法做到發(fā)現(xiàn) 0day 甚至是快速響應(yīng) 0day,會非常難受,而簡單基于規(guī)則很難做到發(fā)現(xiàn)“未知”。
普適和定制:應(yīng)用的數(shù)量遠(yuǎn)多于操作系統(tǒng)、數(shù)據(jù)庫這些通用組件,應(yīng)用層的安全檢查或者防護(hù)工具無法做到覆蓋所有的應(yīng)用(例如:wordpress 和企業(yè) ERP 就是完全不同的應(yīng)用)。
難以根除的漏洞:只要不修改代碼、不打補(bǔ)丁,這個(gè)應(yīng)用就始終存在安全漏洞。一旦出現(xiàn)盲點(diǎn),導(dǎo)致攻擊者能夠直接訪問到被保護(hù)的 WEB 應(yīng)用,安全防護(hù)措施都失去意義(現(xiàn)在的業(yè)務(wù)系統(tǒng)都是分布式系統(tǒng),非常容易出現(xiàn)盲點(diǎn);尤其是各種 CloudWAF,被繞過的可能性更大)。
通過開發(fā)流程控制增強(qiáng) WEB 應(yīng)用的安全
SDLC 是 Secure Software Development Life Cycle 的簡寫,有時(shí)候也被稱作 SDL 或 SSDLC 。SDLC 的特點(diǎn)是在軟件開發(fā)的生命周期中都“嵌入”了安全的“基因”,對軟件產(chǎn)品的安全性有本質(zhì)上的提高。業(yè)界最成功的案例就是 Microsoft 通過 10 多年持續(xù)的實(shí)施 SDL 讓其 Windows 產(chǎn)品的安全性有了極大地提高。
SDLC 需要安全完全嵌入到軟件開發(fā)的全部活動中,非常依賴于人員和工具(漏洞掃描、代碼審計(jì)、……),也遇到了一些挑戰(zhàn)。
從某種意義上來說,SDLC 僅僅適用于部分公司,這類公司往往有穩(wěn)定的開發(fā)組織、流程;業(yè)務(wù)變化沒有那么快,相對比較穩(wěn)定;業(yè)務(wù)非常依賴于 IT 或者軟件開發(fā)。擴(kuò)展閱讀:如何在你的組織內(nèi)采用 SDL。
時(shí)間:業(yè)務(wù)特性本身的發(fā)展非常快,業(yè)務(wù)特性的開發(fā)往往是整個(gè)開發(fā)團(tuán)隊(duì)產(chǎn)出的核心度量指標(biāo)(特別是互聯(lián)網(wǎng)公司)。新增的安全特性會延緩產(chǎn)品開發(fā)進(jìn)度,因此開發(fā)團(tuán)隊(duì)會傾向于事后修復(fù);而持續(xù)的業(yè)務(wù)壓力又會讓歷史遺留問題修復(fù)很難獲得高優(yōu)先級。本質(zhì)上是個(gè)“技術(shù)債”的問題。
專業(yè)知識:開發(fā)團(tuán)隊(duì)的核心能力并不是安全。即使是 SDLC 中的培訓(xùn),也是僅以解決常見、通用攻擊方式為目標(biāo),在面臨新型攻擊或復(fù)雜攻擊時(shí),需要對安全領(lǐng)域有全面和深入的了解。很難有開發(fā)人員在跟上開發(fā)領(lǐng)域技術(shù)發(fā)展的同時(shí),還能補(bǔ)上安全領(lǐng)域知識,并且跟上安全領(lǐng)域的發(fā)展。
資源:大型組織所開發(fā)使用的應(yīng)用往往非常龐大,在開發(fā)流程中構(gòu)建完整的 SDLC 無論是在組織還是技術(shù)層面會讓大多數(shù)的組織難以承受。
誤報(bào):SDLC 中使用了非常多的工具,這些工具通常都會產(chǎn)生誤報(bào),這些誤報(bào)非常容易形成開發(fā)人員抵制 SDLC 的原因。
流程:SDLC 本質(zhì)上是讓開發(fā)人員重視安全,越多開發(fā)人員有安全意識公司開發(fā)出來的產(chǎn)品就越安全。但壞處是,大多數(shù)情況下很難有人能評估安全是否已經(jīng)足夠了(甚至做過頭了)。特別是在時(shí)間壓力很大且缺乏專業(yè)知識的情況下,SDLC 非常容易流于形式。
通過增強(qiáng)對應(yīng)用感知和持續(xù)監(jiān)控增強(qiáng) WEB 應(yīng)用安全
核心思路就是在開發(fā)過程中引入安全相關(guān)的 SDK 或 Plugin。通過這些 Plugin 或 SDK 讓應(yīng)用具備缺省的安全功能,且讓安全人員持續(xù)的對應(yīng)用進(jìn)行監(jiān)視、響應(yīng)(可以更深入到應(yīng)用的運(yùn)行時(shí))。
這個(gè)思路中關(guān)鍵的一項(xiàng)技術(shù)目前被 Gartner 定義為 RASP。RASP 是 Runtime Application Self-Protection 的縮寫,通過嵌入 Application 的代碼讓應(yīng)用程序自身具備一定的威脅感知和防護(hù)能力。通常 RASP 天生就可以與其他安全產(chǎn)品集成。Gartner 總結(jié)了這個(gè)定義,并且在 Hype Cycle for Application Security, 2014 中給把他列入到了 On the Rise 階段(屬于被關(guān)注的新技術(shù),但并沒有大范圍地被驗(yàn)證和接受)。而 Gartner 早在 2012 年就在 Runtime Application Self-Protection: A Must-Have, Emerging Security Technology 介紹過,并預(yù)計(jì) 2017 年 25% 的應(yīng)用會具備這個(gè)這個(gè)能力。目前已經(jīng)有多家廠商推出了產(chǎn)品,開源社區(qū)也有相應(yīng)的實(shí)現(xiàn)。
HP: HP Application Defender
Prevoty: Prevoty Runtime Application Security
waratek: Application Security for Java
OWASP: AppSensor 是一個(gè)開源方案。
Shandowd: Shadowd 是一個(gè)開源方案。
#p#
RASP 相關(guān)技術(shù)
目前 RASP 還處于一個(gè)發(fā)展的階段,尚未像防火墻等常見的安全產(chǎn)品一樣有非常明確的功能邊界(scope),我個(gè)人認(rèn)為這樣的技術(shù)甚至非常有可能會和 WAF 形成一定的融合。因此這里介紹主要是記錄自己的理解為主,考慮到 AppSensor 和 Shadowd 的思路并不一樣,分開記錄。
AppSensor
目前 AppSensor 發(fā)展到了第二版,OWASP 這個(gè)項(xiàng)目目標(biāo)一方面是給出完整的指南,另一方面也希望能提供一個(gè)完整的實(shí)現(xiàn)。目前 AppSensor 的 2.0 版以 Application-Specific Real Time Attack Detection & Response 核心。下面是 AppSensor 的一些核心文檔可以看看。
OWASP AppSensor Getting Started
OWASP AppSensor Guide v2.0.1 EN
OWASP AppSensor Reference Implementation
AppSensor DetectionPoints 梳理了 AppSensor 集成到應(yīng)用后提供實(shí)現(xiàn)的監(jiān)測點(diǎn),安全人員可以利用這些監(jiān)測點(diǎn)達(dá)到實(shí)時(shí)監(jiān)測攻擊行為。
AppSensor ResponseActions 梳理了 AppSensor 集成到應(yīng)用后提供實(shí)現(xiàn)的監(jiān)測點(diǎn),安全人員可以利用這些監(jiān)測點(diǎn)達(dá)到實(shí)時(shí)響應(yīng)攻擊行為。
構(gòu)成部分
AppSensor 一開始遵從的設(shè)計(jì)理念就包括:語言無關(guān)、插件式、為“As A Service” 設(shè)計(jì)。因此,包括 Analysis Engine 在內(nèi)的各個(gè)部分都可以被替換。
AppSensor Core:必選組件。這個(gè)是 AppSensor 的核心,對外提供了 AppSensor 的各種接口。
Analysis Engine:必選組件。這是用來判斷是否為攻擊行為,如何對此行為進(jìn)行響應(yīng)的核心組件,目前還僅僅是個(gè)示例的實(shí)現(xiàn)。
Storage:用來存儲數(shù)據(jù)的組件。
Configuration:用來對客戶端和服務(wù)端配置的組件。
Access Controller:僅使用 SOAP、REST 的時(shí)候?yàn)楸仨?。主要用于對接口進(jìn)行訪問控制。
Reporting:可選組件。這是用于對 AppSensor 進(jìn)行管理很重要的組件,如果需要利用其他的系統(tǒng)獲取 AppSensor 的數(shù)據(jù),就需要使用 Reporting 組件。目前支持 Simple Logging、WebSockets、REST API 的方式對外提供數(shù)據(jù)輸出。
部署方式
目前支持四種部署方式:
REST Web Service
SOAP Web Service
Thrift
Local (Embedded Java)
Shadow Daemon
Shadow Daemon 還是個(gè)非常早期的項(xiàng)目,目前給自己的定位還是 WAF ,通過嵌入到 WEB 應(yīng)用中的代碼來收集信息,通過這些信息來判斷某次訪問是否為惡意行為并作出判斷。
構(gòu)成部分
Shadow Daemon 目前由三部分構(gòu)成。
Shadow Daemon Connector:和語言有關(guān),主要是利用語言特性嵌入到 WEB 應(yīng)用中收集數(shù)據(jù),放到 Shadowd 中進(jìn)行處理。
shadowd:收集 Shadow Daemon Connector 的數(shù)據(jù),根據(jù)配置和規(guī)則進(jìn)行響應(yīng)。
shadow_ui: Shadow Daemon 的用戶界面。