การบล็อกข้อความเซิร์ฟเวอร์ (SMB) โปรโตคอลเครือข่ายใช้เพื่อแชร์และเข้าถึงโฟลเดอร์ ไฟล์ เครื่องพิมพ์ และอุปกรณ์อื่นๆ ผ่านเครือข่าย (พอร์ต TCP 445) ในบทความนี้ เราจะพิจารณาว่า SMB เวอร์ชันใด (ภาษาถิ่น) ที่มีอยู่ใน Windows เวอร์ชันต่างๆ (และเกี่ยวข้องกับ samba อย่างไร เวอร์ชันบน Linux); วิธีตรวจสอบเวอร์ชัน SMB ที่ใช้บนคอมพิวเตอร์ของคุณ และวิธีเปิดหรือปิดใช้งานภาษาถิ่น SMBv1, SMBv2 และ SMBv3
สารบัญ:
- เวอร์ชันโปรโตคอล SMB ใน Windows
- จะตรวจสอบเวอร์ชัน SMB บน Windows ได้อย่างไร
- ตรวจสอบภาษา SMB ที่ใช้ด้วย Get-SMBConnection
- หยุดใช้โปรโตคอล SMBv1 ที่ไม่ปลอดภัย
- จะเปิดใช้งานและปิดใช้งาน SMBv1, SMBv2 และ SMBv3 บน Windows ได้อย่างไร
เวอร์ชันโปรโตคอล SMB ใน Windows
มีโปรโตคอล SMB (ภาษาถิ่น) หลายเวอร์ชันที่ปรากฏใน Windows เวอร์ชันใหม่อย่างสม่ำเสมอ (และ samba) :
- CIFS – Windows NT 4.0
- SMB 1.0 – Windows 2000
- SMB 2.0 – Windows Server 2008 และ Windows Vista SP1 (รองรับใน Samba 3.6)
- SMB 2.1 – Windows Server 2008 R2 และ Windows 7 (Samba 4.0)
- SMB 3.0 – Windows Server 2012 และ Windows 8 (Samba 4.2)
- SMB 3.02 – Windows Server 2012 R2 และ Windows 8.1 (ไม่รองรับใน Samba)
- SMB 3.1.1 – Windows Server 2016 และ Windows 10 (ไม่รองรับใน Samba)
ในการสื่อสารเครือข่าย SMB ไคลเอ็นต์และเซิร์ฟเวอร์ใช้เวอร์ชันโปรโตคอล SMB สูงสุดที่ทั้งไคลเอ็นต์และเซิร์ฟเวอร์รองรับ
ตารางสรุปความเข้ากันได้ของเวอร์ชัน SMB มีลักษณะดังนี้ เมื่อใช้ตารางนี้ คุณจะระบุเวอร์ชันของโปรโตคอล SMB ที่เลือกได้เมื่อ Windows รุ่นต่างๆ โต้ตอบกัน:
ระบบปฏิบัติการ Windows 10, Win Server 2016Windows 8.1, Win Server 2012 R2Windows 8, Server 2012Windows 7, Server 2008 R2Windows Vista, Server 2008Windows XP, Server 2003 และรุ่นก่อนหน้า Windows 10, Windows Server 2016SMB 3.1.1SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0Windows 8.1, เซิร์ฟเวอร์ 2012 R2SMB 3.02SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0Windows 8, เซิร์ฟเวอร์ 2012SMB 3.0SMB 3.0SMB 3.0SMB 2.1SMB 2.0SMB 1.0Windows 7, เซิร์ฟเวอร์ 2008 R2SMB 2.1SMB 2.1SMB 2.1SMB 2.1SMB 2.0SMB 1.0Windows Vista, เซิร์ฟเวอร์ 2008SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 1.0Windows XP, 2003 และรุ่นก่อนหน้าSMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0ตัวอย่างเช่น หากคอมพิวเตอร์ไคลเอนต์ที่ใช้ Windows 8.1 เชื่อมต่อกับเซิร์ฟเวอร์ไฟล์ที่มี Windows Server 2016 จะใช้โปรโตคอล SMB 3.0.2
ตามตาราง Windows XP และ Windows Server 2003 สามารถใช้ SMB 1.0 เท่านั้นในการเข้าถึงโฟลเดอร์และไฟล์ที่แชร์ SMBv1 ถูกปิดใช้งานใน Windows Server เวอร์ชันใหม่กว่า (2012 R2 / 2016) ดังนั้น หากคุณยังคงใช้อุปกรณ์ Windows XP และ Windows Server 2003 บนเครือข่ายของคุณ อุปกรณ์เหล่านั้นจะไม่สามารถเข้าถึงโฟลเดอร์ที่ใช้ร่วมกันบนเซิร์ฟเวอร์ไฟล์ที่ใช้ Windows Server 2016
หากใช้ Windows Server 2019/2016 ที่ปิดใช้งาน SMB v1.0 เป็นตัวควบคุมโดเมน ไคลเอ็นต์ Windows XP/Server 2003 จะไม่สามารถเข้าถึงโฟลเดอร์ SYSVOL และ NETLOGON บนตัวควบคุมโดเมนและรับรองความถูกต้องด้วย AD
คุณอาจได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามเชื่อมต่อกับโฟลเดอร์ที่ใช้ร่วมกันบนเซิร์ฟเวอร์ไฟล์ที่ปิดใช้งาน SMBv1:
ชื่อเครือข่ายที่ระบุไม่สามารถใช้ได้อีกต่อไป
จะตรวจสอบเวอร์ชัน SMB บน Windows ได้อย่างไร
มาดูวิธีการค้นหาเวอร์ชันของ SMB ที่เปิดใช้งานบนอุปกรณ์ Windows ของคุณ
ใน Windows 10/8.1 และ Windows Server 2019/2016/2012R2 คุณสามารถตรวจสอบสถานะของภาษาถิ่นต่างๆ ของโปรโตคอล SMB ได้โดยใช้ PowerShell:
Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol
คำสั่งนี้ส่งคืนว่าโปรโตคอล SMB1 ถูกปิดใช้งาน (EnableSMB1Protocol = True
) และเปิดใช้งานโปรโตคอล SMB2 และ SMB3 แล้ว (EnableSMB1Protocol = False
)
บน Windows 7, Vista และ Windows Server 2008 R2/2008:
Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}
หากไม่มีพารามิเตอร์ชื่อ SMB1
หรือ SMB2
ในรีจิสตรีคีย์นี้ โปรโตคอล SMBv1 และ SMBv2 จะถูกเปิดใช้งานโดยค่าเริ่มต้น
นอกจากนี้ ในเวอร์ชัน Windows เหล่านี้ คุณสามารถตรวจสอบได้ว่าภาษาของไคลเอ็นต์ SMB ใดได้รับอนุญาตให้เชื่อมต่อกับโฮสต์ระยะไกล:
sc.exe query mrxsmb10
SERVICE_NAME:mrxsmb10TYPE :2 FILE_SYSTEM_DRIVERSTATE :4 RUNNING(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)WIN32_EXIT_CODE :0 (0x0)SERVICE_EXIT_CODE :0 (0x0) CHECKPOINT :0x0WAIT_HINT ก่อน :0 WAIT_HINT
sc.exe query mrxsmb20
SERVICE_NAME:mrxsmb20TYPE :2 FILE_SYSTEM_DRIVERSTATE :4 RUNNING(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)WIN32_EXIT_CODE :0 (0x0)SERVICE_EXIT_CODE :0 (0x0)CHECKPOINT :0x0WAIT_HINT ก่อน :0WAIT_HINTในทั้งสองกรณี บริการกำลังทำงานอยู่ (
STATE = 4 Running
). ซึ่งหมายความว่าอุปกรณ์ Windows ปัจจุบันสามารถเชื่อมต่อกับทั้งโฮสต์ SMBv1 และ SMBv2การตรวจสอบภาษา SMB ที่ใช้ด้วย Get-SMBConnection
เมื่อสื่อสารผ่าน SMB คอมพิวเตอร์จะใช้เวอร์ชัน SMB สูงสุดที่ทั้งไคลเอ็นต์และเซิร์ฟเวอร์รองรับ
Get-SMBConnection
PowerShell cmdlet สามารถใช้เพื่อตรวจสอบเวอร์ชัน SMB ที่ใช้ในการเข้าถึงคอมพิวเตอร์ระยะไกล:
เวอร์ชัน SMB ที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล (ServerName ) อยู่ใน ภาษาถิ่น คอลัมน์
คุณสามารถแสดงข้อมูลเกี่ยวกับเวอร์ชัน SMB ที่ใช้ในการเข้าถึงเซิร์ฟเวอร์เฉพาะได้:
Get-SmbConnection -ServerName srvfs01
หากคุณต้องการแสดงว่ามีการใช้การเข้ารหัส SMB หรือไม่ (แนะนำใน SMB 3.0):
บน Linux คุณสามารถแสดงรายการการเชื่อมต่อ SMB และใช้ภาษาถิ่นใน samba โดยใช้คำสั่ง:
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
$ sudo smbstatus
ที่ฝั่งเซิร์ฟเวอร์ Windows SMB คุณสามารถแสดงรายการเวอร์ชันของโปรโตคอล SMB ที่ไคลเอ็นต์กำลังใช้อยู่ รันคำสั่ง:
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique
ในตัวอย่างนี้ มีไคลเอนต์ 898 ที่เชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ SMB 2.1 (Windows 7/ Windows 2008 R2) และลูกค้า SMB 3.02 8 ราย
คุณสามารถใช้ PowerShell เพื่อเปิดใช้งานการตรวจสอบเวอร์ชัน SMB ที่ใช้สำหรับการเชื่อมต่อ:
Set-SmbServerConfiguration –AuditSmb1Access $true
เหตุการณ์การเชื่อมต่อ SMB สามารถส่งออกจากบันทึกตัวแสดงเหตุการณ์:
Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit
หยุดใช้โปรโตคอล SMBv1 ที่ไม่ปลอดภัย
ในช่วงไม่กี่ปีที่ผ่านมา Microsoft ได้ปิดใช้งานโปรโตคอล SMB 1.0 แบบเดิมในผลิตภัณฑ์ทั้งหมดอย่างเป็นระบบด้วยเหตุผลด้านความปลอดภัย นี่เป็นเพราะช่องโหว่ที่สำคัญจำนวนมากในโปรโตคอลนี้ (จำเหตุการณ์ที่เกิดขึ้นกับ Wannacrypt และ Petya ransomware ซึ่งใช้ประโยชน์จากช่องโหว่ในโปรโตคอล SMBv1) Microsoft และบริษัทไอทีอื่นๆ ขอแนะนำอย่างยิ่งให้คุณหยุดใช้ SMBv1 ในเครือข่ายของคุณ
อย่างไรก็ตาม การปิดใช้งาน SMBv1 อาจทำให้เกิดปัญหาในการเข้าถึงไฟล์และโฟลเดอร์ที่แชร์ใน Windows 10 เวอร์ชันใหม่กว่า (Windows Server 2016/2019) จากไคลเอนต์รุ่นเก่า (Windows XP, Windows Server 2003), ระบบปฏิบัติการของบริษัทอื่น (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, Linux distros เก่า), อุปกรณ์ NAS รุ่นเก่า
หากไม่มีอุปกรณ์รุ่นเก่าเหลืออยู่ในเครือข่ายของคุณที่รองรับเฉพาะ SMBv1 อย่าลืมปิดการใช้งาน SMB dialect นี้ใน Windows
หากคุณมีไคลเอ็นต์ที่ใช้ Windows XP, Windows Server 2003 หรืออุปกรณ์อื่นๆ ที่รองรับ SMBv1 เท่านั้น ควรอัปเดตหรือแยกออก
จะเปิดใช้งานและปิดใช้งาน SMBv1, SMBv2 และ SMBv3 บน Windows ได้อย่างไร
มาดูวิธีเปิดใช้งานและปิดใช้งาน SMB เวอร์ชันต่างๆ บน Windows กัน เราจะครอบคลุมการจัดการไคลเอ็นต์ SMB และเซิร์ฟเวอร์ (เป็นส่วนประกอบ Windows ที่แตกต่างกัน)
Windows 10, 8.1 และ Windows Server 2019/2016/2012R2 :
ปิดใช้งานไคลเอ็นต์และเซิร์ฟเวอร์ SMBv1:
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
ปิดการใช้งานเซิร์ฟเวอร์ SMBv1 เท่านั้น:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
เปิดใช้งานไคลเอ็นต์และเซิร์ฟเวอร์ SMBv1:
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
เปิดใช้งานเฉพาะเซิร์ฟเวอร์ SMBv1:
เรียนรู้เพิ่มเติมเกี่ยวกับโปรโตคอล SMBv1 บน Windows 10 และ Windows Server 2016/2019
Set-SmbServerConfiguration -EnableSMB1Protocol $true
ปิดใช้งานเซิร์ฟเวอร์ SMBv2 และ SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
เปิดใช้งานเซิร์ฟเวอร์ SMBv2 และ SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $true
Windows 7, Vista และ Windows Server 2008 R2/2008 :
ปิดใช้งานเซิร์ฟเวอร์ SMBv1:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
เปิดใช้งานเซิร์ฟเวอร์ SMBv1:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force
ปิดการใช้งานไคลเอ็นต์ SMBv1:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabledเปิดใช้งานไคลเอ็นต์ SMBv1:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= autoปิดการใช้งานเซิร์ฟเวอร์ SMBv2:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force
เปิดใช้งานเซิร์ฟเวอร์ SMBv2:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force
ปิดการใช้งานไคลเอ็นต์ SMBv2:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabledเปิดใช้งานไคลเอ็นต์ SMBv2:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= autoคุณสามารถปิดใช้งานเซิร์ฟเวอร์ SMBv1 บนคอมพิวเตอร์ที่เข้าร่วมโดเมนได้โดยการปรับใช้พารามิเตอร์รีจิสทรีต่อไปนี้ผ่าน GPO:
- คีย์:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
- ชื่อ:SMB1
- ประเภท:REG_DWORD
- ค่า:0
ตั้งค่าพารามิเตอร์รีจิสตรี SMB2=0
เพื่อปิดการใช้งานเซิร์ฟเวอร์ SMBv2
หากต้องการปิดใช้งานไคลเอ็นต์ SMBv1 คุณต้องเผยแพร่การตั้งค่ารีจิสทรีต่อไปนี้:
- คีย์:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
- ชื่อ:สตาร์ท
- ประเภท:REG_DWORD
- มูลค่า:4