讓你的 SSL 更安全 – 移除弱 SSL 加密方式 (Cipher)

SSL安全性如何強化,含括了當前流行的各種伺服器的設定方式,包括IIS, Apache, F5 Load balancer, A10 等

SSL 通訊協定下,一開始 Client 與 Server 進行 Handshake 時,彼此會「溝通」有哪些加密方式是彼此都支援的,然後約定好稍後傳輸資料的加密方式。會使用哪一種加密方式和我們買的 SSL 憑證的價格並沒有絕對直接的關係,既使你買的是一年價值 TWD 35,000 的 VeriSign Secure Site with EV,也可能因為設定的緣故而導致於只用到 40 bits 的加密方式。

由於硬體的處理能力逐年的提升,舊加密方式的安全性會相對的變得容易破解,所以新的及更高規格的加密方式就不斷的被開發出來。但是一來是因為新的加密方式推出之後不一定所有的廠商都支援,另外有些舊規格的硬體也許無法負擔較高規格加密方式的運算需求,既使是沒有以上兩種限制,但光從實務面上,我們也很難要求世界上所有 Client 與 Server 都可以隨時更新到最新的版本。所以一般來說,就只會建議禁用那些特別弱或已經證實可被破解的加密方式。而一個好的系統管理員,或有在重視網站安全性的公司,就會定期去檢驗所管理網站上的弱安全性加密方式是否已經被禁用了,畢竟一旦當客戶上了我們的網站,若因為 SSL 加密方式太弱而讓客戶的機密資訊外洩,損失的也是我們自己。不過很可惜的是,台灣有許多的網站並不太注重這件事情,我不太清楚原因為何?不過老實說,就算是我們用了這些所謂的弱 SSL 加密方式,想要側錄並進行破解還是得有一定的配合條件,一般的駭客或木馬想來應該寧願把功夫先花在那些未加密的連線或是 Key strokes 的側錄,而非花功夫去破解這些已經加密過後的東西。

只是身為一個知名網站的管理者,為了避免駭客針對性的攻擊,我們還是得用 100 分的標準來看待這件事情,以台灣的網站來看,我們利用 Qualys Labs 所提供的免費檢測工具,檢查了幾個國內的知名網站:

知名遊戲網站 1:
01

知名遊戲網站 2:
02

知名電信公司 1:
03

知名電信公司 2:
04

知名網購:
05

若以該網站的統計數據來看,拿到 B 的網站是最大宗的,第二名反倒是拿到 F 的網站,由於這是個英文網站,測試的標的應該來自於全世界各地,可見得就算是把這個標準放在全世界來看,拿到 A 級分的網站比例也是不高的。 (2016/11/28 更新,截至目前為止,拿到 A 的比例已經是最高的了,SSL Labs 測試的樣本中,有 48.3% 的網站都可以拿到 A 以上)

06

其實拿到 B 也不表示這個網站不夠安全,讓我們來看看這個分數的組成定義,首先是 Certificate ,從以上的例子來看,這個項目的分數大家都是拿 100,表示大家的 SSL 憑證都沒有過期,而且是和網址相符的,也沒有 Chain certificate 的問題。表示上述每一個網站的 SSL 憑證都有被正常的申請及安裝。

第二個項目是 Protocol Support ,由該網站的定義中可以發現,他是用 SSL 2.0, 3.0 和 TLS 1.0, 1.1, 1.2 的支援程度來做加權平均的,而且自 2014 年 1 月起,不支援 TLS 1.2 的就會被打到 B 去,可見得這個網站也是越來越嚴格。我看很多台灣人還是在使用 Windows XP ,這些人既使安裝了 XP 能支援到的 IE8,其 TLS 也只支援到 TLS 1.0 的版本,連 TLS 1.1 都不支援,更遑論 TLS 1.2 了。而 Windows 7 上的 IE 則是需要到 IE 11 才支援 TLS 1.2,若你的 Windows 7 上安裝的是 IE 10 ,那也只支援到 TLS 1.1。那表示既使是伺服器已經可以支援到 TLS 1.2 ,瀏覽器沒有支援到位的話,他們之間還是會以較低的加密方式來處理 SSL。所以你說可不可以從伺服器端把 TLS 1.0 禁用?那表示你不打算讓 Windows XP 的 IE 使用者連上來了。

第三和第四個項目是 Key Exchange 與 Cipher Strength 這一點,基本上這個網站會告訴你,哪些 Cipher Suites 是安全的,哪些是安全性較弱,而哪些是完全不安全的,以下圖來看,那些有用到 MD5 作為演算法的加密方法都被標示為 INSECURE,由於 MD5 在 2009 年已經被證實在一般的電腦上只要花數秒的時間即可破解,所以無論是多少長度的金鑰也是無濟於事。另外那些短於 1024 bits 長度金鑰則會被歸類為 WEAK,因為長度過短,所以相對來說容易被破解,最好也是禁用掉。

07

其實不管是 Web server (IIS 或 Apache),能作為 SSL Proxy 的設備或服務 (如 Load Balancer, CDN),當推出新版本時,都會適當的在預設值中就禁用一些不安全的憑證,但是身為系統管理員,就會知道有時候因為升級版本需要新的授權預算,有時候是因為應用程式和新版本不相容等等的原因,我們並沒有辦法每一次都跟著廠商一起升級,所以瞭解你所管理的系統該怎麼禁用不安全的加密方式就顯得非常重要了。

要檢查你的網站目前支援了哪些加密方式除了可以用上述的網站之外,如果你不太希望「公開」地留下查詢的資料,或是希望在還沒有正式上線前進行檢查,也可以利用 OpenSSLSSLScan (Windows 版),來查詢或驗證。我自己是用後者,因為操作起來方便又簡單,執行出來的結果就如下圖所示,其中 Accepted 的 Cipher 已經很少了
(* 2015/07/27 更改 SSLScan 連結,原版本已經久未更新,我另外在 Github 上找了另外一個版本,用法相同,但顯示方式不同)

08

如何禁用?在 Windows 上的 IIS 會挺麻煩,根據這篇文章所示,你必須手動去更改 Registry,而且改完之後必須要重開機,由於每個加密方式在 Registry 的命名方式不太一樣,所以需要時要去找出來,或參考這篇。感覺上有點麻煩嗎?那請服用網友推薦的這個小工具,直接用選的,而且還內附 Qualys SSL Labs 的捷徑。

09

至於 Apache ,基本上就是在設定檔中把想要禁用的 Cipher string 給加入就可以了,一般我們會不太希望把所有設定都搞在 httpd.conf 中,所以大家一般都是把這樣子的禁用字串寫到 /etc/httpd/conf.d/ssl.conf 裡。語法請參考這裡。另外這裡有提供簡單的說明網頁

由於 F5 也是和 Apache 一樣使用 OpenSSL 來提供 SSL 功能,所以在 Local Traffic -> Profiles -> SSL -> Client 選單中,選擇你要修改的 clientssl profile,然後選 Advanced,就可以在 Ciphers 欄位中填入欲禁用的字串

10

如同之前有提到的,F5 每個版本都會禁用掉一些不安全的加密方式,這裡是 10.x 以前版本的啟用清單,而這裡放的就是 11.x 的啟用清單。

A10 的 SSL Cipher 支援則是比較特別一點,它是可以用「選」的,

11

Windows 2008/2012 支援的加密方式如此頁面所示,OpenSSL 則在該頁面中有列出不再支援的加密方式 (Deprecated SSL v2.0 cipher suites)。但很顯然的,Windows 或 OpenSSL 預設禁用的加密方式就不會太多,所以自己提高警覺,根據你的需要去設定要支援的加密方式,才是最佳的安全之道。

  • 至於其他 Web server ,我猜只要是使用 OpenSSL 套件的,應該可以在某個設定檔/設定畫面中找到放禁用字串的地方
  • 補充:文中所提到的 Qualys Labs 的工具網站也增加了最近熱門的 HeartBleed 偵測 (2014/04/22)
  • Qualys Labs 的工具網站也增加了最近熱門的 POODLE (SSLv3 漏洞) 偵測 (2014/10/21)

* 2014/10/21 更新: 10/14 時有個 SSLv3 的漏洞被發佈 CVE-2014-3566 ,由於預設採用 SSLv3 的瀏覽器很少(幾乎沒有),且多半還可以走 TLS ,所以 Linode 就建議把 SSLv3 給關掉,Linode 網站 上提有供各種 Open source web server 的 SSLv3 關閉方法,請自行參閱。F5 也提供了對應措施,有趣的是,F5 早在 2014/03/03 發表的 11.5.0 版本時就把 SSLv3 給關掉了

把 Exchange 上的全域通訊錄同步到手機上

公司自從去年把郵件伺服器換成了 Exchange 2013 之後,不時的就有人在問是不是可以把公司的全域通訊錄同步到手機上來,由於公司向來有把每個人的手機號碼記錄到 AD 上的習慣,二來公司的人數沒有很多(所以全部同步下來也不會太誇張),加上公司同仁常常出國出差,一般也不會很浪費的都在國外買全程的 3G 上網,所以把通訊錄同步到手機上,臨時有急事時不管在國內國外找起來都比較方便。

我們一開始開放大家用手機收信之後(不是用 POP3), 就發現每次要搜尋公司通訊錄時,在我的 New HTC One 上面就非得要按一下「搜尋公司通訊錄中的聯絡人」選項之後,它才會透過網路去 Exchange 上搜尋(而且小於 4 個字元還不讓你搜尋),原先一直以為這是 Android 4.3 的 bug,後來我的 New HTC One 升級到 4.4 之後也是無濟於事,加上同事的 iPhone 也是一樣的狀況,所以我們便開始研究這中間發生了什麼事

經過幾次錯誤的嘗試之後,發現原來不管是 Android 或 iPhone,在設定了 Exchange 帳號連線之後,都是可以同步聯絡人下來的,只是這個「聯絡人」,指的是個人在 Exchange 上的「通訊錄」,而非「全域通訊錄」。好吧,知道弄錯了之後,我就可以手動的把全域通訊錄中我想同步到手機上的名單一個一個捉進我的個人「通訊錄」了

1

2

然後在 Outlook 中我就可以看到這筆名單出現在我的個人通訊錄中,然後我的手機裡頭過幾分鐘之後也就出現了這筆資料,嗯,看來問題解決了?!

3

啥?!老闆問說,那萬一全域通訊錄有更新時要怎麼辦?我們多了幾位員工或是有人改了電話?我想一位稍有智慧的 MIS 是不會這麼回答老闆的:老闆,就請你自己每天或要出差前記得把全域通訊錄全選起來,然後一次加到你的個人通訊錄中。

所以找來 Google 大神來神一下,發現有這篇文章:Importing Global Address List entries into a user’s Contacts folder

趕緊把裡頭的 script 下載下來拿去 Exchange server 上執行,嗯,步驟有點囉唆,紀錄一下免得自己以後忘記:

首先先找到 Exchange 的 Management Power Shell ,我自己是對 2012 這個如同 Windows 8 的 Metro GUI 是很不習慣的,找個功能還要用搜尋的才找得到…

4

接著執行下面這個指令,新增一個 MailArchivaImpersonation 的角色,使其擁有 Impersonation 的權限,並賦予你現在用來管理 Exchange 的這個使用者擁有這個角色的權限

[PS] C:\>New-ManagementRoleAssignment -Name:MailArchivaImpersonation -Role:ApplicationImpersonation -User:[your account]

5

然後執行剛剛下載下來的 script ,這樣子就可以把全域通訊錄複製到該帳號的個人通訊錄中

[PS] C:\>.\Copy-OrgContactsToUserMailboxContacts.ps1 -Mailbox [account you want to sync GAL] -FolderName Contacts

6

執行完畢之後,我是會把這個權限移除掉,因為感覺上有點危險

[PS] C:\>Remove-ManagementRoleAssignment MailArchivaImpersonation

然後該帳號的 Outlook 個人通訊錄、手機就都會有這些名單了

7

8

由於這個 script 的動作是 複製+覆蓋,所以只要把它設定到 Windows 的工作排程中每天執行,就可以每天 “同步" 全域通訊錄下去了

要讓 Windows 定期執行 Exchange 2013 的 Power Shell command 還有點小學問,不是執行執行那個 *.ps1 檔案就好了,請參考這裡吧:
http://www.msexchange.org/kbase/ExchangeServerTips/ExchangeServer2013/Powershell/scheduling-exchange-powershell-task.html

* 原本該 script 作者只會把全域通訊錄中 1) 有 E-Mail 地址  2) 有手機或公司電話 的資料複製下去,不過由於我們公司對於離職員工的帳號會先 disable 保存一段時間,所以我改了該 script 的 76 行,把被 disabled 的帳號也過濾掉了,改過之後的 script 放在下面,因為 WordPress 似乎不給放 *.ps1 檔案,所以我先壓縮過後改附檔名為 *.doc,有需要的人請自行下載後去掉 *.doc 然後解壓縮就可以得到該 script 了

Copy-OrgContactsToUserMailboxContacts.zip