預防和解決黑客入侵,搶灘登“錄”Windows XP
一、了解Windows XP的
幾種登錄類型
1. 交互式登錄
交互式登錄是我們平常登錄時最常見的類型,就是用戶通過相應的用戶賬號(User Account)和密碼在本機進行登錄。有些網友認為“交互式登錄”就是“本地登錄”,其實這是錯誤的。“交互式登錄”還包括“域賬號登錄”,而“本地登錄”僅限于“本地賬號登錄”。
這里有必要提及的是,通過終端服務和遠程桌面登錄主機,可以看做“交互式登錄”,其驗證的原理是一樣的。
在交互式登錄時,系統會首先檢驗登錄的用戶賬號類型,是本地用戶賬號(Local User Account),還是域用戶賬號(Domain User Account),再采用相應的驗證機制。因為不同的用戶賬號類型,其處理方法也不同。
◇ 本地用戶賬號
采用本地用戶賬號登錄,系統會通過存儲在本機SAM數據庫中的信息進行驗證。所以也就是為什么Windows2000忘記Administrator密碼時可以用刪除SAM文件的方法來解決。不過對于Windows XP則不可以,可能是出于安全方面的考慮吧。用本地用戶賬號登錄后,只能訪問到具有訪問權限的本地資源。(圖1)
圖1
◇域用戶賬號
采用域用戶賬號登錄,系統則通過存儲在域控制器的活動目錄中的數據進行驗證。如果該用戶賬號有效,則登錄后可以訪問到整個域中具有訪問權限的資源。
小提示:如果計算機加入域以后,登錄對話框就會顯示“登錄到:”項目,可以從中選擇登錄到域還是登錄到本機。
2. 網絡登錄
如果計算機加入到工作組或域,當要訪問其他計算機的資源時,就需要“網絡登錄”了。如圖2,當要登錄名稱為Heelen的主機時,輸入該主機的用戶名稱和密碼后進行驗證。這里需要提醒的是,輸入的用戶賬號必須是對方主機上的,而非自己主機上的用戶賬號。因為進行網絡登錄時,用戶賬號的有效性是由受訪主機控制的。
圖2
3. 服務登錄
服務登錄是一種特殊的登錄方式。平時,系統啟動服務和程序時,都是先以某些用戶賬號進行登錄后運行的,這些用戶賬號可以是域用戶賬號、本地用戶賬號或SYSTEM賬號。采用不同的用戶賬號登錄,其對系統的訪問、控制權限也不同,而且,用本地用戶賬號登錄,只能訪問到具有訪問權限的本地資源,不能訪問到其他計算機上的資源,這點和“交互式登錄”類似。
從圖3的任務管理器中可以看到,系統的進程所使用的賬號是不同的。當系統啟動時,一些基與Win32的服務會被預先登錄到系統上,從而實現對系統的訪問和控制。運行Services.msc,可以設置這些服務。由于系統服務有著舉足輕重的地位,一般都以SYSTEM賬號登錄,所以對系統有絕對的控制權限,因此很多病毒和木馬也爭著加入這個貴族體系中。除了SYSTEM,有些服務還以Local Service和Network Service這兩個賬號登錄。而在系統初始化后,用戶運行的一切程序都是以用戶本身賬號登錄的。
圖3
從上面講到的原理不難看出,為什么很多電腦文章告訴一般用戶,平時使用計算機時要以Users組的用戶登錄,因為即使運行了病毒、木馬程序,由于受到登錄用戶賬號相應的權限限制,最多也只能破壞屬于用戶本身的資源,而對維護系統安全和穩定性的重要信息無破壞性。
4. 批處理登錄批處理登錄一般用戶很少用到,通常被執行批處理操作的程序所使用。在執行批處理登錄時,所用賬號要具有批處理工作的權利,否則不能進行登錄。
平常我們接觸最多的是“交互式登錄”,所以下面筆者將為大家詳細講解“交互式登錄”的原理。
二、交互式登錄,系統用了哪些組件
1. Winlogon.exe
Winlogon.exe是“交互式登錄”時最重要的組件,它是一個安全進程,負責如下工作:
◇加載其他登錄組件。
◇提供同安全相關的用戶操作圖形界面,以便用戶能進行登錄或注銷等相關操作。
◇根據需要,同GINA發送必要信息。
2. GINA
GINA的全稱為“Graphical Identification and Authentication”??圖形化識別和驗證。它是幾個動態數據庫文件,被Winlogon.exe所調用,為其提供能夠對用戶身份進行識別和驗證的函數,并將用戶的賬號和密碼反饋給Winlogon.exe。在登錄過程中,“歡迎屏幕”和“登錄對話框”就是GINA顯示的。
一些主題設置軟件,例如StyleXP,可以指定Winlogon.exe加載商家自己開發的GINA,從而提供不同的Windows XP的登錄界面。由于這個可修改性,現在出現了盜取賬號和密碼的木馬。
一種是針對“歡迎屏幕”登錄方式的木馬,它模擬了Windows XP的歡迎界面。當用戶輸入密碼后,就被木馬程序所獲取,而用戶卻全然不知。所以建議大家不要以歡迎屏幕來登錄,且要設置“安全登錄”。
另一種是針對登錄對話框的GINA木馬,其原理是在登錄時加載,以盜取用戶的賬號和密碼,然后把這些信息保存到%systemroot%system32下的WinEggDrop.dat中。該木馬會屏蔽系統以“歡迎屏幕”方式登錄和“用戶切換”功能,也會屏蔽“Ctrl-Alt-Delete”的安全登錄提示。
用戶也不用太擔心被安裝了GINA木馬,筆者在這里提供解決方案給大家參考:
◇正所謂“解鈴還需系鈴人”,要查看自己電腦是否安裝過GINA木馬,可以下載一個GINA木馬程序,然后運行InstGina -vIEw,可以查看系統中GinaDLL鍵值是否被安裝過DLL,主要用來查看系統是否被人安裝了Gina木馬作為登錄所用。如果不幸被安裝了GINA木馬,可以運行InstGina -Remove來卸載它。
3. LSA服務
LSA的全稱為“Local Security Authority”??本地安全授權,Windows系統中一個相當重要的服務,所有安全認證相關的處理都要通過這個服務。它從Winlogon.exe中獲取用戶的賬號和密碼,然后經過密鑰機制處理,并和存儲在賬號數據庫中的密鑰進行對比,如果對比的結果匹配,LSA就認為用戶的身份有效,允許用戶登錄計算機。如果對比的結果不匹配,LSA就認為用戶的身份無效。這時用戶就無法登錄計算機。
怎么看這三個字母有些眼熟?對了,這個就是和前陣子鬧得沸沸揚揚的“震蕩波” 扯上關系的服務。“震蕩波”蠕蟲就是利用LSA遠程緩沖區溢出漏洞而獲得系統最高權限SYSTEM來攻擊電腦的。解決的方法網上很多資料,這里就不多講了。
4. SAM數據庫
SAM的全稱為“Security Account Manager”??安全賬號管理器,是一個被保護的子系統,它通過存儲在計算機注冊表中的安全賬號來管理用戶和用戶組的信息。我們可以把SAM看成一個賬號數據庫。對于沒有加入到域的計算機來說,它存儲在本地,而對于加入到域的計算機,它存儲在域控制器上。
如果用戶試圖登錄本機,那么系統會使用存儲在本機上的SAM數據庫中的賬號信息同用戶提供的信息進行比較;如果用戶試圖登錄到域,那么系統會使用存儲在域控制器中上的SAM數據庫中的賬號信息同用戶提供的信息進行比較。
5. Net Logon服務
Net Logon服務主要和NTLM(NT LAN Manager,Windows NT 4.0 的默認驗證協議)協同使用,用戶驗證Windows NT域控制器上的SAM數據庫上的信息同用戶提供的信息是否匹配。NTLM協議主要用于實現同Windows NT的兼容性而保留的。
6. KDC服務
KDC(Kerberos Key Distribution Center??Kerberos密鑰發布中心)服務主要同Kerberos認證協議協同使用,用于在整個活動目錄范圍內對用戶的登錄進行驗證。如果你確保整個域中沒有Windows NT計算機,可以只使用Kerberos協議,以確保最大的安全性。該服務要在Active Directory服務啟動后才能啟用。
7. Active Directory服務
如果計算機加入到Windows 2000或Windows 2003域中,則需啟動該服務以對Active Directory(活動目錄)功能的支持。
三、登錄前后,Winlogon到底干了什么
如果用戶設置了“安全登錄”,在Winlogon初始化時,會在系統中注冊一個SAS (Secure Attention Sequence??安全警告序列)。SAS是一組組合鍵,默認情況下為Ctrl-Alt-Delete。它的作用是確保用戶交互式登錄時輸入的信息被系統所接受,而不會被其他程序所獲取。所以說,使用“安全登錄”進行登錄,可以確保用戶的賬號和密碼不會被黑客盜取。要啟用“安全登錄”的功能,可以運行“Control userpassWords2”命令,打開“用戶賬戶”對話框,選擇“高級”。(如圖4)選中“要求用戶按Ctrl-Alt-Delete”選項后確定即可。以后,在每次登錄對話框出現前都有一個提示,要求用戶按Ctrl-Alt-Delete組合鍵,目的是為了在登錄時出現Windows XP的GINA登錄對話框,因為只有系統本身的GINA才能截獲這個組合鍵信息。而如前面講到的GINA木馬,會屏蔽掉“安全登錄”的提示,所以如果“安全登錄”的提示無故被屏蔽也是發現木馬的一個前兆。“安全登錄”功能早在Windows 2000時就被應用于保護系統安全性。
圖4
在Winlogon注冊了SAS后,就調用GINA生成3個桌面系統,在用戶需要的時候使用,它們分別為:
◇Winlogon桌面 用戶在進入登錄界面時,就進入了Winlogon桌面。而我們看到的登錄對話框,只是GINA負責顯示的。
如果用戶取消以“歡迎屏幕”方式登錄,在進入Windows XP中任何時候按下“Ctrl-Alt-Delete”,都會激活Winlogon桌面,并顯示圖5的“Windows安全”對話框(注意,Winlogon桌面并不等同對話框,對話框只是Winlogon調用其他程序來顯示的)。
圖5
◇用戶桌面 用戶桌面就是我們日常操作的桌面,它是系統最主要的桌面系統。用戶需要提供正確的賬號和密碼,成功登錄后才能顯示“用戶桌面”。而且,不同的用戶,Winlogon會根據注冊表中的信息和用戶配置文件來初始化用戶桌面。
◇屏幕保護桌面 屏幕保護桌面就是屏幕保護,包括“系統屏幕保護”和“用戶屏幕保護”。在啟用了“系統屏幕保護”的前提下,用戶未進行登錄并且長時間無操作,系統就會進入“系統屏幕保護”;而對于“用戶屏幕保護”來說,用戶要登錄后才能訪問,不同的用戶可以設置不同的“用戶屏幕保護”。
四、想登錄,也要過GINA這一關
在“交互式登錄”過程中,Winlogon調用了GINA組文件,把用戶提供的賬號和密碼傳達給GINA,由GINA負責對賬號和密碼的有效性進行驗證,然后把驗證結果反饋給Winlogon程序。在與Winlogon.exe對話時,GINA會首先確定Winlogon.exe的當前狀態,再根據不同狀態來執行不同的驗證工作。通常Winlogon.exe有三種狀態:
1. 已登錄狀態
顧名思義,用戶在成功登錄后,就進入了“已登錄狀態”。在此狀態下,用戶可以執行有控制權限的任何操作。
2. 已注銷狀態
用戶在已登錄狀態下,選擇“注銷”命令后,就進入了“已注銷狀態”,并顯示Winlogon桌面,而由GINA負責顯示登錄對話框或歡迎屏幕。
3. 已鎖定狀態
當用戶按下“Win+L”鍵鎖定計算機后,就進入了“已鎖定狀態”。在此狀態下,GINA負責顯示可供用戶登錄的對話框。此時用戶有兩種選擇,一種是輸入當前用戶的密碼返回“已登錄狀態”,另一種是輸入管理員賬號和密碼,返回“已注銷狀態”,但原用戶狀態和未保存數據丟失。
五、登錄到本機的過程
1. 用戶首先按Ctrl+Alt+Del組合鍵。
2. Winlogon檢測到用戶按下SAS鍵,就調用GINA,由GINA顯示登錄對話框,以便用戶輸入賬號和密碼。
3. 用戶輸入賬號和密碼,確定后,GINA把信息發送給LSA進行驗證。
4. 在用戶登錄到本機的情況下,LSA會調用Msv1_0.dll這個驗證程序包,將用戶信息處理后生成密鑰,同SAM數據庫中存儲的密鑰進行對比。
5. 如果對比后發現用戶有效,SAM會將用戶的SID(Security Identifier??安全標識),用戶所屬用戶組的SID,和其他一些相關信息發送給LSA。
6. LSA將收到的SID信息創建安全訪問令牌,然后將令牌的句柄和登錄信息發送給Winlogon.exe。
7. Winlogon.exe對用戶登錄稍作處理后,完成整個登錄過程。
六、登錄到域的過程
登錄到域的驗證過程,對于不同的驗證協議也有不同的驗證方法。如果域控制器是Windows NT 4.0,那么使用的是NTLM驗證協議,其驗證過程和前面的“登錄到本機的過程”差不多,區別就在于驗證賬號的工作不是在本地SAM數據庫中進行,而是在域控制器中進行;而對于Windows 2000和Windows 2003域控制器來說,使用的一般為更安全可靠的Kerberos V5協議。通過這種協議登錄到域,要向域控制器證明自己的域賬號有效,用戶需先申請允許請求該域的TGS(Ticket-Granting Service??票據授予服務)。獲準之后,用戶就會為所要登錄的計算機申請一個會話票據,最后還需申請允許進入那臺計算機的本地系統服務。
其過程如下:
1. 用戶首先按Ctrl+Alt+Del組合鍵。
2. Winlogon檢測到用戶按下SAS鍵,就調用GINA,由GINA顯示登錄對話框,以便用戶輸入賬號和密碼。
3. 用戶選擇所要登錄的域和填寫賬號與密碼,確定后,GINA將用戶輸入的信息發送給LSA進行驗證。
4. 在用戶登錄到本機的情況下,LSA將請求發送給Kerberos驗證程序包。通過散列算法,根據用戶信息生成一個密鑰,并將密鑰存儲在證書緩存區中。
5. Kerberos驗證程序向KDC(Key Distribution Center??密鑰分配中心)發送一個包含用戶身份信息和驗證預處理數據的驗證服務請求,其中包含用戶證書和散列算法加密時間的標記。
6. KDC接收到數據后,利用自己的密鑰對請求中的時間標記進行解密,通過解密的時間標記是否正確,就可以判斷用戶是否有效。
7. 如果用戶有效,KDC將向用戶發送一個TGT(Ticket-Granting Ticket??票據授予票據)。該TGT(AS_REP)將用戶的密鑰進行解密,其中包含會話密鑰、該會話密鑰指向的用戶名稱、該票據的最大生命期以及其他一些可能需要的數據和設置等。用戶所申請的票據在KDC的密鑰中被加密,并附著在AS_REP中。在TGT的授權數據部分包含用戶賬號的SID以及該用戶所屬的全局組和通用組的SID。注意,返回到LSA的SID包含用戶的訪問令牌。票據的最大生命期是由域策略決定的。如果票據在活動的會話中超過期限,用戶就必須申請新的票據。
8. 當用戶試圖訪問資源時,客戶系統使用TGT從域控制器上的Kerberos TGS請求服務票據(TGS_REQ)。然后TGS將服務票據(TGS_REP)發送給客戶。該服務票據是使用服務器的密鑰進行加密的。同時,SID被Kerberos服務從TGT復制到所有的Kerberos服務包含的子序列服務票據中。
9. 客戶將票據直接提交到需要訪問的網絡服務上,通過服務票據就能證明用戶的標識和針對該服務的權限,以及服務對應用戶的標識。
七、我要偷懶??設置自動登錄
為了安全起見,平時我們進入Windows XP時,都要輸入賬號和密碼。而一般我們都是使用一個固定的賬號登錄的。面對每次煩瑣的輸入密碼,有的朋友干脆設置為空密碼或者類似“123”等弱口令,而這些賬號也多數為管理員賬號。殊不知黑客用一般的掃描工具,很容易就能掃描到一段IP段中所有弱口令的計算機。
所以,還是建議大家要把密碼盡量設置得復雜些。如果怕麻煩,可以設置自動登錄,不過自動登錄也是很不安全的。因為自動登錄意味著能直接接觸計算機的人都能進入系統;另一方面,賬號和密碼是明文保存在注冊表中的,所以任何人,只要具有訪問注冊表的權限,都可以通過網絡查看。因此如果要設置登錄,最好不要設置為管理員賬號,可以設置為USERS組的用戶賬號。設置自動登錄的方法是:運行“Control userpasswords2”,在“用戶賬戶”窗口中取消“要使用本機,用戶必須輸入用戶名和密碼”選項,確定后會出現一個對話框,輸入要自動登錄的賬號和密碼即可。注意,這里不對密碼進行驗證,用戶要確保密碼和賬號的正確性。