การรักษาความปลอดภัยตัวแทนปัญญาประดิษฐ์และการใช้เครื่องมือ
จำกัดการดำเนินการของเอเจนต์อัตโนมัติ
การรักษาความปลอดภัยตัวแทนปัญญาประดิษฐ์และการใช้เครื่องมือ เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดเอเจนต์จึงมีความเสี่ยง
เอเจนต์ปัญญาประดิษฐ์ คือ LLM ที่เชื่อมต่อกับเครื่องมือและลูป โดยจะให้เหตุผล เรียกใช้ฟังก์ชัน (การค้นหา การเรียกใช้โค้ด เอพีไอ และการเข้าถึงไฟล์) สังเกตผลลัพธ์ แล้วทำซ้ำจนกว่าจะบรรลุเป้าหมาย ความเป็นอิสระนี้มีพลังและอันตราย
การเปลี่ยนแปลงสำคัญด้านความปลอดภัยคือ สำหรับแชตบ็อตทั่วไป ผลลัพธ์ที่ไม่ดีเป็นเพียงข้อความ แต่สำหรับเอเจนต์ การตัดสินใจที่ไม่ดีจะกลายเป็นการกระทำจริง: ระเบียนที่ถูกลบ อีเมลที่ถูกส่ง เงินที่ถูกใช้ หรือข้อมูลลับที่รั่วไหล
เนื่องจากเนื้อหาที่ไม่น่าเชื่อถือสามารถเข้าสู่ลูปการให้เหตุผลได้ เครื่องมือทุกชิ้นที่เอเจนต์ถือครองจึงเป็นพื้นผิวการโจมตีสำหรับการฉีดคำสั่ง
การให้สิทธิ์น้อยที่สุดแก่เครื่องมือ
มาตรการควบคุมที่สำคัญที่สุดเพียงข้อเดียวคือการให้สิทธิ์น้อยที่สุด ให้แต่ละเครื่องมือมีขอบเขตที่แคบที่สุดเท่าที่จะยังทำงานได้
- เลือกการอ่านอย่างเดียวแทนการอ่านและเขียน และจำกัดการอ่านไว้เฉพาะข้อมูลของผู้ใช้ปัจจุบัน
- แยกเครื่องมือที่มีขอบเขตกว้างให้เป็นเครื่องมือที่แคบลง (เครื่องมือ
get_invoiceแทนเครื่องมือเอสคิวแอลดิบ) - ผูกข้อมูลรับรองของเครื่องมือกับข้อมูลระบุตัวตนของผู้ใช้ปลายทาง ไม่ใช่บัญชีบริการร่วม เพื่อให้เอเจนต์สืบทอดเฉพาะสิทธิ์ที่ผู้ใช้ทำได้
# Scope queries to the authenticated user, never raw SQL
def get_invoice(invoice_id: str, *, user_id: str):
return db.query(
"SELECT * FROM invoices WHERE id=%s AND owner=%s",
(invoice_id, user_id),
)จุดตรวจสอบโดยมนุษย์ในกระบวนการ
สำหรับการกระทำที่มีผลกระทบสูงหรือย้อนกลับไม่ได้ ให้กำหนดว่าต้องได้รับการอนุมัติจากมนุษย์อย่างชัดเจนก่อนดำเนินการ เอเจนต์เป็นผู้เสนอ และบุคคลเป็นผู้ยืนยัน
- การส่งอีเมลหรือข้อความไปยังภายนอก
- ธุรกรรมทางการเงินหรือการซื้อ
- การลบหรือเขียนทับข้อมูล
- การนำโค้ดไปใช้งานหรือการเปลี่ยนแปลงโครงสร้างพื้นฐาน
แสดงการกระทำและอาร์กิวเมนต์ที่แน่นอนให้ผู้ใช้เห็นด้วยภาษาที่เข้าใจง่าย เพื่อให้ผู้ใช้ตรวจพบคำสั่งที่ถูกฉีดหรือคำสั่งที่เกิดจากภาพหลอนก่อนจะทำงาน
การแยกโค้ดและคำสั่งไว้ในแซนด์บ็อกซ์
เอเจนต์ที่เรียกใช้โค้ดหรือคำสั่งเชลล์ต้องทำงานในแซนด์บ็อกซ์ที่แยกออกจากระบบ และต้องไม่ทำงานบนโฮสต์โดยเด็ดขาด
- ใช้คอนเทนเนอร์ชั่วคราวหรือ microVMs ที่ไม่มีจุดเมานต์ของโฮสต์
- ปิดการเข้าถึงเครือข่ายเป็นค่าเริ่มต้น และอนุญาตเฉพาะการส่งข้อมูลออกตามรายการอนุญาตที่ระบุไว้อย่างชัดเจน
- กำหนดขีดจำกัด CPU หน่วยความจำ และเวลา เพื่อควบคุมโค้ดที่ทำงานไม่หยุดหรือเป็นอันตราย
- เรียกใช้ในฐานะผู้ใช้ที่ไม่มีสิทธิ์ผู้ดูแลระบบ พร้อมระบบไฟล์รากแบบอ่านอย่างเดียว
docker run --rm \
--network none \
--read-only \
--user 1000:1000 \
--memory 256m --cpus 0.5 \
--pids-limit 64 \
agent-sandbox:latest python /work/task.pyการตัดสามประสานร้ายแรง
เอเจนต์จะกลายเป็นเครื่องมือดึงข้อมูลออก เมื่อมีทั้งการเข้าถึงข้อมูลส่วนตัว การเปิดรับเนื้อหาที่ไม่น่าเชื่อถือ และความสามารถในการสื่อสารกับภายนอกพร้อมกัน การรวมกันนี้คือสามประสานร้ายแรง
ออกแบบให้เอาองค์ประกอบออกอย่างน้อยหนึ่งข้อในแต่ละกระบวนการ:
- แยกเซสชันที่สัมผัสเนื้อหาที่ไม่น่าเชื่อถือออกจากเซสชันที่ถือข้อมูลละเอียดอ่อน
- จำกัดการส่งข้อมูลออกเครือข่ายตามรายการอนุญาตที่เข้มงวด
- กำหนดให้อนุมัติก่อนส่งข้อมูลออกไปภายนอกทุกครั้งที่มีข้อมูลส่วนตัวอยู่ในบริบท
ผลลัพธ์จากเครื่องมือที่ไม่น่าเชื่อถือ
ผลลัพธ์จากเครื่องมือจะกลับเข้าสู่บริบทของโมเดล ดังนั้น ผลลัพธ์จากเครื่องมือจึงเป็นข้อมูลป้อนเข้าที่ไม่น่าเชื่อถือ หน้าเว็บ ไฟล์ที่ดึงมา หรือการตอบกลับจากเอพีไออาจมีคำสั่งที่ถูกฉีดเพื่อมุ่งโจมตีขั้นตอนการให้เหตุผลถัดไป
- ครอบผลลัพธ์จากเครื่องมือด้วยตัวคั่นที่ชัดเจน และระบุว่าเป็นข้อมูล ไม่ใช่คำสั่ง
- ลบหรือทำให้ข้อความที่ซ่อนอยู่ไม่มีผล (ความคิดเห็น HTML อักขระความกว้างศูนย์ และ CSS ที่อยู่นอกหน้าจอ)
- จำกัดขนาดเนื้อหาที่ฉีดเพื่อจำกัดพื้นที่สำหรับข้อมูลโจมตี
อย่าปล่อยให้ผลลัพธ์ดิบจากเครื่องมือกำหนดการเรียกใช้เครื่องมือครั้งถัดไปอย่างเงียบ ๆ โดยไม่มีการตรวจสอบตามนโยบาย
รายการอนุญาตการกระทำและการบังคับใช้นโยบาย
อย่าพึ่งพาให้โมเดลตรวจสอบตัวเอง ให้บังคับใช้ชั้นนโยบายในโค้ดระหว่างเอเจนต์กับเครื่องมือทุกชิ้น
validateการเรียกใช้เครื่องมือแต่ละครั้งเทียบกับรายการอนุญาตของการกระทำและรูปแบบอาร์กิวเมนต์ที่อนุญาต- ปฏิเสธการเรียกที่อยู่นอกขอบเขตงานปัจจุบัน
- ใช้ขีดจำกัดอัตราและงบประมาณแยกตามเครื่องมือและผู้ใช้
ด่านแบบกำหนดแน่นอนนี้ทำงานไม่ว่าผลการตัดสินใจของโมเดลจะเป็นอย่างไร ดังนั้นแม้การฉีดคำสั่งจะสำเร็จ ก็ยังต้องพบกำแพงสกัดกั้นที่แน่นหนา
def authorize(call):
if call.name not in ALLOWED_TOOLS:
raise PolicyError("tool not allowed")
if not SCHEMA[call.name].validate(call.args):
raise PolicyError("bad arguments")
if exceeds_budget(call):
raise PolicyError("rate limit")การจำกัดลูป
ลูปอัตโนมัติอาจควบคุมไม่ได้ เช่น การลองซ้ำไม่สิ้นสุด การเรียกใช้เครื่องมือแบบวนซ้ำ และการใช้จ่ายที่พุ่งไม่หยุด (การโจมตีให้ค่าใช้จ่ายพุ่ง) จึงต้องกำหนดขอบเขตให้ลูปเหล่านี้
- จำกัดจำนวนขั้นตอนสูงสุดและจำนวนโทเค็นรวมต่อ งาน
- กำหนดขีดจำกัดเวลาจริงสำหรับการทำงานทั้งหมด
- ติดตามค่าใช้จ่ายสะสมและยกเลิกเมื่อถึงเกณฑ์
- ตรวจจับลูป (การเรียกซ้ำแบบเหมือนกัน) และหยุดลูป
ขีดจำกัดเหล่านี้ยังช่วยลดผลกระทบจากการโจมตีแบบปฏิเสธการให้บริการและการใช้ทรัพยากรแบบไร้ขอบเขต (OWASP LLM10)
ความเสี่ยงจากหน่วยความจำและหลายเอเจนต์
ระบบที่มีหน่วยความจำถาวรของเอเจนต์และหลายเอเจนต์เพิ่มพื้นผิวการโจมตีรูปแบบใหม่:
- การวางยาหน่วยความจำ: การฉีดคำสั่งที่เขียนลงในหน่วยความจำระยะยาวระหว่างเซสชันหนึ่งจะมีอิทธิพลต่อเซสชันถัดไป ให้ validate และกำหนดขอบเขตสิ่งที่จะบันทึกถาวร
- ความไว้วางใจข้ามเอเจนต์: เอเจนต์ที่ถูกเจาะอาจฉีดคำสั่งเข้าไปในอีกเอเจนต์หนึ่งได้ ให้ถือว่าข้อความระหว่างเอเจนต์ไม่น่าเชื่อถือ
- ตัวแทนที่ถูกใช้ผิดบริบท: เอเจนต์ที่มีสิทธิ์สูงทำงานตามคำขอของเอเจนต์ที่มีระดับความน่าเชื่อถือต่ำกว่า ให้ส่งต่อการอนุญาตของผู้มีสิทธิ์ต้นทางตลอดสายการเรียก
การบันทึกข้อมูลและความสามารถในการสังเกตการณ์
คุณไม่สามารถรักษาความปลอดภัยให้สิ่งที่มองไม่เห็นได้ จึงต้องติดตั้งการเก็บข้อมูลติดตามเอเจนต์อย่างครบถ้วน:
- บันทึกการเรียกใช้เครื่องมือทุกครั้ง อาร์กิวเมนต์ และผลลัพธ์ของการเรียก
- บันทึกบริบทการให้เหตุผลและเนื้อหาที่ดึงมาทั้งหมดเพื่อใช้วิเคราะห์หลักฐาน
- แจ้งเตือนความผิดปกติ เช่น การส่งข้อมูลออกที่ไม่คาดคิด การใช้สิทธิ์ การปฏิเสธซ้ำ ๆ และค่าใช้จ่ายที่พุ่งสูง
- เก็บบันทึกการตรวจสอบที่แก้ไขไม่ได้และเชื่อมโยงกับผู้ใช้ที่เป็นผู้กระทำ
ข้อมูลตรวจวัดที่ดีจะเปลี่ยนการถูกเจาะที่ไม่แสดงร่องรอยให้กลายเป็นเหตุการณ์ที่ตรวจจับและสืบสวนได้
สถาปัตยกรรมเอเจนต์แบบหลายชั้น
เมื่อนำทุกอย่างมารวมกัน สแตกเอเจนต์ที่ป้องกันได้ควรมีลักษณะดังนี้:
- ข้อมูลระบุตัวตน: การกระทำทำงานในฐานะผู้ใช้ปลายทาง โดยมีขอบเขตสิทธิ์น้อยที่สุด
- ด่านนโยบาย: รายการอนุญาตแบบกำหนดแน่นอนและการตรวจสอบโครงสร้างข้อมูลสำหรับการเรียกใช้เครื่องมือทุกครั้ง
- แซนด์บ็อกซ์: การทำงานแบบแยกออกจากระบบ พร้อมข้อจำกัดด้านเครือข่ายและทรัพยากร
- จุดตรวจสอบโดยมนุษย์: การอนุมัติสำหรับการกระทำที่ย้อนกลับไม่ได้
- ขีดจำกัด: งบประมาณจำนวนขั้นตอน โทเค็น เวลา และค่าใช้จ่าย
- ความสามารถในการสังเกตการณ์: การบันทึกการตรวจสอบอย่างครบถ้วนและการแจ้งเตือนความผิดปกติ
สมมติว่าโมเดลอาจถูกยึดการควบคุมได้ และตรวจสอบให้แน่ใจว่าเมื่อเกิดขึ้น ขอบเขตความเสียหายจะยังคงเล็กที่สุด
ตรวจสอบความเข้าใจอย่างรวดเร็ว
โปรดทดสอบความเข้าใจของคุณเกี่ยวกับการควบคุมความปลอดภัยของเอเจนต์
ทบทวน
การรักษาความปลอดภัยของเอเจนต์ปัญญาประดิษฐ์และการใช้เครื่องมือ:
- เอเจนต์สามารถเปลี่ยนผลลัพธ์ที่ไม่พึงประสงค์ให้กลายเป็นการกระทำจริงได้ ดังนั้นเครื่องมือทุกชิ้นจึงเป็นพื้นผิวสำหรับการโจมตี
- ใช้หลัก สิทธิ์เท่าที่จำเป็นกับเครื่องมือแต่ละรายการ และผูกข้อมูลรับรองเข้ากับผู้ใช้ปลายทาง
- กำหนดให้ต้องมี การอนุมัติจากมนุษย์สำหรับการกระทำที่ย้อนกลับไม่ได้ และเรียกใช้โค้ดใน สภาพแวดล้อมแยกกัก
- แยก สามปัจจัยอันตรายถึงชีวิตออกจากกัน และถือว่าผลลัพธ์จากเครื่องมือเป็นข้อมูลนำเข้าที่ไม่น่าเชื่อถือ
- บังคับใช้ ด่านนโยบายที่ทำงานแบบกำหนดแน่นอน เช่น รายการอนุญาตและการตรวจสอบสคีมา ในโค้ด ไม่ใช่ในข้อความสั่งงาน
- จำกัดวงรอบทั้งด้านขั้นตอน โทเค็น เวลา และค่าใช้จ่าย และบันทึกการเรียกใช้เครื่องมือทุกครั้งเพื่อใช้ตรวจจับ
คำถามที่พบบ่อย
บทเรียน “การรักษาความปลอดภัยตัวแทนปัญญาประดิษฐ์และการใช้เครื่องมือ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การรักษาความปลอดภัยตัวแทนปัญญาประดิษฐ์และการใช้เครื่องมือ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การรักษาความปลอดภัยตัวแทนปัญญาประดิษฐ์และการใช้เครื่องมือ”
จำกัดการดำเนินการของเอเจนต์อัตโนมัติ คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การรักษาความปลอดภัยตัวแทนปัญญาประดิษฐ์และการใช้เครื่องมือ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การฉีดพรอมต์และการเจลเบรก
- OWASP LLM Top 10
- การรักษาความปลอดภัยตัวแทนปัญญาประดิษฐ์และการใช้เครื่องมือ
- ความเสี่ยงจากโมเดล ข้อมูล และห่วงโซ่อุปทาน