XP系統EFS加密破解的一線希望

XP系統EFS加密破解的一線希望
2006年11月24日 星期五 00:33注: 看文章開頭我也不好意思轉,google了一下發現這篇文章已經被轉到大街小巷了。。。。就不客氣了。

此文出自微軟MVP盆盆之手,未經盆盆同意請勿轉載。我先發到這兒僅供測試,驗證。
在此向嚴謹的盆盆表示敬意。(圖片發不上來,請諒解)

EFS加密的一線生機-加密帳戶被刪的補救方法 (原文題目)

引子:看到新聞組裏那麼多網友“哭訴”EFS問題,早就想寫一篇EFS的文章。但是苦於手頭資料太少,很多概念尚未圓潤貫通,匆匆草就之下,這誤人子弟的罪責,怕是逃不過的。
聲明:本文參考了國外一篇“牛”文,由於要掌握這篇國外文章,讀者必須具備一些NTFS底層知識,否則難窺其堂奧。故此筆者四處網羅資料,加上穿鑿附會,希望能幫助讀者諸君更方便省時地領會這篇文章,舞好EFS這把雙刃劍。文章鏈接如下:
http://www.beginningtoseethelight.org/efsrecovery/index.php
這裏需要提醒用戶注意:本文並非爲了證明微軟的EFS存在 “漏洞”,也不是專爲馬大哈們準備的包治百病的“後悔藥”。事實上如果沒有導出EFS證書和私鑰,那麼一旦刪除用戶、或者重裝系統,EFS加密文件就不屬於你了。
提示 本文適用於Windows XP Professional單機環境,並假設沒有恢復代理(DRF)和共享訪問帳戶(多個DDF)。
任務描述

如果某個用戶把自己的登錄帳戶刪除,那麼其他用戶將無法訪問其EFS加密文件。更可惡的是,一旦公司裏的某個用戶心懷怨氣,惡意加密了本屬於別的用戶的 重要文件,將會導致嚴重問題。一般情況下,這些EFS加密文件已經被判了死刑,但是實際上只要滿足以下條件的話,我們還是可以在末日來臨之前打開逃生的天 窗:
(1) 必須知道該被刪帳戶的密碼。
(2) 該被刪帳戶的配置文件必須存在。如果使用“本地用戶和組”管理單元刪除帳戶,則配置文件保留的機會很大,如果使用“用戶帳戶”控制面板刪除帳戶,則有一半 機會保留配置文件。如果配置文件不幸被刪,則只能祈禱可以藉助Easy Recovery之類的數據恢復工具進行恢復。
可能有些朋友會覺得這兩個條件比較苛刻,此處賣個關子先……
EFS加密原理
大家知道,EFS加密實際上綜合了對稱加密和不對稱加密:
(1) 隨機生成一個文件加密密鑰(叫做FEK),用來加密和解密文件。
(2) 這個FEK會被當前帳戶的公鑰進行加密,加密後的FEK副本保存在文件$EFS屬性的DDF字段裏。
(3) 要想解密文件,首先必須用當前用戶的私鑰去解密FEK,然後用FEK去解密文件。
看到這裏,似乎EFS的脈絡已經很清晰,其實不然,這樣還不足於確保EFS的安全性。系統還會對EFS添加兩層保護措施:
(1) Windows會用64字節的主密鑰(Master Key)對私鑰進行加密,加密後的私鑰保存在以下文件夾:
%UserProfile%/Application Data/Microsoft/Crypto/RSA/SID
提示 Windows系統裏的各種私有密鑰,都用相應的主密鑰進行加密。Windows Vista的BitLocker加密,也用其主密鑰對FVEK(全卷加密密鑰)進行加密。
(2) 爲了保護主密鑰,系統會對主密鑰本身進行加密(使用的密鑰由帳戶密碼派生而來),加密後的主密鑰保存在以下文件夾:
%UserProfile%/Application Data/Microsoft/Protect/SID
整個EFS加密的密鑰架構如圖1所示。
圖1
提示 EFS密鑰的結構部分,參考自《Windows Internals 4th》的第12章。
回到“任務描述”部分所述的兩個條件,現在我們應該明白原因了:
(1) 必須知道該被刪帳戶的密碼:沒有帳戶密碼,就無法解密主密鑰。因爲其加密密鑰是由帳戶密碼派生而來的。
提示 難怪Windows XP和2000不同,管理員重設帳戶密碼,也不能解密EFS文件。
(2) 該被刪帳戶的配置文件必須存在:加密後的私鑰和主密鑰(還包括證書和公鑰),都保存在配置文件裏,所以配置文件萬萬不可丟失,否則就會徹底“鬼子不能進村”。重裝系統後,原來的配置文件肯定被刪,這時候當然不可能恢復EFS文件。
可能有用戶會想,只需新建一個同名的用戶帳戶,然後把原來配置文件複製給新帳戶,不就可以解密EFS文件了?原因在於帳戶的SID,因爲新建用戶的SID不可能和老帳戶一樣,所以常規方法是不可能奏效的。我們必須另闢蹊徑,讓系統再造一個完全一樣的SID!
恢復步驟
爲了方便描述,這裏假設被刪帳戶的用戶名爲Admin,Windows安裝在C盤。
1.再造SID
注意 本方法取自“聲明”部分提到的那篇文章。
首先確認被刪帳戶的SID,這裏可以進入以下文件夾:
C:/Documents and Settings/Admin/Application Data/Microsoft/Crypto/RSA
在其下應該有一個以該被刪帳戶的SID爲名的文件夾,例如是S-1-5-21-4662660629-873921405-788003330-1004(RID爲1004)
現在我們要設法讓新建帳戶同樣具有1004的RID,這樣就能達到目的。
在Windows中,下一個新建帳戶所分配的RID是由HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account註冊表 項的F鍵值所確定的。F鍵值是二進制類型的數據,在偏移量0048處的四個字節,定義下一個帳戶的RID。那麼也就是說,只需要修改0048處的四個字 節,就能達到目的(讓新建帳戶獲得1004的RID)
確認好以後,別忘記把Admin帳戶的配置文件轉移到別的地方!
(1) 默認情況下,只有system帳戶纔有權限訪問HKEY_LOCAL_MACHINE/SAM,這裏在CMD命令提示符窗口,運行以下命令,以system帳戶身份打開註冊表編輯器:
pexec -i -d -s %windir%/regedit.exe
提示 可以在以下網站下載psexec:
http://www.sysinternals.com/Utilities/PsExec.html
(2) 定位到HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account註冊表項,雙擊打開右側的F鍵值。
(3) 這裏要說明一下,Windows是以十六進制、而且以反轉形式保存下一個帳戶的RID。什麼意思呢?也就是說,如果是1004的RID,對應十六進制就是03EC,但是我們必須把它反轉過來變成EC03,再擴展爲4個字節,就是EC 03 00 00。
所以,我們應該把F鍵值的0048偏移量處,把其中四個字節改爲“EC 03 00 00”,如圖2所示。
圖2
(4) 重要:別忘了重啓計算機!
(5) 重啓以後,新建一個同名帳戶Admin,它的SID應該和以前是完全一樣。如果不相信的話,可以藉助GetSID或者PsGetSID等工具測試一下。
2.“破解”EFS
接下來的方法就非常簡單了,用新建的Admin帳戶身份登錄系統,隨便加密一個文件,然後註銷,用管理員帳戶登錄系統,把原來保留的配置文件複製到C:/Documents and Settings/Admin文件夾下。
再用Admin帳戶登錄系統,現在可以解密原來的EFS文件了。
疑難解答
1.如果已經重裝系統,那怎麼辦?
“聲明”部分提到的那篇文章裏提到,如果還記得原來帳戶的密碼,並且配置文件沒有被刪除的話,還有希望。這時候可以藉助sysinternals的 NEWSID工具把系統的計算機SID重設爲原來的值,再用前面描述的方法構造所需的RID,這樣就可以獲得所需的帳戶SID。剩餘步驟完全一樣。
http://www.sysinternals.com/Utilities/NewSid.html
2.有用戶曾經遇到這樣的問題:登錄系統時收到提示說密碼過期,需要重設,重設密碼登錄後發現打開EFS文件。
KB890951提到這個問題。其解釋是因爲在修改密碼時,系統還沒有加載配置文件(有點語焉不詳),原文如下:
This problem occurs because the user profile for the current user is not loaded correctly after you change the password.
配置文件和EFS有何相干?看完本文,大家應該知道,EFS的私鑰和主密鑰都是保存在配置文件裏的。由於配置文件沒有加載,所以主密鑰的加密版本沒有得到更新(沒有跟上帳戶密碼的變化),導致主密鑰無法正確解密,從而無法解密私鑰和FEK。這就是問題的真正原因。
該KB提供了一個內部補丁,可以解決這個問題。KB890951的鏈接如下:
http://support.microsoft.com/kb/890951
3.有關公鑰的問題
爲了容易理解,筆者故意忽略了公鑰。公鑰保存也保存在帳戶的配置文件裏:
%UserProfile%/Application Data/Microsoft/SystemCertificates/My/Certificates
在EFS恢復的操作中,必須確保公鑰也要複製到新帳戶的配置文件裏。儘管看起來公鑰與EFS解密無關(它負責加密)。
原來,加密文件$EFS屬性的DDF字段裏除了有帳戶SID和加密的FEK副本外,還有公鑰的指紋信息(Public Key Thumbprint)和私鑰GUID信息(私鑰的某種散列值)。
系統在掃描加密文件$EFS屬性中的DDF字段時,根據用戶配置文件裏的公鑰中所包含的公鑰指紋和私鑰GUID信息,當然還有帳戶的SID,來判斷該帳戶是否具有對應的DDF字段,從而判斷該用戶是否屬於合法的EFS文件擁有者。
所以公鑰也很重要。
當然公鑰是可以“僞造”的(可以僞造出所需的公鑰指紋和私鑰GUID),以欺騙EFS系統,具體方法可以參考國外的那篇原稿,此處不再贅述。
加強EFS的安全
由於EFS把所有的相關密鑰都保存在Windows分區,所以這可能給EFS帶來一定的安全隱患。目前有一些第三方工具號稱可以破解EFS,這些工具首 先攻擊SAM配置單元文件,嘗試破解帳戶密碼,從而破解帳戶密碼→主密鑰的加密密鑰→主密鑰→EFS私鑰→FEK的“密鑰鏈”。

爲了防止攻擊者窺視我們的EFS文件,可以藉助以下三種方法:
1.導出刪除私鑰
可以用證書嚮導導出EFS加密證書和私鑰,並且在“證書導出嚮導”對話框裏選擇刪除私鑰,如圖3所示。
圖3
刪除私鑰以後,攻擊者就沒有辦法訪問EFS加密文件了,而我們需要訪問時,只需導入先前備份的證書和私鑰即可。
2.System Key提供額外的保護
System Key可以對SAM配置單元文件和EFS私鑰提供額外保護。Windows XP的System Key默認保存在本地

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章