史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 資訊系統安全備援防護技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-02-15, 12:13 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 漫談主流操作系統中可信路徑安全機制

漫談主流操作系統中可信路徑安全機制
--------------------------------------------------------------------------------

電腦系統中,用戶在一般情況並不直接與內核打交道,中間還有一層套用層作為接頭在用戶與內核之間相互作用著,但這種設計能夠保護內核不會被用戶肆意修改窺測,但也隨之帶來了安全問題,由於套用層並不是能完全信任之的,因此在操作系統安全功能中,往往會提供可信路徑這一功能[這也是黃皮書 B2 級的安全要求]。


可信路徑[trusted path]是怎麼樣的概念?顧名思義,它就是這麼一種功能的實現:避過套用層,在用戶與內核之間開闢一條直接的可信任的交互通道。



真的有必要那麼麻煩,不得不在進行高風險操作時使用可信路徑與內核互動嗎?
遺憾地告訴你:
確實是!有經驗的系統管理員普遍都很清楚來自網路的威脅有多麼嚴重。


黑帽子們能使用特洛伊木馬[Trojan horse],記錄你在登入及其它敏感操作時的行動,從而竊取你的寶貴密碼。


你一定對"ctrl + alt + del"三鍵序列極有印象,在DOS年代,我們用它快速重啟機器,並稱之為"熱啟動",而在WINDOWS 9X時代,我們則用它檢視行程,不過也許你沒有注意到,在WINDOWS9X 向WINNT過渡後,我們的PC也執行著NT內核的WIN2000/XP時,事實上"ctrl + alt + del"三鍵的職能已經有了些微改變,微軟在它的官方我的文件中,稱"ctrl + alt + del"為SAS[Secure Attention Sequence],並且將之列為安全功能-可信路徑的構成部分,而在linux下,也有著類似的按鍵序列可用。

Linux 環境下的安全留意鍵—— SAK[Secure Attention Key],這個SAK是一組鍵, 在我們一般的X86平台下,它是"alt+sysrq+k",而在SPARC下,SAK則是"alt+STOP+k", SAK預設不開啟,需要用 echo "1" > /proc/sys/kernel/sysrq 這條指令啟動,當然,你也可以將它寫進登入指令碼中,這樣就不必每次麻煩了。對SAK實現有興趣的朋友,可以參考參考 linux/drivers/char/sysrq.c和 linux/drivers/char/tty_io.c::do_SAK
SAK序列鍵其實是被稱做"magic sysrq key" 中的一組,"magic sysrq key" 還有一些特殊鍵,與SAK一樣,它們都是使用"alt + sysrq + ..."格式,其中的...可換為某些特殊的字母譬如"i",在《MAGIC SYSRQ KEY DOCUMENTATION v1.32》手冊上,"alt + sysrq +i" 所代表的行為是"Send a SIGKILL to all processes, except for init." 意思就是向除了 init 外的所有行程傳送一條kill 信號;現在我們看看在《MAGIC SYSRQ KEY DOCUMENTATION v1.32》手冊中對"alt + sysrq +k"的解釋吧:

"sa'K' (Secure Access Key) is usefull when you want to be
sure there are no trojan program is running at console and
which could grab your password when you would try to login.
It will kill all programs on given console and thus
letting you make sure that the login prompt you see is
actually the one from init, not some trojan program. "

這段話正是SAK的功能寫照:

SAK對你確定在登入時沒有試突竊取密碼的特洛伊木馬程序執行在當前控制台上,它能殺死當前控制台上的全部應用程式,以此令你確信看到的登入畫面來自init,而非木馬程序。


你按下這組鍵時,也就是引發了這一特定事件,那麼按照設計的流程,系統陷入核心狀態,這時你將可以直接與內核溝通,也就是說,出現在你的「理應」是如假包換的真實登入提示信息,為什麼是理應?

我們下文分析:->
在討論SAK的脆弱點之前,我們先來看看當你按下SAK時,系統發生了什麼事情吧,當系統處在正常狀態下時,用戶按下鍵盤時,此事件將進入核心以解釋,若其掃瞄碼對應為SAK,則內核將找出引發此SAK的終端,之後為了新增可信路徑,則需要殺死所有非核心行程,也就是說在此時,任何此終端上用戶建立的行程都將死亡,當然,可能存在的木馬行程也被殺死了,系統最後將重新開啟登入行程,使用戶獲得放心的交互。



注意:

1:
事實上這裡提到的與內核交互,確切地說應該是與TCB[Trusted Computing Base,可信計算基]的軟體部分打交道,包括安全內核與可信系統程序,TCB事實上是個很廣泛的概念,包括了安全內核、特權程序、系統指令與相關硬體設備,甚至在邏輯上包括了系統管理員和安全管理員,離題太遠,請各位對TCB感興趣的朋友查詢相關手冊`:->


2:
Q:SAK怎樣判斷該殺死哪些行程,以免少殺及誤殺?

A:這可真是一個好問題,因為編製登入模擬器木馬的的黑客必須深刻理解SAK殺死套用行程的實現方式,已此試突破壞這機制,事實上,SAK指令殺死套用行程是根據行程的PID來執行的,linux系統剛剛啟動時是執行在核心狀態的,這時只有一個啟始化行程,啟始化完畢時,啟始化行程將啟動一個init行程,自己進入 idle循環,init的PID=1,它是一個真正的行程,也將是行程樹上的根,之後的所有行程都是init行程的「子子孫孫」,可以使用pstree指令檢視系統中當前的行程樹圖,以此瞭解行程間的關係。


剛剛我們已經瞭解了linux操作系統下的可信路徑的相關知識,但是我想已經有不少朋友更想瞭解在WINDOWS NT/2000/XP下的可信路徑的情況,Now,let's go.
在NT系列windows操作系統中的可信路徑的引發方法是把 ctrl+alt+del這三個鍵同時按下,這稱為標準SAS[Secure Attention Sequence],當系統檢測到一個標準SAS序列的掃瞄碼時,將由winlogon 行程將系統設定為已註銷、已登入、已鎖定三種不同狀態,然後切換當前桌面到 Winlogon 桌面。


不過要注意到,WINDOWS中
的可信路徑的實現似乎與linux下大不一樣。譬如在WIN2000下,按下ctrl+alt+del,切換到winlogon桌面,但是當前用戶的行程並沒有在這個時候被殺死,譬如你可以聽著mp3按ctrl+alt+del,這樣做你將在winlogon桌面下,照樣聽mp3,如果其意義是需要註銷再登入,那自然的,註銷的時候,當前用戶的行程都會被殺死,不過那樣的操作從開始選單中的關機指令有什麼區別,並且,我們也可以在winlogon桌面上邊改密碼邊聽著mp3,不會有木馬在後台偷偷地記錄嗎?

對,用戶行程並不是像在 linux 下那樣被簡單地殺死,事實上,在winlogon 桌面啟始化程序中,新增了三個桌面:應用程式桌面(\Windows\WinSta0\default)、Winlogon桌面(\Windows\WinSta0\Winlogon)和螢幕保護桌面(\Windows\WinSta0\ScrenSaver)。



而在安全原則上,只有winlogon行程可以訪問到winlogon桌面,其它兩個桌面才允許用戶及其所屬行程訪問,因此雖然用戶行程在SAS激發後並不會被殺死,但它們也不能訪問winlogon桌面以偷竊用戶密碼,這就是「Windows特色的可信路徑實現道路」 :->
等等,你也許會想到GINA木馬,它不就是偽造的登入視窗嗎?在登入到windowsNT時,我們按下ctrl+alt+del這個所謂的可信路徑時,怎麼沒有將它殺掉?

事實上,GINA木馬並不是直接擊敗可信路徑這一功能,而是破壞了可信路徑下層的TCB,改變了TCB中軟體結構的一部分!現在我們來回憶一下GINA木馬的一些細節,還記得吧?

GINA[GINA: Graphical Identification and Authentication,圖形身份驗證 ] 在windows中,預設的GINA就是msgina.dll ,它是執行在winlogon.exe的行程空間中的,由註冊表中\HKEY_LOCAL_MACHINE\Softwar
e\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL=yourgina.dll 定義,預設情況下則就是msgina.dll,而GINA木馬的實現機理則就是通過修改註冊表,將原來的msgina.dll替換為自己的木馬GINA,以
此實現將截獲的用戶名和密碼儲存在某個文件中,供黑帽子讀取。


嚴格來說這確實不算是直接擊敗了SAS可信路徑功能,因為必須有administrator權限才能進行操作註冊表,完成替換系統檔案的工作,而這種方式是微軟提供給客戶的一種功能,方便客戶以自己的方式來進行用戶身份驗證,譬如使用指紋鑒別儀,視網膜掃校儀等非密碼驗證方式,只要替換msgina.dll為特定的GINA,就可以完成這種銜接工作,因此這只是一種功能,不是缺陷,更不能算是漏洞;並且,在WINDOWS這種操作系統中,若得到了admin權限,則再也沒有什麼不能做的事。


在美國foundstone公司編撰的《黑客大曝光》[Hacking Exposed]一書中,也提到了一個能捕獲ctrl + alt + del 三鍵序列之後的密碼操作的工具,Invisible Keylogger Stealth (IKS),它能遠端安裝,安裝後需要重啟,之後就能執行在後台,偷偷竊取用戶的密碼,並將其記錄在iks.dat 文件中,且該iks.dat 文件是二進制格式,需專用的datview程序解讀,隱蔽性不可謂不好,不過這個程序仍然不是直接擊敗可信路徑,而是破壞了目標機器的TCB,與GINA木馬類似的,它也需要管理員權限,因為它是關於編製設備驅動程式來實現其功能的,而在一台WINNT電腦上安全設備驅動,自然必須管理員才能完成操作。



因此這仍然不能算是一個漏洞,從TCB概念的角度來分析也是如此,是TCB中的一部分改變了另一部分,記得我們前面所說的系統管理員也是TCB的構成部分嗎?
這裡指的系統管理員並非直接的人,而是擁有管理權限的帳戶,機器、程序是不會辨別人類的,誰控
制了管理帳戶,機器就聽誰的指揮。

NT系列windows操作系統的啟動程序中關於SAS的定義程序是:
啟始化時GINA已經收到VOID WlxUseCtrlAltDel(HANDLE hWlx);這個函數它的作用就是通知winlogon.exe,GINA預設使用ctrl+alt+del這個標準SAS.如果要用自己定義SAS序列的話,開發者必須在編製自己的GINA.dll時
自行HOOK熱鍵.並且通過:

WlxSasNotify(hGlobalWlx, dwSasType);
這個函數來報告將使用的SAS。

GINA將提供給winlogon.exe一個函數:

VOID WINAPI WlxDisplaySASNotice(PVOID pContext);
用於顯示歡迎畫面以及驗證是否使用了自訂的SAS序列。


擊敗可信路徑的方法:在linux等類似UNIX操作系統下,攻擊者必須改變系統核心,由於核心是絕對信任自身的,而可信路徑引發時,內核將無條件地殺死全部用戶行程,因此邏輯上不存在能夠一直潛伏在系統中,當可信路徑引發時也不會被殺死的套用層木馬,因此唯一能夠擊敗可信路徑的方法是使用內核級別的ROOKIT,它們
能夠修改系統內核,使用程序重轉發IP或者其它形形色色可能的辦法來欺騙TCB和用戶;在WINNT操作系統下,事實上已經有很多程序可以遮閉掉 ctrl+alt+del這個標準SAS組合鍵,但是用戶發現這一組合鍵也被遮閉,肯定會馬上意識到系統已經被人做了手腳,因此事實上還是無法真正擊敗可信路徑;不過我們已經注意到在windowsXP下,按下ctrl+alt+del標準SAS組合鍵的並不是直接進入winlogon桌面,而是調出工作管理器,因此可以設想劫持ctrl+alt+del組合鍵,調出木馬工作管理器,這樣也具有一定的欺騙能力。



由於 winlogon 桌面只能由winlogon唯一一個行程可以對其進行訪問和操作,所以理論上只有獲得winlogon 在記憶體中的物理位址,才可能對其動手腳,這可夠麻煩的,目前也未見有針對windowsNT可信路徑的攻擊方法,只有一些替換GINA
什麼的攻擊,而前面我們已經分析過,對GINA的攻擊並不能算是真正擊敗了可信路徑安全機制,可見即使在今天,主流操作系統的可信路徑實現上還沒有發現能被攻擊者輕易利用的漏洞。



倒是在linux等類UNIX操作系統上,SAK的實現上存在拒絕服務問題,按下它可能突然導致系統重啟,另外在一些較低內核版本中,如果還沒有執行X,就輸入SAK,字母密鑰可能產生轉義序列;而執行X時輸入SAK,可能無法關閉X,即使它已經被殺死。

如果你發現SAK在你的系統上執行不正常,也可以通過手動編輯sysrq.c文件來遮閉它。


可信路徑這一安全機制在現代操作系統的發展上,已經是看的見風景的房間,雖然現在並沒有什麼程序或方法能直接擊敗它,但這並不說明它就是絕對安全的,從黃皮書的角度來看上,現在WINDOWS和UNIX兩大主流操作系統中,在定義層面上對它的實現還不嚴格,我們不妨翹首以待可信路徑這一機制的實現越來越安全。

sheepxxy@163.com
www.hackerbase.net






_____________________________@
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 08:14 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1