Secret Gate
จุดตรวจสอบก่อนปล่อยเวอร์ชันที่รู้ค่าความลับจริงของคุณ: จะไม่มีการปล่อยงานจนกว่าจะไม่พบสิ่งใด
- Linux or macOS
- Python 3.9+
- Git hooks
- CI

ฟีเจอร์หลัก
Secret Gate ตอบคำถามหนึ่งข้อก่อนที่ทุกอย่างจะออกจากมือคุณ ไม่ว่าจะเป็นไฟล์ zip สำหรับปล่อยเวอร์ชัน สำเนาสำหรับลูกค้า การส่งโค้ดแบบโอเพนซอร์ส หรือคอมมิตถัดไป: มีความลับของผมอยู่ในนี้หรือไม่? ระบบรู้ว่าความลับของคุณคืออะไร เพราะมันอ่านไฟล์ที่ความลับเหล่านั้นอยู่ และมันไม่เคยแสดงค่าความลับออกมา: ผลตรวจจะระบุชื่อไฟล์ บรรทัด และที่มาของค่า
- ค่าที่ตรงเป๊ะของคุณ ค่าทุกตัวในไฟล์ env, การตั้งค่า JSON และ YAML, ไฟล์
.netrcและไฟล์คีย์ ถูกค้นหาทั้งในรูปแบบที่เขียนไว้, แบบ base64-encoded และแบบ URL-encoded รหัสผ่านที่ดูคล้ายคำธรรมดา หรือโทเคนภายในที่ไม่มี prefix ที่รู้จัก ก็ถูกจับได้เหมือนตัวอื่น ๆ - ความลับจากเครื่องที่ระบบไม่ได้รันอยู่ สร้างลายนิ้วมือบนแล็ปท็อปของคุณ; เซิร์ฟเวอร์สำหรับ build จะพบค่าเหล่านั้นโดยไม่ต้องถือค่าจริงไว้
- เครื่องอื่นตรวจสอบกับความลับของตัวเอง ไฟล์ถูกส่งไปยังแต่ละเครื่องผ่าน SSH, ถูกสแกนที่นั่น และถูกลบ ความลับไม่เคยถูกย้าย และเครื่องที่ตอบไม่ได้จะบล็อกการปล่อยเวอร์ชัน
- รูปแบบ ชื่อ และสัญญาณรบกวนด้วย รูปแบบโทเคน 25 แบบ, ชื่อของคุณ, โฮสต์, โดเมน และ account id, IP ส่วนตัว, อีเมลส่วนตัว, เบอร์โทร, IBAN, เส้นทางโฟลเดอร์ home, และสตริงสุ่มที่อยู่ใกล้กับชื่อที่ดูเป็นความลับ
- มันพิสูจน์ตัวเองทุกครั้ง การสแกนแต่ละครั้งเริ่มด้วยการวาง canary ทุกประเภท; หากการตรวจสอบใดพลาด canary ของมัน การสแกนนั้นจะไม่ทำงาน
- ในที่คุณทำงานอยู่แล้ว โฟลเดอร์, ไฟล์ zip และ tar archive, git pre-commit หรือ pre-push hook, exit code สำหรับ CI, และรายงานแบบ JSON
ทดสอบกับสิ่งที่เราส่งมอบ
- ทุกชุดเครื่องมือที่เราขาย: ไฟล์ archive ที่ปล่อยแล้ว 8 ชุด ถูกสแกนเทียบกับค่าความลับ 133 ค่าบนเครื่อง build ของเรา และลายนิ้วมือ 16,259 รายการจากแล็ปท็อปของเรา ผ่านทั้งหมด ภายในเวลา 5.4 วินาทีรวมกัน
- ความลับจริงที่ถูกฝังไว้ในสำเนาสำหรับปล่อยเวอร์ชัน ถูกจับได้ทั้งในรูปแบบปกติและ base64-encoded โดยระบุชื่อไฟล์ที่มาของค่าทุกครั้ง ค่าความลับไม่ปรากฏในผลลัพธ์หรือรายงานเลย
- การสแกนระยะไกลผ่าน SSH ตรวจสอบสำเนาสำหรับปล่อยเวอร์ชันเทียบกับค่าความลับ 499 ค่าของเครื่องที่สอง ภายใน 1.4 วินาที และจับโทเคนที่ถูกฝังไว้ในสำเนาที่มีอยู่เฉพาะบนเครื่องนั้นได้
มีอะไรอยู่ในชุดเครื่องมือ
ประตูตรวจ
การตรวจสอบ 4 ขั้นตอน, การทดสอบตัวเอง, การสแกน archive และ git-staged, รายงานที่อ่านง่าย และรายงานแบบ JSON
ลายนิ้วมือ
ลายนิ้วมือของความลับบนเครื่องหนึ่ง สำหรับการสแกนบนอีกเครื่อง โดยไม่ต้องส่งค่าจริง
การสแกนระยะไกล
ตรวจสอบไฟล์เดียวกันบนทุกเครื่องที่มีข้อมูลลับ โดยส่งกฎของโปรเจกต์ของคุณไปด้วย
การตั้งค่าและ CI
ตัวค้นหาไฟล์ความลับ, git hooks และ GitHub Actions workflow สำหรับไฟล์บีบอัดสำหรับปล่อยเวอร์ชัน
ข้อกำหนด
- Linux หรือ macOS พร้อม Python 3.9 ขึ้นไป ไม่ต้องติดตั้งอะไรจาก pip
- Git สำหรับ hooks และ SSH สำหรับการสแกนระยะไกล
ข้อมูลที่เป็นประโยชน์
- โปรแกรมอ่านไฟล์ตามสถานะปัจจุบัน ความลับที่อยู่ใน git history แล้วจะยังอยู่ที่เดิม: ต้องเปลี่ยนคีย์ใหม่ (rotate)
- ไฟล์บีบอัดในโฟลเดอร์ที่สแกนจะไม่ถูกเปิดออก: ต้องสแกนแต่ละไฟล์บีบอัดแยกกัน
- เก็บไฟล์ลายนิ้วมือ (fingerprint) ให้เป็นความลับเทียบเท่าข้อมูลลับ: ไฟล์เหล่านี้เก็บ 4 ตัวอักษรแรกของค่าที่มีความยาว 16 ตัวอักษรขึ้นไป
คำถาม
ต่างจาก gitleaks หรือ TruffleHog อย่างไร?
เครื่องมือเหล่านั้นมองหาสิ่งที่ความลับมักมีลักษณะเป็น ซึ่งทำได้ดี แต่ Secret Gate ยังรู้ด้วยว่าความลับของคุณคืออะไรจริง ๆ: โดยอ่านไฟล์ความลับของคุณเองและมองหาค่าที่ตรงกันเป๊ะ ๆ ดังนั้นรหัสผ่านฐานข้อมูลหรือโทเคนภายในที่ไม่มีรูปแบบชัดเจนก็ถูกจับได้เช่นกัน มันถูกสร้างมาสำหรับช่วงเวลาก่อนจะส่งมอบงาน และจะ fail closed เมื่อพบปัญหา
มันส่งข้อมูลลับของฉันไปที่ไหนไหม?
ไม่ ค่าต่าง ๆ ถูกอ่านจากไฟล์ของคุณเข้าสู่หน่วยความจำเพื่อการสแกนเท่านั้น ไม่มีการพิมพ์ เขียน หรือส่งออกไป; ไฟล์ลายนิ้วมือ (fingerprint) หากคุณสร้าง จะเก็บค่า hash และ 4 ตัวอักษรแรกของแต่ละค่า การสแกนระยะไกลจะส่งไฟล์ที่คุณกำลังจะส่งมอบไปยังเครื่องของคุณเอง; ความลับบนเครื่องนั้นจะยังคงอยู่บนเครื่องนั้น
เรื่องสัญญาณเตือนผิดพลาดล่ะ?
การพบสิ่งผิดปกติหมายความว่า "ดูตรงนี้" หากไม่มีปัญหา ให้เพิ่มกฎอนุญาต (allow rule) ที่เจาะจงสำหรับประเภทการพบนั้นในคอนฟิกของโปรเจกต์ เช่น อีเมลฝ่ายสนับสนุนของคุณเอง ไม่มีสวิตช์สำหรับปิดการตรวจสอบ
มันสแกน git history ได้ไหม?
ไม่ได้ มันตรวจสอบสิ่งที่คุณกำลังจะส่งมอบ: โฟลเดอร์, ไฟล์บีบอัด หรือ commit ถัดไป สำหรับความลับที่อยู่ใน history แล้ว ให้เปลี่ยนคีย์ความลับนั้นใหม่
อัปเดตแล้ว: