ความปลอดภัย
ภาพรวม
Neotask ออกแบบมาด้วยสถาปัตยกรรมที่ให้ความสำคัญกับความปลอดภัยเป็นอันดับแรก Gateway bind กับ localhost โดยค่าเริ่มต้น ข้อมูลที่ละเอียดอ่อนทั้งหมดถูกเข้ารหัสในขณะพัก และการรันคำสั่งของเอเจนต์สามารถแซนด์บ็อกซ์ใน container แบบแยกตัว
ความปลอดภัยเครือข่าย
Loopback โดยค่าเริ่มต้น
Gateway รับฟังเฉพาะบน 127.0.0.1 (localhost) เว้นแต่คุณจะเปลี่ยนโหมด binding อย่างชัดแจ้ง ไม่มีการเปิดเผยเครือข่ายภายนอกโดยค่าเริ่มต้น
การตรวจสอบสิทธิ์
การเชื่อมต่อ WebSocket ทั้งหมดต้องการการตรวจสอบสิทธิ์:
- Token auth, Bearer token (UUID หรือ string กำหนดเอง)
- Password auth, รหัสผ่านที่ hash ด้วย bcrypt
- Trusted proxy, Header ที่ตรวจสอบสิทธิ์ล่วงหน้าจาก reverse proxy
- Local trust, การเชื่อมต่อ loopback ได้รับความเชื่อถือโดยปริยาย
ความปลอดภัยการเข้าถึงระยะไกล
สำหรับการเข้าถึงระยะไกล แนวทางที่แนะนำคือ Tailscale VPN หรือ SSH tunneling, ไม่ควรเปิดเผย Gateway โดยตรงต่ออินเทอร์เน็ต
การจับคู่อุปกรณ์
วิธีการจับคู่ทำงาน
client ทุกตัวที่เชื่อมต่อกับ Gateway ต้องถูกจับคู่:
- อุปกรณ์แสดง identity (fingerprint + public key)
- Gateway ออก pairing challenge (nonce)
- อุปกรณ์ลงนาม nonce ด้วย private key
- คุณอนุมัติอุปกรณ์ผ่าน UI
- Gateway ออก device token สำหรับการเชื่อมต่อในอนาคต
โมเดลความเชื่อถือ
- อุปกรณ์ local (loopback) ได้รับการอนุมัติอัตโนมัติเพื่อความสะดวก
- อุปกรณ์ที่ไม่ใช่ local ต้องการการอนุมัติอย่างชัดแจ้ง
- Device token ถูกจัดเก็บในเครื่องและนำกลับมาใช้เมื่อเชื่อมต่อซ้ำ
- อุปกรณ์สามารถถูกเพิกถอนได้ทุกเวลา
การเข้ารหัส
ข้อมูลในขณะพัก
- AES-256-GCM, Token ความลับ และ API key ทั้งหมดถูกเข้ารหัสในขณะพัก
- คีย์ที่ได้จากเครื่อง, คีย์การเข้ารหัสได้จาก scrypt จาก device identity
- ไม่มีการจัดเก็บข้อความธรรมดา, Token ไม่เคยถูกจัดเก็บในข้อความธรรมดา
ข้อมูลในขณะส่ง
- TLS, HTTPS สำหรับการสื่อสาร API
- WSS, WebSocket Secure สำหรับการเชื่อมต่อ Gateway (เมื่อใช้ Tailscale Serve หรือ reverse proxy)
- การลงนาม HMAC, ความสมบูรณ์ของคำขอด้วย nonce และ timestamp
Sandboxing
การแยกตัวบน Docker
การรันคำสั่งเอเจนต์สามารถ sandbox ใน Docker container:
- Profile ต่อเอเจนต์, เอเจนต์แต่ละตัวสามารถมีการกำหนดค่า sandbox ของตัวเอง
- ขีดจำกัดทรัพยากร, ขีดจำกัด CPU หน่วยความจำ และ timeout ที่กำหนดค่าได้
- การแยกตัวเครือข่าย, Container สามารถแยกตัวเครือข่าย
- การจำกัด Filesystem, เอเจนต์เข้าถึงเฉพาะ workspace ของมัน
- Image กำหนดเอง, ใช้ image สำเร็จรูปพร้อมเครื่องมือเฉพาะที่ติดตั้ง
ขอบเขต Sandbox
| ขอบเขต | คำอธิบาย |
|, ----|, --, --, |
| Per-session | Container ใหม่สำหรับแต่ละเซสชัน |
| Per-agent | Container ถาวรต่อเอเจนต์ |
| Shared | Container ที่ใช้ร่วมกันข้ามเอเจนต์ |
การเข้าถึง Workspace
เอเจนต์ที่ sandbox สามารถเข้าถึงไดเรกทอรี workspace ของตน (mount เข้า container) แต่ไม่สามารถเข้าถึง host filesystem นอก workspace ของตน
การอนุมัติ Exec
ควบคุมคำสั่งที่เอเจนต์สามารถรันบน node และ Gateway host:
โหมด
| โหมด | คำอธิบาย |
|, ---|, --, --, |
| Allowlist | เฉพาะคำสั่งที่อนุมัติล่วงหน้าเท่านั้นที่รัน |
| Ask | คำสั่งที่ไม่รู้จักจะแจ้งให้ผู้ใช้อนุมัติ |
| Full | ไม่มีข้อจำกัด (ใช้ด้วยความระมัดระวัง) |
การกำหนดค่าต่อ Node
แต่ละ node (macOS, headless host) มีการกำหนดค่าการอนุมัติ exec ของตัวเอง จัดเก็บในเครื่อง คุณสามารถอนุญาต binary เฉพาะ (เช่น /usr/bin/docker, /usr/local/bin/terraform) ในขณะที่บล็อกทุกอย่างอื่น
โหมดยกระดับ
บางการดำเนินการต้องการการรันบน Gateway host โดยตรง (ไม่ใช่ใน sandbox) โหมดยกระดับคือ:
- จำกัดด้วยการอนุญาตอย่างชัดแจ้งใน agent config
- มีเฉพาะบน Gateway host
- ปิดใช้งานโดยค่าเริ่มต้น
- ตรวจสอบได้ผ่านการบันทึก
Security Audit
Security audit ในตัวตรวจสอบ:
- สิทธิ์ไฟล์ configuration (ควรเป็น 600)
- สิทธิ์ไฟล์เซสชัน
- เวอร์ชัน Node.js (security patch)
- การตรวจจับความลับข้อความธรรมดา
- การตรวจสอบ plugin allowlist
- การตรวจสอบ network interface ที่เปิดอยู่
- ความสมบูรณ์ของการกำหนดค่า auth
Audit สามารถแก้ไขปัญหาหลาย ๆ อย่างโดยอัตโนมัติเมื่อได้รับอนุญาต
แนวทางปฏิบัติที่ดีที่สุด
- รักษา Gateway บน loopback, ใช้ Tailscale หรือ SSH สำหรับการเข้าถึงระยะไกล
- เปิดใช้งาน sandboxing, รันคำสั่งเอเจนต์ใน Docker container
- ใช้ exec allowlist, จำกัดคำสั่งที่เอเจนต์สามารถรันบน node
- ตั้งค่า auth token, กำหนดค่า token auth เสมอ แม้สำหรับ loopback
- ตรวจสอบสิทธิ์เอเจนต์, ใช้ tool profile ขั้นต่ำที่เป็นไปได้
- อัปเดต Neotask, การอัปเดตรวมถึง security patch
- ตรวจสอบเป็นประจำ, รัน security audit เพื่อค้นหาการกำหนดค่าที่ผิดพลาด
- จำกัดการโหลด plugin, ติดตั้งเฉพาะ plugin จากแหล่งที่เชื่อถือได้