บั๊กในสแกนเนอร์ตรวจหาความลับที่ตัวตรวจสอบแบบ Canary หาไม่พบ
การจัดส่ง
ก่อนที่เราจะบีบอัดชุดเครื่องมือใด ๆ ที่ขาย ระบบ Gate จะสแกนหาความลับจริง ๆ ของเรา การสแกนทุกครั้งเริ่มจากการวาง Canary หนึ่งตัวต่อหนึ่งประเภท และจะไม่ทำงานหากจับ Canary ได้ไม่ครบทั้งหมด มันจับได้เสมอ แต่ยังมีบั๊กอยู่
วิธีที่ Gate อ่านค่าความลับ
Gate ไม่ได้มองหาค่าที่มีรูปแบบเหมือนคีย์เท่านั้น มันอ่านไฟล์ที่เก็บความลับของเรา (ไฟล์ env, การตั้งค่า JSON, ไฟล์คีย์) ดึงค่าทุกตัวที่ชื่อระบุว่าเป็นความลับ แล้วค้นหาในสิ่งที่เรากำลังจะส่งมอบสำหรับค่าเหล่านั้นแบบตรงตัว ทั้งในรูปแบบข้อความและแบบเข้ารหัส base64
บั๊ก
สำหรับบรรทัดลักษณะนี้:
DB_PASSWORD='Tr0ub4dor-and-3' # เปลี่ยนใหม่เมื่อเดือนพฤษภาคม
ตัวอ่านจะตัดเครื่องหมายคำพูดรอบนอกออกเฉพาะเมื่อค่าขึ้นต้นและลงท้ายด้วยเครื่องหมายคำพูด เมื่อมีคอมเมนต์ต่อท้ายค่า บรรทัดจะจบด้วยตัวอักษร ทำให้เครื่องหมายคำพูดยังอยู่ จากนั้นคอมเมนต์ถูกตัดออก และ Gate ยังคงค้นหา 'Tr0ub4dor-and-3' รวมเครื่องหมายคำพูด ชุดเครื่องมือที่มีรหัสผ่านโดยไม่มีเครื่องหมายคำพูดเหล่านั้นจะผ่านไปได้
ทำไม Canary ถึงไม่เคยรู้
Canary ทดสอบตาข่าย: วางค่าที่สแกนเนอร์รู้จักอยู่แล้ว แล้วตรวจสอบว่าพบหรือไม่ ค่า Canary ของเราถูกส่งตรงไปยังสแกนเนอร์ จึงไม่ได้ผ่านโค้ดที่อ่านบรรทัดการตั้งค่า ตาข่ายทุกตัวถูกทดสอบ แต่ตัววิเคราะห์ (parser) ที่อยู่ก่อนหน้าไม่ถูกทดสอบ
วิธีที่เราพบ
เรากำลังพัฒนา Gate ให้เป็นผลิตภัณฑ์ของตัวเอง และเขียนเทสต์ที่ป้อนไฟล์การตั้งค่าในรูปแบบที่คนใช้งานจริงเขียน: export, เครื่องหมายคำพูด, คอมเมนต์ท้ายบรรทัด เทสต์ล้มเหลวที่บรรทัดมีเครื่องหมายคำพูดพร้อมคอมเมนต์ การแก้ไขคืออ่านค่าที่มีเครื่องหมายคำพูดจนถึงเครื่องหมายปิด แล้วละเลยสิ่งที่ตามมา
มันสำคัญไหม?
เราตรวจสอบก่อนเปลี่ยนอะไร ในเครื่องสร้างระบบ (build machine) ของเรา Gate อ่านค่าความลับ 133 ค่าจากไฟล์ 59 ไฟล์ที่ได้รับ และในเครื่องที่สอง 499 ค่า ไม่มีค่าใดมีรูปแบบดังกล่าว คำตัดสินก่อนหน้าไม่เปลี่ยน: ชุดเครื่องมือทุกตัวที่เราปล่อยออกมาถูกสแกนด้วยค่าเดียวกับที่จะถูกสแกนตอนนี้ เราแก้ไข Gate ในทั้งสามเครื่องอยู่ดี
บทสรุป
หากสแกนเนอร์ดึงข้อมูลที่ค้นหาออกมาได้ ให้ทดสอบการดึงข้อมูลด้วยอินพุตที่สมจริง ไม่ใช่แค่ทดสอบการค้นหาด้วยค่าที่วางไว้ล่วงหน้า Canary พิสูจน์ว่าตาข่ายทำงานได้ แต่ไม่ได้บอกว่าปลาที่ถูกต้องจะเข้ามาติดตาข่ายหรือไม่ การทดสอบของ Secret Gate ครอบคลุมทั้งสองส่วนแล้ว และก่อนการเปิดตัว เราได้ตรวจสอบแล้วว่าระบบอ่านค่า 133 รายการได้ตรงกับ build gate ของเราทุกประการ