sam初識+sam詳解

suspension發表於2004-11-08

SAM是什麼?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

也許大家在網上看了許多的關於sam的傳奇的故事吧!那麼今天就讓我----偏執狂帶你們進入sam的所有吧!

 

第一節:初級認識sam

 

微軟做了兩個不同的系統骨架,一個叫Win32,我們用的Win9x/Me系統就附在它上面;另一個叫NTNew Technology),也就是WinNT/2000/XP/2003的骨架。不過很不幸,微軟有點“偏心”,Win32的骨架做得明顯有點過小,所以它成了瘦子,而NT則是典型的美國壯漢。更不幸的是,微軟給Win32配備的PWL門衛是個花瓶,不僅連個家門都看不住,而且嘴巴也守不住祕密;而NT呢,又撈了個好處,SAM門衛盡心盡責,嘴巴也難撬開。NT核心Windows作業系統的密碼安全性較Win32核心Windows作業系統的密碼安全性高出很多跟SAM不無關係,在這篇文章裡,我們就一起來認識一下NT核心Windows作業系統的看門神——SAM

它只聽本地安全認證(Local Security Authority)程式——LSASS.EXE的差遣,就連進門時的審查也是LSASS的指示。如果你把LSASS殺了,你就等著被趕出門吧——當然,對於普通使用者來說,如果你試圖用普通的程式管理工具或者Windows系統的程式管理殺掉“LSASS.EXE”程式的話,只會得到“該程式為關鍵系統程式,工作管理員無法結束程式。”的提示,本地安全認證(Local Security Authority)在Windows系統中主要負責以下任務:1.重新找回本地組的SID和使用者許可權;2.建立使用者的訪問令牌;3.管理本地安裝的服務所使用的服務賬號;4. 儲存和對映使用者許可權;5.管理稽核的策略和設定;6.管理信任關係。

由於一些設計上的失誤,在WinNT/2000裡,如果你忘記了密碼,那麼你要做的不是呼天喊地,只需要在非NT環境裡把SAM驅逐出硬碟就可以了。但是在XP以後的Windows作業系統裡,這個情況得以改善,如果你把sam踢了,NT也躲著死活不肯出來了。 當然,這也並不是說XP以後的Windows的作業系統密碼都無法破解,要知道:經典的LC4NtPassword都專門拿SAM開刀.

windows NTwin2000中對使用者帳戶的安全管理使用了安全帳號管理器(security account manager)的機制,安全帳號管理器對帳號的管理是通過安全標識進行的,安全標識在帳號建立時就同時建立,一旦帳號被刪除,安全標識也同時被刪除。安全標識是唯一的,即使是相同的使用者名稱,在每次建立時獲得的安全標識都時完全不同的。因此,一旦某個帳號被刪除,它的安全標識就不再存在了,即使用相同的使用者名稱重建帳號,也會被賦予不同的安全標識,不會保留原來的許可權。

第二節: 帳號資訊在SAM檔案中是如何儲存

 

SAM檔案中儲存了兩個不同的口令資訊:LanManagerLM)口令雜湊演算法和更加強大的加密NT版。LM就是NT口令檔案的弱點。我們來看看LM口令演算法是如何加密口令的,考慮這樣一個口令:Ba01cK28tr,這樣的口令已經可以稱的上是一個安全的口令了,雖然沒有!#等特殊字元,但是已經包含大寫字母,小寫字母和數字,並且具有無規律性。可以認為是符合安全的要求的一個口令。 LM對口令的處理方法是:如果口令不足14位,就用0把口令補足14位,並把所有的字母轉稱大寫字母。之後將處理後的口令分成兩組數字,每組是7位。剛才我們所提到的口令經處理後就變成BA01CK28TR0000部分。然後由這兩個7位的數字分別生成8位的DES KEY,每一個8位的DES KEY都使用一個魔法數字(0x4B47532140232425用全是1的一個KEY進行加密獲得的)再進行一次加密,將兩組加密完後的字串連在一起,這就是最終的口令雜湊。這個字元傳看起來是個整體,但是象L0phtcrack這樣的破解軟體,他能將口令字串的兩部分獨立的破解,因此,破解上面所提到口令(10),由於口令已經被分解為兩部分破解,而後面的那部分口令由於只有3位,破解難度可想而知並不困難。實際的難度就在前面的七位口令上了。因此就NT而言,一個10位的口令與一個7位的口令相比並沒有太高的安全意義。由此還可以瞭解:1234567*$#這樣的口令可能還不如SHic6這樣的口令安全。(關於如何設定安全口令的問題不是本文的範圍,有興趣的可以參考相關文章) 而正式的口令(加密NT)是將使用者的口令轉換成unicode編碼,然後使用MD4演算法將口令加密。

NT之所以保留兩種不同版本的口令是由於歷史原因造成的,在一個純NT的環境中應該將LAN manager口令關閉。因為LAN manager口令使用了較弱的DES金鑰和演算法,比較容易破解。相比較之下,使用較強加密演算法的NT正式口令要安全些。 但是這兩種口令的加密方法從總體上來說強度還是不足,因此,微軟在win NT4SP3之和以後的補丁中,提供了一個syskey.exe的小工具來進一步加強NT的口令。這個軟體是可以選擇使用的,管理員只要執行一下這個程式並回答一些設定問題就可以新增這項增強功能。(windows2000已經作為預設安裝設定了) syskey被設計用來防止輕易獲得SAM口令,它是如何工作的呢? syskey被啟用,口令資訊在存入登錄檔之前還進行了一次加密處理。然而,在機器啟動後,一箇舊的格式的資訊還是會儲存在記憶體中,,因為這個舊格式的口令資訊是進行網路驗證的所需要的。 可以這樣認為:syskey使用了一種方法將口令資訊搞亂。或者說使用了一個金鑰,這個金鑰是啟用syskey由使用者選擇儲存位置的。這個金鑰可以儲存在軟盤,或者在啟動時由使用者生成(通過使用者輸入的口令生成),又或者直接儲存在登錄檔中。由於沒有官方的正式技術說明如何關閉syskey,所以syskey一旦啟用就無非關閉,除非用啟用syskey之前的登錄檔備份恢復登錄檔。(關於將syskey啟用後系統有什麼發生了什麼,如何關掉syskey? : http://blog.csdn.net/suspension/archive/2004/11/08/172185.aspx )

 

第三節:解決“不小心刪除SAM檔案”的方法

解決問題:  忘了XP的登陸密碼,是不能通過刪除sam檔案來解決的,那些“網上的辦法”害了很多人。  若碰到此問題,可以進行下述操作: %windir%/Repair資料夾的sam檔案複製到%windir%/system32/config資料夾。 故障恢復控制檯下執行下述命令(示例):   copy c:/windows/repair/sam c:/windows/system32/config/sam   如果是雙系統,可以在另外一個系統上執行這個複製/貼上操作  或:將硬碟做從盤掛到其他的2KXP系統下進行這個操作。   注意:Repair下的sam檔案是當初安裝XP時產生的,這樣操作後會丟失安裝系統後你自己在系統中建立的使用者和使用者組。這樣操作成功登陸後,如果系統開啟了系統還原,可以還原到最新的還原點。當然,如果你的系統做過ASR備份,可以直接使用ASR備份恢復sam檔案。  

ASRSecurity Accounts Manager,但home版不支援ASR

 

第四節: 關於SAM資料庫分析的結論:

 

SAM HACK是非常有危險性的。不正確的修改會將系統的安全資料管理器破壞,造成系統啟動問題,雖然可以通過刪除SAM檔案來讓啟動恢復。如果能夠熟悉SAM的結構,你將發現,可以對使用者名稱與使用者名稱之間、使用者組與使用者組之間進行調換,以及帳戶和帳戶組偽造,完全打破微軟的帳戶格局。並且非常隱蔽,讓帳戶相關的API函式摸不著頭腦。雖然微軟處理帳號資訊中犯了不少邏輯問題,但是安全帳號資料庫並非不安全,所有操作都必須能完全擁有管理員許可權。

相關文章