The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

IIS 執行的身份識別與 Windows 權限控管不是你想的那樣

一般人都以為 Windows Server 預設的目錄權限很安全,但事實上一點也不,因為 Windows Server 2003 是一個多用途(Multi-function)的伺服器作業系統,並不是單單為了 Web 應用程式所設計的,所以系統管理員如果對於 IIS 的執行權限與 Windows 的權限控管不夠瞭解,就很有可能面臨極大的風險。

我們都知道 IIS 中有幾個內建的身份識別擁有不同的意義與使用情境,詳細可參考 IIS and Built-in Accounts (IIS 6.0) 說明,以下為部分摘要:

  • IUSR_MachineName
    • 匿名存取時 IIS 所使用的身份識別
    • IIS 讀取任何靜態檔案時,預設就是以此身份權限進行讀取
    • IIS 內某些 ISAPI 程序預設也是以此身份執行
  • NETWORK SERVICE
    • 負責啟動 IIS 工作程序 (w3wp.exe)
    • ASP.NET 執行時預設就是以這個身份執行
    • FastCGI 執行時預設也是以這個身份執行

首先,先介紹一個常見的 Users 群組,裡面預設包含了 NT AUTHORITY\Authenticated Users 群組,所以只要所有被認證成功的使用者都屬於 Users 群組的成員,當然也包括 NETWORK SERVICEIUSR_MachineName 這些特殊用途的系統群組與使用者。

Users 群組

再來,你看看 D:\ 目錄的預設權限定義:

新增磁碟區 (D:) 內容 

感覺上 Users 群組的權限只有讀取執行而已,但是若你點選「進階」進入查看,事實上 User 群組的權限不止如此,他還可以「建立資料夾」、「附加資料」、「建立檔案」、「寫入資料」等權限。

 新增磁碟區 (D:) 的進階安全性設定

預設的 C:\Inetpub\wwwroot 目錄是安全的,不過如果你將網站安裝在非預設網站目錄下(例如: D:\Website )且目錄權限又沒有特別設定過的話,該目錄就會直接繼承 D:\ 目錄下所定義的權限,也就代表著不管你是用 NETWORK SERVICEIUSR_MachineName 身份執行任何程式(PHP, ASP, ASP.NET, ISAPI, CGI, ...),其實都可以任意「建立資料夾」、「附加資料」、「建立檔案」、「寫入資料」到你的網站目錄內 ( 也包括以外的目錄 )。

可想見網站目錄若套用預設權限的設定有多危險,風險指數極高!

若要安全的設定網站,我個人有以下建議:

  • 將主機單純用作 Web 用途,不要同時處理太多不同的任務
  • C:\D:\ 預設的 Users 與 Everyone 權限全部移除!
  • 網站目錄必須明確拒絕匿名登入帳號的寫入權限,包括 NETWORK SERVICEIUSR_MachineName 兩個預設的群組。
  • 僅開放真的需要透過 Web 上傳或寫入的目錄有「寫入」權限!
  • 如果上傳或寫入的檔案不需要直接透過 Web 存取,建議不要將目錄放在 Web 可存取的目錄下!
  • 若需透過 Web 介面上傳檔案至網站,建議限制上傳檔案的「副檔名」(需明確表列)
  • 透過 Web 介面上傳檔案至網站目錄,如果不需要執行權限者,建議直接將該目錄的執行權限設定成「無」,避免駭客上傳可執行的指令檔 (如: *.asp , *.php , ... ) 把你的網站當成跳版!
    如下圖示:
    站台內容 :: 接將該目錄的執行權限設定成「無」,避免駭客上傳可執行的指令檔 (如: *.asp , *.php , ... ) 把你的網站當成跳版 
  • 完整看過一遍 Checklist: Securing Your Web Server 檢核清單,並落實檢核。

相關連結