企業(yè)安全體系建設(shè)之路之Web安全篇
目前的網(wǎng)絡(luò)攻擊主要還是以WEB攻擊為主流,畢竟這是與外界溝通獲取知識(shí)和了解世界的主要橋梁。
目前隨著各大企業(yè)對(duì)安全的重視,Web的攻擊成本逐漸高于了防御成本,導(dǎo)致業(yè)務(wù)中Web安全漏洞的逐漸減少,甚至常規(guī)漏洞的消亡。當(dāng)然,一個(gè)漏洞的消亡必會(huì)有新的漏洞或者攻擊手法的出現(xiàn),攻擊的入門門檻隨之而然逐漸的提高。攻防只有前進(jìn),沒有倒退,即使目前Web安全的攻擊成本高于防御成本,防御Web攻擊的軟件再多,我們也不能放松每一個(gè)防御點(diǎn)。
Web攻擊現(xiàn)狀
DDoS攻擊和Web應(yīng)用攻擊是當(dāng)今互聯(lián)網(wǎng)面臨的較為突出的兩大安全威脅,DDoS是非漏洞型攻擊,我們暫且不談。Web應(yīng)用攻擊占了網(wǎng)絡(luò)攻擊的主流,由于其地位,這是事實(shí)。由于目前國(guó)內(nèi)某些原因,導(dǎo)致以前以技術(shù)為主導(dǎo)的現(xiàn)狀不在,現(xiàn)在相對(duì)于過(guò)去封閉,當(dāng)前往往一個(gè)新的攻擊手法出現(xiàn),很長(zhǎng)時(shí)間都沒有人知道,只在某一小圈子里流傳。所以在Web防御逐漸完善的過(guò)程中,我們可以感覺的到,滲透一個(gè)網(wǎng)站越來(lái)越吃力,而是Web這個(gè)東西,目前已知的漏洞挖掘方向點(diǎn)就那么多,針對(duì)這些漏洞點(diǎn)的防御軟件又多如牛毛,防御者把這些走已知常規(guī)漏洞路給堵死了,一般的攻擊者可能無(wú)能為力,但是對(duì)于一些高水平的攻擊者來(lái)說(shuō),也許并不是無(wú)路可走。
所以,依照現(xiàn)狀來(lái)看,目前的Web漏洞利用走向開始往邏輯漏洞方面走,如黑產(chǎn)最喜歡的薅羊毛就是一個(gè)例子,現(xiàn)在想要拿到Web站點(diǎn)服務(wù)器系統(tǒng)權(quán)限不容易,不過(guò)利用邏輯漏洞拿到用戶數(shù)據(jù)信息倒是不難。目前常規(guī)的攻擊手法已很難能夠攻破防護(hù)做的比較好的企業(yè),所以,為了了解最新攻擊技術(shù)或漏洞,我們需要搭建蜜罐系統(tǒng)來(lái)捕獲攻擊樣本,獲取自家產(chǎn)品的0day漏洞或更新現(xiàn)有落后技術(shù)。
常見漏洞防護(hù)
一些常規(guī)的漏洞防護(hù)就不說(shuō)了,防護(hù)的軟件已經(jīng)有很多了,漏洞掃描器都可以掃出來(lái),掃不出來(lái)的,好一點(diǎn)的防護(hù)軟件也是可以識(shí)別的。按道理來(lái)講,我們應(yīng)用部署安全監(jiān)控軟件是可以防護(hù)常見漏洞的,當(dāng)然,我們企業(yè)自身也可以通過(guò)漏洞攻擊指紋進(jìn)行攻擊特征識(shí)別,攻擊者繞過(guò)防護(hù)軟件進(jìn)行攻擊這個(gè)也是我們防護(hù)不了的也是不可避免的,只要按照標(biāo)準(zhǔn)化安全編程手冊(cè),出現(xiàn)常規(guī)漏洞的點(diǎn)會(huì)很少,至少顯性漏洞不可見。這里主要講講邏輯漏洞問(wèn)題。
邏輯問(wèn)題層出不窮,其他的常規(guī)漏洞防范已經(jīng)有了規(guī)范化流程,而邏輯漏洞到目前還沒有一個(gè)流程化的防護(hù)方案,因?yàn)槠涮厥庑?,所以我們也得特殊?duì)待。
邏輯漏洞常出現(xiàn)在用戶交互和信息展示之處,當(dāng)然還有與系統(tǒng)進(jìn)行交互的地方,下面列幾點(diǎn)
驗(yàn)證碼
驗(yàn)證碼是我們常見的一種應(yīng)對(duì)暴力攻擊的方式之一,主要是為了區(qū)分人和非人的產(chǎn)物,驗(yàn)證碼經(jīng)歷了多次改版,幾乎每個(gè)網(wǎng)站的驗(yàn)證碼都不盡相同,驗(yàn)證碼在應(yīng)對(duì)繞過(guò)和攻擊識(shí)別時(shí)變得越來(lái)越復(fù)雜,用戶體驗(yàn)也越來(lái)越不好。
拿以前的12306的驗(yàn)證碼為例。
請(qǐng)點(diǎn)擊下面所有的熟雞蛋,鬼都不知道哪個(gè)雞蛋是熟雞蛋,怎么猜?
當(dāng)然了,這個(gè)只是個(gè)笑話,但是也恰恰說(shuō)明了問(wèn)題,我們不僅要做好驗(yàn)證碼,而且還要讓用戶不感到體驗(yàn)效果差。
驗(yàn)證碼經(jīng)過(guò)了長(zhǎng)期的變化,目前主要分為以下這幾類,我們來(lái)了解下
靜態(tài)驗(yàn)證碼
此類驗(yàn)證碼是比較古老的,應(yīng)該說(shuō)是最初的驗(yàn)證碼了,靜態(tài)驗(yàn)證碼從以前的文本型過(guò)度到了現(xiàn)在的圖片型,雖然目前靜態(tài)驗(yàn)證碼加了很多抗干擾加花等等操作,但是目前能夠識(shí)別靜態(tài)驗(yàn)證碼的手段還是很多的,大多數(shù)的靜態(tài)驗(yàn)證碼比較容易被ocr軟件識(shí)別,通過(guò)打碼平臺(tái)等,還有就是當(dāng)前火熱的機(jī)器學(xué)習(xí),通過(guò)訓(xùn)練機(jī)器,其靜態(tài)驗(yàn)證碼的識(shí)別率可以達(dá)到80%以上,所以現(xiàn)在很多站點(diǎn)都開始棄用此類驗(yàn)證碼了
Gif動(dòng)畫驗(yàn)證碼
有的網(wǎng)站提供GIF動(dòng)態(tài)的驗(yàn)證碼圖片,由于在Gif驗(yàn)證碼中,有多個(gè)驗(yàn)證碼圖層,這些都是隨機(jī)的,使得識(shí)別器不容易辨識(shí)哪一個(gè)圖層是真正的驗(yàn)證碼圖片,可以更有效得防止識(shí)別器的識(shí)別。但是也是有弊端的,Gif在顯示的最后都會(huì)暫停供用戶識(shí)別,只要識(shí)別出最后暫停的那張圖層,就可以像識(shí)別靜態(tài)驗(yàn)證碼那樣識(shí)別Gif驗(yàn)證碼了。
手機(jī)短信驗(yàn)證碼
手機(jī)驗(yàn)證碼是通過(guò)發(fā)送驗(yàn)證碼到手機(jī),這個(gè)是比較好的驗(yàn)證手段,目前使用這類驗(yàn)證碼的站點(diǎn)還是很多的。
手機(jī)語(yǔ)音驗(yàn)證碼
這個(gè)驗(yàn)證碼的成本比較高,一般用于金融等站點(diǎn)的驗(yàn)證碼,不過(guò)效果還是很好的。
視頻驗(yàn)證碼
視頻驗(yàn)證碼中隨機(jī)組合而成的驗(yàn)證碼動(dòng)態(tài)嵌入到MP4,flv等格式的視頻中,增大了破解難度。驗(yàn)證碼視頻動(dòng)態(tài)變換,隨機(jī)響應(yīng),可以有效防范字典攻擊、窮舉攻擊等攻擊行為。攻擊者可以通過(guò)抓屏的方式進(jìn)行識(shí)別,但是效果不是很好。
滑動(dòng)驗(yàn)證碼
這種驗(yàn)證碼是最近幾年流行起來(lái)的,這個(gè)驗(yàn)證碼需要與用戶進(jìn)行交互,采用拼圖或滑動(dòng)左右模式進(jìn)行驗(yàn)證。應(yīng)對(duì)此類驗(yàn)證碼攻擊者一般是通過(guò)網(wǎng)站的驗(yàn)證碼接口找突破,或者采用如鼠標(biāo)模擬等操作進(jìn)行驗(yàn)證碼識(shí)別。
點(diǎn)擊驗(yàn)證碼
此類驗(yàn)證碼一般是給出一張圖片讓用戶進(jìn)行識(shí)別,如12306的驗(yàn)證碼識(shí)別。應(yīng)對(duì)此類驗(yàn)證碼攻擊者一樣可以通過(guò)鼠標(biāo)模擬等操作進(jìn)行驗(yàn)證碼識(shí)別。
智力驗(yàn)證碼
顧名思義就是,給用戶出一道題,讓用戶把答案算出來(lái)進(jìn)行驗(yàn)證。此類驗(yàn)證也是存在一定的弊端的,因?yàn)轵?yàn)證碼大多數(shù)是以圖片的形式出現(xiàn)的,而相對(duì)于比較低級(jí)的算數(shù)題類驗(yàn)證碼,攻擊者可以用靜態(tài)驗(yàn)證碼識(shí)別的手段進(jìn)行問(wèn)題提取,繼而進(jìn)行算數(shù)運(yùn)算,從而達(dá)到識(shí)別此類驗(yàn)證碼的目的。
交互驗(yàn)證碼
此類驗(yàn)證應(yīng)該算是目前前端驗(yàn)證碼驗(yàn)證比較安全的驗(yàn)證碼了。
在有客戶端的站點(diǎn)上應(yīng)用比較廣泛,首先要登錄站點(diǎn),需要客戶端進(jìn)行授權(quán),如掃碼登錄,客戶端驗(yàn)證后,服務(wù)端把登錄信息發(fā)送前端進(jìn)行登錄操作。
當(dāng)然還有其他的驗(yàn)證碼驗(yàn)證手段,這里就不一一介紹了,具體使用什么驗(yàn)證碼還得看站點(diǎn)的特性和業(yè)務(wù)的類型,沒全有最好最安全的驗(yàn)證碼,只有最適合的驗(yàn)證碼。
交互邏輯
交互邏輯漏洞雖然不像常規(guī)漏洞那么厲害,可以直接拿下系統(tǒng)權(quán)限,但是給企業(yè)造成的損失卻是很大的。我們經(jīng)??梢钥吹揭恍┬侣劊f(shuō)某某網(wǎng)站由于出現(xiàn)支付漏洞,導(dǎo)致?lián)p失多少錢。因?yàn)檫壿嬄┒词遣豢杀苊獾?,它不像常?guī)漏洞可以容易的被漏洞掃描器掃出,它更多的是需要測(cè)試人員代碼審計(jì)或黑盒測(cè)試找出。所以這個(gè)交互邏輯漏洞也是比較難以防控的一個(gè)點(diǎn)。
通常出現(xiàn)交互邏輯漏洞的點(diǎn)為登錄處、支付處、用戶信息交互處和與數(shù)據(jù)庫(kù)交互處。因?yàn)榫W(wǎng)站程序的某些交互接口或者數(shù)據(jù)交互接口信息驗(yàn)證邏輯問(wèn)題,對(duì)提交的數(shù)據(jù)參數(shù)審計(jì)不嚴(yán)格,造成交互邏輯漏洞,下面列出比較常見的交互邏輯漏洞。
登錄交互邏輯
在登陸處,一般的測(cè)試會(huì)測(cè)試站點(diǎn)是否嚴(yán)格控制登錄交互,
攻擊者通過(guò)抓包查看提交參數(shù),查看是否有可以利用的交互邏輯漏洞,有些站點(diǎn)在登錄參數(shù),也就是帳號(hào)密碼傳過(guò)來(lái)后,會(huì)驗(yàn)證帳號(hào)密碼是否正確,然后返回true或者返回false,即使使用錯(cuò)誤的帳號(hào)密碼,當(dāng)返回false時(shí),那么我們就可以改返回?cái)?shù)據(jù)包為true,那么就直接登錄了,更有勝者當(dāng)用戶名正確后,無(wú)論密碼是否正確,都直接返回正確的帳號(hào)密碼。有人可能會(huì)想,即使你改掉包,不是還有cookie或者token嗎?話雖沒錯(cuò),但是某些站點(diǎn)的cookie是直接在前端生成,或者在我們改掉包后,服務(wù)器端會(huì)把正確的cookie給你返回回來(lái)。
還有在找回密碼處,通過(guò)找回密碼這個(gè)交互邏輯漏洞,攻擊者可以重置任意賬戶密碼,從而達(dá)到自己的目的,這對(duì)于金融行業(yè)和電商行業(yè)等用戶量大的站點(diǎn),造成用戶信息泄漏或者資金被盜甚至對(duì)用戶造成詐騙等后果,這對(duì)企業(yè)的聲譽(yù)和發(fā)展都會(huì)造成影響和損失。
在找回密碼處,攻擊者一般通過(guò)驗(yàn)證郵箱或者手機(jī)號(hào)找回密碼,如果帳號(hào)匹配,服務(wù)器一般會(huì)發(fā)送短信驗(yàn)證碼或者郵箱驗(yàn)證碼到用戶手里,那么這個(gè)過(guò)程如果服務(wù)器端驗(yàn)證不嚴(yán)格就有可能會(huì)造成交互邏輯漏洞的發(fā)生。
重置密碼的攻擊邏輯常見的有如下幾點(diǎn)
- 攻擊者通過(guò)修改返回包,繞過(guò)驗(yàn)證步驟,直接到達(dá)修改密碼處
- 攻擊者通過(guò)修改返回包,把當(dāng)前重置帳號(hào)(如手機(jī)號(hào),郵箱地址),修改為自己的帳號(hào)(如手機(jī)號(hào),郵箱地址),那么在服務(wù)器沒有對(duì)帳號(hào)進(jìn)行嚴(yán)格驗(yàn)證的情況下,服務(wù)器端會(huì)直接把重置驗(yàn)證憑證發(fā)送到攻擊者的手里
- 攻擊者通過(guò)抓取返回包,由于服務(wù)器端的自身邏輯問(wèn)題,可能會(huì)把帳號(hào)密碼等等與當(dāng)前重置帳號(hào)的相關(guān)信息給返回過(guò)來(lái),不用重置,就知道了用戶密碼
- 站點(diǎn)找回密碼設(shè)計(jì)問(wèn)題,當(dāng)重置密碼后,服務(wù)器會(huì)發(fā)送新的密碼到用戶手中,而這個(gè)密碼是幾位的純數(shù)字,攻擊者是可以通過(guò)暴力窮舉的方式知道重置的密碼,更有趣的是,某些站點(diǎn)直接是重置密碼為固定的密碼字符串
- 網(wǎng)頁(yè)驗(yàn)證不嚴(yán)格,可通過(guò)url直接到達(dá)修改密碼處
- 某些通過(guò)郵件找回的,其重置密碼的鏈接是可以猜測(cè)和預(yù)知的
還有就是驗(yàn)證碼邏輯問(wèn)題,某些驗(yàn)證碼雖然在前端進(jìn)行了驗(yàn)證,但是在后端卻沒有進(jìn)行很嚴(yán)格的檢查,攻擊者可以通過(guò)刪除驗(yàn)證碼或者驗(yàn)證碼是不變的,可有可無(wú)的,那么攻擊者就可以實(shí)施撞庫(kù)或這暴力破解用戶帳號(hào)密碼了。在用手機(jī)或郵箱或其他接收攻擊接收登錄或重置密碼時(shí),可能出現(xiàn)驗(yàn)證碼交互邏輯漏洞。我們知道,一般情況下,站點(diǎn)發(fā)送的驗(yàn)證碼是有時(shí)間限制的,通常為幾分鐘,如果驗(yàn)證碼在后端發(fā)送邏輯有問(wèn)題的話,就會(huì)出現(xiàn)問(wèn)題。如,當(dāng)攻擊者在爆破時(shí),驗(yàn)證碼過(guò)期時(shí)間為5分鐘,時(shí)間快到了時(shí),攻擊者再發(fā)送一次請(qǐng)求,因?yàn)楹蠖藳]有做失效控制策略,就又會(huì)收到一次一模一樣的驗(yàn)證碼,而且時(shí)間又是5分鐘,那么想要爆破某一個(gè)帳號(hào)的密碼就不再是什么難事了。當(dāng)然還有站點(diǎn)直接返回驗(yàn)證碼的,或者驗(yàn)證碼是在前端生成通過(guò)后端直接發(fā)送到用戶手中的。
想要防護(hù)登錄交互邏輯此類的漏洞也很簡(jiǎn)單,就是要對(duì)相關(guān)的參數(shù)做個(gè)嚴(yán)格的驗(yàn)證,如
- 登錄的邏輯不返回前端,由后端管控,前端進(jìn)行調(diào)用
- 驗(yàn)證碼失效時(shí)間進(jìn)行嚴(yán)格控制,驗(yàn)證碼不能多次使用,為一次性驗(yàn)證碼,獲取驗(yàn)證碼的時(shí)間也要有時(shí)間限制,由后端管控,預(yù)防被用于短信轟炸
- 所有的賬戶重置信息都不返回給前端
- 生成的重置密碼連接是不可預(yù)知的,隨機(jī)的
當(dāng)然,防護(hù)手端多種多樣,最主要的只有一點(diǎn),那就是嚴(yán)格檢查參數(shù),對(duì)參數(shù)進(jìn)行嚴(yán)格的校檢,預(yù)防此類漏洞就只能是提高驗(yàn)證邏輯。
支付邏輯
支付漏洞可以說(shuō)是比較嚴(yán)重的邏輯漏洞了,畢竟是涉及到錢這個(gè)問(wèn)題。一個(gè)支付漏洞有可能會(huì)對(duì)企業(yè)造成巨大的損失。
支付漏洞的產(chǎn)生符合邏輯漏洞特點(diǎn),都是其修改自身邏輯達(dá)到欺騙的效果。
支付的一般流程為:確認(rèn)信息=>提交訂單=>支付=>支付成功
主要的漏洞點(diǎn)如下
1.修改參數(shù)屬性值
參數(shù)的屬性值有
- 支付金額
- 代金卷
- 積分
- 其他
這幾個(gè)屬性值也是最為基礎(chǔ)和常見的支付邏輯漏洞發(fā)生點(diǎn),攻擊者一般的攻擊手法為修改支付金額的多少來(lái)進(jìn)行測(cè)試,出現(xiàn)漏洞的支付步驟一般在提交訂單時(shí)或提交訂單之后,通過(guò)把支付的金額修改成低價(jià)格或者修改為負(fù)數(shù),如果后端判斷邏輯有問(wèn)題,那么就會(huì)出現(xiàn)支付邏輯漏洞了。
所以,在后端進(jìn)行判斷時(shí),要對(duì)相關(guān)參數(shù)進(jìn)行綁定,即使在前端修改了,后端也是可以初始化參數(shù)的。
2.修改數(shù)量值
這個(gè)和修改參數(shù)屬性值差不多,也是把商品數(shù)量修改為負(fù)數(shù)達(dá)到支付金額成負(fù)數(shù)的效果,當(dāng)然還有一種就是商品差價(jià)修改,用一種低價(jià)格商品的數(shù)量總金額去支付高價(jià)格商品的數(shù)量總金額,如果后端邏輯有問(wèn)題,那么就可以低價(jià)格購(gòu)買高價(jià)格商品了。
3.越權(quán)支付
越權(quán)一般發(fā)生在支付環(huán)節(jié),攻擊者可以通過(guò)修改自身ID為其他用戶的ID值,如果沒有嚴(yán)格的支付密碼或驗(yàn)證碼的話,就可以達(dá)到用他人賬戶為自己的商品買單的效果,當(dāng)然還有其他的越權(quán)支付手段,如越權(quán)支付他人賬單,越權(quán)提現(xiàn)他人現(xiàn)金等。
4.條件競(jìng)爭(zhēng)
條件競(jìng)爭(zhēng)這個(gè)詞我們?cè)赪eb漏洞或是其他系統(tǒng)漏洞中都是可以看到的,條件競(jìng)爭(zhēng)利用其高并發(fā)線程,利用時(shí)鐘延遲(后臺(tái)處理延遲)達(dá)到多出或或高于現(xiàn)有正常結(jié)果。如LFI漏洞,通過(guò)不斷寫入tmp文件,達(dá)到getshell的目的。同樣,如提現(xiàn)功能來(lái)說(shuō),如果我們把要提現(xiàn)的金額分成多份,通過(guò)高并發(fā)線程,如果后端處理能力或者邏輯判斷能力存在缺陷的話,那么我們就可以提現(xiàn)高于提現(xiàn)次數(shù)的金額。
5.支付狀態(tài)
通常在我們支付成功后,服務(wù)器會(huì)返回一個(gè)支付成功或支付失敗的結(jié)果,如果在后端沒有對(duì)支付狀態(tài)和訂單號(hào)進(jìn)行綁定的話,那么攻擊者只需要修改返回狀態(tài)為True就會(huì)成功購(gòu)買商品,而無(wú)論支付是否成功。
支付邏輯漏洞主要是代碼層方面的防護(hù),如果后端對(duì)提交的參數(shù)進(jìn)行了綁定,那么無(wú)論前端怎么的修改,后端都是可以判斷和初始化參數(shù)的;對(duì)于支付接口來(lái)說(shuō),如果調(diào)用第三方支付接口的話,也是要對(duì)接口進(jìn)行綁定,最好對(duì)訂單號(hào)進(jìn)行綁定,避免用不存在的支付接口支付成功。
對(duì)于此類支付漏洞來(lái)講,我們能做的就是提高風(fēng)控手段,所有的支付結(jié)果要進(jìn)行延時(shí)處理,把支付結(jié)果與訂單之前的結(jié)果進(jìn)行對(duì)比,查看是否異常,必要時(shí)加入人工審核,以此來(lái)減小事故發(fā)生幾率。
越權(quán)
對(duì)于越權(quán),越權(quán)也是屬于邏輯漏洞的一種。
越權(quán)漏洞的存在環(huán)境,在Web環(huán)境中的不同而不同,拿有登錄操作的站點(diǎn)來(lái)聊聊。在這類站點(diǎn)中,越權(quán)一般出現(xiàn)在個(gè)人信息處,如我們點(diǎn)擊個(gè)人信息,通常在個(gè)人信息鏈接數(shù)據(jù)包里會(huì)帶有用戶userid,不出意外的話,我們修改其userid為其他用戶userid會(huì)出現(xiàn)其他用戶的信息。這個(gè)漏洞的產(chǎn)生是后端對(duì)用戶的權(quán)限或登錄狀態(tài)判斷不嚴(yán)造成的,對(duì)于此類漏洞站點(diǎn)一般的做法是添加用戶token或附帶其他什么亂七八糟的驗(yàn)證,對(duì)于越權(quán)也算是比較好的防范了。
當(dāng)然,邏輯漏洞遠(yuǎn)不止上面提到的這么多,邏輯漏洞的防范是一個(gè)長(zhǎng)期的過(guò)程,隨著站點(diǎn)的業(yè)務(wù)和功能的拓展,其邏輯復(fù)雜度也在增加,只要企業(yè)把控好權(quán)限、驗(yàn)證、輸出這三個(gè)點(diǎn),邏輯漏洞出現(xiàn)的幾率也就小了許多。
系統(tǒng)錯(cuò)誤配置
某些站點(diǎn)的安全管控做的非常好,但是細(xì)節(jié)卻處理的不好,其中不乏一些大的廠商,站點(diǎn)不出現(xiàn)漏洞,但是支持站點(diǎn)運(yùn)行的服務(wù)器軟件由于站點(diǎn)管理員的違規(guī)操作可能會(huì)導(dǎo)致大的漏洞產(chǎn)生。如Apache開放了PUT功能,權(quán)限管控不到位所導(dǎo)致的目錄遍歷操作,IIS的短文件名漏洞等。所以按照規(guī)范定期進(jìn)行服務(wù)器基線檢查是非常有必要的。
數(shù)據(jù)庫(kù)漏洞
數(shù)據(jù)庫(kù)漏洞一般就是弱口令或未授權(quán)訪問(wèn),其余的如REC等漏洞或多或少還是需要點(diǎn)權(quán)限的,隨著企業(yè)的安全意識(shí)提高,建站一般會(huì)使用站庫(kù)分離的做法,這樣做可以很好的保護(hù)數(shù)據(jù)庫(kù)服務(wù)器和提高站點(diǎn)服務(wù)器的系統(tǒng)資源利用率,提高站點(diǎn)安全性。當(dāng)然,站點(diǎn)的權(quán)限如非必要,最好還是進(jìn)行降權(quán)賬號(hào)登錄,很多的數(shù)據(jù)庫(kù)漏洞都是因?yàn)楸┞对诠W(wǎng)導(dǎo)致的被入侵,如果權(quán)限較低的話,那么被攻下的難度就很高了。
從站點(diǎn)的SQL注入漏洞來(lái)講,這本身就不屬于數(shù)據(jù)庫(kù)漏洞了,屬于站點(diǎn)自身的漏洞,所以SQL注入的根源在于站點(diǎn)代碼,而非數(shù)據(jù)庫(kù)。
薅羊毛
薅羊毛這個(gè)雖不能算是漏洞(也可以說(shuō)和漏洞危害差不多),但是對(duì)企業(yè)造成的損失還是很大的,目前薅羊毛現(xiàn)已經(jīng)成為了一個(gè)產(chǎn)業(yè)鏈,羊毛黨利用網(wǎng)站漏洞或者人員條件(黑產(chǎn))等其他優(yōu)勢(shì),合法占用企業(yè)資源,使企業(yè)的宣傳或活動(dòng)達(dá)不到預(yù)期的效果,浪費(fèi)企業(yè)資源,甚至造成損失。
當(dāng)企業(yè)辛辛苦苦策劃出來(lái)的活動(dòng)被羊毛黨利用,企業(yè)投入了大量物力換來(lái)的是羊毛黨的流量,那么,我們有什么方法能減少被薅羊毛額幾率呢?
防范羊毛黨可以從以下幾個(gè)方面著手
- 嚴(yán)控注冊(cè)流程,阻止非法注冊(cè)
- 定期清理垃圾帳號(hào)
- 提高參加活動(dòng)的門檻
- 對(duì)參加活動(dòng)的用戶進(jìn)行嚴(yán)格的資格審核,提高用戶真實(shí)性
- 平臺(tái)漏洞:嚴(yán)控相關(guān)活動(dòng)的接口調(diào)用邏輯,確保通過(guò)了安全檢測(cè)后上線
- 延遲活動(dòng)獎(jiǎng)勵(lì)的時(shí)限
- 增加和提高合法用戶真實(shí)性(人機(jī)用戶)驗(yàn)證機(jī)制
當(dāng)然,具體的防范措施也不是依照以上幾種防范措施就能完全杜絕薅羊毛的行為,所謂完善的安全管控體系,都是建立在具體實(shí)踐的基礎(chǔ)上的,防范管控經(jīng)驗(yàn)都是在經(jīng)歷了”具體事故“才能很完美的總結(jié)出來(lái),這樣才能對(duì)企業(yè)自身或者具體業(yè)務(wù)量身定制一套薅羊毛應(yīng)對(duì)措施,往大了說(shuō)還能通用于某一行業(yè)的所有產(chǎn)品。
第三方程序管控
一個(gè)企業(yè)里面,用到的Web程序不敢說(shuō)都是自己開發(fā)的,或多或少會(huì)用到其他企業(yè)的開源或收費(fèi)的Web程序,那么這些Web程序又該如何管控呢?
對(duì)于此類應(yīng)用來(lái)說(shuō),上線和自身產(chǎn)品差不多,都是需要經(jīng)過(guò)安全評(píng)估的,通過(guò)了安全評(píng)估以后,進(jìn)行備案上線。后續(xù)需定期關(guān)注官網(wǎng)補(bǔ)丁并及時(shí)進(jìn)行補(bǔ)丁更新,如果Web程序存在0day漏洞的話,結(jié)合當(dāng)前服務(wù)器的安全策略進(jìn)行管控。
權(quán)限管控
權(quán)限這個(gè)問(wèn)題是站點(diǎn)被攻破后的最后一道防御點(diǎn),如果站點(diǎn)權(quán)限出現(xiàn)問(wèn)題,那么整個(gè)站點(diǎn)就真的淪陷了。
在Web的滲透測(cè)試中,攻擊者在拿到了可以操控站點(diǎn)的權(quán)限時(shí)(如后臺(tái)登錄權(quán)限),首先想到的就是上傳腳本木馬來(lái)控制服務(wù)器,然后利用腳本木馬來(lái)進(jìn)行提權(quán)操作,最后內(nèi)網(wǎng)滲透等等。
所以在攻擊者有了操作站點(diǎn)權(quán)限的這個(gè)節(jié)點(diǎn)時(shí)是企業(yè)管控Web這最后一道防線的關(guān)鍵點(diǎn),下面我們來(lái)討論下權(quán)限問(wèn)題。
站點(diǎn)的啟動(dòng)一般不用最高權(quán)限啟動(dòng),一般管理員會(huì)新建一個(gè)低權(quán)限的賬號(hào)來(lái)啟動(dòng)Web站點(diǎn)服務(wù),用低權(quán)限啟動(dòng)的Web服務(wù)權(quán)限有限,無(wú)法執(zhí)行創(chuàng)建修改或刪除文件等高權(quán)限操作,所以對(duì)腳本木馬的寫入有一定的防范作用;但是有一些站點(diǎn)因?yàn)橐褂媚承┑谌綆?kù),或者需要執(zhí)行某些合法的敏感操作,可能會(huì)要求請(qǐng)求高權(quán)限啟動(dòng),這個(gè)時(shí)候權(quán)限管控就會(huì)有一定風(fēng)險(xiǎn)存在了,企業(yè)能做的就是對(duì)整個(gè)站點(diǎn)進(jìn)行旁路權(quán)限管控,如:
- 上傳目錄的腳本解析和執(zhí)行權(quán)限
- 站點(diǎn)的命令執(zhí)行權(quán)限
- 跨目錄權(quán)限
所以,權(quán)限最大的問(wèn)題在于執(zhí)行上,如果控制了執(zhí)行權(quán)限,那么無(wú)論你怎么上傳,上傳什么文件,都執(zhí)行不起來(lái)。
權(quán)限管控是一個(gè)老生常談的問(wèn)題,權(quán)限和業(yè)務(wù)有著比較矛盾的問(wèn)題,因?yàn)橛行┣闆r下需要開啟高權(quán)限來(lái)支撐站點(diǎn)的某一功能,但是在該功能的高權(quán)限開啟情況下又會(huì)出現(xiàn)安全問(wèn)題。所以說(shuō),權(quán)限管控并不難,難就難在要配合具體業(yè)務(wù)場(chǎng)景而又不要出現(xiàn)安全問(wèn)題上。
日常監(jiān)控
監(jiān)控站點(diǎn)是一種了解當(dāng)前站點(diǎn)運(yùn)行狀態(tài)的必要手段,也是一種獲取攻擊和威脅情報(bào)的來(lái)源之一。
監(jiān)控的手段一般為
- 日志監(jiān)控
- 通信流量監(jiān)控
- 文件監(jiān)控
- 系統(tǒng)操作監(jiān)控
通過(guò)監(jiān)控手段,企業(yè)可以獲取大量有用的信息,能夠幫助企業(yè)改善產(chǎn)品、獲取威脅情報(bào)、調(diào)查取證等方面有著很大的幫助。
日志監(jiān)控主要是針對(duì)于Web服務(wù)器和站點(diǎn)所產(chǎn)生的日志情況,提取日志中所產(chǎn)生的異常并針對(duì)性的進(jìn)行處理。
通信流量監(jiān)控主要是針對(duì)Web站點(diǎn)的所有流量進(jìn)行的監(jiān)控,在通信流量里面一般會(huì)包含攻擊行為,那么對(duì)于匹配性的攻擊行為進(jìn)行預(yù)警,篩選出攻擊流量進(jìn)行分析,如果可靠的話,我們有一定的幾率可以獲得新的攻擊技巧、0day漏洞或者發(fā)現(xiàn)站點(diǎn)新的漏洞等。對(duì)于某些攻擊流量來(lái)說(shuō),一個(gè)站點(diǎn)存在命令執(zhí)行,在流量中會(huì)出現(xiàn)系統(tǒng)命令或其他第三方命令等特征字符。
文件監(jiān)控是站點(diǎn)監(jiān)控里比較重要的監(jiān)控之一了,因?yàn)楣粽吖粽军c(diǎn)時(shí)一般都會(huì)對(duì)文件進(jìn)行操作,文件的變動(dòng)可以讓被入侵的站點(diǎn)快速定位入侵點(diǎn),從而應(yīng)急及時(shí),減小損失;文件監(jiān)控對(duì)于權(quán)限管控不到位而造成的安全問(wèn)題有著比較好的支撐,對(duì)于那些正常文件被寫入腳本木馬的文件來(lái)說(shuō),我們可以知道寫入的代碼是否為木馬代碼,是否為正常代碼,是否為非法寫入。
系統(tǒng)操作監(jiān)控主要為針對(duì)Web站點(diǎn)所執(zhí)行的系統(tǒng)操作,在系統(tǒng)操作監(jiān)控里面,我們可以看到Web站點(diǎn)和系統(tǒng)的所有交互行為,通過(guò)監(jiān)控日志,我們可以分析得出,Web站點(diǎn)的哪些文件在與系統(tǒng)進(jìn)行交互,執(zhí)行的行為是否為正當(dāng)合法的行為(和syslog取證差不多)。
通過(guò)監(jiān)控的手段,我們可以清楚的了解到站點(diǎn)服務(wù)器都做了些什么,它們所做的事情是否是正當(dāng)?shù)?。監(jiān)控手段所帶來(lái)的好處就是,如果出現(xiàn)安全問(wèn)題能夠在第一時(shí)間找出問(wèn)題所在,監(jiān)控手段在檢測(cè)到疑是攻擊行為時(shí),可以進(jìn)行有效的攻擊阻斷,即使是Web站點(diǎn)存在漏洞情況下。這一點(diǎn)就和WAF的功能有相識(shí)之處了。
WAF
權(quán)限管控是Web安全的最后一道防線,那么WAF(Web Application Firewall)可以說(shuō)是Web安全中的第一道防線。
在目前互聯(lián)網(wǎng)的Web站點(diǎn)中,無(wú)論網(wǎng)站大小或多或少會(huì)安裝WAF來(lái)保護(hù)網(wǎng)站,在安裝了WAF的網(wǎng)站比不安裝WAF的網(wǎng)站安全性要高,站點(diǎn)安裝了WAF提高了攻擊的門檻,可以防范一般的(沒有什么技術(shù)能力的)攻擊者。隨著技術(shù)的發(fā)展和安全攻防的交鋒加劇,WAF的功能也從以前的功能單一逐漸變?yōu)楝F(xiàn)在的多功能WAF,不僅能夠攔截過(guò)濾還能殺毒等。
當(dāng)然,不得不說(shuō)的就是現(xiàn)在常用的加速器CDN(Content Delivery Network)了,CDN發(fā)展也是差不多,以前只是單一個(gè)給網(wǎng)站加個(gè)速,發(fā)展到現(xiàn)在,CDN有了WAF的功能,能夠代替WAF做一些攻擊攔截的事情,當(dāng)然不是有了CDN就能完全代替WAF了,如果攻擊者繞過(guò)了CDN找到了服務(wù)器的真實(shí)IP地址呢,又當(dāng)如何?
在Web安全的建設(shè)中,WAF不能說(shuō)必不可少,但是有了WAF,站點(diǎn)的安全性能夠提高到一個(gè)檔次,不僅能夠擋掉一些普通攻擊者的攻擊,還能夠提高高級(jí)攻擊者的攻擊成本,即使網(wǎng)站淪陷了,不是還有其他的防護(hù)手段嗎?都是擺設(shè)?沒錯(cuò),其他的防護(hù)手段就是擺設(shè)。
安全建設(shè)就是這樣,防護(hù)做的再好,如果沒有從根源解決問(wèn)題,攻擊者只要有心,那么一切的防護(hù)手段繞過(guò)只是時(shí)間問(wèn)題,這個(gè)就和擒賊先擒王是一個(gè)道理了。所以,Web漏洞的根源就是站點(diǎn)代碼,只要代碼層顯性漏洞不存在,加上代碼層的其他安全防護(hù)措施做到位,那么站點(diǎn)就能做到相對(duì)安全,而能夠讓站點(diǎn)做到相對(duì)安全的就是“代碼安全審計(jì)”。
代碼安全審計(jì)
代碼審計(jì)作為安全測(cè)試中重要的一環(huán),代碼審計(jì)能夠發(fā)現(xiàn)一些潛在的漏洞,幫助企業(yè)更好的完善Web程序,減少被攻擊的風(fēng)險(xiǎn)。
如上文所述,站點(diǎn)服務(wù)器的防護(hù)做的再好,如果站點(diǎn)的程序代碼存在問(wèn)題的話,那么一切的防護(hù)措施可能成為擺設(shè)。作為一個(gè)負(fù)責(zé)的企業(yè),要對(duì)自己和自己的用戶負(fù)責(zé),那么Web產(chǎn)品在發(fā)布或新版本更新時(shí),就需要進(jìn)行代碼審計(jì),以最大的可能減小漏洞發(fā)生的幾率。
對(duì)于Web程序來(lái)講,代碼審計(jì)一般特別針對(duì)常規(guī)高危漏洞,因?yàn)閷?duì)于常規(guī)漏洞一般的掃描器都是可以掃的出來(lái)的,而對(duì)于那些需要特定條件才能觸發(fā)的漏洞(如CSRF,埋雷攻擊),產(chǎn)品能做的就是盡可能的控制各個(gè)交互的權(quán)限分離和綁定(加強(qiáng)驗(yàn)證)。
目前市面上免費(fèi)的和收費(fèi)的代碼審計(jì)產(chǎn)品有很多,大多數(shù)都是基于靜態(tài)分析,所以誤報(bào)率還是比較高的,審計(jì)工具它只能是個(gè)參考,具體的邏輯分析還是需要專業(yè)的安全技術(shù)人員跟進(jìn)。那么代碼審計(jì)也有一定的盲區(qū),因?yàn)殡S著一個(gè)產(chǎn)品的功能增加,代碼量的加大,有時(shí)候一個(gè)產(chǎn)品的代碼就有幾萬(wàn)行,大小幾十上百兆,不可能說(shuō)完全依靠人工能夠?qū)徲?jì)的完的,就算審計(jì)完了,質(zhì)量還是得不到保證。在這個(gè)情況下,工具就有了用武之地,代碼審計(jì)可以以白加黑的方式進(jìn)行,審計(jì)效率可以提升很多。
在我們代碼審計(jì)無(wú)法觸及之處,其余的漏洞就只能交由網(wǎng)絡(luò)白帽子來(lái)進(jìn)行發(fā)現(xiàn)了。
安全眾測(cè)
眾測(cè)是最近幾年火起來(lái)的,在網(wǎng)上也有許多的眾測(cè)平臺(tái),在這些平臺(tái)上,企業(yè)可以花比較少的錢就能把Web安全做的上個(gè)大的檔次。由于人的精力和攻擊知識(shí)面不同,在企業(yè)內(nèi)部代碼審計(jì)和滲透測(cè)試無(wú)法再找到漏洞時(shí),拿去進(jìn)行一次眾測(cè),不出意外的話,一定可以收到不一樣的效果。正所謂“山外青山樓外樓”,白帽子發(fā)現(xiàn)的漏洞和其獨(dú)特的利用姿勢(shì)可以作為Web產(chǎn)品安全的完善方向。而對(duì)于比較小型的網(wǎng)站來(lái)說(shuō),眾測(cè)就顯得沒有什么必要了。
業(yè)務(wù)風(fēng)控
一個(gè)web系統(tǒng)的安全性如果做的很好了,常規(guī)漏洞一般是不會(huì)出現(xiàn)的,那么由于攻擊手法的不確定性,如果有新型的漏洞或者更高級(jí)的攻擊手法出現(xiàn),那么一個(gè)web系統(tǒng)將面臨高風(fēng)險(xiǎn)。所以企業(yè)需要自身有一套完善的風(fēng)控制度,一旦發(fā)生安全問(wèn)題,能夠在第一時(shí)間以最快速度解決問(wèn)題,降低損失。整個(gè)風(fēng)控的方面可以從:社會(huì)影響、內(nèi)部影響、經(jīng)濟(jì)損失等方面著手,建立起完善的災(zāi)備恢復(fù)體系。著重加強(qiáng)縱深防御,防止外部威脅擴(kuò)大到內(nèi)部。
Web安全建設(shè)總結(jié)
在Web安全中,攻擊利用的手法多變,它不像系統(tǒng)漏洞那樣,只要管控好端口,那么遠(yuǎn)程攻擊就會(huì)失效。Web雖然簡(jiǎn)單,但是漏洞的成因還是很復(fù)雜的,不是我們把可能存在的漏洞點(diǎn)堵上就能沒事的,反之,Web以一個(gè)小小的錯(cuò)誤都有可能會(huì)導(dǎo)致所有的防御失效。攻擊者攻擊Web程序只需要一個(gè)點(diǎn),而防御者卻需要防御的是整個(gè)面,在Web攻防中,一直以來(lái)Web的防御都是處于被動(dòng)的局面,企業(yè)想要改變這一局面,只能是任重而道遠(yuǎn)。
鑒于Web漏洞防御和漏洞成因的復(fù)雜性,Web安全建設(shè)不是本篇文章能夠說(shuō)的清的,也不是企業(yè)把握好文章中的幾個(gè)點(diǎn)就能把Web安全建設(shè)的好的,這樣的話只能說(shuō)筆者站著說(shuō)話不嫌腰疼了。Web安全的體系建設(shè)不僅僅是安全漏洞的管控,當(dāng)然還包括了其他的方方面面,攻擊者可能利用合法的網(wǎng)站功能來(lái)干一些不可描述的事情,如果Web安全的建設(shè)是很簡(jiǎn)單的話,就不會(huì)出現(xiàn)眾多安全專家都頭疼的事情了。
所以,具體的Web安全建設(shè)各個(gè)企業(yè)不同,所屬業(yè)務(wù)不同,自然所做的建設(shè)方案也會(huì)有所不同,能夠建設(shè)起來(lái)非常棒的Web安全體系,企業(yè)都是經(jīng)過(guò)了眾多實(shí)踐積累下來(lái)的經(jīng)驗(yàn)。
不過(guò),對(duì)于Web防御重要的幾個(gè)點(diǎn),倒還是比較通用的。
權(quán)限問(wèn)題
權(quán)限在Web安全中是很重要的,因?yàn)楣粽哂辛瞬倏卣军c(diǎn)的權(quán)限后,就會(huì)想方設(shè)法的拿到服務(wù)器的權(quán)限,進(jìn)而完成更深入的滲透。權(quán)限的管控在于當(dāng)前業(yè)務(wù)所屬類型決定,權(quán)限分制能夠讓權(quán)限得到更好的管控。
主動(dòng)防御問(wèn)題
主動(dòng)防御就是一些WAF等審計(jì)系統(tǒng)了,主動(dòng)防御不是萬(wàn)能的,使用不當(dāng)還可能會(huì)對(duì)自身業(yè)務(wù)產(chǎn)生影響,主動(dòng)防御會(huì)被繞過(guò)的幾率還是有的。
監(jiān)控問(wèn)題
監(jiān)控這一部分是比較難的點(diǎn),因?yàn)橛捎诠羰址ǖ牟淮_定性,監(jiān)控規(guī)則不夠靈活等方面,造成了監(jiān)控可能會(huì)有遺漏的地方。
代碼安全審計(jì)問(wèn)題
代碼的安全審計(jì)是Web安全之根本,如果沒有審計(jì)過(guò)的程序上線的話,可能存在的高風(fēng)險(xiǎn)就會(huì)比審計(jì)過(guò)的程序多,所以,代碼審計(jì)是Web程序正式發(fā)布版本前的必要工作。