Solutions for weakness
WebConfig 設定¶
秉持著「最小化暴露」與「強化瀏覽器安全性行為」的精神,建立應用程式的第一道防線
隱藏伺服器資訊¶
<system.web>
<httpRuntime targetFramework="*" enableVersionHeader="false" />
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<remove name="X-AspNetMvc-Version" />
</customHeaders>
</httpProtocol>
<security>
<requestFiltering removeServerHeader="true" />
</security>
</system.webServer>
主動關閉目錄瀏覽¶
<configuration>
<directoryBrowse enable="false"/>
</configuration>
避免點擊劫持(Clickjacking)¶
關鍵字:X-Frame-Options header missing
確保網站的內容不會遭惡意嵌入到其他網站,有 DENY、SAMEORIGIN 和 ALLOW-FROM 三種值:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
</customHeaders>
</httpProtocol>
</system.webServer>
防護 XSS Attacks¶
關鍵字:X-Xss-Protection、Content-Security-Policy
現在大多使用 Content-Security-Policy 的設定限制資源來源以達到此效果
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Content-Security-Policy" value="default-src 'self' data:; img-src 'self' data: ; script-src 'self'" />
</customHeaders>
</httpProtocol>
</system.webServer>
Content Sniffing¶
防止瀏覽器嘗試猜測並執行非預期類型的檔案
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
</system.webServer>
來源政策¶
控制跳轉頁面時是否攜帶來源網址資訊,避免瀏覽紀錄被追蹤
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Referrer-Policy" value="No-referrer" />
</customHeaders>
</httpProtocol>
</system.webServer>
HTTP Strict Transport Security¶
關鍵字:HTTP Strict Transport Security (HSTS) not implemented
除了設定 Rewrite URL 和 Redirect URL 外,直接藉由 Http Header 的方式強制瀏覽器僅使用 HTTPS 與伺服器通訊
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000;includeSubDomains;preload" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
防止 Cookie 被竊取¶
關鍵字:Cookie without HttpOnly Flag Set、Cookies without Secure flag Set
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true"/>
</system.web>
套用政府組態基準(GCB)¶
前置作業¶
- 新建本機帳號並加入
Administrators群組(套用 GCB 會自動重新命名 Windows 的內建預設帳號) - 調整原先使用預設帳號設定的相關工作排程(可以改用剛才新建的本機帳號)
- 安裝
LocalGPO程式快速套用群組原則內容 - 視情況備份避免套用失敗
使用指令套用 GCB¶
- 以系統管理員身份執行命令提示字元
- 輸入語法切換至
LGPO目錄(自行替換成LGPO解壓縮後的完整目錄路徑)
cd C:\Users\localadmin\Desktop\LGPO
- 執行語法將
GPO檔案匯入到電腦(自行替換成GCB原則絕對路徑)
LGPO.exe /g C:\Users\localadmin\Desktop\GCB-WindowsServer2016-gposv1.2_1131213\WindowsServer2016CommonSettings\{518F52B5-10CC-4A73-BACA-B0181481EB47}
套用後遠端桌面、特權帳號管理與稽核平台(ANCHOR)出現無法登入的情況...¶
- 使用
Win+R輸入gpedit.msc - 修改以下規則:
拒絕從網路存取這台電腦(系統有 AD 網域 Administrators 權限帳號可忽略此條):調整電腦設定>Windows 設定>安全行設定>本機原則>使用者權限指派>拒絕從網路存取這台電腦的設定為Guests(預設權限為Guests、本機帳戶)拒絕透過遠端桌面服務登入:調整電腦設定>Windows 設定>安全行設定>本機原則>使用者權限指派>拒絕透過遠端桌面服務登入的設定為Guests(預設權限為Guests、本機帳戶)連線時永遠提示密碼(Windows Server 2012 系統可忽略此條):調整電腦設定>系統管理範本>Windows 元件>遠端桌面服務>遠端桌面工作階段主機>安全性>連線時永遠提示密碼的設定為已停用(預設原則為已啟用)需要對遠端(RDP)連線使用特定的安全層(系統有使用TLS1.0、TLS1.1可忽略此條):調整電腦設定>系統管理範本>Windows 元件>遠端桌面服務>遠端桌面工作階段主機>安全性>需要對遠端(RDP)連線使用特定的安全層的設定為已啟用、安全層:RDP(預設原則為已停用)
- 以系統管理員身份執行命令提示字元,並輸入以下語法強制更新原則:
gpupdate /force
- 重新啟動主機
解決 SWEET32 生日攻擊漏洞¶
如 CVE-2016-2183 中所述,作為 SSL/TLS 通訊協定一部分的 DES/3DES 密碼中的錯誤,會導致 OpenSSL 容許遠端攻擊者取得機密性資訊。透過擷取 SSL/TLS 伺服器與用戶端之間的大量已加密資料流量,可以進行中間人攻擊的遠端攻擊者,可能會惡意探索此漏洞,以回復純文字資料及取得機密性資訊。此漏洞稱為 SWEET32 生日攻擊。
可以透過使用 IISCrypto 禁用 Triple DES 168 修復此一弱點。