
กัน prompt injection ใน RAG: คำสั่งว่า “อย่าเชื่อเอกสาร” ยังไม่พอ

การลดความเสี่ยง prompt injection ใน RAG ต้องวางขอบเขตหลายชั้น ตั้งแต่รับเอกสาร ค้นคืน ส่งบริบทให้โมเดล ไปจนถึงเรียกเครื่องมือและเขียน memory ข้อความกำชับโมเดลให้ระวังเอกสารช่วยกำหนดพฤติกรรมได้ แต่ใช้แทนการตรวจสิทธิ์และการบังคับนโยบายด้วยโค้ดไม่ได้ แนวทาง OWASP ระบุว่า RAG ไม่ได้ขจัดช่องโหว่นี้ และแนะนำให้แยกเนื้อหาภายนอก จำกัดสิทธิ์ และให้มนุษย์อนุมัติการกระทำที่มีความเสี่ยงสูง
ปัญหาเกิดเมื่อระบบดึงเว็บไซต์ ไฟล์ หรือส่วนข้อความจากดัชนีมาเป็นข้อมูลประกอบคำตอบ แล้วโมเดลตีความคำสั่งที่ฝังอยู่ในข้อมูลนั้นเป็นคำสั่งให้เปลี่ยนงาน การโจมตีลักษณะนี้เข้ามาทางแหล่งภายนอกได้ แม้ผู้ใช้จะถามคำถามตามปกติ ระบบจึงต้องตัดสินใจเองว่าใครอ่านเอกสารใดได้ ข้อมูลส่วนไหนใช้ตอบคำถามได้ และการกระทำใดต้องถูกปฏิเสธหรือรออนุมัติ
วาดเส้นทางโจมตีก่อนเลือกมาตรการ
เริ่มจากเส้นทางที่ข้อมูลเดินจริงในแอป: แหล่งเอกสารเข้าสู่กระบวนการรับเข้า ถูกแปลงและสร้างดัชนี ถูกค้นเป็นส่วนข้อความ แล้วส่งให้โมเดลสร้างคำตอบหรือเลือกเรียกเครื่องมือ ระบุให้ได้ว่าใครควบคุมเนื้อหาในแต่ละจุด และจุดใดเปลี่ยนข้อมูลที่อ่านได้ให้กลายเป็นการกระทำที่มีผลต่อระบบอื่น แบบจำลองภัยคุกคามที่หยุดอยู่แค่ช่องพิมพ์คำถามจะพลาดทางเข้าที่ RAG เพิ่มเข้ามา
แผนความปลอดภัยของ Microsoft แยกการโจมตีผ่านคำถามโดยตรงออกจากการโจมตีทางเว็บไซต์หรือไฟล์ และแสดงเส้นทางข้อมูลของแอปที่ค้นข้อมูลก่อนส่งต่อให้โมเดล แนวทางเดียวกันครอบคลุมสิทธิ์ของบริการค้นหา ระบบปลายทาง และเครื่องมือที่เอเจนต์เรียกได้ เมื่อนำมาใช้กับระบบของตนเอง ควรระบุทั้งสิทธิ์อ่านข้อมูลและสิทธิ์ลงมือทำ เพราะผลเสียของคำตอบผิดต่างจากผลเสียของการส่งหรือแก้ข้อมูลจริง
สำหรับแต่ละแหล่ง ให้บันทึกเจ้าของ ผู้แก้ไขได้ วิธีนำเข้าดัชนี และกลุ่มผู้ใช้ที่มีสิทธิ์อ่าน จากนั้นไล่ต่อว่าโมเดลเห็นข้อความส่วนใด เห็นประวัติสนทนาหรือ memory ใด และมีเครื่องมืออะไรให้เรียก ข้อมูลนี้ทำให้เห็นจุดที่เนื้อหาจากบุคคลภายนอกอาจข้ามจากระดับข้อมูลอ้างอิงไปมีอำนาจเหนือขั้นตอนของแอป
ตัวอย่างสมมติคือแชตบอตฝ่ายบุคคลที่ค้นนโยบายภายในและส่งอีเมลได้ หากผู้แก้เอกสารนโยบายใส่ข้อความชักนำให้ส่งข้อมูลพนักงาน ความเสี่ยงมีทั้งการตอบผิด การเปิดข้อมูลเกินสิทธิ์ และการใช้เครื่องมือส่งข้อมูลออก ความเสียหายแต่ละแบบต้องหยุดคนละจุด: สิทธิ์ค้นคืนหยุดการเห็นข้อมูล สิทธิ์เครื่องมือหยุดการส่ง และขั้นอนุมัติหยุดการกระทำที่แม้ผ่านสิทธิ์พื้นฐานแล้วก็ยังมีผลสูง
แยกผู้โจมตีที่แก้เอกสารในคลังได้ออกจากผู้ที่ควบคุมเว็บเพจภายนอก ทั้งคู่ทำให้ข้อความปรากฏในผลค้นคืนได้ แต่หลักฐานที่ใช้ยืนยันแหล่งและขอบเขตสิทธิ์ต่างกัน คลังภายในต้องตรวจผู้แก้ไขและสถานะเอกสาร ส่วนเว็บภายนอกต้องพิจารณาแหล่งที่มา การเปลี่ยนแปลง และเหตุผลที่อนุญาตให้นำเนื้อหานั้นเข้าบริบท
คุมเอกสารตั้งแต่รับเข้าจนถึงค้นคืน
ชั้นรับเข้าควรเก็บที่มาของเอกสาร เจ้าของ ฉบับ เวลาแก้ไข และขอบเขตการอ่านไว้กับข้อมูลที่ใช้สร้างดัชนี การตัดเอกสารเป็นส่วนข้อความต้องพาข้อมูลสิทธิ์นี้ติดไปด้วย มิฉะนั้นผลค้นคืนอาจเหลือเพียงข้อความที่ตรงคำถาม แต่ไม่เหลือหลักฐานว่าผู้ถามมีสิทธิ์เห็นหรือไม่ การค้นพบเอกสารกับการได้รับอนุญาตให้อ่านเป็นคนละการตัดสินใจ
อย่าจัดเว็บเพจที่เพิ่งดึงมา ไฟล์ที่ผู้ใช้ส่ง และเอกสารที่องค์กรควบคุมไว้ในระดับความเชื่อถือเดียวกัน กำหนดแหล่งที่อนุญาตให้รับเข้าและวิธีตรวจการเปลี่ยนแปลงตามความสำคัญของข้อมูล หากเอกสารที่เคยผ่านการตรวจถูกแก้ไข การอ้างผลตรวจของฉบับเก่าไม่ช่วยประเมินข้อความฉบับใหม่
กระบวนการแปลงไฟล์เป็นข้อความก็เป็นจุดตรวจ เนื้อหาที่ซ่อนใน markup อักขระที่จัดรูปแบบผิดปกติ หรือข้อความที่ได้จากการแปลงไฟล์อาจปรากฏต่อโมเดลต่างจากที่คนอ่านเห็น การปรับอักขระให้เป็นรูปแบบมาตรฐาน การลบส่วนที่ไม่จำเป็น และการตรวจข้อความลักษณะสั่งงานช่วยลดพื้นที่โจมตีได้ แต่ผลว่าผ่านตัวกรองไม่ได้ยกระดับเอกสารให้เป็นคำสั่งที่เชื่อถือได้
คำแนะนำด้านข้อมูลและการค้นคืนของ Microsoft ระบุทั้งการติดตามแหล่งที่มา ดัชนีที่รับรู้สิทธิ์ การควบคุมระดับเอกสาร และการตรวจสิทธิ์เมื่ออ่านหรือเขียน memory สำหรับ RAG จุดบังคับที่สำคัญคือก่อนส่งส่วนข้อความให้โมเดล: ตรวจตัวตนผู้ถามและสิทธิ์ต่อเอกสารต้นฉบับ แล้วตัดผลที่ไม่มีสิทธิ์ออกจากบริบททั้งหมด
ตัวกรองสิทธิ์ต้องทำงานกับผลค้นคืนจริง ไม่ใช่พึ่งให้โมเดลปฏิเสธหลังจากอ่านข้อมูลไปแล้ว หากดัชนีรวมเอกสารหลายกลุ่ม ให้กำหนดขอบเขตค้นหาหรือกรองผลตามสิทธิ์ของคำขอนั้น และตรวจว่าข้อมูลสิทธิ์ของส่วนข้อความตรงกับเอกสารต้นทาง กรณีข้อมูลในดัชนีล่าช้ากว่าแหล่งต้นทาง ควรมีกติกาว่าจะหยุดใช้เอกสารหรือขอสิทธิ์จากแหล่งต้นทางซ้ำเมื่อใด
การเพิกถอนสิทธิ์ต้องครอบคลุมสำเนาในดัชนีและผลที่เก็บไว้ชั่วคราวด้วย ไม่เช่นนั้นผู้ใช้ที่หมดสิทธิ์อาจยังได้รับคำตอบจากข้อความฉบับเก่า นี่เป็นผลโดยตรงจากการแยกคลังเอกสารออกจากระบบค้นคืน: การลบสิทธิ์ในคลังเพียงแห่งเดียวไม่รับประกันว่าทุกสำเนาหยุดถูกเรียกใช้ทันที
ส่งตัวระบุเอกสาร ฉบับ และตำแหน่งส่วนข้อความไปพร้อมผลค้นคืน เพื่อให้ตรวจได้ว่าคำตอบอาศัยข้อมูลใด การแสดงแหล่งอ้างอิงแก่ผู้ใช้ช่วยตรวจข้อเท็จจริง แต่แหล่งอ้างอิงไม่ได้พิสูจน์ว่าเนื้อหาปลอดจากคำสั่งแฝง คำตอบที่อ้างเอกสารถูกต้องยังอาจเกิดจากเอกสารที่ผู้ใช้ไม่มีสิทธิ์อ่านได้ หากชั้นค้นคืนพลาด
แยกข้อมูลออกจากคำสั่งในบริบทของโมเดล
กฎของแอป คำขอของผู้ใช้ และข้อความที่ค้นคืนควรอยู่คนละส่วนพร้อมป้ายบอกที่มา เนื้อหาที่ค้นได้มีหน้าที่ให้ข้อเท็จจริงสำหรับตอบคำถาม แม้มันจะเขียนเหมือนคำสั่งระดับระบบหรืออ้างว่าตนมีอำนาจสูงกว่า ขอบเขตนี้ต้องคงอยู่กับผลจากเว็บ ไฟล์ และเครื่องมือทุกชนิดที่ถูกส่งกลับเข้าโมเดล
คำสั่งระดับระบบช่วยกำหนดบทบาทและขอบเขตงาน แต่โมเดลยังต้องอ่านข้อความภายนอกเพื่อทำงาน จึงมีโอกาสได้รับถ้อยคำที่พยายามเปลี่ยนบทบาทนั้น หากผลค้นคืนมีข้อความขอให้เปิดเผยข้อมูล เปลี่ยนผู้รับ หรือข้ามขั้นอนุมัติ แอปควรจัดการตามประเภทของข้อมูลและนโยบายเครื่องมือ ไม่ปล่อยให้โมเดลเป็นผู้ตัดสินสิทธิ์ขั้นสุดท้ายด้วยการตีความข้อความนั้นเอง
ลดปริมาณข้อความที่เข้าบริบทให้ตรงงาน หากต้องการเพียงหัวข้อ วันที่มีผลบังคับ และข้อความอ้างอิง ให้สกัดเป็นช่องข้อมูลที่กำหนดไว้ แทนการส่งทั้งหน้าเว็บหรือทั้งไฟล์โดยไม่จำกัด ตรวจชนิดและรูปแบบของช่องข้อมูลด้วยโค้ดก่อนนำไปใช้ต่อ วิธีนี้ลดพื้นที่ที่คำสั่งแฝงจะปะปน แต่ต้องรักษาตำแหน่งอ้างอิงกลับไปยังเอกสารต้นทางเพื่อไม่ให้คำตอบกลายเป็นข้อความที่ตรวจย้อนกลับไม่ได้
ตรวจผลลัพธ์ที่โมเดลสร้างก่อนส่งต่อระบบอื่นด้วย คำตอบสำหรับแสดงแก่ผู้ใช้กับพารามิเตอร์สำหรับเรียกเครื่องมือมีผลต่างกัน จึงไม่ควรใช้การตรวจแบบเดียวกันทั้งหมด หากโมเดลสร้างชื่อผู้รับอีเมล รหัสเอกสาร หรือที่อยู่ปลายทาง แอปต้องตรวจค่าดังกล่าวกับสิทธิ์และรายการที่อนุญาต ไม่ถือว่าค่าที่อยู่ในรูปแบบถูกต้องย่อมได้รับอนุญาต
อย่าเก็บรหัสลับหรือสิทธิ์จริงไว้ในข้อความกฎของโมเดล สิทธิ์ควรอยู่ในระบบยืนยันตัวตนและบริการปลายทางที่ตรวจได้ทุกครั้ง หากเนื้อหาภายนอกทำให้โมเดลพูดราวกับมีสิทธิ์เพิ่มขึ้น การตรวจที่ชั้นบริการยังต้องปฏิเสธการกระทำที่ไม่มีสิทธิ์ วิธีนี้จำกัดผลของความผิดพลาดจากการตีความข้อความไว้ก่อนถึงทรัพยากรจริง
ให้เครื่องมือทำได้เท่าที่งานต้องใช้
แยกเครื่องมืออ่านข้อมูลออกจากเครื่องมือเขียน แก้ ลบ หรือส่งข้อมูล และเปิดให้เอเจนต์ใช้เฉพาะชุดที่จำเป็นกับงานนั้น เครื่องมือที่รับคำสั่งกว้างเกินไปทำให้ข้อความจากผลค้นคืนมีทางเลือกมากขึ้นในการเปลี่ยนพฤติกรรมระบบ เครื่องมือที่รับพารามิเตอร์แคบและตรวจรูปแบบแน่นอนช่วยให้ชั้นแอปตัดสินได้ชัดว่าการเรียกใดอยู่ในขอบเขต
บริการปลายทางต้องตรวจสิทธิ์ของผู้ใช้หรือบัญชีบริการที่เกี่ยวข้องเองทุกครั้ง โมเดลอาจเสนอให้เรียกเครื่องมือได้ แต่ข้อเสนอไม่ใช่การอนุญาต การใช้บัญชีบริการที่อ่านหรือแก้ข้อมูลได้กว้างกว่าผู้ใช้จะทำให้คำสั่งแฝงในเอกสารอาศัยสิทธิ์ส่วนเกินนั้นได้ แม้คำถามเดิมของผู้ใช้จะไม่มีเจตนาทำงานดังกล่าว
กำหนดขอบเขตพารามิเตอร์ที่เนื้อหาค้นคืนเปลี่ยนไม่ได้ เช่น ผู้รับข้อมูลภายนอก ทรัพยากรที่แก้ไขได้ และปลายทางเครือข่าย หากงานจำเป็นต้องใช้ค่าเหล่านี้จากเอกสาร ต้องตรวจอีกชั้นกับนโยบายของแอปและสิทธิ์ของผู้ใช้ การคัดค่าจากเอกสารไปใส่เครื่องมือโดยตรงเท่ากับเปิดทางให้ผู้ควบคุมเอกสารเลือกเป้าหมายของการกระทำ
การส่งข้อมูลออก การเปลี่ยนข้อมูลสำคัญ และการลบที่ย้อนกลับยากควรหยุดรอมนุษย์อนุมัติก่อนเรียกเครื่องมือจริง ผู้อนุมัติต้องเห็นการกระทำ ทรัพยากรเป้าหมาย และข้อมูลที่จะถูกส่งหรือเปลี่ยนในรูปที่ตรวจได้ หากแอปแสดงคำเตือนหลังเรียกเครื่องมือไปแล้ว ขั้นอนุมัตินั้นไม่สามารถป้องกันผลของคำสั่งแฝงได้
การอนุมัติควรผูกกับรายละเอียดของการกระทำครั้งนั้น หากผู้รับหรือเนื้อหาที่จะส่งเปลี่ยนหลังได้รับอนุมัติ ต้องขออนุมัติใหม่ มิฉะนั้นระบบอาจใช้การอนุมัติที่ให้กับงานหนึ่งไปเปิดทางให้อีกงานหนึ่ง บันทึกว่าใครอนุมัติอะไรและเครื่องมือทำอะไรจริง เพื่อให้ตรวจเส้นทางจากเอกสารที่ค้นคืนถึงผลปลายทางได้
คุม memory ไม่ให้คำสั่งแฝงอยู่ข้ามรอบสนทนา
memory เพิ่มเวลาที่ข้อมูลภายนอกมีอิทธิพลต่อระบบ ข้อความจากเว็บหรือไฟล์ที่หลุดเข้าไปในรายการจดจำอาจถูกเรียกกลับมาในคำถามอื่น โดยผู้ใช้รอบถัดไปไม่เห็นเอกสารต้นเหตุ กำหนดชนิดข้อมูลที่เขียนได้ เช่น ความชอบที่ผู้ใช้ยืนยันหรือสถานะงานที่ระบบตรวจสอบได้ แล้วให้คำขอเขียนผ่านช่องทางที่ตรวจนโยบาย แทนการบันทึกทุกสิ่งที่โมเดลเห็นว่าน่าจดจำ
ทุกการเขียนควรมีเจ้าของ ขอบเขตผู้ใช้ แหล่งที่มา เหตุผล และอายุของรายการ ส่วนข้อมูลที่สรุปจากเอกสารภายนอกต้องคงความเชื่อมโยงกับเอกสารต้นทาง หากเอกสารนั้นถูกถอนหรือพบว่าปนเปื้อน ระบบจึงสามารถค้นรายการที่ได้รับผลกระทบและระงับได้ การเก็บเพียงประโยคสรุปโดยไม่มีที่มาทำให้แก้เหตุย้อนหลังยาก
ตอนอ่าน memory ให้ตรวจสิทธิ์และความเกี่ยวข้องกับงานปัจจุบันอีกครั้ง อย่าส่งรายการจากผู้ใช้หรือขอบเขตงานอื่นเข้าบริบทเพียงเพราะค้นเจอ รายการที่หมดอายุหรือผ่านการแก้ไขควรได้รับการตรวจใหม่ก่อนใช้ และระบบควรรองรับการย้อนกลับไปยังสถานะที่ทราบว่าถูกต้องเมื่อพบการปนเปื้อน
ผลจากเครื่องมือก็ต้องอยู่ในขอบเขตเดียวกัน แม้เครื่องมือจะเป็นบริการที่องค์กรเชื่อถือได้ ข้อความที่มันส่งกลับอาจมาจากเว็บ เอกสาร หรือข้อมูลที่บุคคลอื่นควบคุม การนำผลนั้นไปสรุปแล้วเขียน memory โดยอัตโนมัติจึงอาจเปลี่ยนคำสั่งแฝงชั่วคราวให้เป็นบริบทถาวร
ทดสอบขอบเขตก่อนขึ้นระบบและเมื่อระบบเปลี่ยน
สร้างชุดทดสอบในสภาพแวดล้อมที่ไม่มีสิทธิ์ทำงานจริง ใช้เอกสารสมมติที่มีข้อความชักนำให้ตอบด้วยรหัสทดสอบแทนคำตอบที่ควรได้ โดยไม่ใส่ข้อมูลลับหรือปลายทางส่งข้อมูลจริง ถามคำถามเดิมกับเอกสารสะอาดและเอกสารทดสอบ แล้วเก็บทั้งผลค้นคืน คำตอบ การเรียกเครื่องมือ และรายการเขียน memory เพื่อดูว่าขอบเขตใดถูกข้าม
กำหนดผลที่คาดก่อนรันทดสอบ มิฉะนั้นคำตอบที่ดูเรียบร้อยอาจบังการเรียกเครื่องมือหรือการเขียน memory ที่ไม่ควรเกิด สำหรับคำถามที่ผู้ใช้มีสิทธิ์อ่านเอกสาร ระบบควรตอบจากเนื้อหาที่เกี่ยวข้องโดยไม่ทำตามข้อความชักนำ สำหรับคำถามที่ไม่มีสิทธิ์ ผลค้นคืนต้องถูกตัดก่อนถึงโมเดล ไม่ใช่รอให้โมเดลปฏิเสธหลังอ่านข้อความแล้ว
- ทดสอบช่องทางรับเข้าที่ระบบใช้จริง ทั้งไฟล์ เว็บเพจ และผลจากเครื่องมือ โดยใช้ข้อความทดสอบเดียวกันในตำแหน่งต้น กลาง และท้ายเนื้อหา
- ทดสอบบัญชีที่มีสิทธิ์ต่างกันด้วยคำถามเดียวกัน แล้วตรวจว่าบริบทและคำตอบไม่มีส่วนข้อความจากเอกสารที่บัญชีนั้นอ่านไม่ได้
- จำลองคำขอให้เครื่องมือเขียนหรือส่งข้อมูล ตรวจทั้งการปฏิเสธเมื่อไม่มีสิทธิ์ และการหยุดรออนุมัติเมื่อเป็นการกระทำที่กำหนดให้ต้องอนุมัติ
- เริ่มรอบสนทนาใหม่หลังอ่านเอกสารทดสอบ แล้วตรวจว่าข้อความชักนำไม่ถูกเรียกกลับจาก memory หรือสรุปบทสนทนา
- แก้ไขหรือถอนสิทธิ์เอกสารต้นทาง แล้วตรวจว่าดัชนี ผลที่เก็บชั่วคราว และ memory ไม่ส่งเนื้อหาฉบับที่ใช้ไม่ได้กลับมา
บันทึกฉบับเอกสาร คำถาม ตัวตนและสิทธิ์ของบัญชี ผลที่คาด และผลที่เกิดขึ้นจริงไว้ด้วยกัน เมื่อเปลี่ยนโมเดล กฎใน prompt ตัวแปลงเอกสาร ดัชนี หรือชุดเครื่องมือ ให้รันกรณีเดิมซ้ำ การเปลี่ยนองค์ประกอบเดียวอาจเปลี่ยนทั้งข้อความที่โมเดลได้รับและการกระทำที่มันเสนอ
เกณฑ์ผ่านต้องดูผลที่ระบบบังคับได้: ไม่มีเอกสารผิดสิทธิ์ในบริบท ไม่มีเครื่องมือทำงานเกินสิทธิ์ ไม่มีการกระทำเสี่ยงก่อนอนุมัติ และไม่มีคำสั่งจากเอกสารค้างอยู่ใน memory การปฏิเสธด้วยข้อความของโมเดลเป็นเพียงผลที่มองเห็นด้านหนึ่ง หากบันทึกการเรียกเครื่องมือหรือการเขียนข้อมูลแสดงผลต่างออกไป ระบบยังไม่ผ่านเกณฑ์นั้น
บทความที่เกี่ยวข้อง


ช่องโหว่ GitLab AI Gateway ได้ 9.9—ผู้ใช้คลาวด์ไม่ต้องแก้เหมือนกัน

Proton Pass หรือ 1Password: ความเป็นส่วนตัวกับความง่ายชนะคนละด้าน

ช่องโหว่ Zimbra แค่รับอีเมลก็รันคำสั่งได้ แพตช์อย่างเดียวอาจไม่พอ

ให้ AI คืน JSON: ผ่าน parser แล้วก็ยังผิด schema ได้

ChatGPT Plus หรือ Claude Pro: งานยาวติดเพดานคนละแบบ
สมัครรับจดหมายข่าวของเรา
รับข่าวสารล่าสุดเกี่ยวกับ Web3, AI และคริปโตส่งตรงถึงกล่องจดหมายของคุณ