文件上傳漏洞防御
首先,上傳的文件能夠被Web容器解釋執(zhí)行。所以文件上傳后所在的目錄要是Web容器所覆蓋到的路徑。
其次,用戶能夠從Web上訪問這個文件。如果文件上傳了,但用戶無法通過Web訪問,或者無法得到Web容器解釋這個腳本,那么也不能稱之為漏洞。
最后,用戶上傳的文件若被安全檢查、格式化、圖片壓縮等功能改變了內(nèi)容,則也可能導(dǎo)致攻擊不成功。
防范文件上傳漏洞常見的幾種方法。
1、文件上傳的目錄設(shè)置為不可執(zhí)行
只要web容器無法解析該目錄下面的文件,即使攻擊者上傳了腳本文件,服務(wù)器本身也不會受到影響,因此這一點(diǎn)至關(guān)重要。
2、判斷文件類型
在判斷文件類型時,可以結(jié)合使用MIME Type、后綴檢查等方式。在文件類型檢查中,強(qiáng)烈推薦白名單方式,黑名單的方式已經(jīng)無數(shù)次被證明是不可靠的。此外,對于圖片的處理,可以使用壓縮函數(shù)或者resize函數(shù),在處理圖片的同時破壞圖片中可能包含的HTML代碼。
3、使用隨機(jī)數(shù)改寫文件名和文件路徑
文件上傳如果要執(zhí)行代碼,則需要用戶能夠訪問到這個文件。在某些環(huán)境中,用戶能上傳,但不能訪問。如果應(yīng)用了隨機(jī)數(shù)改寫了文件名和路徑,將極大地增加攻擊的成本。再來就是像shell.php.rar.rar和crossdomain.xml這種文件,都將因為重命名而無法攻擊。
4、單獨(dú)設(shè)置文件服務(wù)器的域名
由于瀏覽器同源策略的關(guān)系,一系列客戶端攻擊將失效,比如上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題將得到解決。
系統(tǒng)開發(fā)階段的防御
系統(tǒng)開發(fā)人員應(yīng)有較強(qiáng)的安全意識,尤其是采用PHP語言開發(fā)系統(tǒng)。在系統(tǒng)開發(fā)階段應(yīng)充分考慮系統(tǒng)的安全性。對文件上傳漏洞來說,最好能在客戶端和服務(wù)器端對用戶上傳的文件名和文件路徑等項目分別進(jìn)行嚴(yán)格的檢查?蛻舳说臋z查雖然對技術(shù)較好的攻擊者來說可以借助工具繞過,但是這也可以阻擋一些基本的試探。服務(wù)器端的檢查最好使用白名單過濾的方法,這樣能防止大小寫等方式的繞過,同時還需對%00截斷符進(jìn)行檢測,對HTTP包頭的content-type也和上傳文件的大小也需要進(jìn)行檢查。
系統(tǒng)運(yùn)行階段的防御
系統(tǒng)上線后運(yùn)維人員應(yīng)有較強(qiáng)的安全意思,積極使用多個安全檢測工具對系統(tǒng)進(jìn)行安全掃描,及時發(fā)現(xiàn)潛在漏洞并修復(fù)。定時查看系統(tǒng)日志,web服務(wù)器日志以發(fā)現(xiàn)入侵痕跡。定時關(guān)注系統(tǒng)所使用到的第三方插件的更新情況,如有新版本發(fā)布建議及時更新,如果第三方插件被爆有安全漏洞更應(yīng)立即進(jìn)行修補(bǔ)。對于整個網(wǎng)站都是使用的開源代碼或者使用網(wǎng)上的框架搭建的網(wǎng)站來說,尤其要注意漏洞的自查和軟件版本及補(bǔ)丁的更新,上傳功能非必選可以直接刪除。除對系統(tǒng)自生的維護(hù)外,服務(wù)器應(yīng)進(jìn)行合理配置,非必選一般的目錄都應(yīng)去掉執(zhí)行權(quán)限,上傳目錄可配置為只讀。
安全設(shè)備的防御
文件上傳攻擊的本質(zhì)就是將惡意文件或者腳本上傳到服務(wù)器,專業(yè)的安全設(shè)備防御此類漏洞主要是通過對漏洞的上傳利用行為和惡意文件的上傳過程進(jìn)行檢測。惡意文件千變?nèi)f化,隱藏手法也不斷推陳出新,對普通的系統(tǒng)管理員來說可以通過部署安全設(shè)備來幫助防御。目前華三通信公司發(fā)布的SecPath IPS系列產(chǎn)品經(jīng)過長期的積累,不但可以基于行為對網(wǎng)絡(luò)中大量文件上傳漏洞的利用進(jìn)行檢測,同時還能基于內(nèi)容對惡意文件進(jìn)行識別。