ความปลอดภัย
หน้านี้บอกทั้งสิ่งที่เราปกป้องได้ และสิ่งที่เราปกป้องไม่ได้ เรื่องเล่าด้านความปลอดภัยที่ตัดส่วนหลังทิ้ง เท่ากับชวนให้ผู้อ่านเข้าใจผิดว่ารายการหนึ่งชุดคือคำรับประกัน
จุดตั้งต้น
การเผยแพร่แพ็กเกจหมายถึง การรันโค้ดบนเครื่องของวิศวกรทุกคน ที่ติดตั้งมัน ทุกการตัดสินใจด้านความปลอดภัยในผลิตภัณฑ์นี้ถูกชั่งน้ำหนักด้วยคำถามข้อแรกเสมอว่า การเปลี่ยนแปลงนี้ทำให้การเผยแพร่โดยไม่ได้รับอนุญาตง่ายขึ้นหรือไม่
แพ็กเกจถูกเซ็น (ECDSA P-256)
ไฟล์ลายเซ็นเดินทางอยู่ ภายใน แพ็กเกจ สิ่งที่ถูกเซ็นคือเอกสารกำกับที่บรรจุ ค่าแฮชของแต่ละไฟล์ ชื่อระบุแพ็กเกจ และเวอร์ชัน ไม่ใช่ค่าแฮชของไฟล์บีบอัดเปล่า ๆ
ถ้าเซ็นแค่ค่าแฮช ไฟล์บีบอัด เก่า ที่มีลายเซ็นถูกต้องก็ถูกนำมาแสดงเป็นเวอร์ชันใหม่ได้ ลายเซ็นจะผ่านการตรวจ และผู้ใช้จะติดตั้งเครื่องมือที่รู้กันอยู่แล้วว่ามีช่องโหว่ในฐานะ “การอัปเดต”
กุญแจส่วนตัวไม่ได้อยู่บนเซิร์ฟเวอร์
เซิร์ฟเวอร์ทำหน้าที่ตรวจสอบอย่างเดียว การเซ็นเกิดขึ้นบนเครื่องของผู้เผยแพร่เอง ด้วยเครื่องมือแยกอีกตัวหนึ่ง
ถ้ากุญแจอยู่บนเซิร์ฟเวอร์ ใครที่ยึดเซิร์ฟเวอร์ได้ก็แก้แพ็กเกจแล้วเซ็นใหม่ได้ และนั่นทำให้การเซ็นทั้งหมดไร้ความหมาย
ฝั่งผู้ใช้ตรวจซ้ำอีกชั้น
ส่วนเสริมบนเครื่องของวิศวกรตรวจลายเซ็นด้วยตัวเองอย่างเป็นอิสระ และรายชื่อกุญแจที่เชื่อถือได้ซึ่งมันใช้ ไม่ได้มาจากเซิร์ฟเวอร์
การเซ็นมีอยู่ก็เพราะเซิร์ฟเวอร์เชื่อลอย ๆ ไม่ได้ การดึงรายชื่อที่เชื่อถือได้มาจากเซิร์ฟเวอร์ตัวเดียวกันจึงเท่ากับยกเลิกข้อสมมติเดิมอย่างเงียบ ๆ
บันทึกการตรวจสอบที่ลบไม่ได้
ทุกการเผยแพร่ ทุกการเปลี่ยนสิทธิ์ และทุกการตัดสินใจเรื่องช่องทาง ถูกเขียนไว้อย่างถาวร ระบบจงใจไม่มีเส้นทางสำหรับแก้ไขหรือลบ และการล้างข้อมูลตามระยะเก็บก็ไม่แตะบันทึกนี้
คำถามว่า “เครื่องมือนี้มาอยู่ตรงนี้ได้อย่างไร” มักถูกถามหลังจากนั้นหลายเดือน ในวันนั้น บันทึกที่ลบได้ก็คือบันทึกที่ไม่เคยมีอยู่จริง
หลักสี่ตา เปิดใช้ได้ถ้าต้องการ
การเลื่อนเวอร์ชันไปยังช่องทางที่กว้างขึ้นอาจกำหนดให้ต้องมีผู้ดูแลระบบคนที่สองอนุมัติ และ ผู้ขอไม่มีสิทธิ์อนุมัติคำขอของตัวเอง ส่วนการย้อนเวอร์ชันไม่ต้องอนุมัติเลย
ค่าเริ่มต้นคือปิดไว้ ในทีมสามคน ด่านนี้จะกลายเป็นข้อความที่ถูกกดอนุมัติโดยไม่มีใครอ่านภายในไม่กี่สัปดาห์ และกลไกควบคุมที่คนเชื่อว่าปกป้องอยู่ทั้งที่จริงไม่ได้ปกป้อง ย่อมแย่กว่าการไม่มีกลไกเลย
การแตกไฟล์บีบอัดเองก็เป็นช่องทางโจมตี
ไฟล์บีบอัดที่อัปโหลดเข้ามาถูกตรวจทั้งการเขียนออกนอกเส้นทาง (zip-slip) และระเบิดการคลายบีบอัด อีกทั้งขนาดหลังแตกไฟล์ก็ถูกจำกัดไว้
การแตกไฟล์บีบอัดดูเหมือนไม่มีอันตราย แต่ไฟล์ที่ถูกสร้างมาอย่างจงใจสามารถเขียนไฟล์ออกนอกโฟลเดอร์ปลายทาง หรือถมพื้นที่ดิสก์ของเซิร์ฟเวอร์จนเต็มได้
เข้าสู่ระบบโดยไม่ใช้รหัสผ่าน
ผู้ใช้เข้าสู่ระบบด้วยรหัสครั้งเดียวที่ส่งไปยังอีเมลของตน เซสชันทำงานบนโทเค็นอายุสั้น และโทเค็นสำหรับต่ออายุไม่เคยถูกเปิดให้โค้ดในเบราว์เซอร์เห็น
เมื่อไม่มีกองรหัสผ่านให้ดูแล ก็ไม่มีฐานข้อมูลรหัสผ่านให้รั่วไหล และการนำโทเค็นต่ออายุที่ถูกเพิกถอนแล้วกลับมาใช้ซ้ำ ถือเป็นสัญญาณการขโมย เซสชันนั้นจะถูกตัดทันที
คุณเห็นได้ว่ากำลังติดตั้งอะไร
โฟลเดอร์ติดตั้งมาพร้อมรายการส่วนประกอบที่เครื่องอ่านได้ (SBOM แบบ CycloneDX) และสคริปต์ย้ายโครงสร้างสำหรับฐานข้อมูลทั้งสองแบบ
ทีมไอทีของคุณควรตรวจสิ่งที่กำลังจะขึ้นเซิร์ฟเวอร์ได้ ก่อน ที่มันจะขึ้นไป และเมื่อมีการประกาศช่องโหว่ของส่วนประกอบใด คำถามว่า “เราใช้ตัวนั้นอยู่ไหม” ก็เหลือแค่การค้นไฟล์
สิ่งที่เราปกป้องให้ไม่ได้
เหล่านี้ไม่ใช่ช่องโหว่ แต่เป็น ขีดจำกัด ทั้งหมดเป็นผลจากโครงสร้างของระบบ และการอ้างเป็นอย่างอื่นก็คือการพูดไม่จริง
- ผู้ดูแลระบบสองคนที่ร่วมมือกัน หลักสี่ตาหยุดได้คนเดียว ไม่ใช่สองคน
- ผู้ดูแลระบบของเซิร์ฟเวอร์เอง สำหรับคนที่เข้าถึงฐานข้อมูลและระบบไฟล์ได้ กลไกควบคุมระดับแอปพลิเคชันไม่เป็นอุปสรรคใด ๆ
- เครื่องที่เก็บกุญแจสำหรับเซ็น กุญแจไม่ได้อยู่บนเซิร์ฟเวอร์ก็จริง แต่มันอยู่ที่ใดที่หนึ่ง ถ้าเครื่องนั้นแตก ลายเซ็นก็แตกตามไปด้วย
- พฤติกรรมมุ่งร้ายที่ถูกซ่อนไว้อย่างจงใจ การตรวจแพ็กเกจของเราอาศัยการคาดเดาจากรูปแบบ และเราไม่อ้างว่ามันจะจับโค้ดที่ตั้งใจหลบซ่อนได้
- การดูดข้อมูลออกไป เครื่องมือที่ติดตั้งแล้วทำงานด้วย สิทธิ์ของวิศวกรคนนั้นเอง และอ่านได้ทุกอย่างที่สิทธิ์นั้นเอื้อมถึง สิ่งที่จำกัดเรื่องนี้คือกลไกของระบบปฏิบัติการและของเครือข่าย ไม่ใช่ผลิตภัณฑ์นี้
- ความปลอดภัยของข้อมูลสำรองของคุณ ข้อมูลสำรองฐานข้อมูลอยู่ในมือคุณ และทุกอย่างในนั้นมีค่าเท่ากับระบบที่กำลังทำงานอยู่ทุกประการ
การแจ้งช่องโหว่ด้านความปลอดภัย
ถ้าคุณพบช่องโหว่ เขียนถึงเราได้เลย เราให้ความสำคัญกับรายงานเหล่านี้ เราไม่กันผู้แจ้งออกจากกระบวนการแก้ไข และจะแจ้งให้คุณทราบเมื่อการแก้ไขถูกปล่อยออกไป