看到一篇國外MVP Troy Hunt的文章: 67% of ASP.NET websites have serious configuration related security vulnerabilities,大意是依據他搜集到的統計數字,約67%的ASP.NET網站因配置不當,存在安全風險。
Troy Hunt文章的分析資料來自他所開發的一個簡易網站掃瞄服務--ASafaWeb, Automated Security Analyser for ASP.NET Websites。使用者只要提供Internet上公開ASP.NET網站的URL,ASafaWeb會發出幾個Request,藉此檢查網站是否存在一些常見的安全性漏洞。
由今年1至3月掃描過的網站記錄,排除掉ASafaWeb測試網站及非ASP.NET網站後共有7,184份檢測結果,Hunt做出簡單的統計。雖然我覺得這份結果由於是使用者主動提供網站進行檢測,甚至無法排除使用者會刻意製造問題情境考驗ASafaWeb的檢查效果,因此資料高低未必能精確反應實際情況,但還是很有參考價值,值得我們關心一下ASP.NET有哪些常見的配置漏洞,確定自己都瞭解並檢查手邊網站有無類似狀況,絕對是件好事。
以下是Hunt列出的常見ASP.NET配置安全性漏洞:
- 未隱藏錯誤訊息
開發人員常會將<customErrors mode="Off" />方便排錯,但正式上線時卻忘了移除,導致一旦程式出錯,相關程式碼細節甚至程式片段就赤裸裸地展示出來。駭客可能由其中找到相關的檔案位置、資料庫資訊、組件版本... 等資訊,提供入侵的指引。
- 關閉Request Validation
依Hunt的統計,近30%的網站豪邁地關閉了全站的Request驗證。若真有需要,針對頁面關閉就好,至少傷害面變小,但如果心有餘力,避開此限制保持後門緊閉還是上策。
- 未更新Windows/IIS
去年底被揭露的HTTP POST Hash DoS漏洞,攻擊者用簡單的Request就能讓網站忙到死去活來,終至服務癱瘓。微軟已在2月發布補定,但是似乎還有50%的網站未完成更新。
- ELMAH存取未設限
關於ELMAH存取設定的風險之前也有文章 《大叔手記(18):利用Elmah和Google體驗一把入侵的快感》提過,稍有不慎,程式裡的秘密就會大放送,十分危險,甚至駭客還可能藉此偽造ASP.NET Session冒充身份,挺恐怖的。
- 未關閉Trace
雖然比例不高,但通過trace.axd駭客還是能搜集到很多重要情報,上線到正式環境時記得關閉。