ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

สรุป

ช่องโหว่การเปิดเผยข้อมูลที่มีอยู่ในโพรโทคอลในการรักษาความปลอดภัยของเลเยอร์ขนส่งและโพรโทคอล การรักษาความปลอดภัย Secure Sockets Layer (TLS/SSL) ตามที่นำมาใช้ในคอมโพเนนต์การเข้ารหัสลับของ Microsoft .NET Framework โจมตีที่สามารถช่องโหว่นี้ไม่สามารถถอดรหัสลับปริมาณการใช้งาน TLS/SSL เข้ารหัสลับ

เพื่อทำลายช่องโหว่ที่ โจมตีจะแรกได้ใส่ข้อมูลที่ไม่ได้เข้ารหัสลงในช่องทางปลอดภัย และทำการโจมตี (MiTM) ผู้ชายในตัวตรงกลางระหว่างเป้าหมายไคลเอนต์และเซิร์ฟเวอร์ที่ถูกต้องตามกฎหมาย โปรแกรมปรับปรุงนี้เน้นช่องโหว่ที่ โดยการปรับเปลี่ยนวิธีที่คอมโพเนนต์การเข้ารหัสลับ.NET ส่ง และรับแพคเก็ตเครือข่ายที่เข้ารหัสลับ

ช่องโหว่นี้ได้รับการแก้ไขเป็นส่วนหนึ่งของMicrosoft Security บูเลทีนรักษา MS16-065 โปรแกรมปรับปรุงนี้เปลี่ยนวิธีคอมโพเนนต์การเข้ารหัสลับของ.NET Framework ส่ง และรับแพคเก็ตเครือข่ายที่เข้ารหัสลับ

ตารางต่อไปนี้ประกอบด้วยการเชื่อมโยงไปยังรายการมาตรฐานสำหรับแต่ละช่องโหว่ในรายการช่องโหว่ทั่วไปและ Exposures

ชื่อเรื่องช่องโหว่

หมายเลข CVE

เปิดเผยอย่างเปิดเผย

สามารถ

ช่องโหว่ลวง TLS/SSL

CVE-2016-0149

ใช่

ไม่ใช่

ความละเอียดของช่องโหว่

การเปลี่ยนแปลงที่นำมาใช้ในMicrosoft Security บูเลทีนรักษา MS16-065ทำให้ระเบียนแรกที่ TLS หลังจาก handshake ที่จะแบ่ง ทำให้ SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient และ HttpClient (ถ้าตาม HttpWebRequest) กระแสข้อมูลจะส่งกลับไบต์เดียวสำหรับอ่านแรก ทันทีตาม ด้วยไบต์ที่เหลือ (n-1) ในการอ่านต่อเนื่องกัน การเปลี่ยนแปลงลักษณะการทำงานนี้เกิดขึ้นเฉพาะสำหรับโปรแกรมประยุกต์ที่ใช้ TLS 1.0 + การกำหนดสายงานในการเข้ารหัสบล็อก แต่เมื่อพวกเขาใช้ TLS 1.1 หรือ TLS 1.2

หมายเหตุ เป็นช่วง คุณต้องติดตั้งMicrosoft Security นการ MS12-006เมื่อต้องการเปิดใช้งานการปรับปรุงนี้

การเปลี่ยนแปลงนี้อาจทำให้โปรแกรมประยุกต์บางโปรแกรมที่ใช้.NET Framework ให้แบ่ง บทความนี้อธิบายถึงกันสองวิธีที่คุณสามารถใช้เพื่อปรับปรุงโปรแกรมประยุกต์ของคุณทำงานได้อย่างถูกต้องหลังจากที่คุณใช้Microsoft Security บูเลทีนรักษา MS16-065

Mitigations หาปัญหาความเข้ากันได้

ตัวเลือกที่ 1: การสลับไปยังโพรโทคอล TLS 1.2

ตัวเลือกนี้ทำให้แอพลิเคชันที่ใช้โพรโทคอล TLS 1.2 โดยการปรับเปลี่ยนรีจิสทรี หรือโดยทางโปรแกรมกำหนดค่าโพรโทคอลรุ่น

  • ปรับเปลี่ยนรีจิสทรี

    สิ่งสำคัญ
    ทำตามขั้นตอนในส่วนนี้อย่างระมัดระวัง ปัญหาร้ายแรงอาจเกิดขึ้นหากคุณปรับเปลี่ยนรีจิสทรีอย่างไม่ถูกต้อง ก่อนจะปรับเปลี่ยนสำรองรีจิสทรีสำหรับการคืนค่าในกรณีที่เกิดปัญหาขึ้น

    ใน 4.0 กรอบงาน.NET และโปรแกรมประยุกต์ 4.5.x .NET Framework ที่กำลังทำงานบน.NET Framework 4.5 และรุ่นที่ใหม่กว่า สามารถสลับโพรโทคอลเริ่มต้น กับ TLS 1.2, TLS 1.1, TLS 1.0 โดยการเปิดใช้งานคีย์รีจิสทรีSchUseStrongCrypto คีย์รีจิสทรีนี้จะกล่าวถึงในส่วนการแนะนำการดำเนินการของหัวข้อ2960358 คำแนะนำด้านความปลอดภัยของ Microsoftบนเว็บไซต์ Microsoft TechNet

    สิ่งสำคัญ การเปลี่ยนแปลงรีจิสทรีนี้จะทำงานเท่านั้นถ้ามีเงื่อนไขต่อไปนี้:

    • โปรแกรมประยุกต์ที่ใช้ Api ที่ใช้ ServicePointManagerกำลังตั้งค่าServicePointManager.SecurityProtocolอย่างชัดเจน ตัวอย่างเช่นคลาสของรวมSystem.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequestและSystem.Net.Mail.SmtpClient การตั้งค่าServicePointManager.SecurityProtocolในรหัสจะมีความสำคัญเหนือรีจิสทรี

    • โปรแกรมประยุกต์ที่กำลังใช้การโอเวอร์โหลด SslStream AuthenticateAsClient(String)


  • กำหนดค่าโพรโทคอลรุ่นโดยทางโปรแกรม

    ใน 4.0 กรอบงาน.NET และโปรแกรมประยุกต์ 4.5 ที่กำลังทำงานบน.NET Framework 4.5 และรุ่นที่ใหม่กว่า และที่ใช้มากเกินที่SslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean)ต้องเป็น recompiled ระบุSslProtocols.Tls12, SslProtocols.Tls11และSslProtocols.Tlsเป็นพารามิเตอร์สาม สำหรับคำอธิบายที่สมบูรณ์ของวิธีการใช้คลาส SslStream ดูหัวข้อคลาส SslStreamบนเว็บไซต์ Microsoft สำหรับนักพัฒนา (MSDN)

    หมายเหตุ .NET Framework 4.6 และรุ่นที่ใหม่กว่าใช้ TLS 1.2, TLS 1.1 และ TLS 1.0 เป็นค่าเริ่มต้นโพรโทคอล นี้จะกล่าวถึงในหัวข้อ2960358 คำแนะนำด้านความปลอดภัยของ Microsoftบนเว็บไซต์ Microsoft TechNet


ตัวเลือกที่ 2: หมายเลขอ้างอิงแบ่งแพ็คเก็ต

โปรแกรมปรับปรุงนี้ทำให้ระเบียนเดียวจะแบ่งเป็นหลายเรกคอร์ด ดังนั้น ถ้าโปรแกรมประยุกต์ต้องการระเบียนสมบูรณ์พร้อมใช้งานในการเรียกอ่านเดียว โปรแกรมประยุกต์ดังกล่าวอาจแบ่ง เพื่อให้แน่ใจว่า โปรแกรมประยุกต์ทำงานได้อย่างถูกต้อง ตรวจสอบแอพลิเคชันการจัดการกับแพคเก็ตแยก โดยดำเนินการโทรStream.Readอย่างถูกต้อง คุณสามารถใช้ตัวอย่างรหัสมีอยู่ที่นี่เป็นการอ้างอิงสำหรับวิธีการแก้ไขแอพลิเคชันเพื่อดำเนินการเรียกเลขหมายแบบอ่านได้อย่างถูกต้อง

สำหรับการร้องขอ HTTP ตัวอย่าง ที่แสดงความแตกต่างในลักษณะการทำงานก่อน (พร้อมกับลด) และหลัง (โดยไม่ลด) ปรับปรุง3147461และ3147458ถูกติดตั้ง ให้ดูส่วน "ข้อมูลเพิ่มเติม"

ตัวอย่างของวิธีการStream.Readที่สมบูรณ์ ดูหัวข้อวิธีการ Stream.Read (ไบต์[ Int32, Int32)บนเว็บไซต์ Microsoft สำหรับนักพัฒนา (MSDN)

วิธีแก้ไขปัญหากับปัญหาความเข้ากันได้ของโปรแกรมประยุกต์

คำเตือน วิธีการแก้ไขปัญหาเหล่านี้อาจทำให้คอมพิวเตอร์หรือเครือข่ายที่มีความเสี่ยงที่จะถูกโจมตี จากผู้ใช้ที่เป็นอันตราย หรือซอฟต์แวร์ที่เป็นอันตรายเช่นไวรัส เราไม่แนะนำให้แก้ไขปัญหาเหล่านี้ แต่เสนอข้อมูลนี้เพื่อให้คุณสามารถใช้การแก้ไขปัญหาเหล่านี้ดุลยพินิจของคุณเอง ใช้วิธีการเหล่านี้คุณต้องเสี่ยง

วิธีที่ 1: ปรับปรุงรีจิสทรีคีย์ (พร้อมใช้งานสำหรับ.NET Framework รุ่นทั้งหมด)

ปิดใช้งานโครงสร้าง SCH_SEND_AUX_RECORD (ส่วนกลาง)

ปิดใช้งานโครงสร้าง SCH_SEND_AUX_RECORD สำหรับโปรแกรมประยุกต์แต่ละตัว

ปิดใช้งานโครงสร้าง SCH_SEND_AUX_RECORD (ส่วนกลาง)

สำหรับโปรแกรมประยุกต์ทั้งหมด เพิ่มคีย์ย่อยของรีจิสทรีต่อไปนี้:

ตำแหน่งที่ตั้งของรีจิสทรี: HKEY_LOCAL_MACHINE\Software\Microsoft\ NETFramework\ < version_number >
ชื่อ DWORD: SchSendAuxRecord
ข้อมูลค่า: 0
หมายเหตุ ตัวยึดตำแหน่ง < version_number > เป็น v4.0.30319 หรือ v2.0.50727 ขึ้นอยู่กับรุ่น

สำหรับโปรแกรมประยุกต์ 32 บิตที่เรียกใช้บนคอมพิวเตอร์ 64 บิต เพิ่มคีย์ย่อยของรีจิสทรีต่อไปนี้:

ตำแหน่งที่ตั้งของรีจิสทรี: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\ NETFramework\ < version_number >
ชื่อ DWORD: SchSendAuxRecord
ข้อมูลค่า: 0
หมายเหตุ ตัวยึดตำแหน่ง < version_number > เป็น v4.0.30319 หรือ v2.0.50727 ขึ้นอยู่กับรุ่น

วิธีแก้ปัญหา

เมื่อต้องการปิดใช้งานโหมดการรักษาความปลอดภัยที่อธิบายไว้ในบทความนี้เป็นการชั่วคราว คลิกการเชื่อมโยงที่เหมาะสมเพื่อดาวน์โหลดแฟ้ม.reg และจากนั้น คลิกสองครั้งที่แฟ้ม.reg ที่ดาวน์โหลดมาเพื่อทำการเปลี่ยนแปลงรีจิสทรี

สำหรับโปรแกรมประยุกต์ Microsoft .NET Framework 3.5 กำหนดเป้าหมาย:

Download ดาวน์โหลดแฟ้ม ManualOptOutSchSendAuxRecord20.reg เดี๋ยวนี้
สำหรับโปรแกรมประยุกต์เป้าหมาย Microsoft .NET Framework 4.0 และรุ่นที่ใหม่กว่า:

Download ดาวน์โหลดแฟ้ม ManualOptOutSchSendAuxRecord40.reg เดี๋ยวนี้
เมื่อต้องการเปิดใช้งานโหมดการรักษาความปลอดภัยที่อธิบายไว้ในบทความนี้ คลิกการเชื่อมโยงที่เหมาะสมเพื่อดาวน์โหลดแฟ้ม.reg และจากนั้น คลิกสองครั้งที่แฟ้ม.reg ที่ดาวน์โหลดมาเพื่อทำการเปลี่ยนแปลงรีจิสทรี

สำหรับโปรแกรมประยุกต์ Microsoft .NET Framework 3.5 กำหนดเป้าหมาย:

Download ดาวน์โหลดแฟ้ม ManualOptInSchSendAuxRecord20.reg เดี๋ยวนี้
สำหรับโปรแกรมประยุกต์เป้าหมาย Microsoft .NET Framework 4.0 และรุ่นที่ใหม่กว่า:

Download ดาวน์โหลดแฟ้ม ManualOptInSchSendAuxRecord40.reg เดี๋ยวนี้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการดาวน์โหลดแฟ้มสนับสนุนของ Microsoft ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

119591วิธีการขอรับแฟ้มสนับสนุนของ Microsoft จากบริการออนไลน์Microsoft สแกนแฟ้มนี้เพื่อหาไวรัสแล้ว Microsoft ใช้ซอฟต์แวร์ตรวจสอบไวรัสที่เป็นปัจจุบันที่สุดซึ่งพร้อมใช้งานตั้งแต่วันที่ซึ่งมีการประกาศแฟ้มนี้ แฟ้มนี้ถูกจัดเก็บไว้ในเซิร์ฟเวอร์ที่เพิ่มการรักษาความปลอดภัยซึ่งช่วยป้องกันการเปลี่ยนแปลงใด ๆ ที่ไม่ได้รับอนุญาตต่อแฟ้มดังกล่าว


ปิดใช้งานโครงสร้าง SCH_SEND_AUX_RECORD สำหรับโปรแกรมประยุกต์แต่ละตัว

สำหรับโปรแกรมประยุกต์ทั้งหมด เพิ่มคีย์ย่อยของรีจิสทรีต่อไปนี้:

ตำแหน่งที่ตั้งของรีจิสทรี: HKEY_LOCAL_MACHINE\Software\Microsoft\ \System.Net.ServicePointManager.SchSendAuxRecord NETFramework\ < version_number >
ชื่อ DWORD: เส้นทางครบถ้วนสำหรับ.exe แอพลิเคชัน (ตัวอย่างเช่น C:\MyApp\MyApp.exe)
ข้อมูลค่า: 0
หมายเหตุ ตัวยึดตำแหน่ง < version_number > เป็น v4.0.30319 หรือ v2.0.50727 ขึ้นอยู่กับรุ่น

สำหรับโปรแกรมประยุกต์ 32 บิตที่เรียกใช้บนคอมพิวเตอร์ 64 บิต เพิ่มคีย์ย่อยของรีจิสทรีต่อไปนี้:

ตำแหน่งที่ตั้งของรีจิสทรี: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\ \System.Net.ServicePointManager.SchSendAuxRecord NETFramework\ < version_number >
ชื่อ DWORD: เส้นทางครบถ้วนสำหรับ.exe แอพลิเคชัน (ตัวอย่างเช่น C:\MyApp\MyApp.exe)
ข้อมูลค่า: 0 (ค่าถูกต้องเท่านั้นคือ0 ค่าใด ๆ จะถูกละเว้น)
หมายเหตุ ตัวยึดตำแหน่ง < version_number > เป็น v4.0.30319 หรือ v2.0.50727 ขึ้นอยู่กับรุ่น

วิธีที่ 2: เปลี่ยนแปลงการตั้งค่าคอนฟิกในระดับแอพลิเคชัน (ที่พร้อมใช้งานเฉพาะสำหรับ.NET Framework รุ่น 4.6 และรุ่นที่ใหม่กว่า)

เริ่มต้น ด้วย 4.6 กรอบงาน.NET คุณสามารถเปลี่ยนการตั้งค่าคอนฟิกที่ระดับโปรแกรมประยุกต์ผ่านรหัสหรือแอพลิเคชันรีจิสทรีหรือการตั้งค่าคอนฟิกการเปลี่ยนแปลง

ใน 4.6 กรอบงาน.NET คุณสามารถตั้งค่าสวิตช์ โดยใช้หนึ่งในวิธีต่อไปนี้ ตัวอย่างเหล่านี้ปิดใช้งานคุณลักษณะการรักษาความปลอดภัย

  • โดยทางโปรแกรม

    สิ่งแรกที่ควรทำแอพลิเคชันจะรันรหัสต่อไปนี้ เป็นเช่นนี้ เพราะผู้จัดการจุดบริการจะเตรียมใช้งานเพียงครั้งเดียว

    private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord"; 
    AppContext.SetSwitch(DisableCachingName, true);
    AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true);
  • การตั้งค่าคอนฟิกแอพลิเคชัน

    เมื่อต้องการเปลี่ยนการตั้งค่าคอนฟิกแอพลิเคชัน เพิ่มรายการต่อไปนี้:

    <runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/>
    </runtime>
  • คีย์รีจิสทรี (คอมพิวเตอร์ส่วนกลาง)

    ตำแหน่งที่ตั้งของรีจิสทรี: HKEY_LOCAL_MACHINE\Software\Microsoft\ NETFramework\AppContextHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\ NETFramework\AppContext
    ค่า: Switch.System.Net.DontEnableSchSendAuxRecord
    ชนิด: สายอักขระ
    ค่า: เป็นจริง

    หมายเหตุ Switch.System.Net.DontEnableSchSendAuxRecord = False สำหรับโปรแกรมประยุกต์ทั้งหมด

ข้อมูลเพิ่มเติม

ต่อไปนี้คือ รูปแบบการสื่อสารไคลเอนต์/เซิร์ฟเวอร์ตัวอย่างก่อน และหลัง จากที่มีการติดตั้งโปรแกรมปรับปรุงนี้ ข้อมูลนี้มีให้สำหรับภาพประกอบสำหรับการระบุแอพลิเคชัน breakage ใด ๆ ได้เนื่องจากมีการติดตั้งของโปรแกรมแก้ไขนี้

โดยไม่มีการลด

มีการลด

[Server] กำลังรอสำหรับการเชื่อมต่อ (127.0.0.1:4431)
[ไคลเอ็นต์] เชื่อมต่อไปยัง localhost:4431
[เซิร์ฟเวอร์] ไคลเอนต์ที่เชื่อมต่ออยู่
[ไคลเอ็นต์] เชื่อมต่ออยู่ รับรองความถูกต้อง...
[เซิร์ฟเวอร์] ไคลเอนต์ที่ใช้การพิสูจน์ตัวจริง
[ไคลเอ็นต์] การส่งคำขอ (94 ไบต์)
[ไคลเอ็นต์] กำลังรอการตอบกลับ...

[เซิร์ฟเวอร์] ได้รับ 94 ไบต์: <<< รับ / HTTP/1.0
Host: contoso.com
ตัวแทนผู้ใช้: การทดสอบแอพลิเคชัน

>>>
[เซิร์ฟเวอร์] ตอบกลับ ด้วย 476 ไบต์

[ไคลเอนต์ไบต์ 1:476] การตอบสนอง: <<<<< HTTP/1.1 200 OK

>>>>>

[Server] กำลังรอสำหรับการเชื่อมต่อ (127.0.0.1:4431)
[ไคลเอ็นต์] เชื่อมต่อไปยัง localhost:4431
[เซิร์ฟเวอร์] ไคลเอนต์ที่เชื่อมต่ออยู่
[ไคลเอ็นต์] เชื่อมต่ออยู่ รับรองความถูกต้อง...
[เซิร์ฟเวอร์] ไคลเอนต์ที่ใช้การพิสูจน์ตัวจริง
[ไคลเอ็นต์] การส่งคำขอ (94 ไบต์)
[ไคลเอ็นต์] กำลังรอการตอบกลับ...
[เซิร์ฟเวอร์] ได้รับ 1 ไบต์: <<< G >>>
[เซิร์ฟเวอร์] รับไบต์ 93: <<< อ / HTTP/1.0
Host: contoso.com
ตัวแทนผู้ใช้: การทดสอบแอพลิเคชัน

>>>
[เซิร์ฟเวอร์] ตอบกลับ ด้วย 476 ไบต์
[ไคลเอนต์ไบต์ 1:1] การตอบสนอง: <<<<< H >>>>>
[ไคลเอนต์ไบต์ 2:475] การตอบสนอง: <<<<< TTP/1.1 200 OK

>>>>>


ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×