การตรวจสอบความปลอดภัยของผมค้างทุกคืน

การตรวจสอบความปลอดภัยประจำคืนของผมหยุดทำงาน

งาน cron ทำงานทุกเช้าเวลา 05:39 น. สคริปต์เริ่มทำงาน แต่ใน log ไม่แสดงอะไรเลย ไม่มีข้อผิดพลาดปรากฏขึ้น และไม่มีรายงานใดๆ ถูกเขียนลงในไฟล์

ผมใช้เวลาสองวันในการดีบั๊ก (debugging) และวิธีแก้ไขใช้โค้ด bash เพียงแค่สามบรรทัดเท่านั้น

ปัญหาก็คือความล้มเหลวแบบเงียบ (silent failure)

สคริปต์ของผมทำการตรวจสอบ 13 รายการ โดยมีหนึ่งรายการที่เรียกใช้การตรวจสอบความปลอดภัยเชิงลึกผ่าน CLI คำสั่งนั้นเกิดอาการค้าง (hanging) มันไม่ได้แจ้งข้อผิดพลาด แต่มันแค่รอไปเรื่อยๆ อย่างไม่มีที่สิ้นสุด

CLI รอการตอบสนองจาก gateway แต่ในสภาพแวดล้อมของ cron การตอบสนองนั้นไม่เคยมาถึง เนื่องจาก CLI ไม่มีระบบ timeout ภายในตัว มันจึงบล็อกสคริปต์ทั้งหมด และเพราะสคริปต์ทำงานไม่เสร็จ มันจึงไปไม่ถึงบรรทัดที่ใช้บันทึกรายงาน

ผมแก้ไขมันด้วยการเปลี่ยนแปลงเหล่านี้:

  • ผมครอบคำสั่งด้วย timeout
  • ผมเปลี่ยนข้อความแสดงข้อผิดพลาดเป็น "command timed out" แทนที่จะเป็น "not available"
  • ผมใช้ set -eo pipefail เพื่อดักจับข้อผิดพลาดอย่างถูกต้อง

ตอนนี้รายงานมาตรงเวลาแล้ว หากการตรวจสอบค้าง รายงานก็ยังคงบันทึกตัวชี้วัด (metrics) อีก 12 รายการที่เหลือได้ รายงานที่ไม่สมบูรณ์ยังดีกว่าไม่มีรายงานเลย

เรื่องนี้สอนบทเรียน 3 ข้อเกี่ยวกับการทำ agent sandboxing ให้กับผม:

  1. อย่าเชื่อใจว่า dependency จะแจ้งข้อผิดพลาดออกมาอย่างชัดเจน หากคุณเรียกใช้เครื่องมือภายนอกในงาน cron ให้ตั้งค่า timeout เสมอ ทุกอย่างต้องมีการรอที่มีขอบเขตจำกัด (bounded wait)

  2. ออกแบบเพื่อรองรับความสำเร็จบางส่วน (partial success) ตรวจสอบให้แน่ใจว่าระบบของคุณจะเขียนรายงานออกมาได้ แม้ว่าจะมีบางส่วนล้มเหลวก็ตาม

  3. หลีกเลี่ยงความล้มเหลวแบบเงียบ (silent failure) ความล้มเหลวที่ส่งเสียงดังจะทำให้คุณตื่นตัว แต่ความล้มเหลวแบบเงียบจะทำให้คุณพลาดข้อมูลสำคัญจนกระทั่งสายเกินไป

เมื่อคุณอนุญาตให้ agent รันคำสั่งได้ คุณก็ต้องรับเอาทุกรูปแบบความล้มเหลว (failure mode) ของคำสั่งเหล่านั้นมาด้วย การค้างของเครื่องมือเพียงตัวเดียวหมายถึงการค้างของ pipeline ทั้งหมดของคุณ

ความปลอดภัยไม่ใช่แค่เรื่องของการหยุดยั้งผู้ไม่หวังดีเท่านั้น แต่ยังเป็นเรื่องของการทำให้แน่ใจว่าโครงสร้างพื้นฐานของคุณจะแจ้งเตือนความล้มเหลวออกมาดังพอที่คุณจะสังเกตเห็นได้

หากคุณรันสคริปต์อัตโนมัติที่เรียกใช้เครื่องมือภายนอก ลองตรวจสอบค่า timeout ของคุณในสัปดาห์นี้ดู

Source: https://dev.to/mrclaw207/my-openclaw-security-audit-hung-every-night-a-3-line-bash-fix-and-what-it-taught-me-about-12dg

Optional learning community: https://t.me/GyaanSetuAi