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

จำลอง​ภัย​คุกคาม (Threat Model): agent คือ attack surface ใหม่

จบ​สาม​คอร์ส​ที่​ผ่าน​มา คุณ​ถือ agent Order ของ​จริง​มา​แล้ว​ครบ​สาม​ชั้น คอร์ส​ที่ 15 ให้ agent ความ​สามารถ — model claude-opus-4-8 (ใช้​เป็น​ตัวอย่าง ณ 2026-07 — id เลื่อน​ไหว​ตาม​เวลา) บวก tool สาม​ตัว getOrder / getDeliveryStatus / issueRefund บวก loop ที่​ป้อน​ผล​ของ tool กลับ​เข้า model จน​งาน​เสร็จ คอร์ส​ที่ 16 ให้ ความ​รู้ — retrieval, memory, การ​จัด​งบ token, compaction คอร์ส​ที่ 17 ทำให้​มัน รอด​จาก​อุบัติเหตุ — retry, timeout, idempotency, stop policy แบบ​ประกอบ

ทั้ง​สาม​คอร์ส​นั้น​มี​สมมติฐาน​เงียบๆ ร่วม​กัน​ข้อ​หนึ่ง​ที่​ไม่มี​บท​ไหน​พูด​ออก​มาตรงๆ: ผู้​ใช้​ให้​ความ​ร่วมมือ และ​สภาพ​แวดล้อม​เป็น​มิตร #17 รักษา agent จาก​ความ​ล้มเหลว โดย​บังเอิญ — ลูกค้า​ดับเบิล​คลิก, tool timeout, model ตอบ​เพี้ยน คอร์ส​นี้​ลบ​สมมติฐาน​นั้น​ทิ้ง แล้ว​ถาม​คำถาม​ที่​ไม่มี​คอร์ส​ก่อนหน้า​ถาม — จะ​เกิด​อะไร​ขึ้น​เมื่อ​มี​คน ตั้งใจ พัง​มัน? คน​ที่​พยายาม hijack, jailbreak, ดูด​ข้อมูล​ออก หรือ abuse agent Order นี่​คือ attack surface ใหม่​ทั้ง​ผืน และ​เรา​จะ​รักษา​มัน​ด้วย defense-in-depth

📦 code ตัวอย่าง

คอร์ส​นี้​ต่อยอด agent Order ตัว​เดิม​จาก​คอร์ส #15 (พร้อม context layer จาก #16 และ resilient runtime จาก #17) — repo kaen-food-ordering (กำลัง​จัด​ทำ) #18 ไม่​เพิ่ม tool หรือ store ใหม่ แต่​ห่อ ชั้น guard คร่อม​มัน บท​นี้​เป็น​บท​วาง​กรอบ​ความคิด (threat model) — ยัง ไม่มี code รัน​ได้ code guard ของ​จริง​เริ่ม​ที่​บท4 (บท2–3 สาธิต​รูปแบบ​การ​โจมตี​ก่อน) ทุก​กติกา API ฝั่ง​แชต​จาก #15 ยัง​ยึด​เดิม​ทุก​ข้อ และ​บท​นี้​ตั้ง precedent ของ honesty spine กับ 🔗 callout อ้างอิง​ต้นทาง​ไว้​ให้​ทุก​บท​หลัง​จาก​นี้​เดิน​ตาม

Threat ModelThreat Modelการ​วิเคราะห์​อย่าง​เป็น​ระบบ​ว่า​ใคร​อาจ​โจมตี ที่​จุด​ไหน และ​ด้วย​วิธี​ใด — สำหรับ agent Order คือ​การ​ยอมรับ​ว่า​สมมติฐาน 'ผู้​ใช้​ให้​ความ​ร่วมมือ' ที่ #15–#17 อาศัย​อยู่​นั้น​เป็น​เท็จ​แล้ว agent กลาย​เป็น attack surface ใหม่​เพราะ​มัน​ครบ​สาม​อย่าง​พอดี: (ก) อ่าน private data (ข) รับ untrusted content (ค) ลงมือ​ทำ​จริง — สูตร​ของ lethal trifecta ใช้ OWASP LLM Top 10 เป็น​แผนที่​ของ​ภัย​ที่​ต้อง​รักษา ไม่ใช่ compliance recitalProcess คือ​การ​วิเคราะห์​อย่าง​เป็น​ระบบ​ว่า ใคร อาจ​โจมตี ที่ จุด​ไหน และ​ด้วย วิธี​ใด — ไม่ใช่​การ​ท่อง checklist ให้​ผ่าน audit ก้าว​แรก​ของ threat model คือ​ถาม​ว่า​ทำไม agent ตัว​นี้​ถึง​น่า​โจมตี​ตั้งแต่​แรก

Simon Willison ตั้ง​ชื่อ​สูตร​อันตราย​นี้​ไว้​ว่า Lethal TrifectaLethal Trifectaกรอบ​ของ Simon Willison (2025-06-16, S10): agent อันตราย​เมื่อ​มี​ครบ​สามขา — เข้าถึง private data + รับ untrusted content + สื่อสาร​ออก​ภายนอก​ได้ (exfiltration) agent Order มี​ครบ (getOrder/getDeliveryStatus = private data, poisoned note = untrusted content, issueRefund/outbound call = ขา exfil) การ​ตัด​ขา​ใด​ขา​หนึ่ง (least-privilege, กัน untrusted content เข้า trust boundary, ตัด external comms) ก็​ลด​ความ​เสี่ยง — 'we still don't know how to 100% reliably prevent this from happening'Process — agent กลาย​เป็น​เป้าหมาย​จริงจัง​เมื่อ​มัน​มี​ครบ​สามขา (S10, verbatim):

“Access to your private data… Exposure to untrusted content… The ability to externally communicate in a way that could be used to steal your data.”

map สามขา​นี้​ลง​บน agent Order ที่​คุณ​สร้าง​มา​เอง​กับ​มือ แล้ว​จะ​เห็น​ว่า​มัน​มี​ครบ​ทุก​ขา:

  • ขา​ที่ 1 — private data: getOrder / getDeliveryStatus อ่าน​ข้อมูล​ลูกค้า​จริง (ที่​อยู่ เบอร์​โทร ยอด​เงิน ประวัติ​ออเดอร์)
  • ขา​ที่ 2 — untrusted content: ทุก byte ที่ getOrder คืน​มา — โดย​เฉพาะ field อย่าง note ของออเดอร์ — เป็น​เนื้อหา​ที่ ผู้​อื่น​แก้​ได้ agent #16 ยัง​ดึง memory/retrieval เข้า​มา​เป็น context อีก ทุก​อย่าง​นี้​คือ content ที่ model ไม่​ได้​เป็น​คน​ต้นเรื่อง
  • ขา​ที่ 3 — ส่ง​ออก​ได้: issueRefund (และ outbound call ใดๆ) คือ​ช่อง​ทาง​ลงมือ​ทำ​จริง​และ​ส่ง​ข้อมูล​ออก

Willison พูด​ต่อว่า​เมื่อ​ครบ​สามขา “an attacker can easily trick it into accessing your private data and sending it to that attacker.” agent Order ไม่​ได้​แค่ อาจ มี​ช่อง​โหว่ — มัน​ถือ​ครบ​ทั้ง​สามขา​ของ​สูตร​ที่​อันตราย​ที่สุด​ตั้งแต่​วัน​แรก​ที่​มัน​รัน​ได้ นี่​คือ​เหตุผล​ว่า​ทำไม threat model ถึง​ต้อง​มา​ก่อน guard สัก​ตัว

พอ​รู้​ว่า agent เป็น​เป้า เรา​ต้อง​มี แผนที่ ว่า​จะ​ถูก​โจมตี​ใน​รูปแบบ​ไหน​บ้าง แผนที่​ที่​เป็น​แกน​ของ​ทั้ง​คอร์ส​คือ OWASP LLM Top 10OWASP Top 10 for LLM Applications 2025แผนที่​ภัย​หลัก​ของ​คอร์ส — รายการ 10 ความ​เสี่ยง​สำหรับ app LLM ฉบับ​ปี 2025 (S1) คอร์ส​นี้​สร้าง​การ​รักษา​ต่อ 5 ข้อ​ที่ load-bearing: LLM01 Prompt Injection, LLM02 Sensitive Information Disclosure, LLM05 Improper Output Handling, LLM06 Excessive Agency, LLM07 System Prompt Leakage ส่วน​ที่​เหลือ (LLM03/04/08/09/10) แค่​ระบุ​ชื่อ​และ​วาง​ตำแหน่ง 'มาตรฐาน​คือ​แผนที่ วิศวกรรม​คือ​ภูมิประเทศ' — มาตรฐาน​บอกว่า​ต้อง​กลัว​อะไร​และ​เรียก​มัน​ว่า​อะไร ส่วน code guardrail คือ​สิ่ง​ที่​ลด​ความ​เสี่ยง​จริงProcess — รายการ 10 ความ​เสี่ยง​สำหรับ app LLM ฉบับ​ปี 2025 (S1) บท​นี้​จะ ไม่ สอน​ครบ​ทั้ง​สิบ​แบบ​เจาะ​ลึก — มัน​เป็น threat-model lesson ไม่ใช่ compliance recital เรา​แค่​กาง​แผนที่​แล้ว​ชี้​ว่า​คอร์ส​จะ​สร้าง​การ​รักษา​ต่อ​ข้อ​ไหน

ห้า​ข้อ​ที่ load-bearing (คอร์ส​นี้​สร้าง guard ต่อ​โดยตรง):

  • LLM01 Prompt Injection — input เปลี่ยน​พฤติกรรม model ใน​ทาง​ที่​ไม่​ตั้งใจ (บท2/3/4)
  • LLM02 Sensitive Information Disclosure — agent ทำ PII หรือ​ข้อมูล​ลูกค้า​คน​อื่น​รั่ว (บท5/7)
  • LLM05 Improper Output Handling — เชื่อ output ของ model โดย​ไม่ validate ก่อน​ส่ง​ต่อ (บท5)
  • LLM06 Excessive Agency — agent มี​สิทธิ์/ความ​สามารถ/autonomy มาก​เกิน​งาน (บท6)
  • LLM07 System Prompt Leakage — พึ่ง system prompt เป็น​ที่​เก็บ secret หรือ​เป็น security control (บท7)

อีก​ห้า​ข้อ​ที่ ระบุ​ชื่อ​และ​วาง​ตำแหน่ง (ไม่​เจาะ​ลึก​ใน​คอร์ส​นี้): LLM03 Supply Chain (provenance ของ NuGet beta / M.E.AI), LLM04 Data & Model Poisoning (training-time; แตะ poisoned memory ของ #16), LLM08 Vector & Embedding Weaknesses (เฉพาะ​ถ้า retrieval ของ #16 ใช้ embedding), LLM09 Misinformation (ทับ​กับ #13 — เก็บ​สั้น), LLM10 Unbounded Consumption (cost/DoS/loop-bombing โดย​เจตนา​ร้าย — โยง cap ของ #17 เป็น containment)

มาตรฐาน​อื่น​เป็น backbone เบาๆ ที่​บอกว่า​ต้อง​กลัว​อะไร​และ​เรียก​มัน​ว่า​อะไร ไม่ใช่​ตัว​รักษา​ความ​ปลอดภัย​เอง: NIST AI RMF จัด​ระเบียบ​งาน​ความ​เสี่ยง​เป็น GOVERN / MAP / MEASURE / MANAGE (S19/S20); EU AI Act Art. 15 (S21) ระบุ​ว่า​ความ​ทนทาน​ต่อ​การ​โจมตี (adversarial robustness) เป็น​ข้อ​กำหนด ทาง​กฎหมาย ของ​ระบบ high-risk ไม่ใช่​ทาง​เลือก; MITRE ATLAS (S24) คือ playbook ของ​ฝ่าย​โจมตี / เลนส์ red-team มาตรฐาน​คือ​แผนที่ วิศวกรรม​คือ​ภูมิประเทศ — code guardrail ที่​คุณ​จะ​สร้าง​ต่างหาก​ที่​ลด​ความ​เสี่ยง​จริง

honesty spine: ไม่มี​วิธี​แก้​แบบ​กัน​ได้​ร้อย​เปอร์เซ็นต์

หัวข้อ​ที่​มีชื่อ​ว่า “honesty spine: ไม่มี​วิธี​แก้​แบบ​กัน​ได้​ร้อย​เปอร์เซ็นต์”

ก่อน​สร้าง guard สัก​บรรทัด ต้อง​ตั้ง​ความ​จริง​ที่​สำคัญ​ที่สุด​ของ​คอร์ส​ให้​ตรง​ก่อน — และ​คอร์ส​นี้​จะ​พูด​ซ้ำ​ใน​ทุก​บท: prompt injection ไม่มี​วิธี​ป้องกัน​แบบ​กัน​ได้​สนิท guard ลด ความ​เสี่ยง​และ หด blast radius แต่​ไม่ กำจัด ภัย นี่​ไม่ใช่​ความเห็น​ของ​เรา — เป็น​คำ​ของ​สาม​ต้นทาง​หลัก​ที่​ลง​วัน​ที่​กำกับ และ​เรา​อ้าง​แบบ verbatim ไม่ใช่​เรียบเรียง:

OWASP LLM01 เอง (S3):

“Given the stochastic influence at the heart of the way models work, it is unclear if there are fool-proof methods of prevention for prompt injection.”

Simon Willison (S10):

“we still don’t know how to 100% reliably prevent this from happening.”

Anthropic วัด​การ​ป้องกัน​ที่​ดี​ที่สุด​ของ​ตัวเอง​บน browser use แล้วสรุปตรงๆ (S14):

“prompt injection is far from a solved problem”“A 1% attack success rate — while a significant improvement — still represents meaningful risk. No browser agent is immune to prompt injection.”

ถ้า​แม้แต่​การ​ป้องกัน​ที่​ดี​ที่สุด​ยัง​เหลือ ~1% ที่​ลอด​ได้ และ 1% นั้น​คือ “meaningful risk” คำถาม​เชิง​ออกแบบ​ก็​เปลี่ยน​ไป​ทั้งหมด — จาก “จะ แก้ injection ยังไง” (แก้​ไม่​ได้) เป็น “จะ​วาง​กี่​ชั้น​ให้​แต่ละ​ชั้น ลด ความ​เสี่ยง และ​เมื่อ​ชั้น​หนึ่ง​พัง ชั้น​อื่น กัน ความ​เสียหาย​ไว้​ยังไง” นั่น​คือ Defense in DepthDefense in Depthการ​วาง​หลาย​ชั้น guard ที่​แต่ละ​ชั้น 'ไม่​สมบูรณ์' แต่​รวม​กัน​แล้วกันภัย​ส่วน​ใหญ่​ได้ — Anthropic: 'individually imperfect, but in unison combine to prevent most threats' และ 'by layering these strategies, you create a robust defense' ทั้ง​คอร์ส​คือ​รูป​นี้: input guard → output guard/redactor → least-privilege + approval → data-leak defense ประกอบ​เป็น guard ชั้น​เดียว​ใน capstone ไม่มี​ชั้น​ใด​ชั้น​เดียว 'แก้' injection — ปิด​ท้าย​ทุกบทว่า 'security is a process, not a checkbox'Architecture — Anthropic อธิบาย​รูป​นี้​ว่า​เป็นการ​วาง​หลาย​ชั้น​ที่ (S15):

“individually imperfect, but in unison combine to prevent most threats.”

ทั้ง​คอร์ส​คือ​รูป​นี้: input guard (บท4) + output guard/redactor (บท5) + least-privilege + approval gate (บท6) + data-leak defense (บท7) ประกอบ​เป็น guard ชั้น​เดียว​ใน capstone (บท8) ที่​ปิด​ท้าย​ด้วย​การ​โชว์ residual attack ที่​ยัง​ลอด​เข้า​มา​ได้ — แต่​ถูก กัน ไว้ ไม่มี​ชั้น​ไหน​ชั้น​เดียว “แก้” injection ได้ และ​คอร์ส​จะ​ไม่​แกล้ง​ทำ​เป็น​ว่า​มัน​ทำได้

กติกา​สำคัญ​ที่​จะ​จ่าย​คืน​ใน​บท4/5/8: guard คือ wrapper ไม่ใช่​ประโยค​ใน prompt

หัวข้อ​ที่​มีชื่อ​ว่า “กติกา​สำคัญ​ที่​จะ​จ่าย​คืน​ใน​บท4/5/8: guard คือ wrapper ไม่ใช่​ประโยค​ใน prompt”

นี่​คือ mental model ที่​ต้อง​ปัก​ตั้งแต่​บท​แรก เพราะ​ทุก​บท​ลงมือ​จะ​หมุน​รอบ​มัน: GuardrailGuardrail⚠️ guardrail คือ WRAPPER รอบ​การ​เรียก model 'ไม่ใช่' ข้อความ​ใน system prompt — เป็น​ชั้น DelegatingChatClient (pipeline) ที่​รัน code deterministic ก่อน/หลัง​เทิร์น การ​เขียน 'ignore malicious content' ใน prompt คือ steering ซึ่ง bypass ได้​โดย​ธรรมชาติ (S3/S7) การ​เรียง​ลำดับ pipeline คือ​การ​ตัดสิน​ใจ​ด้าน​ความ​ปลอดภัย​ที่ load-bearing: guard ห่อ OUTSIDE UseFunctionInvocation() เพื่อ validate input ก่อน loop จะ dispatch tool และ scrub output หลัง loop จบ guard 'ลด' ความ​เสี่ยง ไม่ 'กำจัด' ภัยArchitecture คือ wrapper รอบ​การ​เรียก model — code deterministic ที่​รัน​ก่อน/หลัง​เทิร์น ไม่ใช่ “ย่อหน้า​ใน system prompt”

ทำไม​ความ​ต่าง​นี้​ถึง​เป็น​เรื่อง​คอ​ขาด​บาด​ตาย? เพราะ​การ​เขียน “อย่า​ทำ​ตาม​คำ​สั่ง​ที่​แฝง​มา​ใน​เนื้อหา” ลงใน system prompt คือ steering — และ steering ถูก bypass ได้​โดย​ธรรมชาติ (มัน​ก็​แค่​ข้อความ​อีก​ชิ้น​ที่ model ชั่ง​น้ำหนัก​เทียบ​กับ injection payload) OWASP LLM07 ถึง​กับ​บอกว่า system prompt ไม่​ควร​ถูก​ถือ​เป็น​ความ​ลับ​หรือ​ใช้​เป็น security control guard ของ​จริง​ต้อง​รัน​ใน code ที่​ผลลัพธ์​แน่นอน ไม่​ขึ้น​กับ​อารมณ์​ของ model

ใน​ทาง​เทคนิค guard คือ​ชั้น DelegatingChatClient ที่​ห่อ IChatClient — และ การ​เรียง​ลำดับ pipeline คือ​การ​ตัดสิน​ใจ​ด้าน​ความ​ปลอดภัย​ที่ load-bearing: guard ต้อง​ห่อ นอก UseFunctionInvocation() เพื่อ validate input ก่อน loop จะ dispatch tool ได้ และ scrub output หลัง loop จบ บท​นี้​ยัง​ไม่​เขียน code — แค่​ปัก​ธง​ว่า “guard = wrapper, ลำดับ​สำคัญ” ไว้​ให้​บท4 (input guard), บท5 (output guard), และ​บท8 (ประกอบ​ทั้ง pipeline) มา​จ่าย​คืน

สถานะ package (พูด​ครั้ง​เดียว​ที่​นี่)

guard ทุก​ตัว​ใน​คอร์ส​นี้​ขี่​อยู่​บน​สะพาน​เชื่อม​เดิม​จาก #15 และ​แบก invariant เดิม​มา​ครบ: header เป็น x-api-key ไม่ใช่ Authorization: Bearer · anthropic-version: 2023-06-01 เสมอ · ห้าม​ส่ง temperature / top_p / top_k · model id เป็น alias เปล่า claude-opus-4-8 (ลง​วัน​ที่​กำกับ ไม่​ต่อ suffix) · อ่าน​คำ​ตอบ​ผ่าน content[] (raw) หรือ ChatResponse.Messages[].Contents[] ที่ match ด้วย FunctionCallContent / FunctionResultContent ไม่ใช่ ChatResponse.Text (corollary ด้าน​ความ​ปลอดภัย: redactor ต้อง​วน​ทั่ว Contents[] เพราะ secret ซ่อน​ใน tool-call argument / tool result ได้ ไม่ใช่​แค่ .Text)

version package: Claude ยัง​อยู่​หลัง NuGet Anthropic ตัว​ทางการ​ผ่าน AsIChatClient — version 12.8.0 เป็น beta (“breaking changes may occur in minor or patch releases”) ให้ pin ไว้ · Microsoft.Extensions.AI 10.x เป็น GA สอน​เป็น layer ที่​ทนทาน · ส่วน native approval surface (ApprovalRequiredAIFunction ฯลฯ ที่​บท6 ใช้) ใหม่​กว่า​นั้น — re-pin กับ version ที่​ติดตั้ง​จริง​ตอน build

คอร์ส​นี้​ต้อง​พิสูจน์​ว่า​มัน​มี​ที่​ยืน​ของ​ตัวเอง ไม่ใช่​การ​เล่า​ซ้ำ ขีด​เส้น​ให้​ชัด​สาม​เส้น:

  • vs #13 (evals) — #13 วัด​คุณภาพ ของ agent บน input ที่​ปกติ​ดี (benign) #18 ป้องกัน จาก​ศัตรู​ที่​ลงมือ​จริง สะพาน​เชื่อม​คือ​คำ​ของ Anthropic ว่า “red-team your own agent” — การ​ทดสอบ​เชิง​ปฏิปักษ์​ผลิต เคส​โจมตี ไม่ใช่ คะแนน​คุณภาพ (คอร์ส​นี้​ส่ง corpus เคส​โจมตี​ต่อ​ให้ harness ของ #13 ไป​วัด ไม่​สอน scoring ซ้ำ)
  • vs #14 (designing MCP servers) — #14 รักษา protocol MCP / ตัว tool-server (เช่น tool-poisoning ที่​ซ่อน​คำ​สั่ง​ใน tool metadata) #18 คือ agent-level I/O defense ที่​ต้อง​ยืน​ได้ แม้ tool/server จะ​เชื่อถือ​ได้​เต็ม​ร้อย — เคส Invariant GitHub-MCP (S11) พิสูจน์​ว่า “this vulnerability does not require the MCP tools themselves to be compromised” คือ​แม้ tool สะอาด​หมดจด แต่ data ที่​มัน​คืน​มา​ก็​เป็น​ผู้​โจมตี​ได้
  • vs #17 (robustness) — รูปทรง wrapper เดียวกัน แต่ threat model ตรง​ข้าม: #17 รักษา​จาก​ความ​ล้มเหลว โดย​บังเอิญ (timeout, retry, ดับเบิล​คลิก) #18 รักษา​จาก​การ​โจมตี โดย​เจตนา (hijack, injection-driven refund, replay) จะ reuse idempotency key + refund cap ของ #17 — แต่​ใช้​มัน​เป็น adversarial containment ไม่ใช่​แค่​กู้​จาก​อุบัติเหตุ
flowchart TD
  ADV["ผู้โจมตี (adversary)<br/>ไม่ใช่ผู้ใช้ที่ให้ความร่วมมืออีกต่อไป"]
  ADV -->|"direct injection<br/>คราฟต์ข้อความสั่งทับ instruction"| IN["input ของผู้ใช้"]
  ADV -->|"indirect injection<br/>poisoned Order note ใน data"| DATA["ผลที่ tool คืนมา<br/>getOrder · getDeliveryStatus"]

  subgraph AGENT["agent Order — attack surface ใหม่ (ครบ lethal trifecta)"]
    PRIV["อ่าน private data<br/>ข้อมูลลูกค้าจริง"]
    ACT["ลงมือทำจริง / ส่งออก<br/>issueRefund · outbound"]
    PRIV --> ACT
  end
  IN --> AGENT
  DATA --> AGENT

  subgraph DID["defense-in-depth — แต่ละชั้นไม่สมบูรณ์ รวมกันจึงลดความเสี่ยง"]
    G1["ชั้น 1 · input guard<br/>รักษา input ก่อน dispatch (บท4)"]
    G2["ชั้น 2 · output guard + redactor<br/>รักษา output ก่อนไหลออก (บท5)"]
    G3["ชั้น 3 · least privilege + approval gate<br/>หด blast radius (บท6)"]
    G4["ชั้น 4 · data-leak defense<br/>กัน exfiltration (บท7)"]
    G1 --> G2 --> G3 --> G4
  end
  AGENT -. ห่อรอบทั้งก้อนด้วย .-> DID

  classDef danger fill:#b91c1c,stroke:#7f1d1d,color:#f8fafc;
  classDef guard fill:#475569,stroke:#1e293b,color:#f8fafc;
  class ADV,PRIV,ACT danger;
  class G1,G2,G3,G4 guard;

คำ​บรรยาย​ภาพ: ผู้​โจมตี​เข้าถึง agent ได้​สอง​ทาง — direct injection ผ่าน input ของ​ผู้​ใช้ และ indirect injection ที่​ฝัง​มา​กับ data ที่ tool ที่​เชื่อถือ​ได้​คืน​มา สาม​ช่อง​สี​แดง​คือ attack surface: agent อ่าน private data และ​ลงมือ​ทำ​จริง​ได้ (ครบ lethal trifecta) สี่​ช่อง​สี​เทา​เข้ม​คือ​ชั้น guard ของ defense-in-depth ที่​จะ​ห่อ​รอบ agent ที​ละ​บท — ไม่มี​ชั้น​ใด​ชั้น​เดียว​สมบูรณ์ แต่​ซ้อน​กัน​แล้ว​ลด​ความ​เสี่ยง​และ​หด blast radius

สาม​คอร์ส​ก่อนหน้า​ให้ agent ความ​สามารถ, ความ​รู้, และ​ความ​อยู่​รอด​จาก​อุบัติเหตุ — ทั้งหมด​ภาย​ใต้​สมมติฐาน​ว่า​โลก​เป็น​มิตร บท​นี้​ลบ​สมมติฐาน​นั้น: agent Order คือ attack surface ใหม่​เพราะ​มัน​ครบ lethal trifecta พอดี, OWASP LLM Top 10 คือ​แผนที่​ภัย, และ​ความ​จริง​ที่​ตั้ง​ไว้​ตั้งแต่​ต้น — ที่ OWASP, Willison, และ Anthropic พูด​ตรง​กัน — คือ prompt injection ไม่มี วิธี​แก้​แบบ​กัน​ได้​สนิท ทางออก​จึง​เป็น defense-in-depth: หลาย​ชั้น​ที่​แต่ละ​ชั้น​ไม่​สมบูรณ์ รวม​กัน​จึง​กันภัย​ส่วน​ใหญ่​และ​กัน​ความ​เสียหาย​ที่​เหลือ บท​หน้า​เรา​จะ​ลง​ลึก​ที่​ภัย​ตัว​แรก​และ load-bearing ที่สุด — prompt injection ทั้ง​แบบ direct และ indirect กับ lethal trifecta ที่​ทำให้​มัน​อันตราย

ความ​ปลอดภัย​คือ​กระบวนการ ไม่ใช่ checkbox — ไม่มี​บท​ไหน​ใน​คอร์ส​นี้​ที่​จะ​บอกว่า guard ตัว​ใด​ตัว​หนึ่ง “แก้” injection ได้ และ​บท​นี้​ตั้ง precedent นั้น​ไว้​ให้​ทั้ง​คอร์ส


🔗 อ้างอิง​ต้นทาง​ของ​บท​นี้

บท​นี้​อิง​ต้นทาง​ที่​ลง​วัน​ที่​กำกับ อ่าน​ต่อ​ได้​โดยตรง:

เช็กความเข้าใจ — บทที่ 1

ข้อ 1 / 3

ทำไม agent Order ถึงเป็น 'attack surface ใหม่' ในมุมของ threat model บทนี้?