資料庫安全 (Database Security)
本章內容 15.1 前言 15.2 資料庫管理系統的安全威脅 15.3 資料庫安全實作 15.4 統計資料庫安全 15.5 任意性資料庫安全 15.1 前言 15.2 資料庫管理系統的安全威脅 15.3 資料庫安全實作 15.4 統計資料庫安全 15.5 任意性資料庫安全 15.6 多層式資料庫 15.7 資訊隱碼攻擊
15.1 前言 在介紹資料庫安全之前,必須先對資料庫系統有一初步瞭解,才能夠知道資料庫系統有那些安全上威脅,以及需要使用那些安全技術,才能夠彌補安全上的漏洞。
資料庫內資料之階層關係
資料庫與檔案差異 資料庫是由資料庫管理系統(DBMS)管理,而檔案是由作業系統(OS)所管理。 資料庫安全比作業系統安全更為明細。 資料庫比檔案更經常被存取及更新。 資料庫之存取經常須同時關聯到數個資料表,而檔案之存取則一時間僅處理單一檔案。
結構化查詢語言(SQL) SQL(Structured Query Language) 1. 註解標記 “--” 在「--」符號後面的說明將不會被程式解譯 2.新增一個資料庫 CREATE DATABASE TEST 3. 建立一個資料表 CREATE TABLE TestTable ( ID int, Name char(30))
SQL(續) 4. 在資料表中新增一筆記錄 INSERT TestTable (ID, Name) VALUES (100, ‘test’) 5. 從資料表中顯示指定欄位的資料 SELECT ID, Name FROM TestTable 6. 更改資料表中紀錄內容 UPDATE TestTable SET ID = 101 WHERE Name = test 7. 刪除符合的資料紀錄 DELETE FROM TestTable WHERE Name = test
SQL(續) 設我們要查詢職員資料表中居住在台中的職員資料,其SQL 指令為: SELECT * FROM 職員資料表 WHERE 地址 = ‘台中‘ ; 其查詢結果為: 身分證字號│ 姓名 │ 地址 │生日 B225353217 黃品潔 台中 07.21
15.2 資料庫安全威脅 資料庫內機密資料被非法者所竊知 資料庫內資料被非法者所篡改及偽造 資料庫內資料被非法者所破壞,讓合法者不能存取 資料庫推論(Database Inference) 資料庫聚合(Database Aggregation) 木馬藏兵(Trojan horse) 秘道(Covert Channel) 以 1 次 1 個 bit 的方式慢慢洩漏資料
資料庫推論 如果已知{黃品潔}同學就讀資管系,而且該班只有她一位女同學,若想得知{黃品潔}同學的英文成績 請問資管系英文成績總分 > 405 請問資管系男同學英文成績總分 > 312 非法者因此可推論出{黃品潔}同學的英文成績為 > 405-312=93分。
資料庫聚合 資料庫聚合是指個別資料雖不具機密性,但聚合數筆資料後卻可獲得機密資訊。 職員職位資料表 職位薪資資料表
15.3 資料庫安全實作 好的資料庫應該具備下列特性: 資料分享、最小資料重複、資料一致性、資料完整性、及資料安全性。 資料庫安全分下列四類: 實體安全 建構在作業系統之安全 建構在資料庫管理系統之安全 以密碼學為基礎之安全 備份資料 分散式資料庫於網路上傳輸的資料 傳遞資料的完整性與不可否認性
15.4 統計資料庫安全 統計資料庫是一可提供平均值(AVERAGE)、總合(SUM)、及總數(COUNT)等統計資料之資料庫。 資料庫之推論問題(Inference Problem) 未經授權者不能直接查詢該女性之薪資資料,但他可以將統計查詢結果及一些已知資訊做分析比較,進而推導出該機密資料,統計資料庫之安全性控制,基本上就是要限制這類型統計查詢,以確保個別資料隱密性。 查詢統計的資料量太大或太小都有洩露機密的可能
推理問題解決方法 解決統計資料庫之推理問題,可分成下列三方向: 近似查詢法 限制查詢法 追蹤法 不回答正確的結果給查詢者,而將此結果做些微修改,以偽裝正確資料。 限制查詢法 對於敏感資料的查詢及其統計量可能會危及資料庫安全時,則系統拒絕回答。 追蹤法 在回答查詢時,先分析此查詢是否會被用來推理統計資料庫之敏感資料,若是則拒絕回答。
近似查詢法(Add Noise) 合成法(Combining Results) 隨機取樣法(Random Sample) 隨機誤差法(Random Data Perturbation)
近似查詢法-合成法 個別敏感資料,很容易被推導出來,但若把數個資料項合併成一資料項,使它較不具敏感性,這種方法稱為合成法。 合成法範例 抑制查詢量範例
近似查詢法-隨機取樣法 每次系統所回應查詢結果,並不是從整個資料庫核算出來,而是從資料庫中隨機取樣部份資料核算。例如,某一成績資料庫,內含100位女學生資料,當要查詢女學生之平均成績時,系統並不直接計算資料庫內100位女學生平均成績,而是隨機選取學生當中95位來計算其平均成績。 對同一查詢,取樣需相同,以免不同取樣的結果被拿來進行推論。 變形: 隨機取 5%,重覆外加 隨機取 5%,以其他值取代
近似查詢法-隨機誤差法 每次查詢再加上一誤差值,此誤差值可為正或為負數值,這方法比隨機取樣法更簡單且更有效率,而且不用擔心相同查詢會隨機選取不同樣本。 代價:需維護此誤差值。 Min-Shiang Hwang © The McGraw-Hill Companies, Inc., 2005
15.5 任意性資料庫安全 資料庫安全政策: 任意性(Discretionary, 自由裁決的)安全政策 強制性(Mandatory) 安全政策 系統中權力以整個關係表的內容為單位。對使用者而言,不是對整個關係表沒有權力就是對整個關係表的所有內容都有權力。擁有者具自由裁決權利。 優點:實行容易與理論基礎簡單 缺點:資料保密的單位太大
存取模式 如果張三具有[存取人事資料庫中薪水少於 3 萬元的人事資料權限,當{張三}以下列SQL查詢人事資料庫時: SELECT SALARY FROM EMP WHERE SALARY <20000 系統轉成存取要求 {張三},EMP,SELECT,SALARY < 20000) 存取法則範例
資料庫存取控制處理 有時可以加上存取法則 的授權者及可否將此權 限傳播出去的 flag 資訊
關聯基表與視窗表 關聯基表是每筆資料錄均實際儲存在磁碟內做永久保存。 視窗表(view)則是由基表抽取出來部份或結合其他基表產生出之資料表。
如何產生視窗表 例如,我們想查詢所有部門之平均薪資。 SQL指令: CREATE VIEW AVGSAL AS SELECT DEPARTMENT, AVG(SALARY) FROM EMP GROUP BY DEPARTMENT 視窗表(AVGSAL)之查詢結果
安全性控制 採用視窗表(View)的方法來隱藏敏感的資料,以防止未經授權的使用者 執行非法行為。 由授權系統決定每一個使用者對每一個資料表的使用權限,以控制使用者對資料庫之資料的存取權限。 例如: GRANT SELECT ON TABLE VSAL TO 張三 表示授予{張三}對視窗表VSAL具有存取資料(SELECT)的權限。
15.6 多層式資料庫 多層式資料庫是以第四章之強迫式存取策略(Mandatory Access Control)為基礎之資料庫。 依使用者職位或等級不同,而有不同之安全等級。
多層式資料表 多層式資料表,是指一般資料表內,每一基本資料項(Atomic)、資料錄(Tuple)、屬性(Attribute)或欄位、及資料表(Table)本身均有一相對應之安全等級。 多層式資料表
機密 (Secret) 等級使用者存取的資料 NULL
完整性規則 實體完整性規則 關聯基表(Base Relation)之主鍵(Primary Key),其所有屬性項均不可為虛值(Null Value)。 參考完整性規則 - 關聯基表之外鍵(Foreign Key)值必須存在於其他關聯基表之主鍵,否則此外鍵須為虛值。
資料多重性問題 假如,有一位一般使用者新增一筆(A03、黃品硯、60K)資料錄 此時資料庫管理系統 若以資料重複原因拒絕該一般使用者儲存,該使用者將知曉資料庫中有A03之資料,反而洩漏此資訊。 若資料庫管理系統允許儲存此筆資料,如此又將造成資料重複問題,這稱為資料多重性問題(Polyinstantiation)。
違反多層式實體完整性規則 違反實體完整性規則 具 S 等級的使用者看到:
違反多層式參考完整性規則 違反參考完整性規則 TS TS
多重列錄(Polyinstantiated Tuple) 新增一筆紀錄
多重資料 具 S 等級的使用者看到:
15.7 資訊隱碼攻擊 正常身份認證連線 SELECT * FROM member WHERE UID = ‘& request(“ID”) &’ AND Passwd = ‘& request(“Pwd”) &’; With UID = ‘A123456789’ Passwd = ‘1234’ SELECT * FROM member WHERE UID = ‘A123456789’ AND Passwd = ‘1234’;
資訊隱碼攻擊(續) 正常連線狀態
SQL Injection攻擊 SELECT * FROM member WHERE UID = ‘& request(“ID”) &’ AND Passwd = ‘& request(“Pwd”) &’; UID = ‘Admin’ -- ’ Passwd = ‘ ’ SELECT * FROM member WHERE UID = ‘Admin’ --’ AND Passwd = ‘ ’;
SQL Injection攻擊(續)
SQL Injection攻擊(續) SELECT * FROM member WHERE UID = ‘& request(“ID”) &’ AND Passwd = ‘& request(“Pwd”) &’; UID = ‘ ’ OR 1=1 -- ’ Passwd = ‘12345’ SELECT * FROM member WHERE UID = ‘ ’ OR 1=1 --’ AND Passwd = ‘ 12345’;
SQL Injection其他輸入指令 輸入的SQL指令 產生的後果 ' ;SHUTDOWN-- 停止SQL伺服器 ' ;DROP Database <資料庫名稱>-- 刪除資料庫 ' ;DROP Table <資料表名稱>-- 刪除資料表 ' ;DELETE FROM <資料表名稱>-- ' ;Truncate Table <資料表名稱>-- 清空資料表
SQL Injection的防範 1.網頁程式撰寫方面 2.資料庫管制方面 (1)過濾輸入條件 (2)過濾可能隱含的SQL指令 (3)針對輸入條件進行規範 2.資料庫管制方面 (1)SA管理帳號的密碼管控 (2)刪除多餘的公開資料表、範例等 (3)移除不必要但功能強大的延伸預存程序 (Extended Stored Procedure)
SQL Injection的防範(續) 3.網站伺服器方面 4.外部防護系統的控管 (1)定期修補作業系統與網站伺服器的漏洞 (2)避免ASP、PHP與JSP程式源碼 (Source Code)洩漏 (3)不提供錯誤訊息給使用者 4.外部防護系統的控管 (1)藉由防火牆系統管制連線 (2)藉由Host-based IDS或Application-based IDS監控系統運作