6 คะแนน โดย GN⁺ 2024-06-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Let's Encrypt กังวลมาโดยตลอดว่าหลายส่วนของระบบปฏิบัติการและโครงสร้างพื้นฐานเครือข่ายเขียนด้วยภาษาที่ไม่ปลอดภัยอย่าง C และ C++
  • แม้ซอฟต์แวร์ CA จะเขียนด้วย Golang ที่ปลอดภัยด้านหน่วยความจำ แต่ส่วนของ OS/เครือข่ายยังขาดความปลอดภัยด้านหน่วยความจำ ทำให้เกิดช่องโหว่ที่ต้องออกแพตช์เป็นประจำ
  • ในปี 2020 จึงเริ่มโครงการ Prossimo โดยมีเป้าหมายเพื่อทำให้โครงสร้างพื้นฐานซอฟต์แวร์สำคัญมีความปลอดภัยด้านหน่วยความจำ

ผลงานสำคัญของโครงการ Prossimo

  • ลงทุนในองค์ประกอบซอฟต์แวร์หลากหลายส่วน เช่น ไลบรารี TLS อย่าง Rustls, Hickory DNS, รีเวิร์สพร็อกซี River, sudo-rs, การรองรับ Rust ใน Linux kernel, ntpd-rs และอื่น ๆ
  • ล่าสุดได้ติดตั้งใช้งาน ntpd-rs ซึ่งเป็นซอฟต์แวร์ที่ปลอดภัยด้านหน่วยความจำตัวแรกจาก Prossimo ในโครงสร้างพื้นฐานของ Let's Encrypt

ความสำคัญของ ntpd-rs

  • ระบบปฏิบัติการส่วนใหญ่ใช้ Network Time Protocol (NTP) เพื่อกำหนดเวลาให้แม่นยำ
  • การติดตามเวลาเป็นงานสำคัญของ OS และต้องมีปฏิสัมพันธ์กับอินเทอร์เน็ต ดังนั้นความปลอดภัยของการติดตั้งใช้งาน NTP จึงมีความสำคัญ
  • เดือนเมษายน 2022 Prossimo เริ่มพัฒนา ntpd-rs ซึ่งเป็นการติดตั้งใช้งาน NTP ที่ปลอดภัยด้านหน่วยความจำและปลอดภัยยิ่งขึ้น
  • เดือนเมษายน 2024 ntpd-rs ถูกนำไปใช้ในสภาพแวดล้อม staging ของ Let's Encrypt และขณะนี้ใช้งานอยู่ใน production แล้ว

แผนในอนาคต

  • ในอีกไม่กี่ปีข้างหน้า มีแผนจะเปลี่ยนซอฟต์แวร์ C หรือ C++ ในโครงสร้างพื้นฐานของ Let's Encrypt ไปเป็นทางเลือกที่ปลอดภัยด้านหน่วยความจำ
    • เปลี่ยน OpenSSL และผลิตภัณฑ์ที่แตกแขนงจากมันไปเป็น Rustls
    • เปลี่ยนซอฟต์แวร์ DNS ไปเป็น Hickory
    • เปลี่ยน Nginx ไปเป็น River
    • เปลี่ยน sudo ไปเป็น sudo-rs

ความเห็นของ GN⁺

  • ความสำคัญของความปลอดภัยด้านหน่วยความจำ: ซอฟต์แวร์ที่เขียนด้วยภาษาที่ปลอดภัยด้านหน่วยความจำช่วยลดช่องโหว่ด้านความปลอดภัยได้อย่างมาก
  • ข้อดีของ Rust: Rust มอบทั้งความปลอดภัยด้านหน่วยความจำและประสิทธิภาพสูง จึงเหมาะกับซอฟต์แวร์จำนวนมากที่ไวต่อประเด็นด้านความปลอดภัย
  • บทบาทของชุมชน: โครงการโอเพนซอร์สต้องพึ่งพาการมีส่วนร่วมจากชุมชน และกรณีของ Let's Encrypt ก็เช่นกัน
  • สิ่งที่ต้องพิจารณาเมื่อรับเทคโนโลยีใหม่มาใช้: การนำเทคโนโลยีใหม่มาใช้ควรคำนึงถึงความเข้ากันได้กับระบบเดิม เส้นโค้งการเรียนรู้ และปัจจัยอื่น ๆ
  • ความจำเป็นของการเสริมความปลอดภัย: การยกระดับความปลอดภัยของโครงสร้างพื้นฐานอินเทอร์เน็ตมีส่วนช่วยเพิ่มความปลอดภัยให้กับระบบนิเวศอินเทอร์เน็ตโดยรวม

1 ความคิดเห็น

 
GN⁺ 2024-06-25
ความเห็นบน Hacker News
  • แนวคิดในการเขียน NTPD ด้วย Rust: สนใจแนวคิดในการเขียน NTPD ด้วย Rust และกำลังมองหาข้อมูลด้านประสิทธิภาพ โดยเฉพาะประสิทธิภาพการซิงก์เวลาในสถานการณ์ที่เครือข่ายมีปัญหา และอยากเห็นการเปรียบเทียบกับ Chrony ด้วย
  • ความซับซ้อนของปัญหา NTP: NTP ยังไม่ใช่ปัญหาที่ถูกแก้จนสมบูรณ์ และประสิทธิภาพสำคัญกว่าความปลอดภัยของหน่วยความจำ Chrony ดีกว่า NTP ที่มากับระบบอย่างมาก จึงใช้งานอยู่
  • ความเห็นจากผู้ชื่นชอบ Rust: ในฐานะคนที่ชอบ Rust มองว่า ntpd-rs ควรมีประสิทธิภาพใกล้เคียงกับ Chrony จึงจะคุ้มค่าที่จะพิจารณา
  • ประเด็นเรื่องความปลอดภัยของหน่วยความจำ: รู้สึกแปลกที่เน้นเรื่องความปลอดภัยของหน่วยความจำ NTPD มีช่องทางการโจมตีน้อย และตอนนี้ก็ทำงานได้ดีโดยไม่มีปัญหาด้านหน่วยความจำ ควรนำภาษาแบบ memory-safe ไปเขียนคอมโพเนนต์ที่สำคัญกว่านี้ใหม่มากกว่า
  • คำถามเรื่องการพึ่งพา JSON: สงสัยว่าทำไม NTPD ถึงต้องพึ่งพา JSON
  • ข้อเสนอให้เขียน BGP ใหม่: ถัดไปน่าจะลองเขียน BGP ใหม่ด้วยภาษาแบบ memory-safe
  • การใช้งาน NTPsec: สงสัยว่ามีใครใช้งาน NTPsec จริงหรือไม่
  • ปัญหาของเซิร์ฟเวอร์ NTP: ปัญหาของ NTP ไม่ได้อยู่ที่ฝั่งไคลเอนต์ แต่อยู่ที่เซิร์ฟเวอร์ที่ต้องรับมือกับแพ็กเก็ต UDP ปลอม จึงไม่ค่อยเชื่อว่า NTPD จะกลายเป็นแบบ TCP-only ได้ และได้หยุดรัน public stratum 3 server ไปตั้งแต่ 10 ปีก่อน