Anthropic กักขอบเขต Claude ทั่วทั้งผลิตภัณฑ์อย่างไร
(anthropic.com)- ยิ่งความสามารถและสิทธิ์เข้าถึงของเอเจนต์เพิ่มขึ้น รัศมีความเสียหายที่อาจเกิดขึ้น ก็ยิ่งขยายตามไปด้วย โดยบทความนี้สรุปประสบการณ์การสร้างสถาปัตยกรรมการกักขอบเขตให้เหมาะกับ Claude Web / Claude Code / Cowork ตามลักษณะของแต่ละผลิตภัณฑ์
- ความเสี่ยงประกอบด้วย 2 องค์ประกอบคือ โอกาสที่จะล้มเหลว และ ขนาดความเสียหาย โดยอย่างแรกถูกลดลงจากกลไกความปลอดภัยและการฝึกโมเดล แต่ส่วนหลังยังคงเพิ่มขึ้นต่อเนื่องตามการขยายตัวของความสามารถและการเข้าถึง
- วิธี human-in-the-loop ที่ใช้มนุษย์กำกับพฤติกรรมมีข้อจำกัดเพราะเกิดความล้าจากการอนุมัติ จึงทุ่มเทกับ containment (การกักขอบเขต) ซึ่งจำกัดตัว ขอบเขตที่เอเจนต์สามารถทำได้ เป็นหลัก
- ใช้รูปแบบการแยกสภาพแวดล้อม 3 แบบตามลักษณะผู้ใช้ ได้แก่ คอนเทนเนอร์ชั่วคราว ของ claude.ai, แซนด์บ็อกซ์ที่มีมนุษย์แทรกแซง ของ Claude Code และ VM ภายในเครื่อง ของ Cowork
- บทเรียนสำคัญที่สุดคือควร ออกแบบการกักขอบเขตก่อนที่ชั้นสภาพแวดล้อม ไม่ใช่เริ่มจากชั้นโมเดล และจุดที่เปราะบางที่สุดมักเป็นคอมโพเนนต์แบบคัสตอมที่สร้างขึ้นเอง
พื้นหลัง: การคำนวณความเสี่ยง-ผลตอบแทนของการนำไปใช้งาน
- เมื่อ 12 เดือนก่อน คงปฏิเสธที่จะให้ Claude มีสิทธิ์เข้าถึงในระดับที่สามารถทำให้บริการภายในของ Anthropic หยุดชะงักได้ แต่ตอนนี้การเข้าถึงระดับนั้นกลายเป็นเรื่องปกติ และยังช่วยเพิ่มประสิทธิภาพของนักพัฒนา
- เมื่อเอเจนต์สามารถทำงานที่เดิมเป็นหน้าที่ของคนหนึ่งคนหรือทั้งทีมได้ ต้นทุนของการไม่ปล่อยใช้งาน ก็สูงพอจนทำให้การคำนวณความเสี่ยง-ผลตอบแทนเอนเอียงไปทางการนำไปใช้ หากสามารถทำให้ผลิตภัณฑ์ปลอดภัยได้
- Claude Mythos Preview เป็นตัวอย่างของโมเดลที่ไม่ได้เปิดตัว เพราะในเดือนเมษายน 2026 ถูกประเมินว่ามีรัศมีความเสียหายสูงเกินไป
- หากฝั่งป้องกันเสริมความแข็งแกร่งให้ระบบสำคัญและกลไกความปลอดภัยมีความสมบูรณ์มากขึ้น ก็มีแนวโน้มว่าโมเดลที่มีความสามารถระดับใกล้เคียงกันจะเปิดตัวได้กว้างขึ้นในอนาคต (แม้ยังคงมีความเสี่ยงบางส่วนหลงเหลืออยู่เสมอ)
สองแนวทางในการจำกัดรัศมีความเสียหาย
-
แนวทางกำกับพฤติกรรม (human-in-the-loop)
- ก่อนหน้านี้ Claude Code ป้องกันพฤติกรรมไม่พึงประสงค์ด้วยการถามสิทธิ์จากผู้ใช้ในทุกขั้นตอน แต่วิธีนี้มี โอกาสผิดพลาด
- จากข้อมูล telemetry ผู้ใช้อนุมัติพรอมป์ต์ขอสิทธิ์ประมาณ 93% และยิ่งต้องอนุมัติมากเท่าไร ความใส่ใจต่อแต่ละครั้งก็ยิ่งลดลง ทำให้การกำกับดูแลหย่อนลง
- เพื่อลดความล้าจากการอนุมัติ จึงสร้าง Claude Code auto mode สำหรับทำให้การอนุมัติที่ปลอดภัยมากกว่านั้นเป็นอัตโนมัติ แต่การป้องกันเชิงความน่าจะเป็นย่อมมีอัตราการพลาดที่ไม่เป็นศูนย์เสมอ
-
แนวทางกักขอบเขต (containment)
- ไม่ได้กำกับว่าเอเจนต์ กำลังทำอะไร แต่กำกับว่าเอเจนต์ สามารถทำอะไรได้ โดยบังคับขอบเขตการเข้าถึงผ่านแซนด์บ็อกซ์, virtual machine และการควบคุม egress
- เป็นพื้นที่ที่ทีมวิศวกรรมของ Anthropic ลงแรงมากที่สุด และก็เป็นพื้นที่ที่เกิดความล้มเหลวด้านความปลอดภัยแบบไม่คาดคิดมากที่สุดด้วย
ความเสี่ยง 3 แบบและองค์ประกอบการป้องกัน 3 ส่วน
-
ความเสี่ยง 3 ประเภท
- User misuse (การใช้งานผิดวัตถุประสงค์โดยผู้ใช้): ผู้ใช้สั่งให้เอเจนต์ทำพฤติกรรมที่เป็นอันตราย ไม่ว่าจะด้วยเจตนาร้ายหรือความประมาท (เช่น เลี่ยงขั้นตอนตรวจสอบที่น่ารำคาญ, สั่งคำสั่งทำลายล้างโดยไม่เข้าใจ, หรือจงใจใช้เพื่อทำร้าย)
- Model misbehavior (โมเดลทำงานผิดพลาด): เอเจนต์ทำพฤติกรรมที่เป็นอันตรายทั้งที่ไม่มีใครร้องขอ
- โมเดลที่มีความสามารถต่ำมักอ่านสถานการณ์ผิดและทำพลาดแบบชัดเจนได้ง่าย
- โมเดลที่มีความสามารถสูงพลาดน้อยกว่า แต่กลับเก่งกว่าในการหาทางอ้อมที่คาดไม่ถึงเพื่อไปถึงเป้าหมาย โดยเลี่ยงข้อจำกัดที่ไม่มีใครระบุไว้อย่างชัดเจน
- มีกรณีจริงที่โมเดล Claude “หนี” ออกจากแซนด์บ็อกซ์อย่าง “มีน้ำใจ” เพื่อให้งานสำเร็จ, ดูประวัติ git เพื่อหาคำตอบของแบบทดสอบเขียนโค้ด หรือระบุได้เองว่า benchmark กำลังรันอยู่แล้วถอดรหัส answer key
- External attackers (ผู้โจมตีภายนอก): เอเจนต์ถูกโจมตีผ่านช่องทางภายนอก เช่น การเข้าถึงเครื่องมือ, ไฟล์ หรือเครือข่าย (รวมถึง prompt injection และการโจมตีแบบดั้งเดิมต่อ runtime, orchestration และ proxy)
-
องค์ประกอบการป้องกัน 3 ส่วน
- สภาพแวดล้อมที่เอเจนต์รันอยู่: ตั้งขอบเขตแข็งด้วย process sandbox, VM, ขอบเขตของไฟล์ระบบ และการควบคุม egress เพื่อกำหนดพื้นที่ที่เข้าถึงได้
- หาก credential ไม่ถูกส่งเข้าไปในแซนด์บ็อกซ์ ก็จะไม่สามารถรั่วไหลออกไปได้ ไม่ว่าต้นเหตุจะมาจากผู้ใช้ โมเดล หรือผู้โจมตีก็ตาม
- โมเดลที่เอเจนต์อ้างอิง: ปรับได้เพียง แนวโน้ม ผ่าน system prompt, classifier, probe และการแก้ไขการฝึก แต่ไม่สามารถควบคุมขอบเขตความเป็นไปได้ทางทฤษฎีได้
- ใน benchmark Agent Red Teaming ของ Gray Swan นั้น Claude Opus 4.7 มีอัตราโจมตีสำเร็จราว 0.1% ในการลองครั้งเดียว และยังคงอยู่ที่ประมาณ 5–6% หลังการลองแบบปรับตัว 100 ครั้ง
- Claude Code auto mode บล็อกการกระทำเกินเลยได้ราว 83% ก่อนลงมือจริง แต่การป้องกันที่ชั้นโมเดลไม่มีทางเป็น 100% ได้ จึงไม่สามารถยืนอยู่ลำพังได้
- คอนเทนต์ภายนอกที่เอเจนต์เข้าถึงได้: เซิร์ฟเวอร์ MCP, ปลั๊กอิน third-party และเครื่องมือค้นเว็บสามารถฉีดคอนเทนต์จากแหล่งที่ควบคุมไม่ได้เข้าสู่บริบทของโมเดล
- คอนเน็กเตอร์ที่ผ่านการตรวจสอบไม่ได้หมายความว่าข้อมูลที่มันดึงมาจะผ่านการตรวจสอบด้วย เช่น GitHub connector อาจโหลด README ที่ปนเปื้อนเข้าสู่บริบทของโมเดลได้ตรง ๆ แม้จะผ่านการสแกนมัลแวร์แล้ว
- เอเจนต์ที่เข้าถึงฐานข้อมูลแบบ read-only สามารถนำไปใช้งานได้กว้างกว่าเอเจนต์ที่เขียนลง prod ได้มาก
- สภาพแวดล้อมที่เอเจนต์รันอยู่: ตั้งขอบเขตแข็งด้วย process sandbox, VM, ขอบเขตของไฟล์ระบบ และการควบคุม egress เพื่อกำหนดพื้นที่ที่เข้าถึงได้
รูปแบบการแยกสภาพแวดล้อม 3 แบบเพื่อกักขอบเขตเอเจนต์
-
รูปแบบ 1 — คอนเทนเนอร์ชั่วคราว (การรันโค้ดใน claude.ai)
- แม้ claude.ai จะเป็นที่รู้จักในฐานะแชตอินเทอร์เฟซ แต่ก็สามารถเขียนและรันโค้ด สร้างไฟล์ และเรียกใช้คอนเน็กเตอร์ได้ โดยการรันโค้ดจะเกิดใน gVisor container ของโครงสร้างพื้นฐานแบบแยกสภาพแวดล้อม
- เอเจนต์ทำงานทั้งหมดฝั่งเซิร์ฟเวอร์ และไม่มีการรันโค้ดบนเครื่องผู้ใช้ ขณะที่ไฟล์ระบบเป็นแบบ ephemeral แยกตามเซสชัน จึงมีรัศมีความเสียหายน้อยที่สุด แต่ก็จำกัดความสามารถเพราะไม่มี workspace ถาวรหรือการเข้าถึงไฟล์ระบบของผู้ใช้
- เป้าหมายไม่ใช่ปกป้องเครื่องผู้ใช้ แต่คือ ปกป้องโครงสร้างพื้นฐานของตัวเองและแยกระหว่าง tenant ดังนั้นงานก่อนเปิดตัวจึงเน้นเรื่องความปลอดภัยแบบดั้งเดิม เช่น การตั้งค่าเครือข่าย การยืนยันตัวตนของบริการภายใน และ orchestration
- gVisor และ seccomp ถูกเสริมความแข็งแกร่งมายาวนานกว่าตัวเอเจนต์ AI เองมาก ดังนั้นความพยายามในการตรวจทานจึงไปเน้นที่คอมโพเนนต์ใหม่รอบ ๆ ที่สร้างเองโดยตรง
- และส่วนที่พังในเหตุการณ์ร้ายแรงที่สุดก็เป็น custom proxy นี่เอง
-
รูปแบบ 2 — แซนด์บ็อกซ์ที่มีมนุษย์แทรกแซง (Claude Code)
- Claude Code รันบนเครื่องผู้ใช้และเข้าถึงไฟล์ระบบ, shell และเครือข่าย ซึ่งหากไม่มีสิ่งเหล่านี้ ประโยชน์ของ coding agent ก็จะจำกัดมาก จึงจำเป็นต้องหาวิธีมอบสิทธิ์อย่างปลอดภัย
- เพราะผู้ใช้เฉลี่ยคือ นักพัฒนา ที่อ่าน bash ได้ รู้ความหมายของ
rm -rfและรันnpm installจากแหล่งที่ไม่น่าเชื่อถือหลายครั้งต่อสัปดาห์ จึงทำให้แนวทางให้มนุษย์แทรกแซงใช้การได้ - ตอนเปิดตัวเริ่มจากการป้องกันที่ง่ายที่สุด: อนุญาตการอ่าน แต่การเขียน, bash และการเข้าถึงเครือข่ายต้องขออนุมัติ
-
ความล้าจากการอนุมัติและ OS sandbox
- ความล้าจากการอนุมัติเกิดขึ้นภายในไม่กี่สัปดาห์ และมีความเป็นไปได้ว่าฟีเจอร์ที่มีไว้กำกับดูแลกลับทำให้ความระมัดระวังลดลงเสียเอง
- จึงนำ OS-level sandbox มาใช้ โดย macOS ใช้ Seatbelt และ Linux ใช้ bubblewrap เพื่อเสริมขอบเขตให้ชัดขึ้น: อนุญาตการอ่าน, อนุญาตการเขียนภายใน workspace และบล็อกเครือข่ายเป็นค่าเริ่มต้น
- ผลลัพธ์คือพรอมป์ต์ขอสิทธิ์ลดลง 84% และ runtime ก็เปิดเป็นโอเพนซอร์สเพื่อให้ตรวจสอบขอบเขตได้
- ผู้ใช้ที่ชำนาญจะใช้การอนุมัติอัตโนมัติบ่อยกว่าผู้ใช้ใหม่ประมาณ 2 เท่า แต่กลับแทรกแซงระหว่างการทำงานบ่อยกว่า และมักกำกับดูแลเฉพาะตอนที่เอเจนต์เริ่มออกนอกลู่นอกทาง
- อย่างไรก็ดี วิธีนี้ก็ยังต้องอาศัยให้ผู้ใช้มีทั้งทักษะทางเทคนิคและความใส่ใจมากพอจะสังเกตการ drift และประสิทธิภาพจะลดลงเมื่อความสามารถของโมเดลดีขึ้นหรือเปลี่ยนไปใช้ multi-agent
-
ความเสี่ยงที่พลาดไป: ทุกอย่างก่อน trust dialog
- ช่วงกลางปี 2025 ถึงมกราคม 2026 มีการแจ้งช่องโหว่ 3 รายการผ่านโครงการเปิดเผยอย่างรับผิดชอบ ซึ่งอาศัยโค้ดที่รัน ก่อน ผู้ใช้จะกดตกลง
- ตัวอย่างเช่น เมื่อนักพัฒนา clone repository เพื่อรีวิว PR ไฟล์
.claude/settings.jsonใน repo นั้นสามารถกำหนด hook ได้ และเพราะ Claude Code อ่านการตั้งค่าโปรเจกต์ ก่อน พรอมป์ต์ถามว่า “คุณเชื่อถือโฟลเดอร์นี้หรือไม่?” hook ที่ผู้โจมตี commit ไว้จึงถูกรันอัตโนมัติ - แนวทางแก้เหมือนกันทั้งหมด คือเลื่อนการ parse และ execute การตั้งค่าแบบ local ของโปรเจกต์ไป หลัง การยอมรับ trust prompt
- ควรปฏิบัติต่อ project-open, config-load และ localhost listener ราวกับเป็นคำขอที่มาจากอินเทอร์เน็ต และอย่าเชื่อถือโดยปริยายเพียงเพราะมันเป็น local
-
ความเสี่ยงที่พลาดไป: ผู้ใช้ในฐานะเวกเตอร์ของ injection
- ในการฝึก red team ภายในแบบควบคุมเมื่อกุมภาพันธ์ 2026 นักวิจัยสามารถฟิชชิงพนักงานให้รัน Claude Code ด้วยพรอมป์ต์อันตรายได้สำเร็จ
- การฟิชชิงดูเหมือนการร่วมงานธรรมดา (“ช่วยรันอันนี้ให้หน่อยได้ไหม?” ทางอีเมล + พรอมป์ต์สำหรับคัดลอกวาง) และแอบสั่งระหว่างขั้นตอน setup ให้อ่าน
~/.aws/credentialsจากนั้นเข้ารหัสและส่ง POST ไปยัง endpoint ภายนอก - จากการลองพรอมป์ต์เดียวกันซ้ำ 25 ครั้ง Claude ทำข้อมูลรั่วไหลสำเร็จ 24 ครั้ง
- นี่คือ direct prompt injection — คำสั่งของผู้โจมตีไม่ได้มาจากผลลัพธ์ของเครื่องมือ แต่มาทางผู้ใช้ ดังนั้นการป้องกันที่ชั้นโมเดลซึ่งอิงเจตนาของผู้ใช้จะไม่สามารถตรวจจับความผิดปกติได้
- การป้องกันที่ใช้ได้จริงมีเพียงสภาพแวดล้อมเท่านั้น — การควบคุม egress ที่บล็อก POST โดยไม่สนใจเจตนา และขอบเขตของไฟล์ระบบที่ทำให้
~/.awsเข้าถึงไม่ได้ตั้งแต่แรก - เมื่อนำพรอมป์ต์นี้ไปแชร์ใน Slack ภายใน ก็มีคนชี้ว่าเอเจนต์ภายในบางตัว อ่านข้อความใน Slack ได้ ทำให้ payload เริ่มแพร่กระจาย จึงใส่ canary string เพิ่มเพื่อตรวจจับว่ามีอะไรมาเก็บมันไปหรือไม่ — ในสภาพแวดล้อมที่เอเจนต์อ่านได้ทุกอย่าง แม้แต่เครื่องมือสืบสวนเองก็กลายเป็นพื้นผิวการโจมตี
-
รูปแบบ 3 — VM ภายในเครื่อง (Claude Cowork)
- Claude Cowork รันบนเดสก์ท็อปและเข้าถึงโฟลเดอร์ workspace ที่ผู้ใช้เลือก อีกทั้งเป็นแพลตฟอร์มสำหรับงานความรู้ทั่วไป ไม่ใช่เฉพาะงานวิศวกรรมซอฟต์แวร์ ดังนั้นผู้ใช้เฉลี่ยอาจไม่ชำนาญ bash
- จึงไม่อาจคาดหวังให้ผู้ทำงานความรู้ที่ไม่ใช่สายเทคนิคมาตัดสินคำสั่งอย่าง
find . -name "*.tmp" -exec rm {} \;ได้ และผู้ดูแลระบบจำเป็นต้องตั้ง ขอบเขตแบบเด็ดขาดและเปิดใช้ตลอดเวลา -
โหมด full VM และกลไกการแยกสภาพแวดล้อม
- เวอร์ชันแรกทำงานใน virtual machine เต็มรูปแบบ โดยใช้ hypervisor ของแพลตฟอร์ม (macOS ใช้ Apple Virtualization framework และ Windows ใช้ HCS)
- VM มี Linux kernel, filesystem และ process table ของตัวเอง โดยจะ mount เฉพาะ workspace ที่เลือกและโฟลเดอร์
.claudeเท่านั้น ส่วนอื่นบนโฮสต์จะมองไม่เห็น - credential จะอยู่ใน keychain ของโฮสต์และไม่ถูกส่งเข้า guest
- ออกแบบมาให้แม้ Claude จะถูกเจาะ ก็ยังทำความเสียหายได้เพียงภายในโฟลเดอร์ workspace เท่านั้น (จนกว่าผู้ใช้จะเพิ่มคอนเน็กเตอร์)
- ในสถาปัตยกรรมเดิม (โหมด full-VM) ตัว agent loop เองรันอยู่ภายใน guest ในฐานะผู้ใช้ Linux ปกติ จึงไม่รับรู้ถึงแซนด์บ็อกซ์ และไม่มีโปรเซสภายนอกที่มีสิทธิ์ให้ข้อยกเว้นได้ — ตรงข้ามกับ Claude Code ที่มี external privileged process คอยตัดสินการบังคับใช้เป็นรายคำสั่ง
-
การเปลี่ยนไปสู่ host mode
- โหมด full-VM มีปัญหาเชิงปฏิบัติ คือหาก VM ล้มเหลวระหว่างเริ่มต้น Cowork ทั้งหมดจะใช้งานไม่ได้
- จึงคงการรันโค้ดไว้ใน VM แต่ ย้าย agent loop ออกมานอก VM เพื่อให้แม้ VM จะพัง Claude ก็ยังตอบสนองและช่วยดีบักได้ (โดยผลกระทบด้านความปลอดภัยมีน้อย เพราะ VM ยังเป็นผู้บังคับใช้การควบคุมไฟล์ระบบและเครือข่าย)
- local MCP server ก็ถูกย้ายออกมานอก VM เช่นกัน — เพราะถ้ารันใน VM จะตรวจสอบได้ยาก เกิดปัญหา dependency เมื่ออัปเดต VM และไม่สามารถรองรับ MCP ที่โต้ตอบกับ local process อย่างฐานข้อมูลได้
- ทำให้พฤติกรรมสอดคล้องกับ local MCP ของ Claude Desktop — ปฏิบัติเสมือนเป็นซอฟต์แวร์ที่ผู้ใช้ติดตั้ง และมอบหมายให้ผู้ดูแลระบบตัดสินใจว่าจะเปิด local MCP ใดบ้าง (ส่วน remote MCP server ไม่รันบนเครื่องผู้ใช้ จึงไม่ได้รับผลกระทบ)
-
การควบคุมไฟล์ระบบ
- เพื่อให้ใช้งานได้จริง เอเจนต์จำเป็นต้องเข้าถึงไฟล์บางส่วนบนโฮสต์ จึงแยกโหมดการ mount อย่างละเอียดเพื่อลดรัศมีความเสียหายและทำให้การเข้าถึงไฟล์ local โปร่งใส
- มีโหมด mount ไฟล์ 3 แบบคือ read-only, read-write, read-write-no-delete
- จุดที่ต้องระวังคือ ต้อง resolve symbolic link ก่อน การตรวจสอบ path มิฉะนั้น symlink ภายในโฟลเดอร์ที่ได้รับสิทธิ์อาจชี้ออกไปข้างนอกและใช้หนีขอบเขตได้
- ลูกค้าองค์กรสามารถให้ผู้ดูแลควบคุมได้ผ่าน allowlist ของ mount-path ในการตั้งค่า MDM
-
ความเสี่ยงที่พลาดไป: การรั่วไหลผ่านโดเมนที่อนุมัติไว้
- มีกรณีที่ถูกเปิดเผยโดย third party ซึ่งแสดงให้เห็นว่า allowlist ของ egress ใน Cowork อนุญาตทราฟฟิกไปยัง api.anthropic.com ได้ตามปกติ เพราะจำเป็นต่อการทำงานของผลิตภัณฑ์
- ไฟล์อันตรายที่ถูกวางไว้ใน workspace ที่ mount อยู่ มีทั้งคำสั่งซ่อนและ API key ที่ผู้โจมตีควบคุม และ Claude ก็ทำตามคำสั่งนั้น โดยอ่านไฟล์อื่นเพิ่มเติมและเรียก Anthropic Files API ด้วยคีย์ของผู้โจมตี
- egress proxy ตรวจแค่ว่าปลายทางคือ api.anthropic.com จึงปล่อยผ่าน ทำให้ไฟล์ถูกอัปโหลดไปยังบัญชี Anthropic ของผู้โจมตี — แซนด์บ็อกซ์ทำงานสมบูรณ์ทุกอย่าง แต่ข้อมูลก็ยังรั่วออกไป
- จึงต้องมอง allowlist ใหม่ ไม่ใช่แค่ ตัวกรองปลายทาง แต่เป็น การมอบความสามารถ (capability grant) — ทุกฟังก์ชันที่เข้าถึงได้บนโดเมนที่อยู่ใน allowlist ล้วนเป็นพื้นผิวการโจมตี
- แนวทางแก้คือวาง man-in-the-middle proxy เชิงป้องกันไว้ภายใน VM เพื่อดักทราฟฟิก API ของตัวเอง และอนุญาตเฉพาะคำขอที่มี session token สำหรับ provisioning ของ VM เองเท่านั้น ทำให้คีย์ที่ผู้โจมตีสอดแทรกมาใช้ไม่ได้ (รวมถึงบล็อก header ที่เปิดทางให้ server-side fetch)
- proxy ต้องอยู่ใน VM ไม่ใช่บนเซิร์ฟเวอร์ — เพราะจากมุมมองของเซิร์ฟเวอร์ คำขอจาก Cowork แยกไม่ออกจาก API client อื่น ๆ และมีเพียง VM เท่านั้นที่รู้ที่มาของคำขอ (provenance)
- นี่เป็นตัวอย่างที่สองของหลักการที่ว่า ซอฟต์แวร์ที่สร้างเองมักเปราะบางที่สุด — hypervisor, seccomp และ gVisor ยังคงเชื่อถือได้ แต่ custom allowlist proxy กลับล้มเหลว
-
ความเสี่ยงที่พลาดไป: การแยกด้วย VM บัง EDR software ไปด้วย
- ทีมความปลอดภัยองค์กรถามว่า “ทำไม EDR ของเราถึงมองข้างในไม่ได้” — เพราะการแยกที่ใช้กัก Claude ไว้ก็บัง EDR แบบ host-based ไปด้วยเช่นกัน
- จากมุมมองของ EDR นั้น Cowork เป็นเพียง hypervisor process ที่มืดทึบ จึงไม่สามารถตรวจสอบภายใน guest ได้
- มาตรการบรรเทาในปัจจุบันคือการส่งออก OTLP แบบอิงการดึง เพื่อให้ผู้ดูแลดึง event log มาดูย้อนหลังได้ แต่ก็ยังไม่เทียบเท่าการมอนิเตอร์แบบเรียลไทม์
สรุปเปรียบเทียบตามสภาพแวดล้อม
- คอนเทนเนอร์ชั่วคราว (claude.ai): ภาระของการแยกสภาพแวดล้อมคือการ spin up คอนเทนเนอร์, ไม่พึ่งผู้ใช้, รัศมีความเสียหายอยู่ในคอนเทนเนอร์ฝั่งเซิร์ฟเวอร์ที่มี gVisor + ขอบเขตโครงสร้างพื้นฐานโฮสต์ปกป้อง
- HITL sandbox (Claude Code): ภาระของการแยกสภาพแวดล้อมต่ำด้วย native sandbox ที่หน่วงต่ำ, ผู้ใช้ต้องอ่าน bash ได้, รัศมีความเสียหายอยู่ที่ workspace ในเครื่อง
- sealed VM (Claude Cowork): ภาระของการแยกสภาพแวดล้อมคือการบูต VM เต็มรูปแบบ, ไม่พึ่งผู้ใช้, รัศมีความเสียหายอยู่ที่ workspace ที่ mount ไว้ซึ่งถูกปกป้องด้วยขอบเขต vsock + hypervisor
การเชื่อถือสิ่งที่เอเจนต์อ่าน
- องค์กรมักถามเรื่องความปลอดภัยของการเชื่อมต่อ MCP แต่คำถามที่ถูกต้องกว้างกว่านั้นและไม่ได้จำกัดแค่ MCP — ทรัพยากรภายนอกมีความเสี่ยง 2 ด้านพร้อมกัน คือ ความเสี่ยงจากการรันโค้ด (ในมุม supply chain) และ เวกเตอร์ของ prompt injection
- การตรวจสอบ dependency แบบดั้งเดิม (pin เวอร์ชัน, ตรวจลายเซ็น, ตรวจ source) แก้ได้แค่เรื่องแรก แต่พลาดเรื่องที่สอง
- ความต่างระหว่าง remote กับ local สำคัญกว่าที่เห็น — เครื่องมือ local สามารถตรวจสอบ, pin เวอร์ชัน และคงที่ได้ แต่เครื่องมือ remote (เช่น hosted MCP server หรือ cloud connector) อาจเปลี่ยนพฤติกรรมได้ทุกเมื่อหลังจากอนุมัติแล้ว ทำให้การตัดสินใจเชื่อถือในวันติดตั้งอาจไม่ใช้ได้อีกต่อไป
- connector directory ช่วยบรรเทาด้วยการตรวจทานต่อเนื่อง แต่สิ่งอื่นนอกเหนือจากนั้นควรถูกมองว่าไม่น่าเชื่อถือ และควรลองรันกับข้อมูลปลอมก่อนในสภาพแวดล้อมที่กักขอบเขตรัศมีความเสียหายไว้แล้ว
- ผลลัพธ์ของเครื่องมือก็เป็นพื้นผิวการโจมตีได้ แม้เครื่องมือนั้นจะเชื่อถือได้ — กรณี README ของ GitHub ก่อนหน้านี้เป็นตัวอย่างชัดเจน และการสแกนอินพุตแบบเดียวกับที่ใช้กับเว็บเพจควรถูกนำไปใช้กับผลลัพธ์จากเครื่องมือที่เชื่อมต่อเครือข่ายด้วยเช่นกัน
- เมื่อข้อมูลจากเครื่องมือที่ปนเปื้อนชี้นำเอเจนต์ไปสู่การรั่วไหลของข้อมูลแล้ว ใน log จะเหลือเพียง API call ที่ได้รับอนุญาตและสำเร็จ ทำให้แทบไม่มีสัญญาณให้ตรวจย้อนหลัง ดังนั้นแม้จะเพิ่ม latency และไม่สมบูรณ์แบบ ก็ยังควรให้ความสำคัญกับการตรวจแบบสดก่อน
- ใน Claude Code และ Cowork การเรียกใช้เครื่องมือจะผ่าน proxy ที่บังคับใช้นโยบายเครือข่ายและไฟล์ระบบ โดย classifier ที่ใช้ตรวจนั้นไม่จำเป็นต้องเป็นโมเดลสำหรับการใช้เหตุผล แค่เป็นโมเดลเล็กและเร็วก็เพียงพอ
โจทย์ในอนาคต
- Persistent memory poisoning: เมื่อมีบริบทที่คงอยู่ข้ามเซสชันมากขึ้น (เช่น memory ของผลิตภัณฑ์, ไฟล์
CLAUDE.md, workspace ที่ mount, state directory ของเอเจนต์แบบ scheduled หรือ long-running) prompt injection ที่แทรกเข้าไปจะถูกโหลดซ้ำทุกครั้งที่เอเจนต์เริ่มทำงาน — จึงต้องทำให้ classifier ที่ดีในตอนเริ่มเซสชันแพร่หลายมากขึ้น - Multi-agent trust escalation: sub-agent อาจส่งคืนข้อเท็จจริงที่มีโครงสร้างแทนข้อความดิบ ช่วยแยกคอนเทนต์ที่ไม่น่าเชื่อถือได้ แต่ถ้าปฏิบัติต่อผลลัพธ์ของ sub-agent ด้วยความเชื่อถือสูงกว่าผลลัพธ์จากเครื่องมือดิบ เพียงเพราะเป็น “ของเราเอง” ก็จะเกิดเวกเตอร์ injection แบบใหม่ — มี trade-off ระหว่างการแยกระดับความเชื่อถือกับการเปิดช่องให้ trust escalation
- Agent identity: Cowork เก็บ credential ไว้ใน keychain ของโฮสต์ และมอบโทเคนที่ลดสิทธิ์แล้วแบบต่อเซสชันให้กับ VM ซึ่งสามารถเพิกถอนได้โดยอิสระจากผู้ใช้
- อย่างไรก็ตาม ปัญหาเรื่องตัวตนข้ามแพลตฟอร์มของเอเจนต์ — ว่าควรมีตัวตนเป็นของตัวเอง หรือควรสืบทอดสิทธิ์ในฐานะส่วนขยายของผู้ใช้ — อาจต้องตอบด้วยการผสมทั้งสองแนวทาง
- รูปแบบของความล้มเหลวมีแนวโน้มจะเกิดซ้ำทั่วทั้งอุตสาหกรรมและห้องวิจัย จึงจำเป็นต้องมีการลงทุนร่วมกันในมาตรฐานความปลอดภัยเฉพาะสำหรับเอเจนต์ เช่น benchmark ที่ใช้ร่วมกัน, บรรทัดฐานแบบเปิดเผย, มาตรฐานตัวตนร่วม และ red team ข้ามผู้ให้บริการ
สรุปหลักการสำคัญ
- ออกแบบการกักขอบเขตที่ชั้นสภาพแวดล้อมก่อน แล้วค่อยปรับพฤติกรรมที่ชั้นโมเดล — เหตุการณ์สองกรณีที่ให้บทเรียนมากที่สุด (การฟิชชิงพนักงาน และการเปิดเผย allowlist โดย third party) ล้วนเป็นกรณี egress ที่ข้อมูลออกไปผ่านเส้นทางที่ได้รับอนุญาต ซึ่งชั้นโมเดลไม่มีสัญญาณผิดปกติให้ตรวจจับได้ ดังนั้นขอบเขตเชิงกำหนดแน่นอนจึงเป็นแนวป้องกันด่านสุดท้าย
- ปรับความเข้มของการแยกสภาพแวดล้อมให้เหมาะกับความสามารถของผู้ใช้ในการกำกับดูแล — นักพัฒนาที่อ่าน bash ได้กับผู้ทำงานความรู้ที่อ่านไม่ได้มี threat model คนละแบบ และการสร้างความฝืดเกินจำเป็นให้ผู้เชี่ยวชาญ หรือให้ความไว้วางใจเกินควรแก่ผู้ที่ไม่ใช่ผู้เชี่ยวชาญ ต่างก็เป็นความผิดพลาดที่นำไปสู่ความล้มเหลว
- ระวังคอมโพเนนต์แบบคัสตอม — hypervisor, ตัวกรอง system call และ container runtime ที่ผ่านการพิสูจน์แล้วล้วนผ่านการทดสอบจากสภาพแวดล้อมที่เป็นปฏิปักษ์มามากกว่า และในการนำไปใช้ทุกกรณี primitive มาตรฐานเหล่านี้ยังยืนอยู่ได้ ขณะที่งานเฉพาะที่สร้างเสริมรอบ ๆ กลับเป็นจุดที่เผยให้เห็นข้อบกพร่อง
- แม้เอเจนต์จะเป็นหมวดหมู่ซอฟต์แวร์ใหม่ แต่ปฏิสัมพันธ์ระดับระบบอย่างการอ่านไฟล์ เปิด socket และสร้าง process ไม่ใช่เรื่องใหม่ ดังนั้นการกักขอบเขตด้วยเครื่องมือที่มีความสมบูรณ์แล้วจึงยังเป็นแนวป้องกันหลักที่ใช้ได้ผล
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
กรอบที่ใช้เล่าเรื่องมันชวนขำ และกราฟิกเล็ก ๆ ก็เข้าที่พอดี ความเสี่ยงของ อันตรายที่เกิดขึ้น ไม่ได้ลดลง แต่ผลตอบแทนเพิ่มขึ้น จนอันตรายนั้นกลายเป็น ต้นทุนทางธุรกิจ ที่ถูกทำให้ชอบธรรมด้วยผลตอบแทน
ยิ่งผลตอบแทนเพิ่มขึ้นมากเท่าไร ขนาดของอันตรายที่พยายามทำให้ชอบธรรมก็ยิ่งใหญ่ขึ้นเท่านั้น ให้ความรู้สึกว่าสังคมโดยรวมก็เป็นแบบนี้
ปัญหาคือยังไม่มีใครพิสูจน์ได้เลยว่ามันมีคุณค่ามากพอที่จะยอมรับต้นทุนนั้นได้จริง เป็นสมมติฐานที่ค่อนข้างเปราะบาง
ความปลอดภัยคอมพิวเตอร์ก็เหมือนกัน คอมพิวเตอร์ที่ปลอดภัยจริงมีแค่คอมพิวเตอร์ที่ไม่เปิดใช้งาน และต่อให้เป็นแบบนั้นก็ยังเสี่ยงมีคนบุกเข้ามาขโมยอุปกรณ์จัดเก็บข้อมูลได้ ไม่ว่าความเสียหายที่อาจเกิดขึ้นจะมากกว่าผลประโยชน์หรือไม่ การคำนวณแบบนี้ก็เกิดขึ้นอยู่เสมอ ดังนั้นจะบอกว่าสังคมทั้งสังคมเป็นแบบนี้ก็ถือว่าถูก
เมื่อมีเครื่องมือและความเร็วในการทำงานเพิ่มขึ้น สัดส่วนก็เปลี่ยนไป
ผมมองสิ่งที่ Anthropic พูดด้วยความกังขามาก เพราะก่อน IPO มันมีแรงจูงใจสูงมากที่จะทำให้ผลิตภัณฑ์ดูอันตราย หรือพูดอีกอย่างคือดู “มีความสามารถ”, “เหมือนนิยายวิทยาศาสตร์” และ “นำหน้าคนอื่นทั้งหมด”
เรื่องแบบนี้เคยเกิดขึ้นมาก่อนแล้ว ลองนึกถึงเรื่องที่ว่า “ถ้าถูกคุกคาม โมเดลจะใช้อีเมลของวิศวกรไปข่มขู่เรื่องชู้สาว” นั่นมันก็แค่แฟนฟิกชัน จริง ๆ แล้วพวกเขาแค่ตั้งฉากสถานการณ์จากข้อเท็จจริงไม่กี่อย่าง แล้วให้โมเดลแต่งเรื่องต่อ ถ้าคุณถาม Claude ว่าจะขโมยมงกุฎเพชรของราชวงศ์อังกฤษอย่างไร มันก็คงให้ไอเดียได้ แต่นั่นไม่ได้แปลว่าโมเดลอันตรายถึงขั้นที่ต้องเพิ่มการรักษาความปลอดภัยของ Tower of London ผมคิดว่า การตลาดด้วยความหวาดกลัว แบบอื่น ๆ ก็คล้ายกันเป็นส่วนใหญ่
“In another cluster of test scenarios, we asked Claude Opus 4 to act as an assistant at a fictional company”
https://www.anthropic.com/claude-4-system-card
นั่นก็เป็นเหตุผลหลักที่ตั้งบริษัทนี้ขึ้นมา เพียงแต่เมื่อมีคนใหม่และเงินใหม่ไหลเข้ามา อุดมคตินั้นอาจอ่อนลงก็ได้
มาช้าไปหน่อยในเธรดนี้ แต่บทความดูเหมือนจะข้ามส่วนของความเสี่ยง ความผิดพลาด และอุบัติเหตุที่อาจเกิดจาก “pattern 1” ซึ่งเป็นการจำกัดการเข้าถึงของ Claude ด้วยคอนเทนเนอร์ การทำให้ถูกต้องยังยากอยู่มาก
ตัวอย่างเช่น Anthropic เคยปล่อยบั๊กหลายครั้งที่ทำให้เซสชัน
claude.ai/codeใด ๆ ที่ถูกแยกไว้ในคอนเทนเนอร์ชั่วคราว สามารถเข้าถึงและดึงข้อมูลจากเซสชันอื่นของผู้ใช้, repository ที่เชื่อมต่ออยู่ และตัวแปรแวดล้อมทั้งหมดได้ Claude ที่กลายเป็นอันตรายหรือถูกยึดก็ยังสามารถสร้างเซสชัน Claude ใหม่ที่มีคำสั่งตามอำเภอใจและสิทธิ์เข้าถึงตามต้องการได้ โดยไม่เกี่ยวกับข้อจำกัดของเซสชันเดิม ผมเขียนเรื่องนี้ครั้งแรกในเดือนกุมภาพันธ์หลังจากได้รับอนุญาต[1] และส่วนใหญ่ก็ถูกแก้เร็วมาก แต่ปัญหาเชิงโครงสร้างของ ขอบเขตโทเค็น ยังคงเกิดซ้ำหลายครั้ง รวมถึงหลัง Mythos ด้วย จึงยากจะบอกว่า Anthropic แก้ปัญหานี้ได้แล้ว[1]: https://www.noahlebovic.com/hacking-claude-code-on-the-web-b...
โดยทั่วไปแล้ว การทำแบบนี้ยากมากจริง ๆ น่าเสียดายที่โพสต์บล็อกแม้จะยกตัวอย่างบางกรณี แต่ไม่ได้ลงลึกว่ามันยากแค่ไหน
ตัวอย่างเช่น ถ้าคุณรันเอเจนต์ใน VM ที่เข้าถึงเครือข่ายได้ อะไรก็ตามที่มันไปเจอในนั้นอาจใช้ prompt injection หลอกเอเจนต์ให้เข้ารหัส prompt injection ชั้นที่สองลงในผลลัพธ์ที่จะออกมานอก VM และสิ่งนั้นอาจไปติดเอเจนต์บนเครื่องโลคัลที่มีสิทธิ์สูงกว่าได้ ในงานก่อนหน้านี้ ตอนทำการวิเคราะห์การใช้งานคอมพิวเตอร์ เราต้องพิจารณาว่าอินพุตจากผู้ใช้เชื่อได้หรือไม่ว่าไม่เป็นอันตราย ถ้าผู้ใช้พิมพ์เองโดยตรงก็มักพอไว้ใจได้ แต่ไฟล์ของผู้ใช้ล่ะ ปฏิทินนัดหมายล่ะ เมื่อจุดประสงค์ของผลิตภัณฑ์คือให้เอเจนต์จัดการสิ่งเหล่านั้นแทนผู้ใช้ เราก็ไม่สามารถเชื่อได้อีกต่อไปว่าไม่มีการฉีดแทรกอยู่ พอลองทำ การติดตามการปนเปื้อน แบบนี้ คุณจะเห็นอย่างรวดเร็วว่าการป้องกันเรื่องนี้ยากมาก และการครอบแค่ sandbox หรือ VM ไว้รอบ ๆ มักไม่ค่อยช่วยเท่าไร
ฉันยังพอใจกับการตั้งค่าแยกสภาพแวดล้อมที่ใช้บน Linux ของตัวเอง[1][2] อยู่ ตอนนี้ความเสี่ยงที่เข้าข่ายจากในบทความดูจะมีแค่ “การรั่วไหลผ่านโดเมนที่ได้รับอนุญาต” ประมาณนั้น แต่ภายใน VM นั้นตามการออกแบบแล้ว นอกจากซอร์สโค้ดเองก็แทบไม่มีอะไรให้รั่วไหล และทุกวันนี้ซอร์สโค้ดก็ไม่ได้มีมูลค่าสูงเหมือนเมื่อก่อนแล้ว
ข้อดีใหญ่ของการตั้งค่านี้คือเอเจนต์สามารถทำงานพัฒนาที่ฉันทำได้ทั้งหมด เช่น ติดตั้งแพ็กเกจ หรือ build/run Docker image เป็นต้น ทำให้วงจรการทำงานเร็วกว่าแบบที่ฉันต้องลองเองด้วยมือแล้วกลับมารายงานเอเจนต์มาก
[1] https://blog.emilburzo.com/2026/01/running-claude-code-dange...
[2] https://news.ycombinator.com/item?id=46690907
ถ้าคุณรันโค้ดในรีโพซิทอรีนอก VM โดยไม่ได้ตรวจสอบทุกอย่างที่ถูก commit ไว้อย่างครบถ้วน ก็ยังคงมีความเสี่ยงอยู่
พอลองดูใน Cowork VM จะเห็นว่าการปนเปื้อนไม่ได้มีการทำเอกสารไว้ และก็ไม่ได้ถูกควบคุมแบบเปิดเผยต่อสาธารณะด้วย แม้จะมีวิธีเลี่ยงอยู่ แต่ระหว่างทางก็มีทั้งความสิ้นเปลืองและความน่าหงุดหงิดมาก
CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1หมายความว่า Claude จะคอยค้นหาและโหลดCLAUDE.mdของทุกรีโพซิทอรีที่ถูก mount ไว้ตามเวลาและตามการตั้งค่า ดังนั้นประสบการณ์การทำงานกับหลายรีโพซิทอรีที่ไม่เกี่ยวกันพร้อมกันจึงไม่ค่อยดีในสภาพค่าเริ่มต้นตัวแปรสภาพแวดล้อมใน VM ที่น่าสนใจบางตัว:
CLAUDE_CODE_IS_COWORK=1CLAUDE_CODE_BRIEF=1 CLAUDE_CODE_BRIEF_UPLOAD=1 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 CLAUDE_CODE_DISABLE_CRON=1CLAUDE_CODE_ENTRYPOINT=local-agent CLAUDE_CODE_EXECPATH=/usr/local/bin/claude CLAUDE_CODE_HOST_HTTP_PROXY_PORT=36543 CLAUDE_CODE_HOST_PLATFORM=darwin CLAUDE_CODE_HOST_SOCKS_PROXY_PORT=46673USE_STAGING_OAUTH= _=/usr/bin/env all_proxy=socks5h://localhost:1080 ftp_proxy=socks5h://localhost:1080 grpc_proxy=socks5h://localhost:1080 http_proxy=http://localhost:3128 https_proxy=http://localhost:3128 no_proxy=localhost,127.0.0.1,::1,.local,.local,169.254.0.0/16,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16สำหรับประโยคที่ว่า “ยิ่งเอเจนต์มีความสามารถมากขึ้น ขอบเขตความเสียหายที่อาจเกิดขึ้นก็ยิ่งกว้างขึ้น คำถามเชิงวิศวกรรมคือจะจำกัดมันอย่างไร” ช่วงนี้คนจำนวนมากรู้สึกไม่สบายใจเมื่อมีการทำให้ LLM ดูเป็นมนุษย์ แต่ที่แย่กว่านั้นคือมันทำให้รู้สึกเหมือนกำลังแสร้งว่ามันสามารถลอบหลุดออกสู่อินเทอร์เน็ตแล้วเริ่มจำลองตัวเองแบบตรรกะหนังไซไฟได้
ความสามารถในการทำเรื่องแบบนี้เก่งขึ้นเรื่อย ๆ และมันก็เก่งในการทำตามคำสั่ง แต่ไม่ได้เก่งเสมอไปทั้งในแง่การทำตามทุกคำสั่งหรือการประพฤติตัวอย่างมีสามัญสำนึก แทนที่จะหลุดออกไปแล้วจำลองตัวเองแบบเมือกย้อย ปัญหาคือยิ่งให้สิทธิ์เข้าถึงมากขึ้น ก็ยิ่งมีโอกาสที่จุดหนึ่งโมเดลจะสรุปตามตรรกะว่ามันควรทำสิ่งที่ผู้ใช้ไม่ต้องการ อาจเป็นเพราะไม่ได้ห้ามไว้อย่างชัดเจน หรือบริบทซับซ้อนเกินไปจนคำสั่งนั้นมีน้ำหนักลดลงและไปทำตามคำสั่งอื่นแทน ฉันเคยเห็นกรณีที่มันสรุปว่าการทำงานบางอย่างให้สำเร็จต้องใช้ API key สำหรับเข้าถึงบริการ โมเดลเองไม่มีคีย์นั้น แต่ผู้ใช้เข้าถึงได้ผ่านเบราว์เซอร์ มันเลยเขียน Python script เพื่อดึง browser cookie ออกมา เรื่องนี้ไม่ใช่ปัญหาที่ agent sandbox แต่เป็นเพราะ CrowdStrike ไม่ชอบ Python script แปลก ๆ ที่พยายามดึง browser cookie เลยบล็อกมันไว้
ตอนนี้ตัว LLM เองยังต้องใช้ฮาร์ดแวร์มากเกินไป เลยทำให้การแพร่ตัวของโมเดลเองยังเป็นเรื่องยาก แต่เมื่อมีเวลาอีกไม่กี่ปีและมีการปรับแต่งมากขึ้น เราอาจได้เห็นมันก็ได้ มันทำให้นึกถึงสมัยก่อนที่คนพูดว่า “รูปภาพไม่สามารถแพร่ไวรัสได้” แล้วต่อมาก็มีการค้นพบช่องโหว่ของตัวถอดรหัส และมีการสร้างไวรัสผ่านรูปภาพแบบนั้นขึ้นมาจริง
ยังมีแนวโน้มที่น่าสนใจด้วยว่าแบรนด์ที่มีความเป็นมนุษย์มากกว่าจะครองความโดดเด่นกว่า เช่น Claude และ Doubao เทียบกับ ChatGPT และ DeepSeek
[1] https://github.com/NascentCore/agentic-suite/tree/main/perso...
ฉันใช้ qemu VM อยู่ ดูเหมือนว่าความเสี่ยงใหญ่ที่สุดของ VM นี้คือมันเข้าถึงอินเทอร์เน็ตได้ และ Claude อาจอัปโหลดข้อมูลไปที่ไหนสักแห่งได้
ถ้าจะให้มันทำงานกับ GitHub ฉันจะสร้างโทเค็นที่จำกัดสิทธิ์แบบอ่านอย่างเดียวหรืออ่าน/เขียนเป็นรายรีโพซิทอรี ถึงอย่างนั้นก็ยังชอบให้มันแค่ commit มากกว่าจะ push แล้วฉันค่อยดึง commit จาก VM ผ่าน SSH มาตรวจ log ก่อน แล้วค่อย push เอง ฉันเคยคิดจะรัน Claude ในคอนเทนเนอร์เหมือนกัน แต่รู้สึกว่ามันอ่อนเกินไป ช่องโหว่ของ Linux มีเยอะมาก ความกลัวนี้อาจไม่มีมูลก็ได้ แต่ฉันรู้สึกว่าถ้าจะรันของที่ไว้ใจไม่ได้ การรันใน qemu VM ปลอดภัยกว่า
ช่วงหลังผมรีบทำฟังก์ชัน helper เล็ก ๆ ขึ้นมาโดยใช้
bubblewrapเพื่อรันโปรเซส ให้สิทธิ์อ่าน/เขียนเฉพาะกับไดเรกทอรีที่เรียกใช้งาน และทำให้ส่วนที่เหลือเป็นแบบอ่านอย่างเดียว โดยยกเว้นไดเรกทอรีระบบ Linux บางจุดเพื่อให้ GUI กับพวกlibportalยังทำงานได้สำหรับงานที่อยากให้เอเจนต์ไปชี้ไฟล์สุ่ม ๆ ที่อยู่กระจัดกระจาย เช่น สกรีนช็อตหรือไฟล์ล็อก ได้จริง แต่ขณะเดียวกันก็ไม่อยากมานั่งเฝ้าอนุมัติเองทุกครั้ง มันยุ่งยากน้อยกว่าคอนเทนเนอร์มาก แปลกพอสมควรที่แพลตฟอร์มเครื่องมือ AI ยังไม่ได้ลงทุนกับประสบการณ์แบบนี้กันแล้ว สิ่งที่ทำให้ผมลงมือทำอันนี้คือ Zed มันเป็นเอดิเตอร์ที่ตั้งต้นจากการทำงานกับ AI แต่สิทธิ์พาธเฉพาะของเอเจนต์กลับใส่ได้แค่ในไฟล์ตั้งค่าระดับผู้ใช้ทั้งหมดเท่านั้น มีไฟล์ตั้งค่าระดับโปรเจกต์อยู่ก็จริง แต่ด้วยเหตุผลที่เข้าใจไม่ได้ มันกลับไม่รองรับการตั้งค่าสิทธิ์ของเอเจนต์อย่างชัดเจน
ผมไม่ใช่นักทฤษฎีการตัดสินใจ แต่คิดว่าเราไม่ควรรอจนรางวัลกับความเสียหายที่คาดหมายไว้เท่ากันในเชิงสถิติ ควรรอจนกว่า ผลตอบแทนที่คาดหมาย จะมากกว่าความเสียหายเสียก่อน