CLI commands

ความปลอดภัย

openclaw security

เครื่องมือรักษาความปลอดภัย: การตรวจสอบพร้อมการแก้ไขที่ปลอดภัยซึ่งเลือกใช้ได้ ดูเพิ่มเติม: ความปลอดภัย

bash
openclaw security auditopenclaw security audit --deepopenclaw security audit --deep --password <password>openclaw security audit --deep --token <token>openclaw security audit --auth password --password <password>openclaw security audit --fixopenclaw security audit --json

โหมดการตรวจสอบ

security audit แบบปกติจะทำงานอยู่บนเส้นทางการกำหนดค่าแบบเย็น/ระบบไฟล์/อ่านอย่างเดียว โดยจะไม่ค้นหาตัวรวบรวมการตรวจสอบความปลอดภัยของรันไทม์ Plugin ดังนั้นการตรวจสอบตามปกติจึงไม่โหลดรันไทม์ของ Plugin ที่ติดตั้งไว้ทุกตัว --deep จะเพิ่มการตรวจสอบ Gateway แบบสดในลักษณะพยายามอย่างเต็มที่และตัวรวบรวมการตรวจสอบความปลอดภัยที่ Plugin เป็นเจ้าของ (ผู้เรียกใช้ภายในที่ระบุชัดเจนอาจเลือกใช้ตัวรวบรวมเหล่านั้นด้วยเมื่อมีขอบเขตรันไทม์ที่เหมาะสมอยู่แล้ว)

หากระบุการยืนยันตัวตน Gateway ด้วยรหัสผ่านเฉพาะตอนเริ่มต้น ให้ส่งค่าเดียวกันผ่าน --auth password --password <password> เพื่อให้การตรวจสอบสามารถตรวจสอบค่านั้นเทียบกับ hooks.token ได้

สิ่งที่ตรวจสอบ

โมเดล DM/ความไว้วางใจ

  • เตือนเมื่อผู้ส่ง DM หลายรายใช้เซสชันหลักร่วมกัน และแนะนำโหมด DM ที่ปลอดภัย: session.dmScope="per-channel-peer" (หรือ per-account-channel-peer สำหรับช่องทางที่มีหลายบัญชี) สำหรับกล่องข้อความเข้าที่ใช้ร่วมกัน นี่เป็นการเสริมความปลอดภัยสำหรับการทำงานร่วมกัน/กล่องข้อความเข้าที่ใช้ร่วมกัน ไม่ใช่การแยกผู้ดำเนินการที่ไม่ไว้วางใจซึ่งกันและกัน ให้แบ่งขอบเขตความไว้วางใจด้วย Gateway แยกกัน (หรือผู้ใช้ระบบปฏิบัติการ/โฮสต์แยกกัน) สำหรับกรณีดังกล่าว
  • แสดง security.trust_model.multi_user_heuristic เมื่อการกำหนดค่าบ่งชี้ว่ามีแนวโน้มจะรับข้อมูลเข้าจากผู้ใช้หลายรายร่วมกัน (เช่น นโยบาย DM/กลุ่มแบบเปิด เป้าหมายกลุ่มที่กำหนดค่าไว้ หรือกฎผู้ส่งแบบไวลด์การ์ด) — โมเดลความไว้วางใจเริ่มต้นของ OpenClaw คือผู้ช่วยส่วนตัว (ผู้ดำเนินการหนึ่งราย) ไม่ใช่การแยกผู้เช่าหลายรายในสภาพแวดล้อมที่เป็นภัย สำหรับการตั้งค่าแบบใช้ร่วมกันหลายรายโดยเจตนา: ให้แซนด์บ็อกซ์ทุกเซสชัน จำกัดการเข้าถึงระบบไฟล์ไว้ในขอบเขตเวิร์กสเปซ และไม่นำข้อมูลประจำตัวหรือข้อมูลรับรองส่วนบุคคล/ส่วนตัวมาไว้บนรันไทม์นั้น
  • เตือนเมื่อใช้โมเดลขนาดเล็ก (พารามิเตอร์ <=300B) โดยไม่มีแซนด์บ็อกซ์และเปิดใช้เครื่องมือเว็บ/เบราว์เซอร์

Webhook/ฮุก

เมื่อเริ่มต้น ระบบจะบันทึกคำเตือนด้านความปลอดภัยที่ไม่ทำให้การทำงานล้มเหลว และการตรวจสอบจะรายงานการนำค่าการยืนยันตัวตนด้วยข้อมูลลับที่ใช้ร่วมกันของ Gateway ที่ยังใช้งานอยู่กลับมาใช้ซ้ำใน hooks.token (gateway.auth.token / OPENCLAW_GATEWAY_TOKEN, gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD) นอกจากนี้ยังเตือนเมื่อ:

  • hooks.token สั้นเกินไป
  • hooks.path="/"
  • ไม่ได้ตั้งค่า hooks.defaultSessionKey
  • hooks.allowedAgentIds ไม่มีข้อจำกัด
  • เปิดใช้การแทนที่ sessionKey ของคำขอ
  • เปิดใช้การแทนที่โดยไม่มี hooks.allowedSessionKeyPrefixes

เรียกใช้ openclaw doctor --fix เพื่อหมุนเวียน hooks.token ที่บันทึกถาวรและถูกนำกลับมาใช้ซ้ำ จากนั้นอัปเดตผู้ส่งฮุกภายนอกให้ใช้โทเค็นใหม่

แซนด์บ็อกซ์/เครื่องมือ

  • เตือนเมื่อกำหนดค่าการตั้งค่า Docker ของแซนด์บ็อกซ์ขณะที่ปิดโหมดแซนด์บ็อกซ์
  • เตือนเมื่อ gateway.nodes.denyCommands ใช้รายการที่มีลักษณะคล้ายแพตเทิร์นหรือไม่รู้จักซึ่งไม่มีผล (การจับคู่ใช้เฉพาะชื่อคำสั่ง Node แบบตรงกันทุกประการ ไม่ใช่การกรองข้อความเชลล์)
  • เตือนเมื่อ gateway.nodes.allowCommands เปิดใช้คำสั่ง Node ที่เป็นอันตรายอย่างชัดเจน
  • เตือนเมื่อโปรไฟล์เครื่องมือของเอเจนต์แทนที่ tools.profile="minimal" ส่วนกลาง
  • เตือนเมื่อปิดใช้เครื่องมือเขียน/แก้ไข แต่ยังคงใช้ exec ได้โดยไม่มีขอบเขตระบบไฟล์ของแซนด์บ็อกซ์ที่จำกัดการทำงาน
  • เตือนเมื่อ DM หรือกลุ่มแบบเปิดเปิดให้เข้าถึงเครื่องมือรันไทม์/ระบบไฟล์โดยไม่มีตัวป้องกันแซนด์บ็อกซ์/เวิร์กสเปซ
  • เตือนเมื่อเครื่องมือของ Plugin ที่ติดตั้งไว้อาจเข้าถึงได้ภายใต้นโยบายเครื่องมือแบบผ่อนปรน

เบราว์เซอร์ในแซนด์บ็อกซ์

  • เตือนเมื่อเบราว์เซอร์ในแซนด์บ็อกซ์ใช้เครือข่าย Docker bridge โดยไม่มี sandbox.browser.cdpSourceRange
  • รายงานโหมดเครือข่าย Docker ของแซนด์บ็อกซ์ที่เป็นอันตราย รวมถึงการเข้าร่วมเนมสเปซ host และ container:*
  • เตือนเมื่อคอนเทนเนอร์ Docker ของเบราว์เซอร์ในแซนด์บ็อกซ์ที่มีอยู่มีป้ายกำกับแฮชที่ขาดหาย/ล้าสมัย (เช่น คอนเทนเนอร์ก่อนการย้ายข้อมูลที่ไม่มี openclaw.browserConfigEpoch) และแนะนำ openclaw sandbox recreate --browser --all

เครือข่าย/การค้นหา

  • รายงาน gateway.allowRealIpFallback=true (ความเสี่ยงจากการปลอมแปลงส่วนหัวหากกำหนดค่าพร็อกซีไม่ถูกต้อง)
  • รายงาน discovery.mdns.mode="full" (การรั่วไหลของข้อมูลเมตาผ่านระเบียน TXT ของ mDNS)
  • เตือนเมื่อ gateway.auth.mode="none" ทำให้เข้าถึง API HTTP ของ Gateway ได้โดยไม่มีข้อมูลลับที่ใช้ร่วมกัน (/tools/invoke รวมถึงปลายทาง /v1/* ใดๆ ที่เปิดใช้)

Plugin/ช่องทาง

  • เตือนเมื่อระเบียนการติดตั้ง Plugin/ฮุกที่ใช้ npm ไม่ได้ตรึงเวอร์ชัน ไม่มีข้อมูลเมตาความสมบูรณ์ หรือแตกต่างจากเวอร์ชันแพ็กเกจที่ติดตั้งอยู่ในปัจจุบัน
  • เตือนเมื่อรายการอนุญาตของช่องทางอาศัยชื่อ/อีเมล/แท็กที่เปลี่ยนแปลงได้แทน ID ที่เสถียร (Discord, Slack, Google Chat, Microsoft Teams, Mattermost และขอบเขต IRC ตามกรณีที่เกี่ยวข้อง)

การตั้งค่าที่ขึ้นต้นด้วย dangerous/dangerously เป็นการแทนที่ฉุกเฉินโดยผู้ดำเนินการอย่างชัดเจน การเปิดใช้รายการใดรายการหนึ่งไม่ถือเป็นรายงานช่องโหว่ด้านความปลอดภัยด้วยตัวมันเอง สำหรับรายการพารามิเตอร์อันตรายทั้งหมด โปรดดู "สรุปแฟล็กที่ไม่ปลอดภัยหรือเป็นอันตราย" ใน ความปลอดภัย

ลักษณะการทำงานของ SecretRef

security audit จะแก้ไข SecretRef ที่รองรับในโหมดอ่านอย่างเดียวสำหรับเส้นทางเป้าหมาย หาก SecretRef ใช้งานไม่ได้ในเส้นทางคำสั่งปัจจุบัน การตรวจสอบจะทำงานต่อและรายงาน secretDiagnostics แทนที่จะหยุดทำงาน --token และ --password จะแทนที่เฉพาะการยืนยันตัวตนสำหรับการตรวจสอบเชิงลึกในการเรียกใช้คำสั่งครั้งนั้น โดยจะไม่เขียนการกำหนดค่าหรือการแมป SecretRef ใหม่

การระงับ

ยอมรับผลการตรวจพบที่คงอยู่โดยเจตนาด้วย security.audit.suppressions การระงับแต่ละรายการจะจับคู่กับ checkId แบบตรงกันทุกประการ และสามารถจำกัดให้แคบลงด้วยสตริงย่อย titleIncludes และ/หรือ detailIncludes ที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่:

json
{  "security": {    "audit": {      "suppressions": [        {          "checkId": "plugins.tools_reachable_permissive_policy",          "detailIncludes": "Enabled extension plugins: gbrain",          "reason": "trusted local operator plugin"        }      ]    }  }}

ผลการตรวจพบที่ถูกระงับจะถูกนำออกจากรายการ summary และ findings ที่ใช้งานอยู่ เอาต์พุต JSON จะเก็บรายการเหล่านั้นไว้ภายใต้ suppressedFindings เพื่อให้ตรวจสอบย้อนหลังได้ เมื่อกำหนดค่าการระงับ เอาต์พุตที่ใช้งานอยู่จะยังคงแสดงผลการตรวจพบข้อมูล security.audit.suppressions.active ที่ไม่สามารถระงับได้ เพื่อให้ผู้อ่านทราบว่าการตรวจสอบถูกกรอง แฟล็กการกำหนดค่าที่เป็นอันตรายจะแสดงเป็นหนึ่งแฟล็กต่อหนึ่งผลการตรวจพบ ดังนั้นการยอมรับแฟล็กอันตรายหนึ่งรายการจะไม่ซ่อนแฟล็กอื่นที่เปิดใช้และใช้ checkId config.insecure_or_dangerous_flags เดียวกัน

เนื่องจากการระงับสามารถซ่อนความเสี่ยงที่คงอยู่ การเพิ่มหรือนำรายการเหล่านี้ออกผ่านคำสั่งเชลล์ที่เอเจนต์เรียกใช้จึงต้องได้รับการอนุมัติการดำเนินการ เว้นแต่การดำเนินการนั้นกำลังทำงานด้วย security="full" และ ask="off" อยู่แล้วสำหรับระบบอัตโนมัติภายในเครื่องที่เชื่อถือได้

เอาต์พุต JSON

bash
openclaw security audit --json | jq '.summary'openclaw security audit --deep --json | jq '.findings[] | select(.severity=="critical") | .checkId'

เมื่อใช้ --fix --json เอาต์พุตจะรวมทั้งการดำเนินการแก้ไขและรายงานสุดท้าย:

bash
openclaw security audit --fix --json | jq '{fix: .fix.ok, summary: .report.summary}'

สิ่งที่ --fix เปลี่ยนแปลง

ใช้การแก้ไขที่ปลอดภัยและให้ผลลัพธ์ที่แน่นอน:

  • เปลี่ยน groupPolicy="open" ที่พบบ่อยเป็น groupPolicy="allowlist" (รวมถึงรูปแบบบัญชีในช่องทางที่รองรับ)
  • เมื่อนโยบายกลุ่ม WhatsApp เปลี่ยนเป็น allowlist จะเติมค่าเริ่มต้นให้ groupAllowFrom จากไฟล์ allowFrom ที่จัดเก็บไว้ หากมีรายการดังกล่าวและการกำหนดค่ายังไม่ได้ระบุ allowFrom
  • ตั้งค่า logging.redactSensitive จาก "off" เป็น "tools"
  • ปรับสิทธิ์ของสถานะ/การกำหนดค่าและไฟล์สำคัญที่ละเอียดอ่อนทั่วไปให้เข้มงวดยิ่งขึ้น (credentials/*.json, auth-profiles.json, openclaw-agent.sqlite และอาร์ติแฟกต์เซสชันรุ่นเก่า)
  • ปรับสิทธิ์ของไฟล์รวมการกำหนดค่าที่อ้างอิงจาก openclaw.json ให้เข้มงวดยิ่งขึ้นด้วย
  • ใช้ chmod บนโฮสต์ POSIX และการรีเซ็ต icacls บน Windows

--fix ไม่:

  • หมุนเวียนโทเค็น/รหัสผ่าน/คีย์ API
  • ปิดใช้เครื่องมือ (gateway, cron, exec เป็นต้น)
  • เปลี่ยนตัวเลือกการผูก/การยืนยันตัวตน/การเปิดเผยต่อเครือข่ายของ Gateway
  • นำ Plugin/Skills ออกหรือเขียนใหม่

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page