|
網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)資源、信息資源、知識(shí)資源、專家資源、大型數(shù)據(jù)庫、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。 I、 摘要II、 關(guān)于SAM III、注冊(cè)表中SAM數(shù)據(jù)庫的結(jié)構(gòu) IV、 SAM數(shù)據(jù)庫的結(jié)構(gòu)和主要內(nèi)容 V、 關(guān)于SAM數(shù)據(jù)庫分析的結(jié)論 一、摘要 分析安全帳號(hào)管理器結(jié)構(gòu)是在一個(gè)多月前做的事情了,只零碎地記錄下片段,沒有發(fā)布過。不發(fā)布的主要 原因是安全帳戶管理器(SAM)是WIN系統(tǒng)帳戶管理的核心,并且非常系統(tǒng)化,我也有很多地方僅僅是進(jìn)行的推 斷和猜測,同時(shí),SAM hack可能造成啟動(dòng)時(shí)lsass.exe加載帳戶管理器出錯(cuò),即便是安全模式也不能修復(fù)(啟動(dòng) 時(shí)候必然加載SAM)使得整個(gè)系統(tǒng)啟動(dòng)崩潰(我通常需要依靠第二系統(tǒng)刪除SAM文件來啟動(dòng))。至于現(xiàn)在發(fā)布出 來,主要是因?yàn)锳dam和叮叮的《克隆管理員帳號(hào)》種所描述的制作rootkit辦法隱蔽性和危害性,對(duì)SAM的結(jié)構(gòu) 的熟悉,可以幫助安全維護(hù)人員做好安全檢測(當(dāng)然也可能讓不良企圖者利用)。 這里只介紹關(guān)于SAM的內(nèi)容,同Security相關(guān)的暫時(shí)不公開。 二、關(guān)于SAM 不要誤解了SAM,這不是一個(gè)文件sam這么簡單。SAM(Security Accounts Manager安全帳戶管理器)負(fù)責(zé) SAM數(shù)據(jù)庫的控制和維護(hù)。SAM數(shù)據(jù)庫位于注冊(cè)表HKLM\SAM\SAM下,受到ACL保護(hù),可以使用regedt32.exe打開注 冊(cè)表編輯器并設(shè)置適當(dāng)權(quán)限查看SAM中的內(nèi)容。SAM數(shù)據(jù)庫在磁盤上就保存在%systemroot%system32\config\目 錄下的sam文件中,在這個(gè)目錄下還包括一個(gè)security文件,是安全數(shù)據(jù)庫的內(nèi)容,兩者有不少關(guān)系。 SAM數(shù)據(jù)庫中包含所有組、帳戶的信息,包括密碼HASH、帳戶的SID等。這些內(nèi)容在后面詳細(xì)介紹。以我分 析的系統(tǒng)中文Win2K Adv Server為例。 三、注冊(cè)表中SAM數(shù)據(jù)庫的結(jié)構(gòu) 展開注冊(cè)表HKLM\SAM\SAM\: HKLM---SAM |---SAM |---Domains | |---Account | | |---Aliases | | | |---Members | | | |---Names | | |---Groups | | | |---00000201 | | | |---Names | | | |---None | | |---Users | | |---000001F4 | | |---000001F5 | | |---000003E8 | | |---000003E9 | | |---Names | | |---Adaministrator | | |---Guest | | |---IUSR_REFDOM | | |---IWASM_REFDOM | |---Builtin | |---Aliases | | |---00000220 | | |---00000221 | | |---00000222 | | |---00000223 | | |---Members | | | |---S-1-5-21-1214440339-706699826-1708537768 | | | |---000001F4 | | | |---000001F5 | | | |---000003E8 | | | |---000003E9 | | |--- Names | | |---Administrators | | |---Users | | |---Guests | | |---Power Users | |---Groups | | |---Names | | | |---Users | |---Names | |---RXACT 這是我機(jī)器上注冊(cè)表中的SAM樹。 對(duì)照SAM文件中的內(nèi)容,可以看出,注冊(cè)表中的SAM樹實(shí)際上就是SAM文件中一樣。不過,SAM文件中是先列 RXACT然后在是Domains內(nèi)容(以此類推),文件中的表達(dá)順序和注冊(cè)表中的樹形順序是相反的。如果習(xí)慣于看 文件內(nèi)容,從文件的0000h到0006Ch,表示的是SAM數(shù)據(jù)庫所在的位置:\systemroot\system32\config\sam,然 后是一端空白,直到01000h(hbin),從這里開始就是整個(gè)數(shù)據(jù)庫的內(nèi)容。SAM數(shù)據(jù)庫的文件內(nèi)容不作主要介紹, 不過會(huì)穿插著介紹,有興趣可以自己去研究。 四、SAM數(shù)據(jù)庫的結(jié)構(gòu)和主要內(nèi)容: 在整個(gè)數(shù)據(jù)庫中,帳號(hào)主要內(nèi)容存在于下面這些位置: 在\Domains\下就是域(或本機(jī))中的SAM內(nèi)容,其下有兩個(gè)分支“Account”和“Builtin”。 \Domains\Account是用戶帳號(hào)內(nèi)容。 \Domains\Account\Users下就是各個(gè)帳號(hào)的信息。其下的子鍵就是各個(gè)帳號(hào)的SID相對(duì)標(biāo)志符。比如000001F4, 每個(gè)帳號(hào)下面有兩個(gè)子項(xiàng),F(xiàn)和V。其中\(zhòng)Names\下是用戶帳號(hào)名,每個(gè)帳號(hào)名只有一個(gè)默認(rèn)的子項(xiàng),項(xiàng)中類型不 是一般的注冊(cè)表數(shù)據(jù)類型,而是指向標(biāo)志這個(gè)帳號(hào)的SID最后一項(xiàng)(相對(duì)標(biāo)識(shí)符),比如其下的Administrator, 類型為0x1F4,于是從前面的000001F4就對(duì)應(yīng)著帳戶名administrator的內(nèi)容。由此可見MS帳號(hào)搜索的邏輯。 推斷一:從注冊(cè)表中結(jié)構(gòu)來看帳號(hào),如果查詢一個(gè)帳戶名refdom的相關(guān)信息,那么,微軟從帳號(hào)名refdom中 找到其類型0x3EB,然后查找相對(duì)標(biāo)志符(或者SID)為000003EB的帳號(hào)內(nèi)容。所有的API函數(shù)(比如NetUserEnum()) 都是這樣來執(zhí)行的。因此,如果改變r(jià)efdom帳號(hào)中的類型0x3EB為0x1F4,那么這個(gè)帳號(hào)將被指向類000001F4的帳 戶。而這個(gè)帳號(hào)000001F4就是administrator帳戶,這樣,系統(tǒng)在登錄過程中就把refdom帳號(hào)完全轉(zhuǎn)為了administrator 帳號(hào),帳號(hào)refdom所使用的所有內(nèi)容、信息都是adminisrtator內(nèi)容,包括密碼、權(quán)限、桌面、記錄、訪問時(shí)間等 等。這個(gè)推斷應(yīng)該成立,但是,將意味著兩個(gè)用戶名對(duì)應(yīng)一個(gè)用戶信息,系統(tǒng)啟動(dòng)上應(yīng)該會(huì)發(fā)生錯(cuò)誤! 推斷一是在以前分析結(jié)構(gòu)的時(shí)候即得出了,揭示了登錄過程中及之后帳戶名和SID關(guān)聯(lián)的關(guān)系。 \Domains\Account\Users\000001F4,這就是administrator的帳戶信息(其他類似)。其中有兩個(gè)子項(xiàng)V和F。 項(xiàng)目V中保存的是帳戶的基本資料,用戶名、用戶全名(full name)、所屬組、描述、密碼hash、注釋、是否可以更 改密碼、帳戶啟用、密碼設(shè)置時(shí)間等。項(xiàng)目F中保存的是一些登錄記錄,比如上次登錄時(shí)間、錯(cuò)誤登錄次數(shù)等,還 有一個(gè)重要的地方就是這個(gè)帳號(hào)的SID相對(duì)標(biāo)志符。 以前分析結(jié)構(gòu)的時(shí)候沒有留意到這個(gè)地方,這就是Adam提出的思路。這個(gè)地方就是這個(gè)SID相對(duì)標(biāo)志符在注冊(cè) 表中一個(gè)帳號(hào)出現(xiàn)了兩遍,一個(gè)是在子鍵000001F4,另一個(gè)地方就是子鍵中項(xiàng)F的內(nèi)容里面,從48到51的四個(gè)字節(jié): F4 01 00 00,這實(shí)際上是一個(gè)long類型變量,也就是00 00 01 F4。當(dāng)一個(gè)標(biāo)志出現(xiàn)在兩個(gè)地方的時(shí)候就將發(fā)生 同步問題。明顯,微軟犯了這個(gè)毛病。兩個(gè)變量本應(yīng)該統(tǒng)一標(biāo)志一個(gè)用戶帳號(hào),但是微軟把兩個(gè)變量分別發(fā)揮各自 的作用,卻沒有同步統(tǒng)一起來。 子鍵中000001F4用來同用戶名administrator對(duì)應(yīng),方便通過用戶查詢帳戶信息,比如LookupAccountSid()等 帳號(hào)相關(guān)API函數(shù)都是通過這個(gè)位置來定位用戶信息的,這個(gè)關(guān)聯(lián)應(yīng)該是用在了帳戶登錄以后。而項(xiàng)目V值中的 F4 01 00 00是同帳戶登錄最直接相關(guān)聯(lián)的。 推斷二:WIN登錄的時(shí)候,將從SAM中獲得相對(duì)標(biāo)志符,而這個(gè)相對(duì)標(biāo)志符的位置是V值中的 F4 01 00 00。但是, 帳戶信息查詢卻使用的SAM中子鍵內(nèi)容。 推斷二的原因假設(shè)(假設(shè)一):在帳戶登錄的時(shí)候,登錄過程獲得SAM數(shù)據(jù)庫中用戶名使用的帳戶記錄信息中的 相對(duì)標(biāo)志符值(相當(dāng)于V值中的 F4 01 00 00),帳戶登錄之后,所有跟帳戶相關(guān)的之后,這個(gè)值不再被API函數(shù)使 用,而相對(duì)標(biāo)志符由一個(gè)數(shù)據(jù)記錄項(xiàng)的字段名代替(相當(dāng)于子鍵000001F4)。微軟犯了一個(gè)同步邏輯問題! 推斷二是根據(jù)Adam提出而進(jìn)行的,以前沒有這樣推斷過。:( 推斷二如果成立,揭示了在登錄過程中帳戶SID進(jìn)行 的過程。這就是為什么V中的值都是跟帳戶登錄記錄(登錄時(shí)間,密碼錯(cuò)誤次數(shù)等)相關(guān)的原因。同時(shí),因?yàn)镕中保存 了一個(gè)用戶名內(nèi)容,而API函數(shù)查詢的是這個(gè)用戶名,所以Adam的克隆辦法還是容易露臉,經(jīng)叮叮補(bǔ)充過后,這個(gè)用戶 名也被恢復(fù)原用戶名了,從用戶名上檢測就相對(duì)難了。 上面對(duì)項(xiàng)目V的介紹可以知道,其中保存的是帳戶的基本資料,用戶名、用戶全名(full name)、所屬組、描述、 密碼hash、注釋、是否可以更改密碼、帳戶啟用、密碼設(shè)置時(shí)間等。現(xiàn)在來關(guān)心的是密碼HASH。 假設(shè)二:在帳戶的項(xiàng)V中,包含了用戶HASH,分別包括是LM2和NT的密碼加密散列,Crack時(shí),可分開進(jìn)行。畢竟 LM2簡單。 \Domains\Builtin下的內(nèi)容是同帳戶組相關(guān)的。其結(jié)構(gòu)同\Account下的類似,并且也存在相應(yīng)的問題,就不再 羅嗦了。 SAM數(shù)據(jù)庫保存的文件sam中,可沒有注冊(cè)表中的這么簡明的內(nèi)容,而主要是通過偏移量、長度來定位內(nèi)容。并 且單個(gè)帳號(hào)的信息都是集中在一塊的,而不是象注冊(cè)表形式這樣分隔開(名字的一個(gè)鍵而內(nèi)容在另外一個(gè)鍵)。 sam文件中,可根據(jù)這些下面這些分隔符來定位數(shù)據(jù)含義: nk (6E 6B) 鍵或者子鍵名 vk (76 6B) 相應(yīng)的值 if (6C 66) 子鍵列表 sk (73 6B) 權(quán)限 五、關(guān)于SAM數(shù)據(jù)庫分析的結(jié)論: SAM HACK是非常有危險(xiǎn)性的。不正確的修改會(huì)將系統(tǒng)的安全數(shù)據(jù)管理器破壞,造成系統(tǒng)啟動(dòng)問題,雖然可以通過 刪除SAM文件來讓啟動(dòng)恢復(fù)。如果能夠熟悉SAM的結(jié)構(gòu),你將發(fā)現(xiàn),可以對(duì)用戶名與用戶名之間、用戶組與用戶組之間 進(jìn)行調(diào)換,以及帳戶和帳戶組偽造,完全打破微軟的帳戶格局。并且非常隱蔽,讓帳戶相關(guān)的API函數(shù)摸不著頭腦。 雖然微軟處理帳號(hào)信息中犯了不少邏輯問題,但是安全帳號(hào)數(shù)據(jù)庫并非不安全,所有操作都必須能完全擁有管理 員權(quán)限。 當(dāng)隱蔽后門的辦法被提出來之后,一定會(huì)讓不少“黑客”利用,管理員也應(yīng)該多多熟悉相關(guān)技術(shù),作好安全檢測, 我的目的就達(dá)到了。對(duì)《克隆管理員帳號(hào)》的簡單檢測工具可以在我的主頁(www.opengram.com)下載,但是更多的還是需要管理員學(xué)習(xí)相關(guān)知識(shí),才能更好地檢測入侵。 網(wǎng)絡(luò)的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來越嚴(yán)峻的考驗(yàn)―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項(xiàng)技術(shù)都需要適時(shí)應(yīng)勢,對(duì)應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!