字體:小 中 大 | |
|
|
2020/11/30 16:01:10瀏覽2593|回應0|推薦0 | |
第13章系統的保護 系統保護的基本觀念 系統保護的機制 存取控制Access control 用陣列來描述保護的模型 存取控制可能遭遇的威脅 存取(access)的意義與對象 會對一個作業系統進行存取(access)的是使用者、處理元與外來的程式,所謂的存取無非就是使用系統所管理的資源,例如CPU、檔案、記憶體、印表機等,作業系統必須對資源採取保護的機制才能確保任何的存取都是合法經過授權的。 保護的義涵 作業系統中會有很多活動中的處理元,各有使用的資源與執行的空間,系統必須確定處理元的活動空間不會彼此糾結,造成執行上的謬誤或是系統停擺,這也是保護機制必須處理的問題。 保護的目的 在多工的作業系統中,資源的分享是難以避免的情況,分享以後必須確保電腦系統的完整性,以及程式執行的隔離性,這就要透過保護的機制來達成。所謂的保護(protection)是指資源的使用必須符合存取限制的規定,同時程式對於系統資源的使用符合既定的安全政策(security policy)。最終的目的是維持一個穩定的(reliable)系統。 安全政策與系統的保護機制 保護必須透過一些機制來進行,保護到什麼程度決定於安全的政策,這些政策可能在作業系統設計時就安排在內、也可能透過系統管理來設定,或是由使用者自行建立。安全政策並不是一成不變的,所以系統的保護機制也會跟著調整。 最常見的系統保護原則是「最少權限(least privilege)」的原則,也就是在能維持正常運作的條件下盡量少給權限,不管是系統的一般功能、系統呼叫、程式的執行或是資料結構的使用等都要遵循這樣的原則。 [無存取權的預設值(default to no access)] 存取控制機制對於使用權限的基本預設值應該是無存取權(default to no access),這樣才能確保系統沒有漏洞。所以在授權的時候,應該從毫無權限的情況開始,慢慢加入需要的權限。以存取控制清單(ACL,access control list)來說,上頭有記載的才是允許的授權,沒有記載的就不能授權。 [最少權限的原則(need to know principle)] 所謂的「僅知需知」(need to know)是指使用者只擁有工作真正需要的資源使用權限。這種授權的原則是盡量少給權限,甚至於使用者只有在限定的期間才有權限。當然,管理者本身並沒有權利去限制使用者的權限,授權的決定權在於管理階層,一旦授權方式決定了,未來出問題時管理階層必須負責。 作業系統的處理元彼此之間的活動必須要有適當的隔離,以免因為干擾而造成得到的結果不對,或是不如預期的精確,處理元使用的各種資源也要由作業系統確認處理元是否有適當的使用權限,這是保護(Protection)的機制。 共享資源 1. 邏輯名稱空間(logical name space)中指定的檔案。 2. 實體名稱空間(physical name space)中指定的記憶體。 這種共享是必要的,但卻要有保護機制來使共享不致產生副作用。在系統的技術上,子系統(subsystem)之間的介面可能有一些潛在的錯誤,可以透過保護機制來偵測,避免未來發生問題的子系統利用這種管道來感染其他的子系統。以Windows 3.1與Windows 95/98為例,Windows 3.1沒有記憶體保護的功能,因此單一的處理元發生問題時,往往導致整個系統當機,Windows 95/98就比較不會有這種現象。 電腦系統的保護功能主要在於提供機制來執行系統的保護政策(policy),這些政策與系統資源的使用有關,除了在系統設計時可以指定這些政策之外,也可以透過系統的管理來達到政策所聲明的目的。簡單地講,保護政策確定了到底要保護那些事物。所謂的保護並不局限於作業系統的層面,在應用程式的層次上也可以制定保護的政策與機制,和應用程式有關的資源或是經由應用程式所產生的資源,都可以在保護的範圍內。 保護政策(policy) vs. 保護機制(mechanism) 保護政策指明保護工作的範圍,保護機制言明如何做到保護的效果。保護政策與保護機制分離可以讓系統更有彈性,避免在有所改變時相互影響,維護上會比較不方便。例如, UNIX中某個檔案的使用權限需要改變時,只要用chmod指令來更改相關的表示位元即可,和保護機制無關。 保護領域(protection domain)的觀念 所謂的保護,主要的目的是希望在系統掌控的情況下,讓各種資源的取用符合約定,所以不該歸某人用的就不會被系統同意,不應發生的行為也會被系統所制止,一個電腦系統可以看成是處理元與物件的集合,物件可以包括 : 1. 硬體物件(hardware objects) : 例如印表機、CPU、磁碟、記憶體區段等。 2. 軟體物件(software objects) : 例如檔案、程式、系統的資料結構,例如semaphore等。 在物件的觀念下,我們可以探討有那些存取物件的方式,那些操作可以合理的進行。當然,談到資源的時候,我們就能套用物件的觀念。對於處理元來說,只能對有授權使用的(authorized)資源進行存取,任何時間所持有的資源應該正是當時執行時所需要的資源,這種要求也稱為必須認知的法則(need-to-know principle) ,在這種法則下,出錯的處理元對於系統整體的影響會小一點。處理元的作業可以看成是在一個保護領域(protection domain)之內進行的,保護領域定義了處理元可以存取的資源,因此包括了一組物件,以及能對這些物件進行的操作。對於物件進行的操作也可稱為存取權(access rights) ,所以保護領域可用下面的方式來表達: domain = a set of <object-name, a set of access rights> 保護領域不必互斥(disjoint) ,可以共享存取權,也就是說有些存取權會同時存在於多個保護領域中,處理元在不同的保護領域執行時有不同的存取權限。
與系統保護相關的實例 一般的作業系統都有所謂的核心執行模式(kernel mode)與使用者執行模式(user mode),目的是讓作業系統程式不受使用者程式的影響,所以作業系統程式在核心模式執行,權限很大,而使用者程式在使用者模式執行,權限必須另外向作業系統要求。 對於多工的作業系統來說,上述的兩種執行模式是不夠的,因為使用者程式之間也有自我保護的必要, UNIX系統中,保護領域是和使用者關聯在一起的,保護領域的切換代表使用者也不一樣了。UNIX檔案系統的做法可以達到有彈性的設定。每個UNIX檔案都會有以下的資料: 1. 所有者的辨識資料(owner identification) 。 2. 領域位元(domain bit),也就是setuid bit。
把一些有特殊權限的程式都放到一個特別的目錄裡頭管制,作業系統在執行該目錄內的程式時才容許改變user-id, 避免有秘密執行的setuid程式,這種做法使系統喪失了一些彈性。更嚴格的做法是一點都不容許改變user id的情況,使用者要爭取特別的使用權限,得透過一些特別的機制,例如由一個daemon process來接受需要特別使用權限的請求。 存取控制(access control) 資訊安全中資源使用的控制是非常重要的工作,目的在於保護資源,避免未經允許的修改或洩露。存取使用控制的方式有很多種,包括技術上的、實質的或是行政管理上的, 存取控制(access control)的方式可以分為3大類 : 1. 技術上的(technical)的方法:運用電腦、通訊與資訊安全方面的技術來進行存取控制。 2. 實體的(physical)的方法:對於可能產生安全疑慮的實體目標要加以管制,例如門禁、重要設施的保護。 3. 管理上的(administrative)的方法:把存取控制的安全作業變成企業日常運作的政策與常規,加以適當的管理與責任畫分。 [存取控制的程序] 存取控制的功能引導使用者與系統跟其他的系統與資源進行有安全保障的溝通與互動,對於系統與資源的存取必須先對使用者進行身份的確認(identification),然後經過驗證的程序(authentication procedure)來檢驗使用者表明的身份是真是假,這個程序也會決定驗證通過以後核准授權的層次(level of authorization) [存取控制的對象與標的] 我們可以把存取(access)看成是主方(subject)與受方(object)之間的資訊流通。Subject代表一個主動的個體(active entity),要求對object或是object中的資料進行存取。使用者(user)、程式(program)或處理元(process)都可能是subject,需要對object進行存取來完成某種工作,例如一個程式開啟一個檔案的時候,程式是subject,檔案就是object。Object代表一個被動的個體(passive entity),內含資訊,檔案、資料庫、程式、電腦、目錄或表格的欄位等都可能是object。
[安全原則(security principles)] 任何一種安全的控制都會有以下的安全原則(security principles),所以這3項同樣也是存取控制機制要發揮的功能 : 1. 可用性(availability) : 資源必須在需要的時候提供給使用者。 2. 完整性(integrity): 資訊必須完整而精確,沒有受到未經許可的使用或更改。 3. 保密性(confidentiality) : 確保資訊沒有被暴露給沒有使用權限的使用者或程式。 身份識別(identification)與驗證(authentication) 一個使用者在使用資源以前必須證明自己的身份、具有證件(credentials),同時取得所需要的權限。一旦這些條件都齊備,就可以開始使用資訊,不過系統也會監控並記錄使用者在系統中的活動。
身份識別與鑑別的方法與技術 要進行身份的識別與鑑別通常會用到3種條件:使用者所知道的(something a person knows)、使用者所擁有的(something a person has),或是使用者所具有的(something a person is)。所謂的強力的驗證(strong authentication)是指驗證的時候至少用到上述的其中兩種條件,這樣可以讓駭客更難偽裝或是破解。 [身份的管理(identity management)] 所謂的身份管理是指運用各種軟體來進行身份識別、鑑別與授權,軟體工具的使用讓這些工作得以自動化,降低行政成本、提昇安全,同時改善企業整體的服務品質。
[生物特徵度量(biometrics)] 生物特徵度量(biometrics)透過個人特徵或行為的分析來判定身份,是相當有效而精確的鑑別方法。由於生物特徵度量的技術很複雜,建置的成本比較高。由於個人身上的特徵通常不會改變,所以鑑別時很準備。所謂的個人特徵包括眼睛虹膜(iris)、視網膜(retina)與指紋(fingerprint)等。 系統有可能把本人錯認為偽裝的(false negatives),或是把偽裝者當做是本尊(false positives)。系統必須做經常的校準,維持準確性。當生物特徵度量系統拒絕有使用權限的本尊時,這時候發生的錯誤稱為Type I error(false rejection rate),若是接受偽裝者則是發生Type II error(false acceptance rate)。系統必須設法降低這兩種錯誤,尤其是Type II error最危險。 比較不同的生物特徵度量系統時會使用一些參數,其中一項是CER(crossover error rate),代表false rejection rate等於false acceptance rate的那一個轉折點,例如CER為3的系統就比CER為4的系統來得精確。
[密碼(password)] 使用者在識別成功之後再輸入一個密碼是常見的系統識別與驗證的機制,密碼只有使用者自己知道,直到目前為止,我們進入大多數的系統之前都需要輸入密碼。 [單次密碼(one-time passwords)] 單次密碼(one-time passwords)是指只能使用一次的密碼,也稱為動態密碼(dynamic passwords),一旦使用過一次以後就無效了 自決式的(discretionary)模型 檔案算是非常普遍的資源,當使用者建立一個檔案以後,就成為該檔案的擁有者(owner),使用者的身份(identifier)會儲存到檔頭(file header),這種擁有的權限(ownership)也可以指定給其他的使用者。自決式的(discretionary)存取控制模型的精神就是讓資源的擁有者掌握資源的存取控制,決定誰有存取的存限。 強制式的(mandatory)模型 在強制式的存取控制(MAC, mandatory access control)中,系統對於存取控制的掌握有最大的權限,跟其他的存取控制模型比較起來,MAC更為嚴謹,而且有結構,使用者會分配到一個安全等級(security clearance),資源則具有指定的安全分類(classification)。授權的時候比較使用者的安全等級與資源的安全分類,從結果來決定是否授權。 非自決式的(nondiscretionary)模型 以角色為基礎的存取控制(RBAC, role-based access control)模型算是一種非自決式的(nondiscretionary)模型,使用者存取資源的權限決定於所扮演的角色(role),由於角色是被分配指定的,不是使用者自己決定的,所以算是非自決式的存取控制。自決式的存取控制必須針對每個使用者與每種資源來訂定使用權限,假如使用者與資源眾多,情況就會變得很複雜。 存取控制的技術 以規則為主的存取控制(rule-based access control) 以規則為主的存取控制(rule-based access control)透過規則來訂定subject與object之間的存取關係。規則可能很簡單也可能很複雜,一旦訂好規則,則一切存取的進行都要依據規則來判定。以規則為主的存取控制不必與身份(identity)有關,以DAC來說,的確是以身份為主,因為存取控制會規定某個subject可以存取某個object,進行存取之前必須驗證subject的身份。以規則為主的存取控制可以規定所有接收的e-mail大小不超過20Mbs,則所有的使用者都受這個規則的規範。 有限制的使用者介面(constrained user interface) 有限制的使用者介面(constrained user interface)可以用來限制使用者的使用權限,包括系統的功能、資訊與系統的資源。常見的有3種類型:選單(menu)、資料庫視界(database views)與設限的使用介面。 存取控制矩陣(access control matrix) 存取控制矩陣(access control matrix)是描述subject與object之間存取關係的一種矩陣,其內容訂定subject能夠對object進行的存取動作。存取控制矩陣常見於DAC中,存取權限可以直接指定給subject(稱為capabilities)或是直接指定給object(稱為ACL, access control list)。 與內容相關的存取控制(content-dependent access control) 與內容相關的存取控制(content-dependent access control)會以object的內容來決定存取的權限,舉例來說,某個企業中經理可以查看其部門內員工的薪資,但是不能查看其他部門內員工的薪資,所以能否存取這一類的資料就跟資料的內容有關。 與環境因素相關的存取控制(context-dependent access control) 系統在決定是否授權時會依據目前的狀況來判定,所謂目前的狀態是指存取請求發生時環境的情況,譬如防火牆收到一個外來封包的時候可以檢查該封包到達前收到哪些其他的封包,判斷是否依據某種協定在進行,假如沒有合理的順序,就可能判定成可疑的事件,回報給管理者。 存取控制的管理 存取控制的機制建立以後就會需要適當的管理,透過管理來確認原來規劃的制度按照預期的進度來執行。存取控制的管理可以分成兩大類:集中的(centralized)與分散的(de-centralized)。 存取控制的方法 存取控制在實作上可能存在於一些個別的系統或是網路層中,有的是作業系統核心的功能、有的存在於一些應用或是設備中,有的則是需要特別再安裝的軟體。不管以那一種型式存在,這些軟體在功能上要能互相搭配。存取控制有3大類:行政的(administrative)、技術的(technical)與實體的(physical),每一類的存取控制都有不同的存取控制機制,在執行上可能是人為的或是自動進行的 存取控制的類型 存取控制的類型可以分成管理上的(administrative)、實體上的(physical)與技術上的(technical)一共3大類。不管是那一類型的存取控制,其防禦的本質又可以分成6大類型:預防的(preventive)、偵測的(detective)、矯正的(corrective)、干擾拖延的(deterrent)、復原的(recovery)與補償的(compensative)
責任機制(Accountability) 稽核的機制可以確認使用者在資源存取過程中應負的責任,檢驗安全政策是否確實,而且可以當做調查時的工具。所謂的責任機制(Accountability)其實就是追究安全事件發生因果的機制,能夠追究出來就可以確定責任的歸屬 存取控制的作業實務 在正常的存取控制環境中,使用者要經過識別與驗證之後才得到授權,開始使用資源之後還會受到系統安全機制的稽核。除此之外,平常要做好一些存取控制所要求的工作,確保系統沒有可資運用的漏洞,雖然資安管理者平時就夠忙了,還是有一些如表13-4所列的日常作業必須按時完成。 以存取權矩陣(access matrix)為例 用陣列來描述保護的模型是一種蠻受歡迎的方法,所謂的存取權矩陣(access matrix)就是一種保護的模型(protection model),陣列是一般人都很熟悉的資料結構,大多數的程式語言都支援陣列,矩陣是一種二維的陣列。
存取權矩陣中的元素access-matrix(i,j)記錄領域Di對物件Oj的存取權限,這樣一來,就可以很清楚的看到保護的政策,也就是陣列本身的內容,以及保護的機制,也就是實作陣列的方法與達到陣列內容涵義的手段。作業系統可以決定處理元在那個領域下執行,而使用者可以透過存取權矩陣的設定來建立保護的政策。這裡有一個很特別的觀念,就是領域本身也可以看成是需要保護的物件,同樣可以為他們設定保護的政策。 存取權矩陣的實作 所謂的實作(implementation) 是把觀念與理論實際地製作出來,實作時通常會以寫程式的角度來思考。最簡單的實作方式是把存取權矩陣當做一個全域表格(global table)來處理,裡頭的資料格式為: 全域表格資料格式: <domain, object, a set of rights> 每當一個操作要進行時,系統可以到全域表格裡尋找是否有符合條件的資料存在。顯然全域表格會很大,造成實際執行時的效果欠佳。另一種方式是從物件著手,針對每一個物件記載存取權的串列(access list) ,裡頭的元素格式如下: 存取權的串列元素格式: <domain, a set of access rights> 另外還可以保存一個預設的存取權(default access rights)的集合,代表通用的存取權。系統可以先搜尋通用的存取權,節省一點時間。假如針對每個領域記錄一組存取能力的串列(capability list) ,我們就可以知道在領域內有那些物件,而有那些操作可以用在這些物件上。領域內處理元的權限決定於存取能力的串列,但是處理元卻不能直接存取存取能力的串列。 除了以上兩種方式以外,還有一個折衷的辦法,我們可以使用另外一個更具有效率與彈性的方法: 1. 每個物件保持一串位元型式(list of bit patterns),叫做鎖(locks)。 2. 每個領域保持一串位元型式(list of bit patterns),叫做鑰匙(keys)。 處理元在某個領域中執行時,假如要存取某個物件,只要比對物件的鎖與領域的鑰匙,若有相符的,則處理元就可以進行存取。 存取能力的串列(capability list) 並未與使用者的需求直接相關,但是針對某處理元來決定是否有存取權比較容易,只要處理元提供capability,系統比對領域內是否有該capability即可。Lock-Key的機制最有彈性,大多數的系統採用access list與capability的混合機制,到底作業系統採用那種機制決定於作業系統本身的設計。 企業資訊安全所受到的威脅可能來自外部、也可能來自內部,一般人可能以為攻擊或不法的行為都來自外部,其實內部的威脅往往更嚴重,因為外部的駭客必須經過層層的防禦才能接觸到企業的重要資源,而內部的不軌員工不但已經具有一些使用權限、而且更熟悉內部的作業,也得到初步的信任,反而更容易產生更大的危害。 字典攻擊(dictionary attack) 駭客可以利用程式來自動比對密碼檔案的資料與以任意字元組合形成的密碼 [防治的方法] 避免以明文(cleartext)來傳遞密碼,密碼選用時盡量選擇難以猜出的字元組合,最好在密碼中包含特殊的字元。 蠻力攻擊(brute force attack) 蠻力攻擊(brute force attack)透過輸入值的變化來持續地嘗試,直到成功為止。所以假如想破解的是密碼,就嘗試各種密碼直到猜到為止。通常駭客可以先用字典攻擊猜出部分的密碼,再用蠻力攻擊試其他剩餘的組合。 [防治的方法] 直接對自己的系統進行蠻力攻擊就可以先發現一些弱點所在,對於可疑的活動要加以記錄與稽核,透過入侵偵測系統監控可疑的活動,對於可疑的嘗試次數設定上限。 假造的登入畫面(spoofing at logon) 駭客可以在使用者的電腦上先執行一個假造的登入畫面,使用者不疑有它,直接輸入帳號與密碼,此時駭客程式把帳號密碼記錄下來,顯示一個輸入錯誤的訊息,然後終止程式。這時候使用者並不覺得自己被騙了,會以為方才按鍵不小心輸入錯誤。網路釣魚(phishing)就常運用這樣的技倆,模仿大型商業網站的畫面來詐騙。 [防治的方法] 作業系統本身可以設定成顯示錯誤的登入次數,這樣使用者下回登入時若沒有發現這樣的訊息就可能會起疑心。 |
|
( 知識學習|隨堂筆記 ) |