WinLogon登錄管理和GINA簡介

WinLogon登錄管理和GINA簡介

 
WinLogon登錄管理和GINA簡介
Windows NT 和 Windows 2000 中的 Winlogon 進程負責管理登錄相關的安全性工作,它負責處理用戶的登錄與註銷、啓動用戶shell、輸入口令、更改口令、鎖定與解鎖工作站等。 Winlogon 進程必須保證其與安全相關的操作對其他進程不可見,以免其他進程取得登錄安全信息。

  系統初始化,啓動用戶程序之前,Winlogon進行特定工作已保證以上的要求。Winlogon進程將創建並打開一個窗口工作站Window Station)該工作站代表了物理屏幕、鼠標和鍵盤,然後在該工作站上創建三個桌面:Winlogon桌面、應用程序桌面、屏幕保護桌面
。Winlogon進程將設置只有本地系統可以完全控制這些對象,而交互登錄的用戶只能讀該窗口工作站並完全控制應用程序工作站。Winlogon進程確保其他用戶進程不能訪問 Winlogon桌面的任何數據和代碼;這樣就保護了口令、鎖定桌面等操作的安全。Winlogon進程還會註冊安全注意序列(SAS - secure attention sequence)的熱鍵,任何時候按下SAS熱鍵(缺省爲ctrl+alt+del),將調用Winlogon進程,切換到安全桌面,從而使一般的密碼捕捉程序不能接收登錄密碼和更改密碼等安全活動。

而登錄的身份驗證都是在GINA(GINA - Graphical Identification and Authentication,圖形標識和身份驗證)中實現的,微軟的Windows NT/2000提供的GINA是MSGINA.dll,它實現了Windows NT/2000默認的登錄界面。不過爲了支持更多的交互登錄驗證方式,這個GINA DLL是可替換的,可以自己開發GINA DLL以實現其他的身份驗證方法,如智能卡、指紋等其他驗證機制,而且微軟也提供了相關文檔和例程。

當然這也爲木馬留下了機會,可以通過編寫和系統GINA界面相同的GINA DLL,然後取代MSGINA.dll,同時進行密碼記錄。在MSDN 的例子裏有一個GINA的例子。不過如果僅僅爲了獲取系統登錄密碼,就沒有必要那麼麻煩,只需編寫一個接口和GINA一樣的,然後所有函數在實現時都去調用MSGINA.dll的相同函數就可以了,不過這樣就需要系統原來的msgina.dll,在MSDN 的例子裏也有這樣一個例子叫做ginastub,當然作爲木馬還要在登錄時將密碼轉儲(更多的gina信息,請在MSDN裏查找gina)。就我所知在去年(2000年8月)就已經出現了名爲FakeGina的這種木馬,該木馬只有一個DLL,它是ginastub類型的木馬,因此需要系統原來的msgina.dll,系統才能支持啓動,可以從http://www.ntsecurity.nu/toolbox/fakegina/獲得該木馬的詳細信息。

此外微軟還在註冊表裏留了一個位置用於安裝GINA,在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon下設置GINADLL爲某個GINA DLL(GINADLL這個鍵缺省沒有),如果設置了這個值,Windows NT/2000就會調用該GINA DLL,而不會調用缺省的MSGINA.dll。FakeGina就是使用這種方式進行安裝的。

由於GINA DLL負責系統認證和安全登錄,因此如果一旦出錯,用戶將不能登錄系統,必須慎用。如果採用FakeGina的安裝方式,在卸載時不能只刪除fakegina.dll,而不理會註冊表,只刪掉該木馬將導致系統不能啓動。必須刪除註冊表裏GINADLL這個鍵值才行。

如果安裝出錯或者Gina/GinaStub程序有問題,用戶將不能登錄。在MSDN中Gina例子部分介紹了4種恢復Gina程序錯誤的方法,由於多數Gina木馬都是使用GinaStub方式,因此我介紹一下錯誤使用GinaStub程序後的系統恢復。

首先介紹一下GinaStub方式的Gina DLL失敗的幾個可能性: 

1) 因爲GinaStub方式的Gina DLL實際上沒有完成真正的登錄驗證功能或者說沒有全部完成這些功能,很多功能它都是調用系統原有的Gina DLL完成的,因此如果系統原來的Gina DLL丟失,那麼系統自然不能啓動。造成系統原有的Gina DLL丟失可能是因爲安裝者以爲該Gina DLL是功能完整的Gina DLL,而把該DLL拷貝到系統目錄並覆蓋原來微軟的MSGina.dll 。 

2)在註冊表裏設置GINADLL爲某個GinaStub,該GinaStub也拷入系統了,但後來刪除該GinaStub時只刪除該文件,而忘了刪除註冊表裏GINADLL一項,系統根本找不到所指定的Gina DLL 。 

3) GinaStub程序有Bug 

由於以上不同原因造成系統啓動問題的,系統的現象也不同,不過都是在系統應該出現正常的登錄對話框的時候出現: 

1) 這種情況下,有的Ginastub在初使化時會返回錯誤,通知Winlogon進程Gina DLL初使化失敗,系統彈出對話框提示Gina DLL初使化失敗。而有的Ginastub可能處理不周,使Winlogon進程非法操作,系統停止啓動。如果刪除了MsGina.dll,上邊介紹的FakeGina就會出現後一種情況,這是由於該程序在調用原有的MsGina.dll時沒有進行錯誤判斷,直接認爲調用成功,然後使用返回的句柄0x00000000造成的,可以參見下邊該程序的這段反彙編後的代碼。 

2) 這種情況下,在Win2000上指明需要某個Gina DLL,但是系統找不到,系統不能繼續啓動。而在Win NT上,系統沒有任何提示,直接重啓動。 

3) 根據bug不同,現象可能有所不同。 


Gina失敗造成不能本機登錄,不過仍然可以從網絡上其它計算機訪問該機的資源包括共享和註冊表,因此採用網絡方法是可以恢復這種故障的。 

1) 此時可以把其他系統上或者原來備份的Msgina.dll覆蓋GinaStub方式的Gina DLL即可。如果有多個NT/2000系統,可以使用另一個系統進行啓動進行;也可以從網絡上連接到該計算機的系統盤進行;或者卸下該硬盤,安裝到其他NT/2000的計算機上進行。 

2)用其他計算機連接到該機的註冊表,把GinaDLL一項刪除即可。或者也可以用前一種解決方法把系統原有的MsGina.dll拷貝成GinaDLL所指定的動態連接庫。 

3) 根據以上兩種安裝方式,分別採用上邊兩種方法進行卸載。 

(不過當計算機啓動後,使用網絡共享訪問計算機沒有問題,不過使用註冊表有一點兒問題,就是雖然可以連接上,但是不能打開各項。而且Win NT4在沒有相應的Gina DLL會自動重啓動,就不好用網絡的方法恢復了。)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章