- หน้าแรก
- คอนเทนเนอร์สำหรับพัฒนา
- ความปลอดภัย
ความปลอดภัย
ภูมิหลัง
หัวข้อที่มีชื่อว่า “ภูมิหลัง”ในเดือนกุมภาพันธ์ 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, อินเทอร์เฟซเครือข่ายขององค์กร หรือบริการอื่นๆ บนโฮสต์
ออกแบบให้เป็นแบบชั่วคราว
หัวข้อที่มีชื่อว่า “ออกแบบให้เป็นแบบชั่วคราว”สภาพแวดล้อมทั้งหมดสามารถถูกทำลายและสร้างขึ้นใหม่ได้ภายในไม่กี่วินาที ให้ถือว่าคอนเทนเนอร์เป็นสิ่งที่ใช้แล้วทิ้งได้
docker compose down -vdocker compose pull && docker compose up -dpodman-compose down -vpodman-compose pull && podman-compose up -dเครื่องมือแบบ CLI เท่านั้น
หัวข้อที่มีชื่อว่า “เครื่องมือแบบ CLI เท่านั้น”สภาพแวดล้อมนี้เรียกใช้เครื่องมือ 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 เท่านั้น | ใช่ |
แนวทางปฏิบัติที่ดีที่สุด
หัวข้อที่มีชื่อว่า “แนวทางปฏิบัติที่ดีที่สุด”- อย่าติดตั้งเครื่องมือเขียนโค้ด AI บนเครื่องโฮสต์ของคุณ ใช้คอนเทนเนอร์นี้แทน
- อย่าเพิ่ม bind mounts ใน
docker-compose.ymlการกำหนดค่า named-volume เป็นไปโดยเจตนา - หมุนเวียนคีย์ SSH ที่ใช้ภายในคอนเทนเนอร์เป็นระยะ
- ตรวจสอบ
.envก่อนแชร์ ไฟล์นี้มีคีย์ API และอาจมีคีย์ SSH ส่วนตัว - อัปเดตเป็นระยะ เพื่อรับแพตช์ความปลอดภัย:
docker compose pull && docker compose up -dpodman-compose pull && podman-compose up -d