跳轉到

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

確保網站的內容不會遭惡意嵌入到其他網站,有 DENYSAMEORIGINALLOW-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 URLRedirect 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 without HttpOnly Flag Set、Cookies without Secure flag Set

<system.web>
    <httpCookies httpOnlyCookies="true" requireSSL="true"/>
</system.web>

套用政府組態基準(GCB)

前置作業

  1. 新建本機帳號並加入 Administrators 群組(套用 GCB 會自動重新命名 Windows 的內建預設帳號)
  2. 調整原先使用預設帳號設定的相關工作排程(可以改用剛才新建的本機帳號)
  3. 安裝 LocalGPO 程式快速套用群組原則內容
  4. 視情況備份避免套用失敗

使用指令套用 GCB

  1. 以系統管理員身份執行命令提示字元
  2. 輸入語法切換至 LGPO 目錄(自行替換成 LGPO 解壓縮後的完整目錄路徑)
cd C:\Users\localadmin\Desktop\LGPO
  1. 執行語法將 GPO 檔案匯入到電腦(自行替換成 GCB 原則絕對路徑)
LGPO.exe /g C:\Users\localadmin\Desktop\GCB-WindowsServer2016-gposv1.2_1131213\WindowsServer2016CommonSettings\{518F52B5-10CC-4A73-BACA-B0181481EB47}

套用後遠端桌面、特權帳號管理與稽核平台(ANCHOR)出現無法登入的情況...

  1. 使用 Win + R 輸入 gpedit.msc
  2. 修改以下規則:
    • 拒絕從網路存取這台電腦(系統有 AD 網域 Administrators 權限帳號可忽略此條):調整 電腦設定 > Windows 設定 > 安全行設定 > 本機原則 > 使用者權限指派 > 拒絕從網路存取這台電腦 的設定為 Guests(預設權限為 Guests、本機帳戶)
    • 拒絕透過遠端桌面服務登入:調整 電腦設定 > Windows 設定 > 安全行設定 > 本機原則 > 使用者權限指派 > 拒絕透過遠端桌面服務登入 的設定為 Guests(預設權限為 Guests、本機帳戶)
    • 連線時永遠提示密碼(Windows Server 2012 系統可忽略此條):調整 電腦設定 > 系統管理範本 > Windows 元件 > 遠端桌面服務 > 遠端桌面工作階段主機 > 安全性> 連線時永遠提示密碼 的設定為 已停用(預設原則為 已啟用
    • 需要對遠端(RDP)連線使用特定的安全層(系統有使用 TLS1.0TLS1.1 可忽略此條):調整 電腦設定 > 系統管理範本 > Windows 元件 > 遠端桌面服務 > 遠端桌面工作階段主機 > 安全性> 需要對遠端(RDP)連線使用特定的安全層 的設定為 已啟用、安全層:RDP(預設原則為 已停用
  3. 以系統管理員身份執行命令提示字元,並輸入以下語法強制更新原則:
gpupdate /force
  1. 重新啟動主機

解決 SWEET32 生日攻擊漏洞

CVE-2016-2183 中所述,作為 SSL/TLS 通訊協定一部分的 DES/3DES 密碼中的錯誤,會導致 OpenSSL 容許遠端攻擊者取得機密性資訊。透過擷取 SSL/TLS 伺服器與用戶端之間的大量已加密資料流量,可以進行中間人攻擊的遠端攻擊者,可能會惡意探索此漏洞,以回復純文字資料及取得機密性資訊。此漏洞稱為 SWEET32 生日攻擊。

可以透過使用 IISCrypto 禁用 Triple DES 168 修復此一弱點。