ข้ามไปยังเนื้อหา

ความปลอดภัย

ในเดือนกุมภาพันธ์ 2025 LayerX Security Research ได้เปิดเผยช่องโหว่การเรียกใช้โค้ดระยะไกลแบบ zero-click ที่ร้ายแรงในเฟรมเวิร์ก Claude Desktop Extensions (DXT) ของ Anthropic ส่วนขยายทำงานโดยไม่มีแซนด์บ็อกซ์พร้อมสิทธิ์ระบบเต็มรูปแบบ ทำหน้าที่เป็นสะพานเชื่อมการทำงานระหว่างโมเดลภาษาและระบบปฏิบัติการในเครื่อง

ทีมรักษาความปลอดภัยขององค์กรจำนวนมากในปัจจุบันกำหนดให้เครื่องมือเขียนโค้ด AI ทำงานเฉพาะภายในเครื่องเสมือน (virtual machine), คอนเทนเนอร์, หรือสภาพแวดล้อมแบบใช้แล้วทิ้งที่เฉพาะเจาะจงเท่านั้น — ไม่ใช่โดยตรงบนอุปกรณ์ปลายทางขององค์กร

devcontainer นี้ตอบสนองข้อกำหนดดังกล่าว

+------------------------------------------------+
| Host Machine (อุปกรณ์ปลายทางขององค์กร) |
| |
| - ไม่มีไบนารีเครื่องมือ AI ติดตั้ง |
| - ไม่มีส่วนขยายหรือปลั๊กอินเครื่องมือ AI |
| - ต้องการเพียง Docker เท่านั้น |
| |
| +------------------------------------------+ |
| | Docker Container (แยกส่วน) | |
| | | |
| | เครื่องมือ AI ทำงานที่นี่: | |
| | - Claude Code CLI | |
| | - Codex | |
| | | |
| | ไม่มีสิทธิ์เข้าถึง: | |
| | x ระบบไฟล์ของโฮสต์ | |
| | x Keychain / ที่เก็บข้อมูลรับรองของโฮสต์ | |
| | x คลิปบอร์ดของโฮสต์ | |
| | x อินเทอร์เฟซเครือข่ายของโฮสต์ | |
| | x แอปพลิเคชันอื่นๆ ของโฮสต์ | |
| +------------------------------------------+ |
+------------------------------------------------+

ข้อมูลทั้งหมดอยู่ใน Docker named volumes — ไม่ใช่ไดเรกทอรีของโฮสต์ที่ bind-mount ไว้ การถูกบุกรุกภายในคอนเทนเนอร์ไม่สามารถเข้าถึงไฟล์บนเครื่องโฮสต์ของคุณได้ ดู การกำหนดค่า — การคงอยู่ของข้อมูล สำหรับรายละเอียดของโวลุ่ม

คอนเทนเนอร์ไม่มีสิทธิ์เข้าถึง macOS Keychain, Windows Credential Manager, โปรไฟล์เบราว์เซอร์ หรือ SSH agent ของโฮสต์ คีย์ SSH จะถูกฉีดเข้าเมื่อเริ่มต้นผ่านตัวแปรสภาพแวดล้อมที่เข้ารหัสแบบ base64 และมีอยู่เฉพาะภายในคอนเทนเนอร์เท่านั้น

คอนเทนเนอร์ Docker ไม่แชร์สถานะคลิปบอร์ดกับโฮสต์ ข้อมูลไม่สามารถรั่วไหลผ่านการคัดลอก/วางได้

คอนเทนเนอร์สื่อสารกับโลกภายนอกในโหมดการพิสูจน์ตัวตนที่รองรับสองโหมด:

  • โหมด LiteLLM proxy — HTTPS ขาออกไปยัง LiteLLM proxy ของคุณผ่าน NAT ของ Docker
  • โหมด OAuth — HTTPS ขาออกโดยตรงไปยัง Anthropic ผ่าน NAT ของ Docker

คอนเทนเนอร์ไม่มีสิทธิ์เข้าถึงอุโมงค์ VPN, อินเทอร์เฟซเครือข่ายขององค์กร หรือบริการอื่นๆ บนโฮสต์

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

Terminal window
docker compose down -v
docker compose pull && docker compose up -d

สภาพแวดล้อมนี้เรียกใช้เครื่องมือ AI ในรูปแบบอินเทอร์เฟซบรรทัดคำสั่งเท่านั้น ไม่มีแอปพลิเคชันเดสก์ท็อป ไม่มีส่วนขยายเบราว์เซอร์ ไม่มีเฟรมเวิร์ก DXT ช่องโหว่ที่เป็นเหตุให้เกิดโมเดลการแยกส่วนนี้ไม่ส่งผลกระทบต่อการใช้งาน CLI ภายในคอนเทนเนอร์

docker-compose.yml ใช้มาตรการป้องกันเชิงลึกหลายประการ:

  • การลดสิทธิ์ (Capability dropping) — สิทธิ์ Linux ทั้งหมดถูกลดลง (cap_drop: ALL) จากนั้นเพิ่มกลับเฉพาะชุดขั้นต่ำ: CHOWN, DAC_OVERRIDE, FOWNER (สำหรับการแก้ไขสิทธิ์โวลุ่มใน entrypoint), SETUID/SETGID (สำหรับ sudo), NET_RAW (สำหรับ ping/tcpdump) และ NET_ADMIN (สำหรับเครื่องมือจับแพ็กเก็ตเช่น Wireshark และ bettercap)
  • การจำกัดทรัพยากร — CPU (4 คอร์), หน่วยความจำ (8 GB) และจำนวน PID (4096) ถูกจำกัดผ่าน mem_limit, cpus และ pids_limit เพื่อป้องกันการโจมตีแบบทรัพยากรหมด
  • tmpfs สำหรับ /tmp — ไดเรกทอรี /tmp ถูกเมาท์เป็น tmpfs ขนาด 256 MB เก็บไฟล์ชั่วคราวไว้ในหน่วยความจำและป้องกันไม่ให้คงอยู่ในเลเยอร์ที่เขียนได้ของคอนเทนเนอร์
  • การตรวจสอบ TLS เปิดใช้งานตามค่าเริ่มต้นNODE_TLS_REJECT_UNAUTHORIZED ไม่ได้ถูกตั้งค่า ดังนั้น Node.js จะตรวจสอบใบรับรอง TLS ตามค่าเริ่มต้น ผู้ใช้ที่ต้องการยอมรับใบรับรองที่ลงนามเอง (เช่น สำหรับ proxy ภายใน) สามารถเลือกเปิดใช้งานโดยเพิ่ม NODE_TLS_REJECT_UNAUTHORIZED=0 ในไฟล์ .env ของตน
  • SSH key umask — คีย์ SSH ส่วนตัวถูกเขียนภายใต้ umask 077 ดังนั้นไฟล์จะไม่สามารถอ่านได้โดยทุกคน — แม้แต่ชั่วขณะ — ระหว่างการสร้างและการเรียก chmod

คอนเทนเนอร์มีเครื่องมือทดสอบความปลอดภัยและการเจาะระบบที่ติดตั้งไว้ล่วงหน้าประมาณ 80 รายการสำหรับสถานการณ์การทดสอบที่ได้รับอนุญาต เครื่องมือถูกจัดหมวดหมู่ตามประเภท:

หมวดหมู่เครื่องมือ (ตัวอย่าง)
การวิเคราะห์เครือข่ายtshark, wireshark, masscan, hping3, bettercap (amd64), netdiscover
เครื่องสแกนเว็บnikto, sqlmap, dirb, whatweb, sslscan, OWASP ZAP, dalfox, feroxbuster
รหัสผ่านและการพิสูจน์ตัวตนhydra, john, hashcat, medusa, ncrack
วิศวกรรมย้อนกลับradare2, Ghidra, gdb, binwalk, strace, ltrace
การสำรวจsubfinder, amass, httpx, nuclei, gau, waybackurls, recon-ng, spiderfoot
การ Fuzzing และการค้นหาffuf, gobuster, SecLists
ห่วงโซ่อุปทานและความลับtrufflehog, grype, syft, gitleaks, trivy
เฟรมเวิร์กการโจมตีMetasploit (amd64), searchsploit (ExploitDB)

เครื่องมือบางตัว (bettercap, Metasploit) มีเฉพาะบน amd64 เนื่องจากข้อจำกัดของแพ็กเกจต้นน้ำ เครื่องมือจับแพ็กเก็ต (tshark, bettercap) ต้องการสิทธิ์ NET_ADMIN ซึ่งรวมอยู่ใน docker-compose.yml ค่าเริ่มต้น

สำหรับรายการทั้งหมด ให้เรียกใช้ claude-self-test ภายในคอนเทนเนอร์ (ส่วนที่ 7 ตรวจสอบเครื่องมือความปลอดภัยทั้งหมด)

ข้อกำหนดสถานะ
ไม่มีเครื่องมือ AI ติดตั้งบนอุปกรณ์ปลายทางของโฮสต์ใช่
ทำงานในเครื่องเสมือนหรือคอนเทนเนอร์ที่แยกส่วนใช่
ไม่มีสิทธิ์เข้าถึงไฟล์แชร์ของโฮสต์ใช่
ไม่มีการซิงค์คลิปบอร์ดใช่
ไม่มีที่เก็บข้อมูลรับรองที่ใช้ร่วมกันใช่
ไม่มีการแยก VPN tunneling เข้าสู่เครือข่าย productionใช่
สภาพแวดล้อมเป็นแบบใช้แล้วทิ้งใช่
ไม่มีส่วนขยายหรือปลั๊กอินเดสก์ท็อปใช่
สิทธิ์ Linux ถูกลดลง (สิทธิ์น้อยที่สุด)ใช่
การจำกัดทรัพยากรถูกบังคับใช้ (CPU/หน่วยความจำ/PIDs)ใช่
การตรวจสอบใบรับรอง TLS เปิดใช้งานตามค่าเริ่มต้นใช่
บริการภายในผูกกับ localhost เท่านั้นใช่
  1. อย่าติดตั้งเครื่องมือเขียนโค้ด AI บนเครื่องโฮสต์ของคุณ ใช้คอนเทนเนอร์นี้แทน
  2. อย่าเพิ่ม bind mounts ใน docker-compose.yml การกำหนดค่า named-volume เป็นไปโดยเจตนา
  3. หมุนเวียนคีย์ SSH ที่ใช้ภายในคอนเทนเนอร์เป็นระยะ
  4. ตรวจสอบ .env ก่อนแชร์ ไฟล์นี้มีคีย์ API และอาจมีคีย์ SSH ส่วนตัว
  5. อัปเดตเป็นระยะ เพื่อรับแพตช์ความปลอดภัย:
Terminal window
docker compose pull && docker compose up -d