很多年前,我還是個編程菜鳥,有個朋友找到我,興奮地說網(wǎng)絡(luò)游戲太火爆了,做個游戲虛擬商品交易平臺,收取傭金/手續(xù)費,肯定賺錢,現(xiàn)在完事具備,就差一個程序員了!
年輕的我一聽自然很激動,那還等啥,趕緊就干吧!
花了幾個月把系統(tǒng)開發(fā)出來,那時候云計算還不普及,專門買了服務(wù)器,在IDC機(jī)房托管,把系統(tǒng)部署上去,然后就美滋滋地等著收錢了。
第二天,我登錄到服務(wù)器,想從Apache訪問日志中看看網(wǎng)站的訪問情況,一看就嚇了一跳,日志文件竟然有好幾個G!
我心想剛上線的網(wǎng)站,這么快就火了?
仔細(xì)一看,不對,這些日志沒有幾個是正常的,都是在訪問一些奇奇怪怪的東西,類似這樣:
GET/uploads/shell.php?cmd=cat+/etc/passwd
我突然意識到:這是黑客攻擊!
在這方面我經(jīng)驗很少,立刻懵了,網(wǎng)站才上線一天,黑客就迅速把服務(wù)器攻占了?
服務(wù)器上是不是已經(jīng)被黑客留下來后門?
這個服務(wù)器還能不能用?
最后痛定思痛,解決方案是:重裝系統(tǒng)。
這件事我印象非常深刻:沒有防火墻的Web應(yīng)用,在互聯(lián)網(wǎng)上幾乎就是裸奔。
現(xiàn)在再做類似的應(yīng)用,必然要先上一個Web Appliaction Firewall (WAF)。
比如說,國產(chǎn)的開源Web應(yīng)用防火墻:雷池。
![]()
01
雷池是什么?
雷池WAF是一款開源的、簡單高效的Web應(yīng)用防火墻,不但能有效防御各類Web攻擊,還能提供訪問頻率限制、人機(jī)驗證、動態(tài)防護(hù)等功能。
它的原理很簡單:以反向代理方式接入,優(yōu)先于網(wǎng)站服務(wù)器接收流量,對流量中的攻擊行為進(jìn)行檢測和清洗,將清洗過后的流量轉(zhuǎn)發(fā)給網(wǎng)站服務(wù)器。
![]()
雷池全球裝機(jī)量超40萬臺,日均處理300億次請求,檢出率76.17%,誤報率僅0.22%。
02
安裝便捷,使用簡單
雷池有一些軟硬件的依賴,例如需要Linux操作系統(tǒng),Docker 20.10.14版本以上,x86_64架構(gòu)支持ssse3等,很容易滿足,具體詳情可以看官方文檔。
然后就可以一鍵安裝,等幾分鐘就好。
bash -c"$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
安裝成功以后,就可以打開瀏覽器訪問雷池控制臺了
https:// :9443/
![]()
03
強悍的防護(hù)能力
作為Web應(yīng)用防火墻,雷池防護(hù)Web攻擊自然不在話下,常見的SQL注入攻擊、XSS攻擊、路徑穿越攻擊、代碼注入攻擊等都能輕松應(yīng)對。
![]()
這些Web攻擊大家應(yīng)該都很熟悉了,不再展開介紹。雷池的準(zhǔn)確率、檢出率都非常高,誤報率,漏報率非常低,性能指標(biāo)優(yōu)于全球的一些知名產(chǎn)品:
![]()
這么強悍的能力,一個重要原因就是雷池采用了語義分析算法。
傳統(tǒng)的防火墻使用的是正則表達(dá)式匹配的方式,例如它會用這個表達(dá)式union[\w\s]*?select去檢查流量數(shù)據(jù),如果發(fā)現(xiàn)包含 union 和 select 這兩個單詞,就會被認(rèn)為是SQL 注入攻擊。
但是這種方式,不但可能會誤報,黑客也可以輕松繞過,他可以可以用注釋、空白、換行、分隔符、拼接或編碼把關(guān)鍵字“拆開”而不影響執(zhí)行。
例如只要在在 union 和 select 中間插入了注釋字符:union /**/ select
這樣破壞了關(guān)鍵字的特征,傳統(tǒng)防火墻就檢測不出來了。
而雷池的語義分析就不一樣了,它并不是僅僅看字符或正則,而是理解請求意圖和結(jié)構(gòu)。
它內(nèi)置了多種編程語言的編譯器,對HTTP數(shù)據(jù)進(jìn)行解碼后,根據(jù)不同的語言(SQL,HTML/JS,命令行)找到不同的語法編譯器,然后判斷該數(shù)據(jù)是否會構(gòu)成攻擊。
很明顯,這種方式深入了語義,精確理解了用戶輸入的數(shù)據(jù),防護(hù)效果肯定有質(zhì)的提升。
04
Bot防護(hù)
Web應(yīng)用最大的特點就是:代碼(JS+HTML+CSS)會被發(fā)到用戶的瀏覽器端執(zhí)行,一覽無余,一點兒“隱私”都沒有。
這對于爬蟲、漏洞掃描、自動化攻擊等行為提供了“溫床”,針對這一點,雷池提供了動態(tài)防護(hù)的功能,可以對HTML,JS等代碼進(jìn)行動態(tài)加密,保證每一次訪問時代碼都能以不同的、隨機(jī)的形態(tài)呈現(xiàn),這就讓爬蟲和攻擊者難以“理解”網(wǎng)站內(nèi)容,大大增加了攻擊者的難度。
![]()
比如這個JavaScript:
![]()
被雷池進(jìn)行動態(tài)加密以后變成了這個樣子,很難辨認(rèn)了。
![]()
除此之外,雷池防火墻還能主動進(jìn)行“人機(jī)驗證”:
![]()
通過檢測客戶端的行為,比如鼠標(biāo)鍵盤行為是否符合人類習(xí)慣,從而判斷它是真人在使用,還是被自動化程序控制。
![]()
如果是真人自然放行,否則就會把它“踢”出去。
05
CC防護(hù)
對Web服務(wù)器有一類非常“惡心”的攻擊叫做“CC 攻擊”(Challenge Collapsar 攻擊),是一種分布式拒絕攻擊的一種。
攻擊者會控制大量肉雞(被感染的電腦)或代理服務(wù)器,偽裝成正常瀏覽器訪問網(wǎng)站,如不斷訪問首頁、搜索頁、接口等。每個請求看起來都合法(有正常的 User-Agent、Referer、Cookie),但數(shù)量極其巨大。
最終讓服務(wù)器過載,網(wǎng)頁卡死、數(shù)據(jù)庫阻塞或服務(wù)崩潰。
![]()
由于請求看起來都合法,這種攻擊非常難以防御。
針對這種情況,雷池防火墻提供了“頻率限制”的功能,如果某個 IP 在短時間內(nèi)發(fā)起大量 HTTP 請求,就阻斷該 IP 后續(xù)的所有訪問,要求它通過人機(jī)驗證,確保是真人才行。
![]()
還有不少應(yīng)用存在高峰流量的情況,比如搶票,熱點事件等,如果不進(jìn)行限流,服務(wù)很容易被海量的請求沖垮,誰也用不了。
當(dāng)然程序員可以寫代碼,深入到網(wǎng)站內(nèi)部去實現(xiàn)限流功能,但是很麻煩,使用雷池的“等待室”功能,根本不用對應(yīng)用做任何改變就可以實現(xiàn)限流。
![]()
這里配置的在線用戶是超過了100人就需要進(jìn)入等待室等候了,而進(jìn)入應(yīng)用的用戶,如果超過3分鐘在網(wǎng)頁上沒有操作,對不起,那就去等候室重新排隊吧。
06
身份認(rèn)證
第一次看到這個功能可能會覺得奇怪,身份認(rèn)證不是應(yīng)用程序自己應(yīng)該實現(xiàn)的嗎?防火墻為什么要來摻和?
其實,很多舊系統(tǒng)、內(nèi)網(wǎng)系統(tǒng)的認(rèn)證是很弱的,甚至是沒有的。
比如你開發(fā)了一個MQ的監(jiān)控工具,部署到了服務(wù)器上,就是給內(nèi)部的小團(tuán)隊使用,這時候再從頭把身份認(rèn)證搞起來是很麻煩的。
但是沒有身份認(rèn)證的Web網(wǎng)站,將會給服務(wù)器安全帶來巨大的安全隱患,黑客很容易從這個“城墻缺口”進(jìn)入。
這時候雷池的“身份認(rèn)證”就可以上場了:
![]()
只需要在被保護(hù)的應(yīng)用中簡單地設(shè)置一下,配置一下用戶賬號,你的應(yīng)用瞬間就擁有了身份認(rèn)證的能力,非常方便。
07
總結(jié)
回想當(dāng)年那個網(wǎng)站,如果有雷池這樣的WAF幫我鎮(zhèn)守,肯定不會被黑掉了。
如果你也有Web網(wǎng)站要上線,務(wù)必要把安全防護(hù)做好,強烈建議考慮下雷池這個非常優(yōu)秀的開源的WAF,它的語義分析算法(深度解碼HTTP載荷)、Bot防護(hù)(人機(jī)驗證、動態(tài)防護(hù)、防重放)、CC防護(hù)(頻率限制、等候室)、身份認(rèn)證等功能,會讓你的網(wǎng)站高枕無憂。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.