Security

ปกป้อง Agentic SOC: Prompt Injection, การปนเปื้อน Log และภัยคุกคามภายในรูปแบบใหม่

ทุกฟิลด์ใน security log ที่ผู้โจมตีสามารถกำหนดค่าได้ คือฟิลด์ที่ผู้โจมตีสามารถ "เขียน" ได้ ไม่ว่าจะเป็นชื่อโฮสต์ ชื่อผู้ใช้ DNS query ค่า User-Agent หรือแม้แต่ command line — เรื่องนี้ไม่ใช่เรื่องใหม่ นี่คือเหตุผลที่ security log ถูกปฏิบัติเสมือนหลักฐาน ไม่ใช่ input ที่เชื่อถือได้

สิ่งที่ใหม่คือ agentic SOC วันนี้อ่านฟิลด์เดียวกันนี้ ใส่เข้าไปใน context window ของ LLM แล้วให้โมเดลใช้เหตุผลกับมัน — และเริ่มลงมือทำตามข้อสรุปนั้นมากขึ้นเรื่อยๆ การเปลี่ยนจาก "log คือหลักฐาน" ไปเป็น "log คือ prompt" คือจุดที่คู่มือ "สร้าง agentic SOC" ส่วนใหญ่มักข้ามไป เราเคยเขียนคู่มือแบบนั้นเองใน Agentic AI in SOC Workflows ซึ่งอธิบายสถาปัตยกรรม triage/investigation/response ไว้อย่างละเอียด บทความนี้คือส่วนที่ตามมาหลังจากคุณสร้างระบบนั้นแล้ว: จะป้องกันไม่ให้สิ่งที่คุณเพิ่งมอบสิทธิ์เรียกใช้เครื่องมือให้ ถูกหลอกให้ใช้สิทธิ์นั้นย้อนกลับมาทำร้ายคุณเองได้อย่างไร

ทำไมนี่ถึงต่างจากการป้องกัน Chatbot

Prompt injection ต่อ chatbot ที่ลูกค้าใช้งานเป็นเรื่องน่าอาย แต่ prompt injection ต่อ agent ที่มีอำนาจสั่ง containment คือ "เหตุการณ์ความปลอดภัย" จริง

ความต่างอยู่ที่ "ความเป็นอิสระ" ที่มาคู่กับ "การกระทำ" AI copilot ที่ถูกหลอกให้พูดผิดจะสร้างข้อความที่ผิด — มนุษย์ยังต้องเป็นคนลงมือทำตาม แต่ agentic SOC ที่ถูกหลอกสามารถปิด case จริง ระงับ alert จริง หรือสั่ง containment ต่อเป้าหมายที่ผิดได้จริง งานวิจัยปี 2026 พูดถึงเรื่องนี้ตรงไปตรงมา: prompt injection ในระบบ agentic ไม่ได้แค่เปลี่ยนผลลัพธ์ แต่สามารถข้าม policy ของระบบ ใช้เครื่องมือที่ระบบไว้วางใจในทางที่ผิด และรั่วไหลข้อมูลสำคัญออกไปได้โดยตรง สำหรับ SOC "การใช้เครื่องมือที่ไว้วางใจในทางที่ผิด" อาจหมายถึง agent สั่งให้ SOAR platform เพิ่ม IP เข้า whitelist หรือระบุการบุกรุกจริงว่าเป็น false positive

Security telemetry ทำให้ปัญหานี้แย่กว่า agentic deployment อื่นๆ เกือบทุกแบบ ด้วยเหตุผลเชิงโครงสร้างเดียว: ข้อมูลที่ป้อนให้ agent นั้นเป็นปฏิปักษ์โดยธรรมชาติ HTTP request URI, DNS name, email header, ชื่อผู้ใช้ที่พยายาม login — ล้วนเป็นฟิลด์ที่ผู้โจมตีเลือกได้ก่อนที่ infrastructure ของคุณจะบันทึกมันด้วยซ้ำ เมื่อข้อมูลนั้นถึง SIEM ผู้โจมตีมีโอกาสฝังบางสิ่งลงไปแล้ว หากขั้นตอน context-assembly ของ agent ดึงฟิลด์ดิบเหล่านั้นเข้าไปอยู่ใน context window เดียวกับคำสั่งปฏิบัติงานของมัน คุณก็สร้างเงื่อนไขที่ prompt injection ต้องการพอดี

รูปแบบการโจมตี 3 แบบที่ควรวางแผนรับมือ

Log-field injection ผู้โจมตีสร้างชื่อโฮสต์ ชื่อผู้ใช้ หรือ command-line argument ที่อ่านคล้ายคำสั่งมากกว่าค่าข้อมูล — เช่น ฟิลด์ปลอมที่บอกให้ผู้อ่านจัดประเภทเหตุการณ์ปัจจุบันใหม่เป็น "ไม่เป็นอันตราย" หากฟิลด์นั้นถูกนำไปต่อเข้ากับ prompt ที่ Investigation Agent ใช้ให้เหตุผลโดยตรง โมเดลอาจแยกแยะไม่ได้อย่างน่าเชื่อถือระหว่าง "ข้อมูลที่บรรยายการโจมตี" กับ "คำสั่งเกี่ยวกับวิธีบรรยายมัน"

การแพร่กระจายข้าม agent ใน pipeline แบบ multi-agent — Triage → Investigation → Response ตามรูปแบบที่คู่มือเดือนเมษายนอธิบายไว้ — คำตัดสินที่ปนเปื้อนเพียงครั้งเดียวในขั้น Triage จะไม่หยุดอยู่แค่นั้น มันจะกลายเป็น input ให้ Investigation Agent ซึ่งจะส่งข้อสรุปของตัวเองต่อไปยัง Response Agent การ injection ที่สำเร็จตั้งแต่ต้นสายสามารถลุกลามกลายเป็นการกระทำที่ผิดพลาดในขั้นปลาย และเพราะแต่ละ agent เชื่อผลลัพธ์ที่มีโครงสร้างของ agent ก่อนหน้า การ injection จึงห่างจากฟิลด์ log ต้นเหตุไปหลายขั้น ทำให้ยากมากที่จะสืบย้อนกลับตอนทบทวนเหตุการณ์

การใช้เครื่องมือและปัญหาแหล่งที่มาผิดวัตถุประสงค์ หาก agent สามารถเขียนบันทึก case ปิด alert หรือสั่ง response ด้วยอำนาจเดียวกับนักวิเคราะห์มนุษย์ และผลลัพธ์ของมันไม่ถูกระบุอย่างชัดเจนว่าเป็นผลจาก agent คุณก็สร้างปัญหาชั้นที่สองซ้อนทับปัญหาแรก: แม้แต่การตัดสินใจที่ถูกต้องของ agent ก็ตรวจสอบย้อนหลังได้ยาก เพราะไม่มีทางบอกได้ทันทีว่าบันทึก case นั้นสะท้อนดุลยพินิจของมนุษย์หรือการอนุมานของโมเดล นี่คือช่องว่างด้าน governance ที่เกิดขึ้นได้แม้ไม่มีผู้โจมตีเข้ามาเกี่ยวข้องเลย

สร้างแนวป้องกันเข้าไปในระบบ

ทั้งหมดนี้ไม่ได้เป็นข้อโต้แย้งต่อ agentic SOC แต่เป็นข้อเสนอให้ปฏิบัติต่อขอบเขต context ของ agent เสมือนเป็น security control ไม่ใช่แค่รายละเอียดการ implement

แยกคำสั่งออกจากข้อมูลในเชิงโครงสร้าง ไม่ใช่แค่ตามธรรมเนียม system prompt ที่กำหนดบทบาทและข้อจำกัดของ agent ไม่ควรถูกสร้างด้วยการต่อฟิลด์ log ดิบเข้ากับข้อความชุดเดียวกับที่โมเดลอ่านเป็น "สิ่งที่ต้องทำ" ฟิลด์ที่ไม่น่าเชื่อถือควรอยู่ใน data block ที่แบ่งเขตชัดเจน ส่งให้โมเดลเป็นเนื้อหาที่ต้อง "ให้เหตุผลเกี่ยวกับ" ไม่ใช่ "ให้เหตุผลจาก"

ทำความสะอาดข้อมูลก่อนประกอบ context ไม่ใช่หลังจากนั้น ตัดอักขระควบคุม จำกัดความยาวฟิลด์ และปฏิเสธหรือตัดทอนค่าที่ยาวผิดปกติก่อนที่จะถึง prompt — ชื่อโฮสต์ที่ถูกต้องไม่มีทางยาว 4,000 ตัวอักษร และไม่จำเป็นต้องเก็บไว้ครบทุกตัวอักษรเพื่อให้มีประโยชน์กับโมเดล

ตั้งค่าเครื่องมือทุกตัวเป็น read-only เป็นค่าเริ่มต้น Investigation Agent ควรสามารถ query threat intel feed ดึง event ที่เกี่ยวข้อง และตรวจสอบ asset inventory ได้โดยไม่ต้องมีสิทธิ์เขียนใดๆ เครื่องมือที่เขียนหรือลงมือกระทำ — ปิด case บล็อก IP แยกโฮสต์ — ต้องอยู่หลัง policy layer ที่ชัดเจน แบบตาราง RESPONSE_POLICY ที่คู่มือเดือนเมษายนอธิบายไว้ เพียงแต่ตอนนี้ threshold ความมั่นใจเป็นทั้งขอบเขตความปลอดภัยและปุ่มปรับ automation ไปพร้อมกัน

บังคับให้ output มีโครงสร้างและถูกจำกัด agent ที่คืนข้อความอิสระพร้อมขั้นตอนถัดไปฝังอยู่ในนั้น ให้พื้นที่ผู้โจมตีมากกว่า agent ที่ถูกจำกัดให้คืนเฉพาะ schema คงที่ — verdict, คะแนนความมั่นใจ, ฟิลด์ reasoning — ที่ชั้น deterministic ตรวจสอบและ validate ก่อนที่สิ่งใดในขั้นถัดไปจะลงมือทำ

ให้ระดับความสำคัญของ asset มีน้ำหนัก ไม่ใช่แค่คะแนนความมั่นใจ asset ที่สำคัญควรต้องได้รับการยืนยันจากมนุษย์สำหรับการกระทำที่เปลี่ยนสถานะ ไม่ว่า agent จะมั่นใจแค่ไหน คำตอบที่มั่นใจสูงแต่ผิดบน critical host เป็นผลลัพธ์ที่แย่กว่าคำตอบที่มั่นใจต่ำแต่ถูกต้องที่ถูก escalate ไปโดยไม่จำเป็น

ระบุแหล่งที่มาแบบไม่สามารถแก้ไขได้ ณ จุดที่สร้างขึ้น บันทึก case, verdict และการกระทำทุกอย่างที่ agent สร้างขึ้นควรถูกแท็กว่าเป็นผลจาก agent ใน audit log แบบ append-only แยกจากสิ่งที่นักวิเคราะห์มนุษย์เขียน นักวิเคราะห์สามารถทบทวนและ override ได้ แต่ไม่ควรแก้ไขประวัติแบบเงียบๆ จนลบร่องรอยว่าการตัดสินใจมาจากที่ใด

เฝ้าระวัง agent เหมือนที่คุณเฝ้าระวังทุกอย่าง tool call, รูปแบบ query และความถี่การกระทำของ agent เองคือ telemetry ป้อนเข้า SIEM เดียวกับที่ agent กำลังปกป้องอยู่ และแจ้งเตือนเมื่อพฤติกรรมของ agent เองผิดปกติ — การเพิ่มขึ้นผิดปกติของการกระทำ "ปิด case" หรือ query ที่แตะ asset นอกขอบเขตปกติ คือสัญญาณที่ควรตรวจสอบด้วยตัวมันเอง

Red-team pipeline ก่อนใช้งานจริง ฝัง payload ทดสอบลงในฟิลด์ log ใน staging environment — ชื่อโฮสต์หรือชื่อผู้ใช้ที่ออกแบบให้ดูเหมือนคำสั่ง — แล้วยืนยันว่า pipeline ปฏิบัติต่อมันเป็นข้อมูลเฉื่อย นี่เป็นสิ่งที่ทำครั้งเดียวในราคาถูก แต่ข้ามไปแล้วแพงมาก

flowchart TD
    A["ฟิลด์ที่ผู้โจมตีควบคุม\nhostname username URI UA string"] --> B["Log ingestion\nWazuh / SIEM"]
    B --> C["ขอบเขตทำความสะอาด\nตัดอักขระควบคุม จำกัดความยาว"]
    C --> D["Data block ที่มีโครงสร้าง\nแบ่งเขตชัดเจน ไม่ใช่คำสั่ง"]
    D --> E["Agent ให้เหตุผล\nsystem prompt คงที่ เครื่องมือ read-only เริ่มต้น"]
    E --> F["Output ที่มีโครงสร้าง\nverdict ความมั่นใจ reasoning"]
    F --> G{"ตรวจสอบ policy\nความสำคัญ asset threshold ความมั่นใจ"}
    G -->|"อนุมัติอัตโนมัติ"| H["ดำเนินการกระทำ\nบันทึกว่ามาจาก agent"]
    G -->|"ส่งต่อ escalate"| I["นักวิเคราะห์มนุษย์ทบทวน"]
    H --> J["Audit log ที่แก้ไขไม่ได้"]
    I --> J

เอกสาร Governance ไม่ใช่แค่งานเอกสารทางเลือก

ทั้งหมดข้างต้นคือ technical control สิ่งที่ต้องอยู่เหนือชั้นนั้นคือนโยบายลายลักษณ์อักษรที่กำหนดไว้ล่วงหน้าว่า alert ประเภทใดที่ agent สามารถลงมือได้เองโดยอิสระ ประเภทใดต้องผ่านการทบทวนจากนักวิเคราะห์ และประเภทใดที่ต้องได้รับการอนุมัติจากผู้บริหารระดับสูงเสมอไม่ว่าคะแนนความมั่นใจจะเป็นเท่าใด นี่ไม่ใช่ compliance theater — แต่คือสิ่งที่เปลี่ยน "agent ทำผิดพลาด" จากคำถามความรับผิดที่ไม่มีขอบเขต ให้กลายเป็นเส้นทางการตัดสินใจที่มีเอกสารรองรับและป้องกันตัวเองได้

ในบริบทไทย ประเด็นนี้เชื่อมโยงตรงกับข้อกำหนดของ PDPA เรื่องความรับผิดชอบต่อการประมวลผลข้อมูลส่วนบุคคลอัตโนมัติ — หาก agent ประมวลผลข้อมูลส่วนบุคคลที่ปรากฏใน log (เช่น ชื่อผู้ใช้ IP หรือ session ที่โยงถึงตัวบุคคล) องค์กรยังต้องแสดงได้ว่ามีมาตรการควบคุมและตรวจสอบย้อนกลับการตัดสินใจอัตโนมัตินั้น และสำหรับองค์กรที่อยู่ภายใต้ พ.ร.บ. การรักษาความมั่นคงปลอดภัยไซเบอร์ มาตรา 59 ซึ่งกำหนดหน้าที่รายงานเหตุการณ์สำหรับโครงสร้างพื้นฐานสำคัญ หน้าที่รายงานนั้นไม่ได้หายไปเพียงเพราะการตัดสินใจเบื้องต้นมาจาก AI agent — เอกสาร governance และ audit log ที่ไม่สามารถแก้ไขได้ คือสิ่งที่ทำให้องค์กรตอบคำถามของหน่วยงานกำกับดูแลได้อย่างมั่นใจ

สิ่งที่ควรจัดลำดับความสำคัญ

  1. ตรวจสอบโค้ด context-assembly ก่อนเป็นอันดับแรก ก่อนเพิ่มความสามารถใดๆ ให้หาทุกจุดที่ฟิลด์ log ดิบถูกต่อเข้ากับ prompt แล้วเพิ่มขอบเขตทำความสะอาด
  2. เปลี่ยนไปใช้ structured output หากยังไม่ได้ทำ ข้อความอิสระจาก agent คือรูปแบบ output ที่มีความเสี่ยงสูงที่สุดที่คุณจะปล่อยใช้งานจริง
  3. เขียนนโยบาย escalation ก่อนขยายสิทธิ์เครื่องมือ threshold ความมั่นใจเป็นจุดเริ่มต้น ไม่ใช่เส้นชัย — ความสำคัญของ asset ควรมีน้ำหนักเหนือกว่า
  4. ติดตั้งระบบให้ agent เป็นสิ่งที่ถูกเฝ้าระวัง ไม่ใช่แค่เครื่องมือเฝ้าระวัง
  5. กำหนดตารางทดสอบ injection เหมือนที่คุณกำหนดตาราง penetration test — ทำซ้ำเป็นระยะ ไม่ใช่ทำครั้งเดียว

คำถามที่พบบ่อย

นี่หมายความว่า agentic SOC เสี่ยงเกินกว่าจะใช้งานจริงหรือไม่
ไม่ใช่ — มันหมายความว่าขอบเขต context ของ agent ต้องการวินัยทางวิศวกรรมเช่นเดียวกับ trust boundary อื่นใดใน security stack ขององค์กรที่ใช้ Wazuh, Shuffle และ DFIR-IRIS อยู่แล้ววันนี้ ไม่จำเป็นต้องเลิกใช้ความสามารถแบบ agentic แต่ต้องสร้างแนวป้องกันเหล่านี้เข้าไปตั้งแต่ต้น แทนที่จะเพิ่มทีหลังหลังเกิดเหตุการณ์

นี่เหมือนกับการรักษาความปลอดภัย LLM chatbot หรือไม่
เกี่ยวข้องกัน แต่เดิมพันสูงกว่า กรณีเลวร้ายที่สุดของ chatbot คือ output ที่ผิด แต่ agent ที่มีอำนาจเรียกใช้เครื่องมือใน SOC สามารถลงมือทำจริงได้ — แนวป้องกันต้องตั้งสมมติฐานว่าผลลัพธ์นั้นเป็นไปได้ ไม่ใช่แค่ว่าข้อความอาจผิด

simpliSOC เข้ามาเกี่ยวข้องตรงไหน
Middleware FastAPI ของเราที่ชื่อ soc-integrator ตั้งค่าเครื่องมือของ agent ทุกตัวเป็น read-only เป็นค่าเริ่มต้น บังคับใช้ schema verdict ที่มีโครงสร้างแทนที่จะเป็น output แบบอิสระ และเขียนเนื้อหาที่มาจาก agent ลงใน audit trail ที่แก้ไขไม่ได้และระบุแหล่งที่มาชัดเจนใน DFIR-IRIS — แนวป้องกันในบทความนี้ไม่ใช่ของเสริม แต่เป็นวิธีที่ pipeline ถูกสร้างขึ้นมาตั้งแต่ต้น


ต้องการความเห็นที่สองเกี่ยวกับการเปิดใช้งาน agentic SOC หรือความช่วยเหลือในการสร้างแนวป้องกันเหล่านี้เข้าไปใน Wazuh + Shuffle + IRIS stack ที่มีอยู่แล้ว? ติดต่อ Simplico →