文/鄭海山
廈門大學(xué)重大活動(dòng)時(shí)期網(wǎng)站安全防護(hù)手冊(cè)
文/鄭海山
在大型活動(dòng)保障期間,為了提高網(wǎng)站的安全性,較少運(yùn)維壓力,信息部門會(huì)選擇盡量關(guān)閉一些存在安全隱患的網(wǎng)站,縮小需要運(yùn)維的機(jī)器的數(shù)量,把保障力量集中于最重要的部分系統(tǒng)和服務(wù)器上。門戶網(wǎng)站作為學(xué)校的第一入口,往往是攻擊者的首要目標(biāo)。如何提高門戶網(wǎng)站的安全性成為大型活動(dòng)保障的重要工作。
將整個(gè)網(wǎng)站靜態(tài)化,可以規(guī)避服務(wù)端動(dòng)態(tài)腳本語(yǔ)言帶來(lái)的諸如SQL注入、權(quán)限繞過(guò)、XSS、CSRF等安全風(fēng)險(xiǎn),然而靜態(tài)化并不能完全規(guī)避所有風(fēng)險(xiǎn)。通常意義的靜態(tài)化方法指的是純HTML和圖片、JavaScript、CSS代碼,而前端JavaScript還是有動(dòng)態(tài)執(zhí)行的代碼。一般現(xiàn)在的網(wǎng)站群也會(huì)生成靜態(tài)網(wǎng)頁(yè),網(wǎng)站群系統(tǒng)生成的靜態(tài)網(wǎng)頁(yè)與產(chǎn)品高度耦合,中間件不能隨意變更,操作系統(tǒng)補(bǔ)丁如果更新到最新可能會(huì)對(duì)網(wǎng)站功能造成影響。如果能搭建一個(gè)純靜態(tài)的網(wǎng)站,安全性必將更高。本文將介紹如何打造高安全性的靜態(tài)網(wǎng)站的方法和靜態(tài)網(wǎng)站面臨的安全問(wèn)題和防護(hù)手段。
一個(gè)網(wǎng)站頁(yè)面,從服務(wù)器到瀏覽者之間會(huì)經(jīng)過(guò)非常多步驟,中間任何一個(gè)環(huán)節(jié)都有可能被攻擊。防護(hù)應(yīng)當(dāng)考慮所有環(huán)節(jié),包括引入的安全設(shè)備是否同時(shí)也會(huì)引入安全隱患等。一般來(lái)說(shuō),只要做好靜態(tài)化,基本上不會(huì)被普通的攻擊者攻擊,本文提到的一些防護(hù)措施存在重復(fù)和無(wú)效的可能,然而基于縱深防御的概念,通過(guò)多層重疊的安全防護(hù)達(dá)到冗余的結(jié)果,即使某一個(gè)防線由于技術(shù)失誤造成失效,也可以通過(guò)其他防御彌補(bǔ)。
如果網(wǎng)站本身是由網(wǎng)站群系統(tǒng)生成的靜態(tài)化頁(yè)面,則可以直接在網(wǎng)站群生成的靜態(tài)化頁(yè)面服務(wù)器上做好安全防護(hù)。通過(guò)URL重寫技術(shù)的偽靜態(tài)與動(dòng)態(tài)頁(yè)面的安全性一樣,這些站點(diǎn)可以使用wget開(kāi)源軟件一條命令鏡像整個(gè)站點(diǎn)。對(duì)于靜態(tài)頁(yè)面還必須做以下內(nèi)容方面的檢查:
1.如果網(wǎng)頁(yè)文本本身帶有惡意文本,靜態(tài)化會(huì)將其原封不動(dòng)的鏡像過(guò)來(lái)??梢酝ㄟ^(guò)漏洞掃描工具掃描關(guān)鍵字和隱藏文本來(lái)檢查。
2.JavaScript文件是否官方下載,是否已經(jīng)被植入了惡意代碼。可通過(guò)重新在官方下載或者使用程序MD5檢查所有的第三方JavaScript代碼。
3.是否引用了其他站點(diǎn)的圖片或JavaScript。如果其他站點(diǎn)圖片內(nèi)容被篡改,會(huì)導(dǎo)致網(wǎng)站也被篡改。檢查圖片是否帶有隱藏信息。
4.是否引用了IFrame嵌入第三方網(wǎng)站內(nèi)容。
網(wǎng)站應(yīng)當(dāng)對(duì)靜態(tài)化友好,為了讓鏡像網(wǎng)站可以在本地或者服務(wù)器上直接瀏覽,wget會(huì)更改頁(yè)面的HTML后綴名,可能導(dǎo)致JavaScript腳本運(yùn)行不正常。wget也會(huì)更改URL的相對(duì)路徑和絕對(duì)路徑。所以做完靜態(tài)化后應(yīng)當(dāng)多次檢查,如果有需要,應(yīng)當(dāng)調(diào)整原始網(wǎng)站模板,或者在wget后使用腳本語(yǔ)言改寫內(nèi)容,使得靜態(tài)化可以持續(xù)自動(dòng)化執(zhí)行,使得動(dòng)態(tài)網(wǎng)站的更改可以更快反應(yīng)到靜態(tài)網(wǎng)站上。
一旦做好了相對(duì)安全的靜態(tài)網(wǎng)站后,針對(duì)可能的攻擊可以再實(shí)現(xiàn)以下縱深防御。
1.網(wǎng)絡(luò)層面
網(wǎng)站服務(wù)器網(wǎng)絡(luò)層面的攻擊包括可能DNS解析被修改導(dǎo)致瀏覽者訪問(wèn)了攻擊者偽造的網(wǎng)站,可能IP被同VLAN攻擊者控制的服務(wù)器搶占,或者是同VLAN被攻擊者控制的服務(wù)器發(fā)動(dòng)ARP攻擊導(dǎo)致網(wǎng)頁(yè)內(nèi)被嵌入其他內(nèi)容。對(duì)于網(wǎng)絡(luò)層面的防護(hù),應(yīng)當(dāng)加強(qiáng)DNS服務(wù)器的管理,保證DNS服務(wù)器的安全性,同時(shí)盡量減少同VLAN內(nèi)服務(wù)器的數(shù)量,在服務(wù)器和交換機(jī)上綁定IP和MAC信息,同時(shí)使用HTTPS傳輸減少被篡改的風(fēng)險(xiǎn)。
2.操作系統(tǒng)和HTTP服務(wù)器層面
操作系統(tǒng)應(yīng)當(dāng)使用最新的版本,最小化安裝,所有安全補(bǔ)丁更新到最新。啟用嚴(yán)格的防火墻。可以在網(wǎng)絡(luò)層面限制服務(wù)器主動(dòng)對(duì)外發(fā)起連接,定期安全更新可采用HTTP代理更新。HTTP服務(wù)器應(yīng)當(dāng)最小化安裝,去除不需要的模塊,隱藏HTTP服務(wù)器版本。
對(duì)于服務(wù)器的其他防護(hù),以Linux為例,安裝多個(gè)開(kāi)源安全軟件??稍诜?wù)器安裝Lynis、OpenScap等進(jìn)行配置核查,使用nmap進(jìn)行掃描,安裝ClamAV定期檢查病毒,安裝chkrookit或RootKit Hunter定期查后門。
對(duì)于可能的DDoS攻擊和慢連接攻擊,應(yīng)當(dāng)臨時(shí)性調(diào)高靜態(tài)服務(wù)器的CPU和內(nèi)存資源,調(diào)大HTTP服務(wù)器的連接數(shù),減小超時(shí)時(shí)間,做好緩存,使用Fail2ban、mod_evasive、mod_reqtimeout、mod_qos等模塊做好資源限制。
對(duì)于掃描攻擊的防御,可以安裝OSSEC、mod_security等檢測(cè)攻擊。
3.文件目錄
通常的防篡改軟件能防止頁(yè)面所在的目錄不被篡改,但是無(wú)法預(yù)防通過(guò)修改HTTP服務(wù)器配置文件指向其他目錄或者直接寫Python腳本用HTTP服務(wù)的情況,所以以上的防護(hù)應(yīng)當(dāng)交由操作系統(tǒng)來(lái)執(zhí)行。對(duì)于文件目錄的防篡改,可以安裝開(kāi)源OSSEC、Tripwire等軟件檢查篡改情況,同時(shí)可以設(shè)置wwwroot只讀,不可執(zhí)行,甚至可以為wwwroot目錄單獨(dú)分區(qū),在掛載時(shí)在/etc/fstab內(nèi)設(shè)置只讀,或者使用chattr +i設(shè)置目錄只讀。
4.安全設(shè)備
即使服務(wù)器已經(jīng)做好了安全防護(hù),也應(yīng)當(dāng)在網(wǎng)絡(luò)層面增加WAF、IPS、防火墻、防DDoS等安全設(shè)備增加安全性。應(yīng)當(dāng)使用漏洞掃描設(shè)備對(duì)服務(wù)器和網(wǎng)站內(nèi)容進(jìn)行漏洞掃描。需要注意的是,由于WAF安全設(shè)備需要接管客戶端和服務(wù)器之間的通信并進(jìn)行阻斷等操作,應(yīng)當(dāng)保證WAF服務(wù)器的安全性,注意WAF緩存可能帶來(lái)的影響。
5.防篡改云服務(wù)
購(gòu)買第三方的遠(yuǎn)程頁(yè)面防篡改提醒服務(wù)。防篡改提醒服務(wù)提供商會(huì)從世界各地訪問(wèn)被監(jiān)控網(wǎng)站,發(fā)現(xiàn)篡改行為會(huì)通過(guò)電話、短信、郵件等多渠道通知。需要注意的是防篡改必須檢查所有頁(yè)面的所有內(nèi)容(JavaScript、圖片、CSS)的修改,并且修改比例應(yīng)當(dāng)為0%。也可自行在互聯(lián)網(wǎng)云平臺(tái)搭建防篡改檢查程序,通過(guò)定期爬蟲(chóng)下載所有內(nèi)容進(jìn)行MD5比對(duì)和修改通知。
6.管理人員
相關(guān)的管理人員應(yīng)當(dāng)做好安全培訓(xùn),保證管理終端的安全性,不使用盜版軟件,不安裝不必要的瀏覽器插件,啟用強(qiáng)密碼規(guī)則,管理客戶端專用,關(guān)閉外網(wǎng)訪問(wèn),對(duì)服務(wù)器的管理采用堡壘機(jī)。
7.演練、應(yīng)急預(yù)案和巡檢
大型活動(dòng)保障期間應(yīng)當(dāng)定期巡檢,安排人員24小時(shí)值班,并做好事前演練和應(yīng)急預(yù)案。巡檢內(nèi)容包括以上所有做過(guò)的安全防護(hù)軟件運(yùn)行情況,系統(tǒng)更新?tīng)顟B(tài)。檢查各個(gè)軟件的運(yùn)行狀態(tài)和結(jié)果分析,檢查系統(tǒng)賬戶、性能、進(jìn)程、端口、啟動(dòng)項(xiàng)、病毒、后門、漏洞掃描結(jié)果、WAF和IPS攔截日志。查看日志傳輸是否完整,備份是否正常查看,各個(gè)服務(wù)器的通常運(yùn)行狀況。檢查所有軟件和安全設(shè)備的軟硬件工作狀態(tài),配置更改情況。對(duì)攻擊IP進(jìn)行封禁等。并做好配置變更和巡檢報(bào)告。
1.使用Ansible等自動(dòng)化配置工具
為確保操作系統(tǒng)、HTTP服務(wù)器的安全配置靈活,方便檢查配置和審計(jì),方便系統(tǒng)重建,減少人為失誤和變更工作量。應(yīng)當(dāng)使用Ansible、Puppet等自動(dòng)化配置工具自動(dòng)配置整個(gè)服務(wù)器環(huán)境。同時(shí)也可以使用Ansible等腳本執(zhí)行自動(dòng)化巡檢任務(wù)。
2.一鍵斷網(wǎng)
為了減少被攻擊后傳播所造成的不良影響,應(yīng)當(dāng)有一鍵斷網(wǎng)措施。一鍵斷網(wǎng)可以從傳輸?shù)母鱾€(gè)層面上執(zhí)行。比如在操作系統(tǒng)增加防火墻、關(guān)機(jī)、在Web服務(wù)器設(shè)定訪問(wèn)某個(gè)特定頁(yè)面自動(dòng)關(guān)閉服務(wù)器;虛擬機(jī)關(guān)閉網(wǎng)絡(luò);實(shí)體機(jī)拔掉網(wǎng)線;網(wǎng)關(guān)使用ACL控制、網(wǎng)關(guān)關(guān)機(jī);網(wǎng)絡(luò)層面WAF、IPS、防火墻攔截。在出現(xiàn)疑似攻擊后應(yīng)當(dāng)盡快將服務(wù)器下線,檢查無(wú)誤后方才上線。
3.應(yīng)對(duì)虛假攻擊
由于網(wǎng)絡(luò)傳輸?shù)逆溌愤^(guò)長(zhǎng),各個(gè)環(huán)節(jié)都可能造成網(wǎng)站疑似被攻擊,比如云DNS投毒、CDN投毒、客戶端本身ARP攻擊、客戶端接入商隨意插入廣告甚至被人截圖后PS修改等。如發(fā)現(xiàn)應(yīng)當(dāng)及時(shí)下線,并執(zhí)行檢查,如果確定非自身因素則應(yīng)當(dāng)及時(shí)上線,并在頁(yè)面上顯著位置公布以消除不良影響。
4.攻擊溯源
安全措施無(wú)法做到百分百安全,在攻擊發(fā)生后,為了為下一次工作積累經(jīng)驗(yàn),同時(shí)收集犯罪證據(jù),應(yīng)當(dāng)做好攻擊溯源準(zhǔn)備。應(yīng)當(dāng)保存好所有相關(guān)日志。比如網(wǎng)絡(luò)設(shè)備日志、安全設(shè)備日志、主機(jī)日志等。所有的日志應(yīng)當(dāng)進(jìn)入專門的遠(yuǎn)程日志服務(wù)器。服務(wù)器做到分鐘級(jí)別的備份以防止攻擊者擦除攻擊痕跡。
5.網(wǎng)站關(guān)閉的通知頁(yè)面
對(duì)于一些存在安全隱患而被暫時(shí)性下線的網(wǎng)站,可使用應(yīng)用交付設(shè)備或者把DNS導(dǎo)入到一個(gè)特定的通知頁(yè)面,以減少突然給對(duì)網(wǎng)站管理員和瀏覽者帶來(lái)的不便。同時(shí)為避免臨時(shí)性替換網(wǎng)站頁(yè)面內(nèi)容導(dǎo)致搜索引擎刪除原有網(wǎng)站信息,通知頁(yè)面應(yīng)當(dāng)返回503 HTTP狀態(tài)碼,也可根據(jù)恢復(fù)時(shí)間指定Retry-After返回值。
通過(guò)以上的安全防護(hù),可以大大提高門戶網(wǎng)站的安全性,減少在大型活動(dòng)保障期間的運(yùn)維壓力。以上措施也可實(shí)施于動(dòng)態(tài)網(wǎng)站,然而動(dòng)態(tài)網(wǎng)站還需要其他包括代碼審計(jì)等安全措施。由于存在管理人員和0day漏洞等的風(fēng)險(xiǎn),所有的安全措施無(wú)法做到百分百安全,只能是提高攻擊者攻擊的難度,同時(shí),網(wǎng)站還應(yīng)根據(jù)政策法規(guī)要求做好備案和信息系統(tǒng)安全等級(jí)保護(hù)等工作。
(責(zé)編:王左利)
為廈門大學(xué)信息與網(wǎng)絡(luò)中心)