一. 權限的由來
遠方的某個山腳下,有一片被森林包圍的草原,草原邊上居住著一群以牧羊為生的牧民。草原邊緣的森林里,生存著各種動物,包括野狼。
由于羊群是牧民們的主要生活來源,它們的價值便顯得特別珍貴,為了防止羊的跑失和野獸的襲擊,每戶牧民都用柵欄把自己的羊群圈了起來,只留下一道小門,以便每天傍晚供羊群外出到一定范圍的草原上活動,實現了一定規模的保護和管理效果。
最初,野狼只知道在森林里逮兔子等野生動物生存,沒有發現遠處草原邊上的羊群,因此,在一段時間里實現了彼此和平相處,直到有一天,一只為了追逐兔子而湊巧跑到了森林邊緣的狼,用它那靈敏的鼻子嗅到了遠處那隱隱約約的烤羊肉香味。
當晚,突然出現的狼群襲擊了草原上大部分牧民飼養的羊,它們完全無視牧民們修筑的僅僅能攔住羊群的矮小柵欄,輕輕一躍便突破了這道防線……雖然聞訊而來的牧民們合作擊退了狼群,但是羊群已經遭到了一定的損失。
事后,牧民們明白了柵欄不是僅僅用來防止羊群逃脫的城墻,各戶牧民都在忙著加高加固了柵欄……
如今使用Windows 2000/XP等操作系統的用戶,或多或少都會聽說過“權限”(Privilege)這個概念,但是真正理解它的家庭用戶,也許并不會太多,那么,什么是“權限”呢?對于一般的用戶而言,我們可以把它理解為系統對用戶能夠執行的功能操作所設立的額外限制,用于進一步約束計算機用戶能操作的系統功能和內容訪問范圍,或者說,權限是指某個特定的用戶具有特定的系統資源使用權力。
掌握了“Ring級別”概念的讀者也許會問,在如今盛行的80386保護模式中,處理器不是已經為指令執行做了一個“運行級別”的限制了嗎?而且我們也知道,面對用戶操作的Ring 3級別相對于系統內核運行的Ring 0級別來說,能直接處理的事務已經被大幅度縮減了,為什么還要對運行在“權限少得可憐”的Ring 3層次上的操作系統人機交互界面上另外建立起一套用于進一步限制用戶操作的“權限”概念呢?這是因為,前者針對的是機器能執行的指令代碼權限,而后者要針對的對象,是坐在計算機面前的用戶。
對計算機來說,系統執行的代碼可能會對它造成危害,因此處理器產生了Ring的概念,把“裸露在外”的一部分用于人機交互的操作界面限制起來,避免它一時頭腦發熱發出有害指令;而對于操作界面部分而言,用戶的每一步操作仍然有可能傷害到它自己和底層系統——盡管它自身已經被禁止執行許多有害代碼,但是一些不能禁止的功能卻依然在對這層安全體系作出威脅,例如格式化操作、刪除修改文件等,這些操作在計算機看來,只是“不嚴重”的磁盤文件處理功能,然而它忽略了一點,操作系統自身就是駐留在磁盤介質上的文件!因此,為了保護自己,操作系統需要在Ring 3籠子限制的操作界面基礎上,再產生一個專門用來限制用戶的柵欄,這就是現在我們要討論的權限,它是為限制用戶而存在的,而且限制對每個用戶并不是一樣的,在這個思想的引導下,有些用戶能操作的范圍相對大些,有些只能操作屬于自己的文件,有些甚至什么也不能做……(圖.權限)
正因為如此,計算機用戶才有了分類:管理員、普通用戶、受限用戶、來賓等……
還記得古老的Windows 9x和MS-DOS嗎?它們僅僅擁有基本的Ring權限保護(實模式的DOS甚至連Ring分級都沒有),在這個系統架構里,所有用戶的權力都是一樣的,任何人都是管理員,系統沒有為環境安全提供一點保障——它連實際有用的登錄界面都沒有提供,僅僅有個隨便按ESC都能正常進入系統并進行任何操作的“偽登錄”限制而已。對這樣的系統而言,不熟悉電腦的用戶經常一不小心就把系統毀掉了,而且病毒木馬自然也不會放過如此“松軟”的一塊蛋糕,在如今這個提倡信息安全的時代里,Windows 9x成了名副其實的雞肋系統,最終淡出人們的視線,取而代之的是由Windows NT家族發展而來的Windows 2000和Windows XP,此外還有近年來致力向桌面用戶發展的Linux系統等,它們才是能夠滿足這個安全危機時代里個人隱私和數據安全等要求的系統。
Win2000/XP系統是微軟Windows NT技術的產物,是基于服務器安全環境思想來構建的純32位系統。NT技術沒有辜負微軟的開發,它穩定,安全,提供了比較完善的多用戶環境,最重要的是,它實現了系統權限的指派,從而杜絕了由Win9x時代帶來的不安全操作習慣可能引發的大部分嚴重后果。
二. 權限的指派
1.普通權限
雖然Win2000/XP等系統提供了“權限”的功能,但是這樣就又帶來一個新問題:權限如何分配才是合理的?如果所有人擁有的權限都一樣,那么就等于所有人都沒有權限的限制,那和使用Win9x有什么區別?幸好,系統默認就為我們設置好了“權限組”(Group),只需把用戶加進相應的組即可擁有由這個組賦予的操作權限,這種做法就稱為權限的指派。
默認情況下,系統為用戶分了6個組,并給每個組賦予不同的操作權限,依次為:管理員組(Administrators)、高權限用戶組(Power Users)、普通用戶組(Users)、備份操作組(Backup Operators)、文件復制組(Replicator)、來賓用戶組(Guests),其中備份操作組和文件復制組為維護系統而設置,平時不會被使用。(圖.默認分組)
系統默認的分組是依照一定的管理憑據指派權限的,而不是胡亂產生,管理員組擁有大部分的計算機操作權限(并不是全部),能夠隨意修改刪除所有文件和修改系統設置。再往下就是高權限用戶組,這一部分用戶也能做大部分事情,但是不能修改系統設置,不能運行一些涉及系統管理的程序。普通用戶組則被系統拴在了自己的地盤里,不能處理其他用戶的文件和運行涉及管理的程序等。來賓用戶組的文件操作權限和普通用戶組一樣,但是無法執行更多的程序。(圖.不同賬戶權限的限制)
這是系統給各個組指派的權限說明,細心的用戶也許會發現,為什么里面描述的“不能處理其他用戶的文件”這一條規則并不成立呢,我可以訪問所有文件啊,只是不能對系統設置作出修改而已,難道是權限設定自身存在問題?實際上,NT技術的一部分功能必須依賴于特有的“NTFS”(NT文件系統)分區才能實現,文件操作的權限指派就是最敏感的一部分,而大部分家庭用戶的分區為FAT32格式,它并不支持NT技術的安全功能,因此在這樣的文件系統分區上,連來賓用戶都能隨意瀏覽修改系統管理員建立的文件(限制寫入操作的共享訪問除外),但這并不代表系統權限不起作用,我們只要把分區改為NTFS即可。
2.特殊權限
除了上面提到的6個默認權限分組,系統還存在一些特殊權限成員,這些成員是為了特殊用途而設置,分別是:SYSTEM(系統)、Everyone(所有人)、CREATOR OWNER(創建者)等,這些特殊成員不被任何內置用戶組吸納,屬于完全獨立出來的賬戶。(圖.特殊權限成員)
前面我提到管理員分組的權限時并沒有用“全部”來形容,秘密就在此,不要相信系統描述的“有不受限制的完全訪問權”,它不會傻到把自己完全交給人類,管理員分組同樣受到一定的限制,只是沒那么明顯罷了,真正擁有“完全訪問權”的只有一個成員:SYSTEM。這個成員是系統產生的,真正擁有整臺計算機管理權限的賬戶,一般的操作是無法獲取與它等價的權限的。
“所有人”權限與普通用戶組權限差不多,它的存在是為了讓用戶能訪問被標記為“公有”的文件,這也是一些程序正常運行需要的訪問權限——任何人都能正常訪問被賦予“Everyone”權限的文件,包括來賓組成員。
被標記為“創建者”權限的文件只有建立文件的那個用戶才能訪問,做到了一定程度的隱私保護。
但是,所有的文件訪問權限均可以被管理員組用戶和SYSTEM成員忽略,除非用戶使用了NTFS加密。
無論是普通權限還是特殊權限,它們都可以“疊加”使用,“疊加”就是指多個權限共同使用,例如一個賬戶原本屬于Users組,而后我們把他加入Administrators組,那么現在這個賬戶便同時擁有兩個權限身份,而不是用管理員權限去覆蓋原來身份。權限疊加并不是沒有意義的,在一些需要特定身份訪問的場合,用戶只有為自己設置了指定的身份才能訪問,這個時候“疊加”的使用就能減輕一部分勞動量了。
3.NTFS與權限
在前面我提到了NTFS文件系統,自己安裝過Win2000/XP的用戶應該會注意到安裝過程中出現的“轉換分區格式為NTFS”的選擇,那么什么是NTFS?NTFS(New Technology File System)是一個特別為網絡和磁盤配額、文件加密等管理安全特性設計的磁盤格式,只有使用NT技術的系統對它直接提供支持,也就是說,如果系統崩潰了,用戶將無法使用外面流行的普通光盤啟動工具修復系統,因此,是使用傳統的FAT32還是NTFS,一直是個倍受爭議的話題,但如果用戶要使用完全的系統權限功能,或者要安裝作為服務器使用,建議最好還是使用NTFS分區格式。
與FAT32分區相比,NTFS分區多了一個“安全”特性(圖.FAT32與NTFS的比較),在里面,用戶可以進一步設置相關的文件訪問權限,而且前面提到的相關用戶組指派的文件權限也只有在NTFS格式分區上才能體現出來。例如,來賓組的用戶再也不能隨便訪問到NTFS格式分區的任意一個文件了,這樣可以減少系統遭受一般由網站服務器帶來的入侵損失,因為IIS賬戶對系統的訪問權限僅僅是來賓級別而已,如果入侵者不能提升權限,那么他這次的入侵可以算是白忙了。
使用NTFS分區的時候,用戶才會察覺到系統給管理員組用戶設定的限制:一些文件即使是管理員也無法訪問,因為它是SYSTEM成員建立的,并且設定了權限。(圖.NTFS權限審核導致訪問被拒絕)
但是NTFS系統會帶來一個眾所周知的安全隱患:NTFS支持一種被稱為“交換數據流” (Alternate Data Stream,ADs)的存儲特性,原意是為了和Macintosh的HFS文件系統兼容而設計的,使用這種技術可以在一個文件資源里寫入相關數據(并不是寫入文件中),而且寫進去的數據可以使用很簡單的方法把它提取出來作為一個獨立文件讀取,甚至執行,這就給入侵者提供了一個可乘之機,例如在一個正常程序里插入包含惡意代碼的數據流,在程序運行時把惡意代碼提取出來執行,就完成了一次破壞行動。(圖.隱秘的數據流)
不過值得慶幸的是,數據流僅僅能存在于NTFS格式分區內,一旦存儲介質改變為FAT32、CDFS等格式,數據流內容便會消失了,破壞代碼也就不復存在。
4.權限設置帶來的安全訪問和故障
很多時候,管理員不得不為遠程網絡訪問帶來的危險因素而擔憂,普通用戶也經常因為新漏洞攻擊或者IE瀏覽器安全漏洞下載的網頁木馬而疲于奔命,實際上合理使用NTFS格式分區和權限設置的組合,足以讓我們抵御大部分病毒和黑客的入侵。
首先,我們要盡量避免平時使用管理員賬戶登錄系統,這樣會讓一些由IE帶來的病毒木馬因為得不到相關權限而感染失敗,但是國內許多計算機用戶并沒有意識到這一點,或者說沒有接觸到相關概念,因而大部分系統都是以管理員賬戶運行的,這就給病毒傳播提供了一個很好的環境。如果用戶因為某些工作需要,必須以管理員身份操作系統,那么請降低IE的運行權限,有試驗證明,IE運行的用戶權限每降低一個級別,受漏洞感染的幾率就相應下降一個級別,因為一些病毒在例如像Users組這樣的權限級別里是無法對系統環境做出修改的。降低IE運行權限的方法很多,最簡單的就是使用微軟自家產品“Drop My Rights”對程序的運行權限做出調整。(圖.用RunAs功能降低IE運行級別)
對管理員來說,設置服務器的訪問權限才是他們關心的重點,這時候就必須搭配NTFS分區來設置IIS了,因為只有NTFS才具備文件訪問權限的特性。然后就是安裝IIS,經過這一步系統會建立兩個用于IIS進程的來賓組賬戶“IUSR_機器名”和“IWAM_機器名”,但這樣還不夠,別忘記系統的特殊成員“Everyone”,這個成員的存在雖然是為了方便用戶訪問的,但是對于網絡服務器最重要的“最小權限”思路(網絡服務程序運行的權限越小,安全系數越高)來說,它成了安全隱患,“Everyone”使得整個服務器的文件可以隨便被訪問,一旦被入侵,黑客就有了提升權限的機會,因此需要把惹禍的“Everyone”成員從敏感文件夾的訪問權限去掉,要做到這一步,只需運行“cacls.exe 目錄名 /R "everyone" /E”即可。敏感文件夾包括整個系統盤、系統目錄、用戶主目錄等。這是專為服務器安全設置的,不推薦一般用戶依葫蘆畫瓢,因為這樣設定過“最小權限”后,可能會對日常使用的一些程序造成影響。
雖然權限設定會給安全防范帶來一定的好處,但是有時候,它也會闖禍的……
“文件共享”(Sharing)是被使用最多的網絡遠程文件訪問功能,卻也是最容易出問題的一部分,許多用戶在使用一些優化工具后,發現文件共享功能突然就失效了,或者無論如何都無法成功共享文件,這也是很多網絡管理員要面對的棘手問題,如果你也不巧遇到了,那么可以嘗試檢查以下幾種原因:
(1).相應的服務被禁止。文件共享功能依賴于這4個服務:Computer Browser、TCP/IP NetBIOS Helper Service、Server、Workstation,如果它們的其中一個被禁止了,文件共享功能就會出現各種古怪問題如不能通過計算機名訪問等,甚至完全不能訪問。
(2).內置來賓賬戶組成員Guest未啟用。文件共享功能需要使用Guest權限訪問網絡資源。
(3). 內置來賓賬戶組成員Guest被禁止從網絡訪問。這問題常見于XP系統,因為它在組策略(gpedit.msc)->計算機配置->Windows設置->安全設置->本地策略->用戶權利指派->拒絕從網絡訪問這臺計算機里把Guest賬戶添加進去了,刪除掉即可真正啟用Guest遠程訪問權限。
(4).限制了匿名訪問的權限。默認情況下,組策略(gpedit.msc)->計算機配置->Windows設置->安全設置->本地策略->安全選項->對匿名連結的額外限制的設置應該是“無。依賴于默認許可權限”或者“不允許枚舉SAM賬號和共享”,如果有工具自作聰明幫你把它設置為“沒有顯式匿名權限就無法訪問”,那么我可以很負責的告訴你,你的共享全完蛋了。
(5).系統權限指派出現意外。默認情況下,系統會給共享目錄指派一個“Everyone”賬戶訪問授權,然而實際上它還是要使用Guest成員完成訪問的工作,但是有時候,Everyone卻忘記Guest的存在了,這是或我們就需要自己給共享目錄手動添加一個Guest賬戶,才能完成遠程訪問。(圖.手動添加一個賬戶權限)
(6).NTFS權限限制。一些剛接觸NTFS的用戶或者新手管理員經常會出這個差錯,在排除以上所有問題的前提下依然無法實現文件共享,哪里都碰過了就是偏偏不知道來看看這個目錄的“安全”選項卡,并在里面設置好Everyone的相應權限和添加一個Guest權限進去,如果它們會說話,也許早就在音箱里叫喚了:嘿,快看這里!喲嗬!
(7).系統自身設置問題。如果檢查了以上所有方法都無效,那么可以考慮重裝一個系統了,不要笑,一些用戶的確碰到過這種問題,重裝后什么也沒動,卻一切都好了。這大概是因為某些系統文件被新安裝的工具替換掉后缺失了文件共享的功能。
由權限帶來的好處是顯而易見的,但是我們有時候也不得不面對它給我們帶來的麻煩,沒辦法,誰叫事物都是有兩面性的呢,畢竟正是因為有了這一圈柵欄,用戶安全才有了保障。
三. 突破系統權限
距離上一次狼群的襲擊已經過了一個多月,羊們漸漸都忘記了恐懼,一天晚上,一只羊看準了某處因為下雨被泡得有點松軟低陷的柵欄,跳了出去??上н@只羊剛跳出去不久就遭遇了餓狼,不僅尸骨無存,還給狼群帶來了一個信息:柵欄存在弱點,可以突破!
幾天后的一個深夜,狼群專找地面泥濘處的柵欄下手,把柵欄挖松了鉆進去,再次洗劫了羊群。
雖然權限為我們做了不同范圍的束縛,但是這些束縛并不是各自獨立的,它們全都依靠于同樣的指令完成工作,這就給入侵者提供了“提升權限”(Adjust Token Privilege)的基礎。
所謂“提升權限”,就是指入侵者使用各種系統漏洞和手段,讓自己像那只羊或者狼群那樣,找到“柵欄”的薄弱環節,突破系統指派的權限級別,從而把自己當前的權限提高多個級別甚至管理員級別的方法,提升權限得以成功的前提是管理員設置的失誤(例如沒有按照“最小權限”思路來配置服務器)或者業界出現了新的溢出漏洞等(例如LSASS溢出,直接拿到SYSTEM權限)。
通常,如果IIS或SQL兩者之一出現了漏洞或設置失誤,入侵者會嘗試直接調用SQL注入語句調用特殊的系統存儲過程達到直接執行命令的愿望,如果這一步成功,那么這臺服務器就淪陷了;但如果管理員還有點本事,刪除了存儲過程或者補好了SQL注入點呢?入侵者會想辦法得到IIS的瀏覽權限,例如一個WebShell之類的,然后搜尋整臺服務器的薄弱環節(前提:管理員沒刪除Everyone賬戶權限),例如Serv-U、IIS特殊目錄、各種外部CGI程序、FSO特殊對象等,這場貓和耗子的游戲永遠也不會結束,如果管理員功底不夠扎實,那么只能看著入侵者破壞自己的勞動成果甚至飯碗了。
四. 結語
狼群的進攻再次被牧民們擊退了,吸取了這次教訓,牧民們在加固柵欄時都會把柵欄的根部打在堅硬的泥地上,并且嵌得很深。
餓狼們,還會再來嗎?
權限是計算機安全技術的一個進步,但是它也是由人創造出來的,不可避免會存在不足和遺漏,我們在享受權限帶來的便利時,也不能忽視了它可能引起的安全隱患或者設置失誤導致的眾多問題。要如何才算合理使用權限,大概,這只能是個仁者見仁,智者見智的問題了。
今天,你又在用管理員賬戶心安理得的到處逛了嗎?