Vulnerability assessment & fix

Introduction

有一部分解決網路安全的做法很簡單,只要設定web server多一些header就可以了,說明可以參考這裡,設定方法可以參考這裡

Methods of Assessment

目前使用起來,有兩個站可以針對header掃瞄

設定完全之後,結果應該要類似下圖:

Result of securityheaders.io

Result of SSL LABS

Apache Module mod_headers

由於要更改header,因此需要額外啟動這個module,細節可以參考官方文件

啟用的步驟寫在Dockerfile中,修改方法請參考之前的文件

Security Headers

增加的設定如下

<IfModule mod_headers.c>
    Header set X-XSS-Protection "1; mode=block"
    Header set X-Frame-Options SAMEORIGIN env=!REDIRECT_IS_embed
    Header set X-Content-Type-Options nosniff
    Header set Content-Security-Policy "default-src 'self' https://*.amazonaws.com; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.mouseflow.com"
    Header set Strict-Transport-Security "max-age=15552000"
    Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
    Header unset "X-Powered-By"
    Header set Referrer-Policy "no-referrer"
    Header set Public-Key-Pins "pin-sha256=\"8hqbhsMMFPaPA8t81pxqFer9+neHBcQvO7+TAKjWkb0=\"; pin-sha256=\"JSMzqOOrtyOT1kmau6zKhgT676hGgczD5VMdRMyJZFA=\"; max-age=2592000; includeSubDomains"
</IfModule>

HTTP Public Key Pinning

個人覺得比較複雜的是修改Public-Key-Pins,這個header的內容是網站安全憑證的Subject Public Key Information (SPKI) fingerprint,個人覺得MDN的說明寫得比較清楚

在省錢的原則下,我們通常都會用免費的安全憑證,例如ACM,因此可以參考下圖的點法,把中繼憑證匯出

Result of SSL LABS

另外所謂的backup key,指的是透過另一家簽發憑證的公司的中繼憑證,我們不一定有申請第二家憑證,所以省錢省事的方法,就是直接隨便找一個合法的中繼憑證,算出其fingerprint即可,以下是兩個憑證的算法:

$ cat Amazon.pem | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
writing RSA key
JSMzqOOrtyOT1kmau6zKhgT676hGgczD5VMdRMyJZFA=

$ cat TWCASecureSSLCertificationAuthority.cer | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
writing RSA key
8hqbhsMMFPaPA8t81pxqFer9+neHBcQvO7+TAKjWkb0=
comments powered by Disqus