ASP.NET 應用預設以高權限進程身分運行,一旦遭遇 SQL 注入、檔案上傳、路徑遍歷等漏洞,攻擊者可輕易取得伺服器控制權。透過配置 **身分模擬** 與 **信任層級** 降低進程權限,構建纵深防禦。
編輯 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config:
<location allowOverride="false">
<identity impersonate="true" userName="" password="" />
</location>
allowOverride="false":防止子應用程式覆蓋此設定。impersonate="true":啟用身分模擬,使用匿名用戶 (IUSR) 或驗證後的 Windows 身分執行代碼,而非 ASP.NET 進程帳號 (ASPNET/NETWORK SERVICE)。編輯 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config (機器層級) 或應用程式根目錄 web.config:
<identity impersonate="true" />
若原檔案無此節點,需在 <system.web> 區塊內新增。
<location allowOverride="false">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Medium" policyFile="web_mediumtrust.config" />
<trustLevel name="Low" policyFile="web_lowtrust.config" />
<trustLevel name="Minimal" policyFile="web_minimaltrust.config" />
</securityPolicy>
<trust level="Medium" originUrl="" /> <!-- 建議生產環境設 Medium 或 High -->
<identity impersonate="true" /> <!-- 身分模擬 -->
</system.web>
</location>
trust level="Medium":限制檔案 I/O、註冊表、Socket、反射、非受控代碼等高危操作,大幅降低攻擊面。originUrl="":限制 WebRequest 只能存取同源網址。allowOverride="false":子應用無法降低信任層級 (只能提高),防止惡意覆蓋。| 層級 | 政策檔案 | 主要限制 | 適用場景 |
|---|---|---|---|
| Full | internal | 無限制 (預設) | 受信任內部應用、需完全信任的舊代碼 |
| High | web_hightrust.config | 禁止非受控代碼、COM Interop、事件日誌寫入 | 較可信應用 |
| Medium | web_mediumtrust.config | 限制檔案存取僅限應用目錄、禁止 Socket/Registry/反射/ODBC/OleDb | 生產環境推薦 |
| Low | web_lowtrust.config | 僅允許讀取應用目錄、禁止寫入、無資料庫存取 | 極度受限環境 |
| Minimal | web_minimaltrust.config | 僅允許執行代碼、無任何 I/O | 沙箱/插件系統 |
SqlClient,需在 web_mediumtrust.config 加入 <SecurityClass Name="SqlClientPermission" .../> 與 <IPermission class="SqlClientPermission" version="1" Unrestricted="true" />。FileIOPermission 設定。對於仍在運行 ASP.NET Framework 的舊系統,配置 identity impersonate="true" + trust level="Medium" 是低成本、高效果的緩解措施,配合 WAF 與定期滲透測試,可顯著降低跨站攻擊風險。