伺服器訊息區塊
此條目需要更新。 (2017年5月14日) |
伺服器訊息區塊(Server Message Block,縮寫為SMB),又稱網路文件共享系統(Common Internet File System,縮寫為CIFS, /ˈsɪfs/),一種應用層網絡傳輸協議,由微軟開發,主要功能是使網絡上的機器能夠共享計算機文件、打印機、串行端口和通訊等資源。它也提供經認證的行程間通訊機能。它主要用在裝有Microsoft Windows的機器上,在這樣的機器上被稱為Microsoft Windows Network。
經過Unix服務器廠商重新開發後,它可以用於連接Unix服務器和Windows客戶機,執行打印和文件共享等任務。
與功能類似的網絡文件系統(NFS)相比,NFS的消息格式是固定長度,而CIFS的消息格式大多數是可變長度,這增加了協議的複雜性。CIFS消息一般使用NetBIOS或TCP協議傳送,分別使用不同的端口139或445,目前傾向於使用445端口。CIFS的消息包括一個信頭(32字節)和消息體(1個或多個,可變長)。
特性
[編輯]SMB可以以不同方式運行在會話層或者更低的網絡層之上:
- 通過使用 NetBIOS API, 它可以運行在幾種不同的 transports:[2]
- 基於 UDP ports 137, 138 & TCP ports 137, 139 (NetBIOS over TCP/IP);
- 基於一些傳統協議,例如 NBF (incorrectly referred to as NetBEUI[原創研究?]).
SMB的 "進程間通信" (IPC) 系統提供 命名管道s 機制,它使得程序員可以方便的實現繼承認證(客戶端第一次連接SMB服務獲取認證信息後)。
一些服務的操作基於命名管道機制, 例如那些 Microsoft 內部實現的基於SMB的 DCE/RPC, 被稱為基於SMB的 MSRPC, 同時允許 MSRPC 客戶端程序 處理認證過程(藉助SMB服務提供的認證服務實現), 但是只在MSRPC客戶端程序上下文中有效。
SMB 簽名: Windows NT 4.0 Service Pack 3 及後續版本提供了基於數字簽名的SMB連接機制。常用的官方術語叫做「SMB 簽名」。其他被同時被使用的官方術語有
Server Message Block version 2 (SMB2) 旨在通過將SMB signals合併為一個數據包來減輕這個性能限制[來源請求]。
SMB 支持 機會鎖 — 一種特殊的鎖機制 — 來提升性能。
SMB 服務是 Microsoft's Distributed File System 實現的基礎.
歷史
[編輯]SMB最初是IBM的貝瑞·費根鮑姆(Barry Feigenbaum)研製的,其目的是將DOS操作系統中的本地文件接口「中斷13」改造為網絡文件系統。後來微軟對這個發展進行了重大更改,這個更改後的版本也是最常見的版本。微軟將SMB協議與它和3Com一起發展的網絡管理程序結合在一起,並在Windows for Workgroups和後來的Windows版本中不斷加入新的功能。
SMB一開始的設計是在NetBIOS協議上運行的(而NetBIOS本身則運行在NetBEUI、IPX/SPX或TCP/IP協議上),Windows 2000引入了SMB直接在TCP/IP上運行的功能。在這裡我們必須區分SMB協議和運行在這個協議上的SMB業務,以及NetBIOS和使用SMB作為認證隧道的DCE/RPC業務。此外我們還要區分主要(但不僅僅)直接使用NetBIOS數據報的「網絡鄰居」協議。
1996年,約於昇陽推出WebNFS的同時[7],微軟提出將SMB改稱為Common Internet File System[8]。此外微軟還加入了許多新的功能,比如符號鏈接、硬鏈接、提高文件的大小。微軟還試圖支持直接聯繫,不依靠NetBIOS,不過這個試圖依然處於嘗試階段,並需要繼續完善。微軟向互聯網工程工作小組提出了部分定義作為互聯網草案[9]。不過這些提案現在均已過期。
由於SMB協議對於與占主要地位的Microsoft Windows平台通訊時的重要性,而目前該平台使用的SMB協議與初始的版本相比有巨大的改變,因此Samba項目就是被創立來逆向工程來提供一個與SMB軟件兼容的自由軟件,使得非微軟操作系統也能夠使用它。
在Windows Vista中微軟又推出了Server Message Block 2.0,後又在Windows 7中做了改進,截至2012年依次發布的主版本有 2.1 和 3.0。
SMB 2.0
[編輯]2006年,Microsoft 隨着 Windows Vista 的發布 引入了新的SMB版本 (SMB 2.0 or SMB2) [10] ...
SMB 2.1
[編輯]SMB 2.1, 隨 Windows 7 和 Server 2008 R2 引入, 主要是通過引入新的機會鎖機制來提升性能。[11]
SMB 3.0
[編輯]SMB 3.0 (前稱 SMB 2.2)[12]在Windows 8[12] 和 Windows Server 2012[12]中引入。它帶來幾項重大改變,例如 the SMB Direct Protocol (SMB over RDMA) 和 SMB Multichannel(每SMB工作階段有多重連結),[13][14] ...
實現
[編輯]客戶端-服務器端結構
[編輯]SMB使用點對點的通訊方式,一個客戶端向一個服務器提出請求,服務器相應地回答。SMB協議中的一部分專門用來處理對文件系統的訪問,使得客戶端可以訪問一個文件服務器。SMB也有行程間通訊的部分。SMB協議尤其適用於局部子網,但是也可以被用來通過萬維網來鏈接不同的子網。Microsoft Windows的文件和打印機分享主要使用這個功能。
SMB服務器向網絡上的客戶端提供文件系統和其它資源。客戶端電腦也可能有其自己的、不共享的硬盤,但是可能也想使用服務器上分享的文件系統和打印機。這是SMB為什麼這麼出名和廣泛地被使用的原因。SMB普及的另一個原因是它使用適合NT網域的協議,至少提供基於NT網域式的認證。NT網域協議是一個微軟遠程過程調用服務,幾乎只能被SMB行程間通訊的具名管道使用。幾乎所有SMB服務器的實現使用NT網域來認證用戶是否可以訪問一個資源。
性能問題
[編輯]一般認為SMB協議會占用很多網絡帶寬,因為每個客戶端均在整個子網內廣播其存在。但是SMB本身並不使用廣播。SMB造成的廣播問題實際上是NetBIOS的服務定位協議造成的。一般來說Microsoft Windows服務器使用NetBIOS來協議和定位服務。而NetBIOS則定時向一個特定的服務器廣播一個服務的存在。對於一個少於20個服務器的網絡來說這個方式是可行的。但是隨服務器數目的增加廣播造成的交通會導致問題。通過適當地實現WINS定位協議這個問題可以被緩和。WINS使用更高級的系統來確定和中央化服務需求,但是造成自己的設計和保管網絡的問題。動態DNS是另一個解決方法。微軟本身推薦在微軟的活動目錄環境下使用動態DNS。網絡延遲對SMB協議的速度有非常大的衝擊。在服務器之間網絡延遲大的情況下通過SMB來更換檔案夾非常明顯地反映了這個問題。比如在通過萬維網使用虛擬私人網路時網絡延遲就會比較大,這時使用SMB就很惱人。
微軟的更改
[編輯]微軟在實現其SMB時添加了許多功能,比如微軟引入了NTLMv2,因為原來的第1版使用的DES容易被破解。此外因早年美國政府對於高等加密軟體限制出口,NT 4.0在美國以外僅使用40比特位加密,以今天的標準來說容易被解密。
特點
[編輯]SMB的行程間通訊機制值得一提。通過這個系統,它提供具名管道。這個機制是最早的、程序員可以使用的少數行程間通訊之一,它繼承客戶端聯繫SMB服務器時的認證來提供服務。具名管道繼承認證是一個獨特和透明的機制,因此使用Windows API的程序員和Windows的用戶均將它看作是自然的。
有些服務使用具名管道,比如使用通過SMB的微軟遠程過程調用的程序,也允許微軟遠程過程調用客戶端程序進行自己的認證,並且由此掩蓋SMB服務器的認證。但是這個掩蓋只在客戶端程序的認證成功的情況下才生效。
另一個特點是SMB對文件使用一種特殊的、被稱為伺機鎖定的鎖定機構來提高速度。
微軟的分布式文件系統實現就基於SMB。
其他實現和版本
[編輯]以下列出的包括SMB客戶端、服務器以及不同的擴展SMB的協議。
- 自由軟件Samba重新實現SMB和微軟的擴展,包括服務器和命令行客戶端。
- Samba-TNG是一款Samba的衍生版本。
- Linux内核包括兩個SMB客戶端實施,它們使用虛擬文件系統通過標準文件系統應用程序接口提供接觸SMB服務器上的文件。
- ONStor公司實施了其自己的SMB,這個實施也支持NFS協議。
- Novell NetWare版本6以上提供CIFS服務器實施,使得Microsoft Network客戶端可以解除NetWare的文件。
- FreeBSD、NetBSD和Mac OS X均包含使用它們自己的虛擬文件系統的SMB客戶端。
- FreeNAS是一個小型的網路儲存設備服務,其目的在於使得用戶可以重新使用老電腦作為文件服務器。它支持CIFS/Samba協議。
- 維爾軟件公司實施過一個SMB。
- Network Appliance有一個SMB服務器的實施。
安全
[編輯]多年以來,微軟實現的其直接依賴的協議與組件都存在着許多安全漏洞。[15][16]其他供應商的安全漏洞主要在於缺乏對較新的身份驗證協議(例如NTLMv2和Kerberos贊成如NTLMv1、LanMan或純文本密碼)的支持。實時攻擊跟蹤[17]表明SMB是入侵企圖的主要攻擊媒介之一[18],例如2014年索尼影業遭黑客攻擊事件[19],以及2017年的WannaCry勒索軟體攻擊。[20]
參考資料
[編輯]- ^ Direct hosting of SMB over TCP/IP. Microsoft. 2007-10-11 [2009-11-01]. (原始內容存檔於2011-03-26).
- ^ Richard Sharpe. Just what is SMB?. 8 October 2002 [18 July 2011]. (原始內容存檔於2009-12-02).
- ^ MSKB887429: Overview of Server Message Block signing. Microsoft Corporation. 2007-11-30 [2012-10-24]. (原始內容存檔於2010-11-20).
Security Signatures (SMB sequence numbers)
- ^ Jesper M. Johansson. How to Shoot Yourself in the Foot with Security, Part 1. Microsoft Corporation. 2005-09-08 [2012-10-24]. (原始內容存檔於2010-11-20).
This article addresses [...] Server Message Block (SMB) message signing.
- ^ MSKB887429: Overview of Server Message Block signing. Microsoft Corporation. 2007-11-30 [2012-10-24]. (原始內容存檔於2010-11-20).
By default, SMB signing is required for incoming SMB sessions on Windows Server 2003-based domain controllers.
- ^ Jose Barreto. The Basics of SMB Signing (covering both SMB1 and SMB2). Microsoft TechNet Server & Management Blogs. 2010-12-01 [2012-10-24]. (原始內容存檔於2012-12-02).
This security mechanism in the SMB protocol helps avoid issues like tampering of packets and "man in the middle" attacks. [...] SMB signing is available in all currently supported versions of Windows, but it’s only enabled by default on Domain Controllers. This is recommended for Domain Controllers because SMB is the protocol used by clients to download Group Policy information. SMB signing provides a way to ensure that the client is receiving genuine Group Policy.
- ^ 存档副本. [2007-07-03]. (原始內容存檔於2007-05-18).
- ^ CIFS: A Common Internet File System (頁面存檔備份,存於網際網路檔案館),Paul Leach和Dan Perry。
- ^ * Common Internet File System Protocol (CIFS/1.0)[永久失效連結]
- ^ Navjot Virk and Prashanth Prahalad. What's new in SMB in Windows Vista. Chk Your Dsks. MSDN. March 10, 2006 [2006-05-01]. (原始內容存檔於2006-05-05).
- ^ Implementing an End-User Data Centralization Solution. Microsoft: 10–11. 2009-10-21 [2009-11-02]. (原始內容存檔於2010-09-06).
- ^ 12.0 12.1 12.2 Jeffrey Snover. Windows Server Blog: SMB 2.2 is now SMB 3.0. Microsoft. 19 April 2012 [14 June 2012]. (原始內容存檔於2012-09-24).
- ^ Jose Barreto. SNIA Tutorial on the SMB Protocol (PDF). Storage Networking Industry Association. 19 October 2012 [28 November 2012]. (原始內容存檔 (PDF)於2013-06-03).
- ^ Thomas Pfenning. The Future of File Protocols - SMB 2.2 in the Datacenter (PDF). [2016-02-14]. (原始內容 (PDF)存檔於2012-07-20).
- ^ MS02-070: Flaw in SMB Signing May Permit Group Policy to Be Modified. 微軟. December 1, 2007 [November 1, 2009]. (原始內容存檔於2009-10-08).
- ^ MS09-001: Vulnerabilities in SMB could allow remote code execution. 微軟. January 13, 2009 [November 1, 2009]. (原始內容存檔於2009-10-05).,
- ^ Sicherheitstacho.eu. 德國電信. March 7, 2013 [March 7, 2013]. (原始內容存檔於2013-03-08).
- ^ Alert (TA14-353A) Targeted Destructive Malware. US-CERT. [2017-05-14]. (原始內容存檔於2014-12-20).
- ^ Sony Hackers Used Server Message Block (SMB) Worm Tool. [2017-05-14]. (原始內容存檔於2014-12-20).
- ^ WannaCry Ransomware Attack Hits Victims With Microsoft SMB Exploit. eWeek. [13 May 2017].
相關條目
[編輯]外部連結
[編輯]- SMB/CIFS技術說明(頁面存檔備份,存於網際網路檔案館)
- Common Internet File System (CIFS) File Access Protocol(頁面存檔備份,存於網際網路檔案館)—微軟技術說明
- Samba研製信息(頁面存檔備份,存於網際網路檔案館)
- [1]SMB 指令描述