觀點

吹不垮的房子

2009 / 07 / 07
JAMES C. FOSTER 譯 ■ Jenny
吹不垮的房子

雖然你可能會懷疑,但是Microsoft SQL Server 2008比2005以及2000更安全。

  確保你企業中的資料庫安全(Database security)是很重要的。各個組織、企業、互動式網站以及應用程式都高度的依賴資料庫技術。畢竟,現在還有哪些資料是沒有被儲存在你後端資料庫中?

  由於對額外效能、功能以及安全的高度需求,微軟的SQL Server 2008被投入市場的時間是比SQL Server 2005在2000之後上市的時間還快。還有另外的原因就是微軟面對了3個難纏的競爭者:傳統資料庫技術、支援網站應用平台式資料庫(Web-enabled application platforms)以及開放原始碼社群。

  甲骨文(Oracle)已經幾乎每一年都會針對小型公司、大型企業、線上單位以及政府進行設計上的修正,釋放新版本的資料庫系統。Sun Microsystems收購MySQL之後也成為企業級資料庫市場上新的競爭者。經過這個收購之後企業對於MySQL的信賴度也有了指數性的成長。不過這個收購案所進行的支援、文件、授權(licensing)以及服務選項的整合,不可避免地將會對收購者與被收購者帶來許多問題。

  目前有一項資料庫技術的新式整合,是新創的網站公司開始開放它們的平台,它們將主機(hosting)以及應用邏輯(application logic)運作成擁有類似資料庫的功能。SalesForce (Application Exchange)、Amazon (EC2)、Google (APIs) 以及Indian powerhouse Zoho等,都已經投入分散式平台市場。

  對微軟愛好者的好消息是SQL Server 2008的安全功能已經被仔細考量並適當加入。它和前一版最明顯的改變是在它精細的資料安全功能:加密、金鑰管理以及meta data(詮釋資料)安全的提升。雖然以角色為主(role-based)的權限管理已經不算新的技術,可是這項技術能夠針對資料庫的各個面向,彈性地提供更強健的控管。過去版本的問題就是提供過大的存取能力給使用者。

你是誰?

  微軟對SQL Server 2008訂出正確策略並針對認證模組進行安全的改善。在針對網站的密碼暴力攻擊已經被視為正常行為的這個年代,微軟終於了解到是改革已含在SQL Server 2000基本功能中,卻未在2005完整修正的時候了。

  在安全管理中你依然可以將LDAP以及Active Directory服務的日誌記錄收到SQL Server中,在整合非Windows用戶端上現在也支援完整的通道加密(channel encryption)。完整的通道加密預設值是使用SQL產生(SQL-generated)的SSL憑證,幾乎預防所有的中間人(man-in-the-middle)攻擊。完整的通道加密也會保護SQL語法中的使用者帳號,以及其他所有封包(payload)中的資訊,對於2005預設是以帳號與密碼的雜湊值來進行傳遞的方式來說這是很大的改變。

  對Microsoft Group Policy的使用者來說事情也變得更簡單,現在已可以透過群組原則物件(GPO, Group Policy Objects)來管理與設定所有SQL Server 2008資料庫密碼物件,像是使用期限、鎖定週期、有效期限以及設定鎖定的屬性。過去必須透過Windows作業系統來控制SQL Server 2005的元件,現在則可以透過群組原則物件同時管理作業系統和SQLServer。

  這些功能可以協助對抗暴力法密碼攻擊的問題,可是解除帳號鎖定的程式碼卻是異常的簡單。在增加這項整合之前,大部分的資料庫管理員並不會正確設定密碼政策去警示或鎖定系統管理者或資料庫管理者的帳號,即使這項設定已經是系統管理者行之有年的一般實作方式。整合後的GPO密碼政策也解決了這個問題。

  深遠影響著網際網路的服務或SOA認證也有了重大的改進。SQL Server 2008支援5種認證機制:基本認證(Basic Auth)、NTLM、摘要認證(Digest Auth)、Kerberos以及整合了Kerberos與NTLM的整合式認證(Integrated Authentication)。

  SQL Server 2008也提供了使用數位簽章來支援程式碼簽章模組的能力。這項功能可以讓預存程序(stored procedures)、函數(functions)、觸發器(triggers)以及事件通知(event notifications) 很容易進行存取管理,來對資料表(tables)以及其他物件進行詳細的存取管理。在本質上,可以對程式碼模組進行權限設定,並且只允許使用者存取開放的進入點,而不是底層的綱要階層(schema layout)。

  程式碼簽章模組(Signing code modules)也帶來了對抗非授權變(unauthorized changes)的額外好處。以上2項的功能可以改善整體安全在縱深防禦上的設計。

特權的實體

  SQL Server 2008使用了新式、可細部調整的控制機制來保證許可(permissions)被建立、指派並被恰當的實作,相較於前一版發生更少的許可錯誤。

  公用角色:雖然大部分主要以角色為主的存取功能和SQL 2005類似,但是還增加了一些額外的功能來協助網頁應用程式sandbox,並對抗來自於網際網路的各式匿名攻擊。在SQL Server 2008預設會建立一個新的公用角色(見圖2);每一個資料庫使用者會自動被增加到這個群組。角色和群組是類似的,角色是在資料庫、應用邏輯(application logic)與功能上來授與權力與存取權限。網際網路使用者也會被建立在公用角色中來限制它各式種類的存取。

  在先前的版本角色是可以被建立的,不過SQLServer 2008將會先進行這些吃力不討好的角色建立工作和權限許可組態設定的版本。

  Meta data保護:一個資料庫或資料表的meta data可能和資料本身一樣重要。例如,你也許能夠取得一個資料表或者特定欄位在資料庫中是否存在的驗證資料,我可以將這個資訊作為SQL攻擊中的重要目標。SQL Server 2008會根據使用者被授予的角色來進行錯誤回應,讓你可以保護這個meta data。因此,舉例來說,如果所有的網際網路使用者都是被設定為公用角色,當某個沒有適當權限的使用者嘗試存取或者是刪除被取名為“SecretSauce”的資料表時,將會回傳以下的資訊:

可能由於沒有足夠的權限或者資料表不存在,所以無法刪除資料表“SecretSauce”

  更聰明的綱要:SQL Server 2008對於資料庫綱要(database schema)以及內容實作了更安全的機制。在2008之前,SQL Server在處理綱要的時候,邏輯上會配對到一個使用者。當你在SQL 2000/2005建立一個新的使用者,使用者綱要就會被建立,然後使用者會繼承他自己的許可權限。現在,你必須先建立一個使用者然後建立或指定它的綱要。使用者取得一個或數個綱要的擁有權,然後這些綱要會被指定對於資料庫元件(elements)的權限。這個增加的資料庫階層(layer)讓你可以對使用者與資料庫元件設定更詳細的許可與控制。(見表1)

 

表1 MS SQL Server 2005與2008使用者綱要差異說明
SQL Server 2005

* 使用者“Gabriel”被建立,會自動收到一個相同的綱要。

* G a b r i e l 在資料庫中建立一個新的資料表“myTable”。

* 一個名稱為Gabriel.myTable的新資料表物件,會取得Gabriel的許可組合。

SQL Server 2008

* 使用者 “Stephen” 被建立。

* Stephen然後建立一個名為“mySchema” 的資料庫綱要並指定相關的權限,接著在資料庫建立一個名為“myTable”的資料表並將之指定給mySchema。

* 這個新資料表物件▲ 圖2 在SQL Server 2008預設會建立一個新的公用角色;每一個資名稱為mySchema.myTable。


  這些不同的物件允許單一的使用者來建立並運作多個綱要,可是在2005要運行多個綱要就需要建立多個使用者帳號。

  有安全能力的物件:SQL Server 2008是以安全能力物件的概念所建立的,在2005就已開始導入。重要的登入和服務都會被對應到各個元件,而且幾乎可以對資料庫中所有的物件進行詳細的許可設定,這些物件可以從資料表到預存程序與函數、憑證與各種元素。這個角色為主或詳細的許可設定對資料安全來說是一個很大的改進,而且這項資料安全還妥善搭配了公用角色。在伺服器端,網路通道間的溝通是可控制的,以及被命名的管道與其他溝通通道。

  安全能力物件透過各種的許可設定組合來訂出各種原則。一個原則中會使用GRANT、DENY 以及REVOKE的行為來定義出各種的許可設定,但是你現在還可以透過原則來授權其他原則去存取受控制的資訊。

  Agent proxies: SQL Server agent p r o x i e s將使用者憑證和工作許可( j o b permissions)給連結起來。它可以做到對一項任務中每一項個別步驟進行詳細的許可設定。這和先前版本使用單一卻又權限過大的proxy(代理)帳號是有很大的差異。每一個子系統都可以使用任意數量的proxies。

  不過這裡還是有一個例外:Transact-SQL子系統是使用模組擁有者(module owner)的許可權限來執行工作。舉例來說,如果擁有者是“Foster",那Transact-SQL指令都會以Foster的權限組合來進行執行。

  很重要的,如果是從2005升級到SQL Server2008必需留意2005中的單一代理(single-proxy)帳號會被保留在新系統中,必須仔細考量如何區隔出這個帳號並設定適當的許可權限。

加密是關鍵

  好消息!如果你是微軟資料庫的用戶,將可以不用再額外購買這幾年為了遵循PCI,所外掛的資料庫加密軟體。不幸的是,這些所有的新技術和管理功能都只提供給微軟資料庫使用,而沒有整合MySQL或者Oracle的管理功能。SQL Server 2008的原始功能就支援整個資料庫、欄位與角色為主的加密。金鑰管理也已完全更新。

  SQL Server 2008裡有各種形式的加密功能,經是內部金鑰管理子系統的一部份。在過去,加密金鑰管理必須經由第3方產品來進行,因為SQL erver缺乏強健的使用者管理。

  可擴充金鑰管理( E K M , E x t e n s i b l e K e y Management)可以保護從資料庫內的資料到任何網站伺服器上的資料,甚至是可以保護對資料庫本身的存取(見圖3)。此外,EKM是可擴充的並且擁有可以在SQL Server中整合第3方產品與註冊裝置的能力。這些裝置可以是單純的軟體也可以是像是硬體SSL加速裝置之類的硬體。在SQL Server中註冊的裝置,允許應用程式與使用者來存取它們加密過的金鑰。

  經常被聯邦政府以及大型電子商務組織所使用,像是來自nCipher以及SafeNet的裝置擁有較先進的加密功能,來設定金鑰的輪替(rotation)排程與金鑰有效期限的政策。這些產品所自動化進行的金鑰輪替,可以確保少數金鑰被竊取後的資料安全。SQL Server 2008也提供完整的硬體安全模組(HSM,Hardware Security Module)來支援市場上的產品。

  微軟 SQL Server 2008還提供了透通式資料加密(TDE, Transparent Data Encryption)。在最開始的版本,要進行加密的唯一選擇就是使用嵌入套件(plugins)。在SQL Server 2005開始有部份的加密功能,進行欄位加密,而2008則有大幅改進。

  TDE是完整的、可管理的資料庫加密功能。TDE可以加密整個資料庫,包含所有的交易(transactional)和日誌記錄(log)資料TDE是一個方便的選項,可以讓管理者們在不影響資料庫架構的狀況下進行資料保護。在先前的各種版本,應用程式開發者經常要開發客製化的程式碼來加密和解密資料。然而有了TDE之後,加解密的動作在資料被寫到磁碟與從磁碟被讀出的時候會自動發生。這個TDE可以減低開發者的工作量並增強整體的資料安全。

  以成本的角度,TDE有具彈性和可維護性的好處。在伺服器上本來就容易消耗CPU的效能,而資料庫更可能會消耗2位數百分比的系統效能。請準備好面對資料庫的改變。類似以下的資料庫修改命令應該被資料庫管理者執行:

alter database is_mag_db

set encryption on

go

  SQL Server 2008和外界的產品一樣擁有對稱式、非對稱式以及憑證式(certificate-based)的加密功能,支援任何被包含在微軟 cryptographic library中的標準。

容易稽核

  傳統上稽核資料庫對於管理者來說是重大的挑戰之一。主要的問題是來自於資料庫的用途。為了特定目的或某應用系統處理與儲存大量資料,都需要專業工程師來負責。問題是如何驗證這些資料是僅用於特定的目的,而不是被非法的使用。

  在之前的版本,一個管理者要稽核資料庫必需在不同的資料點上設定多個觸發機制與警報(alert)來進行記錄並事後進行分析以找出異常。SQL Server 2008簡化了這個程序。一個稽核者或管理者必須定義出要被稽核的資料點,例如使用者行為、資料元素、使用者或角色,然後在伺服器上建立伺服器稽核或資料庫稽核規則(specifications)。此後就可以在標準的事件檢視器(Windows Event Viewer)或
SQL Server 2008 Management Studio的日誌檢視器(log viewer)中來檢視被觸發的事件。

  要完成稽核和日誌功能的組態設定可能要耗費一段時日;然而,SQL Server 2008還是有彈性可以將詳細與強健的日誌記錄整合到第3方的解決方案上。

簡單過生活

  微軟為了建立並達成可信賴運算的目標,SQLServer 2008在設計與預設設定上已經更加的安全。類似2005,SQL Server 2008幾乎會安裝所有的元件和模組,但是卻會預設關閉。這個方式僅會開啟所需的功能,將大幅減少被攻擊的機會,當提供越多的功能,就有越大的機會存在弱點並被攻擊。

  雖然這樣的方式加強了安全,不過也增加了資料庫管理員額外的安裝工作。一個新的工具-Declarative Management Framework (DMF)可以用來協助資料庫管理員。它是一個透過安全溝通通道來對SQL Server的單個或多個請求(instance)進行初始組態管理的好方式。多個政策、元件與模組均可被組態設定,這對於管理叢集與可容錯(failover)系統是一個非常好的機制。

SQL Server每個版本都會越來越安全,2005的版本主要是改進2000。為了更安全,升級是必需的,而擁有最佳的加密、金鑰管理、詮釋資料安全、修訂過的資料庫綱要安全以及減少被攻擊機會的SQL Server 2008,更是應該升級來增強資料庫、分散式應用與組織的整體安全。

James C. Foster是Ciphent軟體開發與安全顧問訓練公司的執行長。