Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

.NET Security Application/Web Development - Part III

290 views

Published on

Community sharing session for how to development secure web application.

Published in: Software
  • Be the first to comment

.NET Security Application/Web Development - Part III

  1. 1. .NET 安全應用程式開發 – 設定與調校 .NET Security Application Development – Part III Blackie Tsai blackie1019@gmail.com August 2018
  2. 2. 課程大綱 • IIS 與安全網站開發部屬設定 • MSSQL 安全設定
  3. 3. IIS 與安全網站開發部屬設 定
  4. 4. 預設的 ASP.NET 執行識別
  5. 5. • w3wp.exe 使用的帳號與IIS版本有關 • 在 Microsoft Windows 2000 和 Windows XP Professional 上 • 是本機 ASPNET 帳戶。 • 在 IIS6 或 IIS7 的傳統模式下 • 預設是 NETWORK SERVICE 帳戶。 • 在 IIS7 整合管線模式下 • 取得的身份識別預設是所屬之 IIS 應用程式集區的識別,所以不同的應用程式 集區會有不同的識別,如 IIS AppPoolDefaultAppPool . • IIS 7.5之後 • w3wp.exe(IIS的Process)預設都是使用IIS AppPools<App Pool Name>這個 虛擬使用者帳號來執行 • 若不喜歡預設的執行識別,也可以變更應用程式集區的執行識別 Windows Process 與 IIS AppPool 權限設定
  6. 6. ASP.NET 的執行識別
  7. 7. • AppPool 的識別設定為 ApplicationPoolIdentity • 執行識別是 IIS APPPOOL[AppPoolName • 管線模式下的預設值 • AppPool 的識別設定為 NetworkService NetworkService • 可以指定特定的帳戶。 • 【IIS APPPOOL[AppPoolName】這是一個虛擬帳戶,若要對特定資料夾存取, 要注意其存取權限, AppPool 的識別設定
  8. 8. 匿名存取、表單驗證與Windows驗證 • 匿名存取 • 網站資料夾的最少授權對象為NT AUTHORITYIUSR及IIS APPPOOLYourPoolName; • 預設使用匿名存取 • 表單驗證 • 同上,網站資料夾的最少授權對象為NT AUTHORITYIUSR及IIS APPPOOLYourPoolName; • 利用ASP.NET當中自訂的登入表單,搭配MemberShip資料庫驗證使用者身分。 • Windows 驗證 • 利用IIS驗證使用者的Windows帳戶,然後存取ASP.NET應用程式。 • 除IIS APPPOOLYourPoolName 外要再指定為Authenticated Users群組、 Domain Users群組,或是可登入使用者所屬的特定群組三者之一。 • Windows Server 2016 開始要自行安裝該模組才可啟用
  9. 9. • 網站需要寫入的情境 • 如果有特別指定應用程式集區,則網站資料夾的安全性要指定 IIS AppPool站台 的應用程式集區 可以寫入 • 如果用預設的 DefaultAppPool 則要指定 IIS_IUSRS 可以寫入 從使用需求了解應用程式所需要權限
  10. 10. • httpCookies • httpOnlyCookies = "true" • requireSSL = "true" • sessionState • cookieless="true" • regenerateExpiredSessionId="true" • compilation • debug = "false" • httpRuntime • enableHeaderChecking = "true" • enableVersionHeader= "false" • customErrors • mode = "On" 或是 "RemoteOnly“ • trace • enable = "false" 一般 Web Config 建議設定
  11. 11. • 一定要移除!! • Server - 表示當前的 web server 版本 • IIS 10 之後需要改用 URL Rewrite Module 移除 • X-Powered-By - 標示當前用的開發技術 "powered by ASP.NET.“ <customHeaders> <remove name="X-Powered-By" /> </customHeaders> • X-AspNet-Version - 標示當前的 ASP.NET 版本 <httpRuntime targetFramework="4.6.2" enableVersionHeader="false" /> • X-AspNetMvc-Version • 在 Global.asax 內移除 MvcHandler.DisableMvcResponseHeader = true; ASP.NET 需要特別移除的預設標頭
  12. 12. • 防禦 XSS (Cross Site Scripting): • Content-Security-Policy • Set-Cookie: HttpOnly • X-XSS-Protection • X-Download-Options • 防禦 Clickjacking: • X-Frame-Options • 強化 HTTPS 機制: • Set-Cookie: Secure • Strict-Transport-Security • 避免瀏覽器誤判文件形態: • X-Content-Type-Options • 保護網站資源別被任意存取: • Access-Control-Allow-Origin(此 header 若設定錯誤會適得其反!) • X-Permitted-Cross-Domain-Policies 其他常見標頭防護 https://securityheaders.com/
  13. 13. 1. 取得憑證。 2. 產生私密金鑰(安裝到 IIS 的憑證必須是 *.pfx 的檔案) • OpenSSL 來產生 *.pfx openssl pkcs12 -export -in certificate.crt -inkey private.key -certfile ca_bundle.crt -out sample.pfx 3. 憑證放入IIS並繫結網域 • 打開 IIS,選取 IIS 站台首頁。 • 找到伺服器憑證。 • 在右變的動作列點選匯入。 • 載入預先做好的 PFX 憑證檔。 • 輸入PFX 憑證檔的密碼後即可完成 • 綁定 HTTPS 的站台。 • 輸入網域名稱。 • 選擇 SSL 憑證。 幫 IIS 設定 SSL 連線
  14. 14. 預防DoS方法 • 設定 MaxRequestLength • Request filter 過濾特定請求 • URL Rewrite 過濾請求 • 動態 IP 限制
  15. 15. • MaxRequestLength 限制 • 選用偏小的 4MB 預設值。僅有上傳檔案需求時才手動調大 <httpRuntime maxRequestLength="4096" executionTimeout="300"/> 設定 MaxRequestLength 過濾惡意請求
  16. 16. • 可以在核心層次對所有流入IIS的HTTP資料流進行條件過濾篩選,支援下 列格式的篩選: • 副檔名:可針對特定的副檔名進行封鎖,不允許用戶端瀏覽。 • 規則:可設定針對特定副檔名進行要求的標頭過濾,若發現有符合拒絕的內容時, 即將要求擋下。 • l隱藏區段:可設定網站內的特定資料夾 (或特定的路徑字串),在發現要求中包含 了這些字串時,將要求擋下。 • URL:針對特定的URL序列進行封鎖,或是允許特定的URL進入。 • 指令動詞:針對要求所使用的動詞 (GET/POST或其他) 進行過濾。 • 查詢字串:針對查詢字串的內容進行過濾。 Request filter 過濾特定請求
  17. 17. • 要在 IIS 安裝 URL Rewrite 模組,可以從 IIS 官方下載安裝檔。 • 支援五種 URL Rewriting 的設定: • 空白規則:由管理人員自行設定 URL Rewriting 的規則,這個功能的彈性是最大 的。 • 易記 URL:由管理人員利用內建的 URL Rewriting 範本來建立親民的URL。 • 具重寫對應的規則:Rewrite Map 是一種規則定義的集合,這個功能可以直接利 用現有的 Rewrite Map 來設定重寫的規則。 • 要求封鎖:由管理人員設定 URL Rewriting 的規則,只要符合就擲回 HTTP 的錯 誤狀態碼。 • 強制小寫URL:在輸出時強制將URL轉換成小寫字元,以強化網站的SEO。 URL Rewrite 過濾惡意請求
  18. 18. Blacklist 與 Whitelist http://www.hanselman.com/blog/BlockingImageHotlinkingLeechingAndEvilSploggersWithIISUrlRewrite.aspx
  19. 19. 動態 IP 限制 欄位 說明 Deny IP address based on the number of concurrent requests Maximum number of concurrent requests 設定用戶端的最大並行要求,若超出時執 行Action Type所指定的動作。 Deny IP addresses based on number of requests over a period of time Maximum number of requests 設定要求允許進入IIS的最大數量。 Time period (in seconds) 設定要求最大數量的監測週期時間。 Deny for time period (in seconds) 設定超出要求最大數量時,封鎖要求的時 間週期。 Deny Action Action type 當發生必須封鎖的動作時,要執行的動作。
  20. 20. MSSQL 安全設定
  21. 21. PersistSecurityInfo • 可在SQL連線建立後,迅速清除記憶體中連接字串的密碼資訊 • SqlConnection.open() • PersistSecurityInfo預設是false • 連線資訊是在 SqlConnection 類別的 ConnectionString 屬性或 DbConnection 類別的 ConnectionString 屬性中 <connectionStrings> <add name="BooDB1" connectionString="Data Source=BooDB1; persist security info=True; initial catalog= Boo; user id=chris;password=bbbb1" providerName="System.Data.SqlClient" /> </connectionStrings>
  22. 22. MSSQL 連線透過 SSL 加密 1. 取得憑證並匯入主機(必須使用 makecert.exe 去建立) 2. 設定完需要重新啟動 MSSQL 主機 3. 連線會改為TLS 4. 客戶端Web.config連線字串加上 Encrypt=yes https://support.microsoft.com/en-us/help/316898/how-to-enable-ssl-encryption-for-an-instance-of-sql-server-by-using-mi

×