การเปิดตัว OpenSSH 8.9 พร้อมการกำจัดช่องโหว่ใน sshd

หลังจากหกเดือนของการพัฒนา ก็ได้มีการนำเสนอ OpenSSH 8.9 ซึ่งเป็นการใช้งานแบบเปิดของไคลเอ็นต์และเซิร์ฟเวอร์สำหรับการทำงานบนโปรโตคอล SSH 2.0 และ SFTP sshd เวอร์ชันใหม่แก้ไขช่องโหว่ที่อาจทำให้มีการเข้าถึงโดยไม่ได้รับอนุญาต ปัญหานี้เกิดจากการมีจำนวนเต็มล้นในรหัสการตรวจสอบความถูกต้อง แต่สามารถนำไปใช้ร่วมกับข้อผิดพลาดทางตรรกะอื่นๆ ในรหัสเท่านั้น

ในรูปแบบปัจจุบัน ไม่สามารถหาประโยชน์จากช่องโหว่ได้เมื่อเปิดใช้งานโหมดการแยกสิทธิ์ เนื่องจากการแสดงรายการถูกบล็อกโดยการตรวจสอบแยกต่างหากที่ดำเนินการในโค้ดติดตามการแยกสิทธิ์ โหมดการแยกสิทธิ์ได้รับการเปิดใช้งานตามค่าเริ่มต้นตั้งแต่ปี 2002 นับตั้งแต่ OpenSSH 3.2.2 และมีผลบังคับใช้นับตั้งแต่เปิดตัว OpenSSH 7.5 ที่เผยแพร่ในปี 2017 นอกจากนี้ ใน OpenSSH เวอร์ชันพกพาที่เริ่มตั้งแต่เวอร์ชัน 6.5 (2014) เป็นต้นไป ช่องโหว่จะถูกบล็อกโดยการคอมไพล์พร้อมการรวมแฟล็กการป้องกันจำนวนเต็มล้นไว้ด้วย

การเปลี่ยนแปลงอื่นๆ:

  • OpenSSH เวอร์ชันพกพาใน sshd ได้ลบการสนับสนุนดั้งเดิมสำหรับการแฮชรหัสผ่านโดยใช้อัลกอริธึม MD5 (อนุญาตให้เชื่อมโยงกับไลบรารีภายนอกเช่น libxcrypt เพื่อส่งคืน)
  • ssh, sshd, ssh-add และ ssh-agent ใช้งานระบบย่อยเพื่อจำกัดการโอนและการใช้คีย์ที่เพิ่มใน ssh-agent ระบบย่อยนี้ช่วยให้คุณกำหนดกฎเกณฑ์ที่กำหนดว่าจะใช้คีย์ใน ssh-agent ได้อย่างไรและที่ใด ตัวอย่างเช่น หากต้องการเพิ่มคีย์ที่ใช้ตรวจสอบสิทธิ์ได้เฉพาะเมื่อผู้ใช้รายใดก็ตามเชื่อมต่อกับโฮสต์ scylla.example.org ผู้ใช้ perseus เชื่อมต่อไปยังโฮสต์ cetus.example.org และผู้ใช้ medea เชื่อมต่อไปยังโฮสต์ charybdis.example.org พร้อมการเปลี่ยนเส้นทางผ่านโฮสต์ตัวกลาง scylla.example.org คุณสามารถใช้คำสั่งต่อไปนี้: $ ssh-add -h "perseus@cetus.example.org" \ -h "scylla.example.org" \ -h "scylla.example.org>medea@charybdis.example.org" \ ~/.ssh/id_ed25519
  • ใน ssh และ sshd อัลกอริทึมไฮบริด "sntrup761x25519-sha512@openssh.com" (ECDH/x25519 + NTRU Prime) ทนทานต่อการโจมตีแบบบรูทฟอร์ซบนคอมพิวเตอร์ควอนตัม ได้ถูกเพิ่มเข้าในรายการ KexAlgorithms ตามค่าเริ่มต้น ซึ่งจะกำหนดลำดับในการเลือกวิธีการแลกเปลี่ยนคีย์ ใน OpenSSH 8.9 วิธีการเจรจาต่อรองนี้ถูกเพิ่มเข้าระหว่างวิธีการ ECDH และ DH แต่มีแผนที่จะใช้เป็นค่าเริ่มต้นในรุ่นถัดไป
  • ssh-keygen, ssh และ ssh-agent ได้ปรับปรุงการจัดการคีย์โทเค็น FIDO ที่ใช้สำหรับการตรวจสอบอุปกรณ์ รวมถึงคีย์สำหรับการตรวจสอบสิทธิ์แบบไบโอเมตริกซ์
  • เพิ่มคำสั่ง "ssh-keygen -Y match-principals" ให้กับ ssh-keygen เพื่อตรวจสอบชื่อผู้ใช้ในไฟล์อนุญาตชื่อรายการ
  • ssh-add และ ssh-agent ให้ความสามารถในการเพิ่มคีย์ FIDO ที่ป้องกันด้วยรหัส PIN ให้กับ ssh-agent (คำขอ PIN จะแสดงในเวลาที่ทำการตรวจสอบสิทธิ์)
  • ssh-keygen อนุญาตให้เลือกอัลกอริทึมการแฮช (sha512 หรือ sha256) ในระหว่างการสร้างลายเซ็น
  • ใน ssh และ sshd เพื่อปรับปรุงประสิทธิภาพ ข้อมูลเครือข่ายจะถูกอ่านโดยตรงไปยังบัฟเฟอร์ของแพ็กเก็ตขาเข้า โดยข้ามการบัฟเฟอร์ระดับกลางบนสแต็ก การจัดวางข้อมูลที่ได้รับโดยตรงลงในบัฟเฟอร์ช่องสัญญาณจะดำเนินการในลักษณะเดียวกัน
  • ใน ssh คำสั่ง PubkeyAuthentication ได้ขยายรายการพารามิเตอร์ที่รองรับ (ใช่ | ไม่ | ไม่ผูกมัด | ผูกกับโฮสต์) เพื่อให้สามารถเลือกส่วนขยายโปรโตคอลที่จะใช้ได้

ในเวอร์ชันที่จะออกในอนาคต โปรแกรม scp จะเปลี่ยนไปใช้ SFTP เป็นค่าเริ่มต้น แทนที่โปรโตคอล SCP/RCP เดิม SFTP ใช้วิธีการจัดการชื่อไฟล์ที่คาดเดาได้มากกว่า และหลีกเลี่ยงการจัดการรูปแบบ glob ในชื่อไฟล์ผ่านเชลล์บนโฮสต์อื่น ซึ่งอาจก่อให้เกิดช่องโหว่ด้านความปลอดภัย โดยเฉพาะอย่างยิ่ง เมื่อใช้ SCP และ RCP เซิร์ฟเวอร์จะเป็นผู้ตัดสินใจว่าจะส่งไฟล์และไดเร็กทอรีใดไปยังไคลเอนต์ ในขณะที่ไคลเอนต์จะตรวจสอบเฉพาะชื่อวัตถุที่ส่งกลับมาว่าถูกต้องหรือไม่ ซึ่งอาจทำให้เกิดช่องโหว่ด้านความปลอดภัยได้หากไม่ได้ตรวจสอบอย่างถูกต้องในฝั่งไคลเอนต์ เซิร์ฟเวอร์ การถ่ายโอนไฟล์ที่มีชื่อแตกต่างจากที่ร้องขอ โปรโตคอล SFTP ไม่มีปัญหาเหล่านี้ แต่ไม่รองรับการขยายเส้นทางพิเศษ เช่น "~/" เพื่อแก้ไขความแตกต่างนี้ จึงมีการเสนอส่วนขยายโปรโตคอล SFTP ใหม่สำหรับการขยายเส้นทาง ~/ และ ~user/ ใน OpenSSH เวอร์ชันก่อนหน้าของการใช้งานเซิร์ฟเวอร์ SFTP

ที่มา: opennet.ru