複製鏈接
請複製以下鏈接發送給好友

NTLM

鎖定
NTLM是NT LAN Manager的縮寫,這也説明了協議的來源。NTLM是指 telnet 的一種驗證身份方式,即問詢/應答身份驗證協議,是 Windows NT 早期版本的標準安全協議,Windows 2000 支持 NTLM 是為了保持向後兼容。Windows 2000內置三種基本安全協議之一。 [1] 
中文名
問詢/應答身份驗證協議
外文名
NTLM
全    稱
NT LAN Manager

NTLM歷史沿革

NTLM NTLM
早期SMB協議在網絡上傳輸明文口令。後來出現 LAN Manager Challenge/Response驗證機制,簡稱LM,它是如此簡單以至很容易就被破解。微軟提出了WindowsNT挑戰/響應驗證機制,稱之為NTLM。已經有了更新的NTLM v2以及Kerberos驗證體系。NTLM是windows早期安全協議,因向後兼容性而保留下來。NTLM是NTLAN Manager的縮寫,即NT LAN管理器。 [2] 

NTLM基本介紹

Windows 2000客户使用NTLM鑑別協議,以連接到運行以前的 Windows NT版本的服務器上,使用NTLM鑑別連接到 Windows NT4服務器的遠程共享文件上,或把 Windows NT4客户與 Windows2000文件共享連接在一起。 [3] 
NTLM憑證由域名、用户名及在最初登錄時所輸入的加密口令所組成。在DC上的安全服務管理將活動目錄中的NTLM用户憑證的安全拷貝用於NTLM鑑別。當客户使用NTLM鑑別連接到Windows NT4服務器時, Windows 2000客户使用在客户方系統登錄所輸入的NTLM憑證。為了兼容,在 Windows2000安全中支持的NTLM憑證與 Windows nt4中的相同。 [3] 
域( Domain)是Windows NT網絡中獨立運行的單位。在一個域中,域控制器負責管理所有的用户賬户,用户在域中的其他服務器上沒有賬户,所有用户和服務器都信賴域控制器,如圖1所示。 [4] 
圖1:Windows NT中的域 圖1:Windows NT中的域
用户的身份認證是通過域控制器實現的,具體的NTLM協議可如下描述。 [4] 
NTLM 協議示意圖 NTLM 協議示意圖
上述協議中, 用户密碼是由用户註冊的口令通過Hash函數得到的,只有用户和域控制器才知道密碼。協議沒有口令傳輸,使用了挑戰--應答結構,因而能夠抗擊重放攻擊。如果使用強口令,則上述協議比較安全。協議的一 大缺點是用户訪問每台服務器都需得到域控制器的認證,容易導致瓶頸。 [4] 

NTLM開啓NTLM

在使用 telnet命令登錄遠程計算機時,可以使用本地 Windows用户名和密碼或域賬户信息來訪問 telnet服務器。但是如果不使用NTLM身份驗證,則用户名和密碼將以明文方式發送到 telnet服務器上,則會給本地用户的安全造成危害。 [5] 
圖2:NTLM認證 圖2:NTLM認證
如果用户需要開啓NTLM認證,可以進入 Microsoft Telnet提示符狀態,在 Microsoft Telnet提示符狀態中輸入“ set ntlm”命令,按【Enter】鍵即可啓用NTLM認證。如果需要查看命令執行的結果可在 Microsoft Telnet 提示符窗口中輸入“display”命令,按【Enter】鍵會發現已經成功啓用了NTLM認證,如:2所示。 [5] 

NTLM工作流程

NTLM使用在Windows NT和Windows 2000 Server(or later)工作組環境中(Kerberos用在域模式下)。在AD域環境中,如果需要認證Windows NT系統,也必須採用NTLM。較之Kerberos,基於NTLM的認證過程要簡單很多。NTLM採用一種質詢/應答(Challenge/Response)消息交換模式。 [6] 
步驟一:用户通過輸入Windows賬號和密碼登錄客户端主機。在登錄之前,客户端會緩存輸入密碼的哈希值,原始密碼會被丟棄(“原始密碼在任何情況下都不能被緩存”,這是一條基本的安全準則)。成功登錄客户端Windows的用户如果試圖訪問服務器資源,需要向對方發送一個請求。該請求中包含一個以明文表示的用户名。 [6] 
步驟二:服務器接收到請求後,生成一個16位的隨機數。這個隨機數被稱為Challenge或者Nonce。服務器在將該Challenge發送給客户端之前,該Challenge會先被保存起來。Challenge是以明文的形式發送的。 [6] 
步驟三:客户端在接收到服務器發回的Challenge後,用在步驟一中保存的密碼哈希值對其加密,然後再將加密後的Challenge發送給服務器。 [6] 
步驟四:服務器接收到客户端發送回來的加密後的Challenge後,會向DC(Domain)發送針對客户端的驗證請求。該請求主要包含以下三方面的內容:客户端用户名;客户端密碼哈希值加密的Challenge和原始的Challenge。 [6] 
步驟五:DC根據用户名獲取該賬號的密碼哈希值,對原始的Challenge進行加密。如果加密後的Challenge和服務器發送的一致,則意味着用户擁有正確的密碼,驗證通過,否則驗證失敗。DC將驗證結果發給服務器,並最終反饋給客户端 [6] 

NTLM使用方法

NTLM是以當前用户的身份向Telnet服務器發送登錄請求的,而不是用你自己的賬户和密碼登錄,顯然,你的登錄將會失敗。舉個例子來説,你家的機器名為A(本地機器),你登錄的機器名為B(遠地機器),你在A上的賬户是ABC,密碼是1234,你在B上的賬號是XYZ,密碼是5678,當你想Telnet到B時,NTLM將自動以當前用户的賬號和密碼作為登錄的憑據來進行上面的7項操作,即用ABC和1234,而並非用你要登錄賬號XYZ和5678,且這些都是自動完成的,根本不給你動手的機會,因此你的登錄操作將失敗。 [6] 
NTLM身份驗證選項有三個值。默認是2。可以有下面這些值:
0:不使用NTLM身份驗證。 [6] 
1:先嚐試NTLM身份驗證,如果失敗,再使用用户名和密碼。 [6] 
2:只使用NTLM身份驗證。 [6] 
Telnet服務器使用NTLM的有3選項之一時,客户機會顯示下面情況中的一種: [6] 
1)身份驗證選項=0時,NTLM身份驗證選項為0時不使用NTML身份驗證,直接輸入用户名和密碼,比如你可以輸入自己的登錄賬號密碼XYZ和5678。 [6] 
2)身份驗證選項=1時,這時先嚐試NTLM身份驗證,如果失敗,再使用用户名和密碼,其實這種方式對於我們來説,與上一種方式沒什麼區別。
3)身份驗證選項=2時,就是我們一開始遇到的現象。 [6] 
對NTLM身份驗證選項值的改變可以使用Win2000為我們提供Telnet服務器管理程序tlntadmn.exe;其實Win2000同時為我們提供了Telnet客户機和服務器程序:Telnet.exe是客户機程序(Client),tlntsvr.exe是服務器程序(server),及Telnet服務器管理程序tlntadmn.exe。若我們不需要NTLM身份驗證可以按以下步驟設置: [6] 
1、單擊“開始”—>;“運行“,鍵入tlntadmn,然後確定
2、在彈出的選項中選擇Display,再選擇Change Registry Settings。
3、選擇NTLM。
4、改變NTLM值為0不使用NTML身份驗證
5、重新啓動Telnet服務器。
其實也可以使用tlntadmn.exe對Telnet服務的其他默認設置來進行配置,配置後需要重新啓動Telnet服務。
  • AllowTrustedDomain:是否允許域用户訪問。默認值是1,允許信任域用户訪問。可以改為0:不允許域用户訪問(只允許本地用户)。 [6] 
  • DefaultDomain:可以對與該計算機具有信任關係的任何域設置。默認值是"."。 [6] 
  • DefaultShell:顯示shell安裝的路徑位置。默認值是:%systemroot%\System32\Cmd.exe /q /k。 [6] 
  • MaxFailedLogins:在連接終止之前顯示嘗試登錄失敗的最大次數。默認是3。 [6] 
  • LoginScript:顯示Telnet服務器登錄腳本的路徑位置。默認的位置就是“%systemroot%\System32\login.cmd”,你可以更改腳本內容,這樣登錄進Telnet的歡迎屏幕就不一樣了。 [6] 
  • TelnetPort:顯示telnet服務器偵聽telnet請求的端口。默認是:23。你也可以更改為其他端口。 [6] 

NTLM突破NTLM

因此NTLM也是Windows 2000的一種重要安全策略,對於入侵者來説,NTLM就是橫在面前的一座大山,哪怕你獲得了管理員賬號和密碼,想簡單通過NTLM也並非易事,況且win2000中的telnet默認僅以NTLM方式驗證身份,當然道高一尺,魔高一丈,作為網絡管理員,不是説有了NTLM保護,就可以高枕無憂了,對於網絡高手或黑客來説,時刻在撲捉系統漏洞和管理員疏忽,要突破NTLM的封鎖,常見的有以下幾種方法: [6] 
1、通過修改遠程註冊表更改telnet服務器配置,將驗證方式從2改為1或0; [6] 
2、使用NTLM.exe,上傳後直接運行,可將telnet服務器驗證方式從2改為1;
3、在本地建立掃描到的用户,以此用户身份開啓telnet客户機並進行遠程登錄
4、使用軟件,比如opentelnet.exe(需要管理員權限且開啓IPC管道) [6] 
5、使用腳本,如RTCS,(需要管理員權限但不依賴IPC管道)
基本上是以上的5種,其中後兩種是比較常用的開telnet的手法,而且使用方法十分簡單,命令如下: [6] 
  • OpenTelnet.exe \\server username password NTLMAuthor telnetport [6] 
  • OpenTelnet.exe \\服務器地址 管理員用户名 密碼 驗證方式(填0或1) telnet端口
  • cscript RTCS.vbe targetIP username password NTLMAuthor telnetport
  • cscript RTCS.vbe

NTLM禁用驗證方法

Windows NT Servers Service Pack 4和後續的版本都支持三種不同的身份驗證方法:LanManager (LM)身份驗證;Windows NT(也叫NTLM)身份驗證;Windows NT Version 2.0(也叫NTLM2)身份驗證。 [6] 
默認的情況下,當一個客户嘗試連接一台同時支持LM和NTLM身份驗證方法的服務器時,LM身份驗證會優先被使用。所以建議禁止LM身份驗證方法。 [6] 
2.定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa; [6] 
3.選擇菜單“編輯”,“添加數值”; [6] 
4.數值名稱中輸入:LMCompatibilityLevel,數值類型為:DWORD,單擊確定; [6] 
5.雙擊新建的數據,並根據具體情況設置以下值: [6] 
    • 0-發送LM和NTLM響應;
    • 1-發送LM和NTLM響應;
    • 2-僅發送NTLM響應;
    • 3-僅發送NTLMv2響應;(Windows 2000有效)
    • 4-僅發送NTLMv2響應,拒絕LM;(Windows 2000有效)
    • 5-僅發送NTLMv2響應,拒絕LM和NTLM;(Windows 2000有效)
7.重新啓動機器。 [6] 

NTLM相關問題

問題:怎樣解決telnet的“到主機的連接丟失”?
:引起這種問題的原因大部分是因為NTLM驗證的問題。解決的方法有三個。 [7] 
一個是上傳ntlm.exe到對方的系統上,並使用at命令來運行它,然後再開啓對方的 telnet服務,這樣在登錄的時候,就只需要回答用户名和密碼就可以了。 [7] 
第二個是使用opentelnet.exe程序,只需要擁有對方系統中的一個具有管理員權限的賬號,就可以使用這個工具更改對方 telnet服務的驗證方法為不使用NTLM驗證。 [7] 
除了以上兩種方法之外,還有一個不需要使用任何工具的方法,也可以達到清除NTLM驗證的目的。 [7] 
首先到c: \winnt\system32 (win2k安裝在C盤的情況)中找到cmd.exe,併為它創建一個快捷方式,然後右鍵這個快捷方式,並選擇“屬性”中的“快捷方式"選項,在“以其他用户身份運行”前打上勾,然後點確定。 [7] 
這時候,在你的計算機中建立一個與對方管理員用户名和密碼相同的用户( 如果你和對方的管理員名均為administrator,那麼就修改你的密碼和對方密碼相同,另外,要注意,要保證在本地機上的這個用户也是管理員才可以),然後再運行cmd.exe的這個快捷方式,這時候會彈出對話框詢問你要以哪個用户身份運行該程序,填寫上剛才建立的那個和對方相同的那個用户名和密碼之後點確定,這時候再telnet就可以取消掉ntlm驗證了。 [7] 
參考資料
  • 1.    張良清.DOS/BIOS高手真經 第2版:中國鐵道出版社,2015.08:第186頁
  • 2.    黃驍,崔冬,熊德偉.輕鬆做網管 Windows Server 2008服務器配置與管理手冊:海洋出版社,2009.11:第461頁
  • 3.    (美)Ian McLean著;吳世忠,祝世雄等譯.中文Windows 2000安全技術:機械工業出版社,2001.06:第18頁
  • 4.    王繼林,蘇萬力.信息安全導論 第2版:西安電子科技大學出版社,2015.08:第82頁
  • 5.    張良清.DOS/BIOS高手真經 第2版:中國鐵道出版社,2016.12:第186頁
  • 6.    朱小明,孫波,張冬慧,王兵著.探索計算機網絡協議與服務的奧秘:科瀚偉業教育科技有限公司,2017.01:第152頁
  • 7.    覃華.黑客問答一點通:吉林科學技術出版社,第107頁