OpenSSH เพิ่มการรองรับการตรวจสอบสิทธิ์แบบสองปัจจัยสากล

ไปยังฐานโค้ด OpenSSH เพิ่ม การสนับสนุนการทดลองสำหรับการตรวจสอบสิทธิ์แบบสองปัจจัยโดยใช้อุปกรณ์ที่รองรับโปรโตคอล U2Fพัฒนาโดยพันธมิตร FIDO. U2F อนุญาตให้สร้างโทเค็นฮาร์ดแวร์ราคาประหยัดเพื่อตรวจสอบสถานะทางกายภาพของผู้ใช้ โดยโต้ตอบกับพวกเขาผ่าน USB, Bluetooth หรือ NFC อุปกรณ์ดังกล่าวได้รับการส่งเสริมให้เป็นวิธีการตรวจสอบสิทธิ์แบบสองปัจจัยบนเว็บไซต์ ได้รับการสนับสนุนโดยเบราว์เซอร์หลักๆ และผลิตโดยผู้ผลิตหลายราย รวมถึง Yubico, Feitian, Thetis และ Kensington

หากต้องการโต้ตอบกับอุปกรณ์ที่ยืนยันการมีอยู่ของผู้ใช้ ได้มีการเพิ่มคีย์ประเภทใหม่ลงใน OpenSSH "[ป้องกันอีเมล]” (“ecdsa-sk”) ซึ่งใช้อัลกอริธึมลายเซ็นดิจิทัล ECDSA (Elliptic Curve Digital Signature Algorithm) พร้อมเส้นโค้งวงรี NIST P-256 และแฮช SHA-256 ขั้นตอนการโต้ตอบกับโทเค็นจะถูกวางไว้ในไลบรารีระดับกลาง ซึ่งโหลดในลักษณะเดียวกันกับไลบรารีเพื่อรองรับ PKCS#11 และเป็น wrapper ที่ด้านบนของไลบรารี libfido2ซึ่งมีเครื่องมือสำหรับการสื่อสารด้วยโทเค็นผ่าน USB (รองรับโปรโตคอล FIDO U2F/CTAP 1 และ FIDO 2.0/CTAP 2) ไลบรารีระดับกลาง libsk-libfido2 จัดทำโดยนักพัฒนา OpenSSH รวมอยู่ด้วย เข้าสู่คอร์ libfido2 เช่นกัน ไดรเวอร์ HID สำหรับ OpenBSD

หากต้องการเปิดใช้งาน U2F คุณสามารถใช้โค้ดเบสชิ้นใหม่ได้ ที่เก็บ OpenSSH และสาขา HEAD ของห้องสมุด libfido2ซึ่งมีเลเยอร์ที่จำเป็นสำหรับ OpenSSH อยู่แล้ว
Libfido2 รองรับ OpenBSD, Linux, macOS และ Windows

ในการตรวจสอบความถูกต้องและสร้างคีย์ คุณต้องตั้งค่าตัวแปรสภาพแวดล้อม SSH_SK_PROVIDER โดยระบุเส้นทางไปยัง libsk-libfido2.so (ส่งออก SSH_SK_PROVIDER=/path/to/libsk-libfido2.so) หรือกำหนดไลบรารีผ่าน SecurityKeyProvider จากนั้นเรียกใช้ "ssh-keygen -t ecdsa-sk" หรือหากคีย์ถูกสร้างขึ้นและกำหนดค่าไว้แล้ว ให้เชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ "ssh" เมื่อคุณเรียกใช้ ssh-keygen คู่คีย์ที่สร้างขึ้นจะถูกบันทึกใน “~/.ssh/id_ecdsa_sk” และสามารถใช้คล้ายกับคีย์อื่นๆ ได้

ควรคัดลอกคีย์สาธารณะ (id_ecdsa_sk.pub) ไปยังเซิร์ฟเวอร์ในไฟล์authorized_keys ทางฝั่งเซิร์ฟเวอร์ จะมีการตรวจสอบเฉพาะลายเซ็นดิจิทัลเท่านั้น และมีการโต้ตอบกับโทเค็นบนฝั่งไคลเอ็นต์ (คุณไม่จำเป็นต้องติดตั้ง libsk-libfido2 บนเซิร์ฟเวอร์ แต่เซิร์ฟเวอร์ต้องรองรับประเภทคีย์ “ecdsa-sk”) . ไพรเวตคีย์ที่สร้างขึ้น (id_ecdsa_sk) โดยพื้นฐานแล้วคือตัวจัดการคีย์ โดยสร้างเป็นคีย์จริงเมื่อใช้ร่วมกับลำดับความลับที่จัดเก็บไว้ในฝั่งโทเค็น U2F เท่านั้น

หากคีย์ id_ecdsa_sk ตกไปอยู่ในมือของผู้โจมตี เพื่อผ่านการรับรองความถูกต้อง เขาจะต้องเข้าถึงโทเค็นฮาร์ดแวร์ด้วย โดยที่คีย์ส่วนตัวที่จัดเก็บไว้ในไฟล์ id_ecdsa_sk จะไม่มีประโยชน์ นอกจากนี้ ตามค่าเริ่มต้น เมื่อดำเนินการใดๆ ด้วยคีย์ (ทั้งระหว่างการสร้างและระหว่างการตรวจสอบสิทธิ์) จำเป็นต้องมีการยืนยันการมีอยู่จริงของผู้ใช้ในเครื่อง เช่น มีการเสนอให้แตะเซ็นเซอร์บนโทเค็น ซึ่งทำให้ยากต่อ ทำการโจมตีระบบระยะไกลด้วยโทเค็นที่เชื่อมต่อ เพื่อเป็นการป้องกันอีกระดับหนึ่ง ยังสามารถระบุรหัสผ่านในระหว่างขั้นตอนเริ่มต้นของ ssh-keygen เพื่อเข้าถึงไฟล์คีย์ได้

สามารถเพิ่มคีย์ U2F ให้กับ ssh-agent ผ่านทาง "ssh-add ~/.ssh/id_ecdsa_sk" ได้ แต่ต้องสร้าง ssh-agent ที่รองรับคีย์ "ecdsa-sk" ต้องมีเลเยอร์ libsk-libfido2 และ ตัวแทนจะต้องทำงานบนระบบที่โทเค็นเชื่อมต่ออยู่
มีการเพิ่มประเภทคีย์ใหม่ “ecdsa-sk” เนื่องจากรูปแบบของคีย์ OpenSSH ecdsa แตกต่างจากรูปแบบ U2F สำหรับลายเซ็นดิจิทัล ECDSA เมื่อมีฟิลด์เพิ่มเติม

ที่มา: opennet.ru

เพิ่มความคิดเห็น