資安稽核員的基本知識— MS SQL Server (資料庫)的備份、安全性、維運與稽核軌跡入門

繼上篇「資安稽核員的入門技術知識 — 如何成為值得信賴的稽核員?」提到,預計寫幾篇針對稽核員介紹入門知識的文章,除了為自己近期學習 MS SQL 做筆記外,順便介紹的資料庫基本功能,資料庫為企業環境都會用到的系統,簡單了解資料庫的工作與資訊安全會對稽核與評估有幫助,並了解 IT 維運的狀況,盡可能給出雙方接受且具有幫助的建議。

來源 https://exfast.me/2016/07/mssql-sql-server-management-studio-online-tools/

此篇也建議對資料庫用途有基本概念者閱讀。但我不是專門的 AP 與 DBA 管理員,故無法深入探討細節,如本篇有任何錯誤再煩請通知我。

ISACA 道德規範:確保在各自領域內具有必備能力,同意僅參與在合理預期下透過必要技能,知識和能力來完成的活動。

ISACA證照學習組合包與教材總整理:

MS SQL 基本結構概念

以下範例使用 MS SQL 2019 Developer 搭配 SSMS (SQL Server Management Studio)資料庫管理工具練習,資料庫範本可至微軟的 GitHub 上下載

Instance 與 Databases 差別:

  • Instance 是一個執行個體, 裡面包了很多 Databases,如 System Database (系統資料庫) 與 User 自己建立的 Databases。
  • 可以建立多個 Instance,每個 Instance 內可包含多個 Databases

MS SQL 主要的檔案:

  • MS SQL 有兩個檔案,分別為資料檔(MDF, Primary data file)交易記錄檔(LDF, log data file),備份資料庫時候可能會使用到的檔案。
SSMS管理工具 / docs.microsoft.com

MS SQL Server 系統資料庫

SQL Server 主要的系統資料庫有四種,詳細請參考此來源

  • Master:SQL Server 的設定值和資訊
  • Model:資料庫預設模板
  • MSDB:日常的排程與紀錄
  • TEMPDB:暫存空間

資料庫備份與復原

首先我們需要先認識三種模式,這邊引用 IThome 的文章,詳細請參考連結

  • 完整復原模式:所有交易紀錄會被 SQL Server 保存在該資料庫的紀錄檔內,DBA 可以針對該資料庫,進行完整備份、差異備份和交易紀錄備份。
  • 大量紀錄:大量紀錄復原模式下,除了 BULK 行為(載入大量資料或建立索引)所產生的交易紀錄之外,絕大多數的交易紀錄都會被保留,所以此模式無法保證能將資料庫還原到過去的任何時間,因為沒有BULK成為的交易紀錄。
  • 簡單復原模式:每次的checkpoint動作發生時,SQL Server 會截斷已完成或回複的交易紀錄,也就是說SQL Server可以重複使用交易紀錄的儲存空間。此模式下 DBA 只能執行完整備份與差異備份。
  • Snapshot:速度快且方便,若 Databases 非常大的話使用快照會更有效率,否則 Databases 如果很大的話,備份時間會很久。

Databases 備份排程可能會先執行一次完整備份,之後會定期做差異備份,在兩次備份中間會備份 log (紀錄檔),以下圖為例,若要執行手動備份,對 DB_temp這個資料庫 點選

對該 DB右鍵 -> 工作 -> 備份

即可進到備份的設定畫面,並勾選「只複製備份」以避免手動備份而破壞自動備份的序號紀錄

如果想確認是否有備份,可至該 DB 點選右鍵 -> 屬性 ->一般 內查看時間點

資料庫的權限設定

在討論權限設定以前,先來認識一下 SQL Server伺服器角色(引用OOLIN 整理的內容,請參考連結)

※bulkadmin: 可以執行大量插入作業※dbcreator: 可建立與修改資料庫※diskadmin: 管理磁碟中的檔案※processadmin: 管理SQL Server中執行的程序※public: 觀看系統中有哪些資料庫※securityadmin: 管理SQL Server登入相關事項※serveradmin: 調整與設定SQL Server※setupadmin: 可新增.移除本機之外所連結的SQL Server※sysadmin: 可處理SQL Server中的任何事情

資料庫角色的使用權限

※db_accessadmin: 可以新增或移除資料庫的登入帳戶※db_owner: 擁有維護與設定資料庫的權限(包含資料庫的所有權限)※db_securityadmin: 可管理資料庫物件的擁有者.資料庫角色.角色的成員.權限※public: 資料庫的使用者都屬於public角色(擁有預設的資料庫權限)

SQL Server 帳號權限通常也是查核重點之一,依照習慣盡可能不使用 sa 這個預設的高權限帳號,而是另外建立新帳號來管理 SQL Server,並授予最小授權原則,以下為權限設定的簡單示範:

安全性 ->查看登入、伺服器角色

建立一個 SQL Server 帳號,取名為 test

在 DB 角色成員部分授予 test 為 db_owner 權限,但僅限於 Demo這個資料庫

由於剛剛是建立 SQL Server 帳號,故這邊驗證選 SQL Server 驗證 (類似本地驗證),或可採用 Windows 帳戶驗證

使用 test 帳號權限去存取 Demo2 資料庫遭拒絕 (只授予存取 Demo 資料庫)

檢視 SQL Server Audit 記錄

資料安全 — 資料庫加密 (TDE 透明資料加密 )

在稽核時我們常會詢問受稽核方,對於 Databases 資料如何保護?但你知道 Databases 有哪些保護方式嗎?

而這次的加密技術為 透明資料加密 (TDE) 的加密是屬於資料庫層的保護,詳細的技術細節可參考 以下文章:

資料庫加密可避免資料庫被 Dump下來後,資料外洩流出,在沒有憑證與 Key 的情況下無法看到原本資料庫的內容,所以 Key 與憑證的保管要有程序,如果 Key 也一起掉了那資料庫加密就尷尬了。

微軟官方基本程式碼如下

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘<UseStrongPasswordHere>’;
go
CREATE CERTIFICATE MyServerCert WITH SUBJECT = ‘My DEK Certificate’;
go
USE AdventureWorks2012;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2012
SET ENCRYPTION ON;
GO

登入登出稽核軌跡

稽核軌跡紀錄基本上是稽核員經常檢視項目之一,以 SQL Server 2019 搭配 為例,我們在 Instance 上 點選右鍵->屬性 (下圖的localhost 上點右鍵)

伺服器屬性上點選安全性,可勾選登入稽核,預設為僅有失敗的登入

接著我們至 記錄檔查看稽核軌跡,點選左方的管理 -> SQL Server 紀錄檔

打開任一紀錄檔後,可使用篩選查看想要的 Log ,下圖為 SQL 本地驗證方式錯誤的紀錄,並可確認是否留有足夠時間的稽核軌跡與類型

登入失敗紀錄

SQL Server 稽核軌跡

如果想要對資料庫建立、修改和刪除等留存稽核軌跡,就必須至安全性設定檢查確認

  • 安全性 -> 稽核
  • 安全性 -> 伺服器稽核規格

SSL 強制加密連線

MS SQL 上可啟用 SSL 加密連線,可至 SQL Server 設定管理員 內點選 MSSQL SERVER的通訊協定 -> 內容 查看

資料庫日常維運排程

  • 資料庫會依需求需要增加必要的索引(Indexes) 改善查詢效能
  • 資料庫會依需求與狀況定期更新統計資料 (Update Statistics) 改善查詢效能
  • 資料庫會依需求與狀況進行完整性檢查,會檢查指定資料庫中所有物件的配置及結構完整性,會依照資料庫大小排定檢查的間隔。
  • 可透過 左方管理->維護計畫 內查看並手動執行維護計畫
  • 可透過 左方SQL Server Agent ->作業 對該項目 右鍵->屬性查看排程

另外也請務必確認 Instance 設定吃掉 OS 本身資源量,並持續監控 Disk 、RAM、CPU 等即時狀況。

伺服器屬性/記憶體設定

MS SQL Azure服務

MS SQL 是微軟的,現在因上雲的關係,稽核也必須知道雲端上的差別,與時俱進才行,如果想針對 Azure 整體服務有進一步了解,可參考我 AZ-900 考試經驗心得

https://azure.microsoft.com/zh-tw/product-categories/databases/

Summary

以一個初步的新手資安稽核,或許可從這麼多任務中,先從大方向做確認,來完成你的底稿,從稽核軌跡留存備份頻率與方式安全性設定日常維護工作四大項開始下手,但回歸我第一篇所說,真的要有初步了解 IT 的日常工作與困難,可實際簡單操作體會後,去稽核時才會比較清楚,給出合適且雙方接受的建議。

ISACA 道德規範:確保在各自領域內具有必備能力,同意僅參與在合理預期下透過必要技能,知識和能力來完成的活動。

--

--

業餘資安寫手,希望透過紀錄所學的知識來回饋於社群上,互相學習分享。另提供企業資安顧問服務,依照企業規模與需求評估企業網路安全設計、基礎資訊安全防禦規劃。contact@kuronetwork.me

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Kuro Huang

Kuro Huang

充滿熱情的資安從業者,喜歡用專業興趣交朋友而非透過商業關係建立友誼。目前於四大擔任資訊安全顧問,希望對資安社群盡一點心力,並期望自己與身旁的人能有所進步,歡迎喝咖啡聊資安。希望保持著定期參與資安社群活動。 LinkedIn好友、文章目錄與個人介紹請參考 :https://kuronetwork.me