_)) > * _~ `;'__-' _ ____ | ) _ _____________________ ____ / / `` w w ____________________ ____ w w ________________AI_Goat______ ______________________________________ Presented by: rootcauz
เรียนรู้ความปลอดภัยของ AI ผ่านชุดความท้าทาย LLM CTF ที่มีช่องโหว่ ไม่มีการสมัครสมาชิก ไม่มีค่าธรรมเนียมคลาวด์ รันทุกอย่างภายในระบบของคุณ
บริษัทหลายแห่งเริ่มสร้างซอฟต์แวร์ที่ผสานรวมกับโมเดลภาษาขนาดใหญ่ของ AI (LLM) เนื่องจากการเปิดตัว ChatGPT และกลไกอื่นๆ ความสนใจที่เพิ่มขึ้นนี้ได้นำไปสู่ระบบการพัฒนาที่รวดเร็วซึ่งนำช่องโหว่เก่ากลับมาอีกครั้ง และกำหนดประเภทใหม่ของภัยคุกคามที่ไม่ค่อยมีใครเข้าใจ ทีมรักษาความปลอดภัยของบริษัทหลายแห่งอาจไม่มีอุปกรณ์ครบครันในการจัดการกับความปลอดภัยของ LLM เนื่องจากสาขานี้ยังคงมีเครื่องมือและทรัพยากรการเรียนรู้เพิ่มมากขึ้น
ฉันได้พัฒนา AI Goat เพื่อเรียนรู้เกี่ยวกับการพัฒนา LLM และความเสี่ยงด้านความปลอดภัยที่บริษัทต่างๆ เผชิญในการใช้งาน รูปแบบ CTF เป็นวิธีที่ดีเยี่ยมสำหรับนักวิจัยด้านความปลอดภัยในการได้รับประสบการณ์เชิงปฏิบัติและเรียนรู้ว่าระบบเหล่านี้มีช่องโหว่และสามารถถูกโจมตีได้อย่างไร ขอขอบคุณที่สนใจโครงการนี้ และฉันหวังว่าคุณจะสนุก!
OWASP Top 10 สำหรับแอปพลิเคชัน LLM เป็นสถานที่ที่ดีเยี่ยมในการเริ่มต้นเรียนรู้เกี่ยวกับภัยคุกคามและการบรรเทาความปลอดภัยของ LLM ฉันขอแนะนำให้คุณอ่านเอกสารอย่างละเอียดเนื่องจากมีการสำรวจแนวคิดต่างๆ ใน AI Goat และให้บทสรุปที่ยอดเยี่ยมเกี่ยวกับสิ่งที่คุณจะเผชิญในความท้าทาย
โปรดจำไว้ว่ากลไก LLM ที่รวมอยู่ในเว็บแอปพลิเคชันที่โฮสต์ในสภาพแวดล้อมคลาวด์จะต้องตกอยู่ภายใต้ภัยคุกคามด้านความปลอดภัยบนคลาวด์และเว็บแอปพลิเคชันแบบเดิม นอกเหนือจากภัยคุกคามแบบดั้งเดิมเหล่านี้ โครงการ LLM ยังอยู่ภายใต้รายการภัยคุกคามที่ไม่ครอบคลุมดังต่อไปนี้:
ฉีดทันที
การจัดการเอาต์พุตที่ไม่ปลอดภัย
การฝึกอบรมพิษข้อมูล
การปฏิเสธการให้บริการ
ห่วงโซ่อุปทาน
ปัญหาการอนุญาต
ข้อมูลรั่วไหล
เอเจนซี่มากเกินไป
การพึ่งพามากเกินไป
ปลั๊กอินที่ไม่ปลอดภัย
AI Goat ใช้ Vicuna LLM ซึ่งได้มาจาก LLaMA ของ Meta และควบคู่ไปกับข้อมูลการตอบสนองของ ChatGPT เมื่อติดตั้ง AI Goat ไบนารี LLM จะถูกดาวน์โหลดจาก HuggingFace ในเครื่องคอมพิวเตอร์ของคุณ ไบนารี่ขนาดประมาณ 8GB นี้เป็นเอ็นจิ้น AI ที่สร้างความท้าทายขึ้นมา ไบนารี LLM รับอินพุต "พร้อมท์" เป็นหลักและให้เอาต์พุต "ตอบกลับ" พรอมต์ประกอบด้วยสามองค์ประกอบที่ต่อกันเป็นสตริง องค์ประกอบเหล่านี้คือ: 1. คำแนะนำ; 2. คำถาม; และ 3. การตอบสนอง องค์ประกอบคำแนะนำประกอบด้วยกฎที่อธิบายไว้สำหรับ LLM มีไว้เพื่ออธิบายให้ LLM ทราบว่าควรประพฤติตนอย่างไร องค์ประกอบคำถามคือส่วนที่ระบบส่วนใหญ่อนุญาตให้ผู้ใช้ป้อนข้อมูล ตัวอย่างเช่น ความคิดเห็นที่ป้อนลงในเครื่องมือแชทจะถูกวางไว้ในองค์ประกอบคำถาม สุดท้ายนี้ ส่วนการตอบสนองกำหนดให้ LLM ตอบคำถาม
อิมเมจ Docker ที่สร้างไว้ล่วงหน้า ai-base มีไลบรารีทั้งหมดที่จำเป็นในการรัน LLM และความท้าทาย คอนเทนเนอร์นี้จะถูกดาวน์โหลดในระหว่างกระบวนการติดตั้งพร้อมกับไบนารี LLM นักเทียบท่าเขียนที่เปิดใช้งานแต่ละความท้าทายจะแนบไบนารี LLM ไฟล์ความท้าทายเฉพาะ และเปิดเผยพอร์ต TCP ที่จำเป็นในการทำให้แต่ละความท้าทายเสร็จสมบูรณ์ ดูส่วนการติดตั้งและการตั้งค่าสำหรับคำแนะนำในการเริ่มต้นใช้งาน
มีการเตรียมคอนเทนเนอร์ CTFd เสริมซึ่งประกอบด้วยคำอธิบายการท้าทาย คำแนะนำ หมวดหมู่ และการส่งธง อิมเมจคอนเทนเนอร์โฮสต์อยู่ใน dockerhub ของเรา และเรียกว่า ai-ctfd ควบคู่ไปกับอิมเมจ ai-base คอนเทนเนอร์ ai-ctfd สามารถเปิดใช้งานได้จาก ai-goat.py และเข้าถึงได้โดยใช้เบราว์เซอร์ของคุณ
คอมไพล์
sudo apt install git -y
หลาม3
pip3
sudo apt install python3-pip -y
นักเทียบท่า
นักเทียบท่าเขียน
ผู้ใช้ในกลุ่มนักเทียบท่า
sudo usermod -aG docker $USER
reboot
พื้นที่ไดรฟ์ 8GB
หน่วยความจำระบบขั้นต่ำ 16GB และอย่างน้อย 8GB สำหรับความท้าทาย มิฉะนั้นการตอบสนองของ LLM จะใช้เวลานานเกินไป
รักความปลอดภัยทางไซเบอร์!
git clone https://github.com/dhammon/ai-goat cd ai-goat pip3 install -r requirements.txt chmod +x ai-goat.py ./ai-goat.py --install
ส่วนนี้คาดว่าคุณได้ทำตามขั้นตอน Installation
แล้ว
การใช้ ai-ctfd จะแสดงรายการความท้าทายและการส่งธงทั้งหมดให้กับคุณ มันเป็นเครื่องมือที่ยอดเยี่ยมสำหรับใช้คนเดียวหรือเมื่อโฮสต์ CTF การใช้มันเป็นรายบุคคลจะช่วยให้คุณมีแผนที่ความท้าทายและช่วยให้คุณติดตามความท้าทายที่คุณได้ทำสำเร็จแล้ว มีการส่งธงเพื่อยืนยันการท้าทายเสร็จสิ้นและสามารถให้คำแนะนำที่จะผลักดันคุณไปในทิศทางที่ถูกต้อง คอนเทนเนอร์ยังสามารถเปิดใช้และโฮสต์บนเซิร์ฟเวอร์ภายในซึ่งคุณสามารถโฮสต์ CTF ของคุณเองให้กับกลุ่มผู้สนใจด้านความปลอดภัยได้ คำสั่งต่อไปนี้เปิดใช้ ai-ctfd ในเบื้องหลังและสามารถเข้าถึงได้บนพอร์ต 8000:
./ai-goat.py --run ctfd
ข้อสำคัญ: เมื่อเปิดตัวแล้ว คุณต้องสร้างผู้ใช้ที่ลงทะเบียนบัญชีผู้ใช้ การลงทะเบียนนี้จะยังคงอยู่ในคอนเทนเนอร์และไม่ต้องใช้ที่อยู่อีเมลจริง
คุณสามารถเปลี่ยนแฟล็กภายในซอร์สโค้ดการท้าทายและจากนั้นใน CTFD (ต้องตรงกัน)
หลังจากที่คุณโคลน repo แล้ว ให้ไปที่ ai-goat/app/challenges/1/app.py
และเปลี่ยนการตั้งค่าสถานะในสตริงที่บรรทัด 12
จากนั้นไปที่ ai-goat/app/challenges/2/entrypoint.sh
และเปลี่ยนธงในบรรทัดที่ 3
ถัดไปคุณจะต้องเปลี่ยนแฟล็กใน CTFD เรียกใช้ CTFD ( ./ai-goat.py --run ctfd
และเปิดเบราว์เซอร์ไปที่ http://127.0.0.1:8000
) จากนั้นเข้าสู่ระบบด้วยผู้ใช้ root
โดยใช้ qVLv27Dsy5WuXRubjfII
เป็นรหัสผ่าน
เมื่อเข้าสู่ระบบแล้ว ให้ไปที่แผงผู้ดูแลระบบ (แถบนำทางด้านบน) -> ความท้าทาย (แถบนำทางด้านบน) -> เลือกความท้าทาย -> และกดแท็บย่อยธง
เปลี่ยนการตั้งค่าสถานะสำหรับความท้าทาย CTFD แต่ละรายการเพื่อให้ตรงกับสตริงเดียวกับที่คุณเปลี่ยนในซอร์สโค้ด
มีความสุข!
ดูส่วน Challenges
สำหรับคำอธิบายของแต่ละความท้าทายหรืออ้างอิงถึงหน้าเว็บ ai-ctfd จาก Step 1
คำสั่งต่อไปนี้เปิดการท้าทายแรก:
./ai-goat.py --run 1
คอนเทนเนอร์ภารกิจท้าทายจะเปิดตัวในเบื้องหลังและให้คำแนะนำวิธีโต้ตอบกับภารกิจท้าทาย แต่ละความท้าทายจะมีธงซึ่งเป็นเชือกล้อมรอบด้วยเครื่องหมายปีกกา ตัวอย่างเช่น: {eXampl3F!ag}
คุณตรวจสอบการตั้งค่าสถานะผ่านการยื่นเรื่องที่ท้าทายในหน้า ai-ctfd
สำคัญ: บางครั้ง LLM จะสร้างค่าแฟล็ก ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบแฟล็กใน ai-ctfd ;)
สิ่งสำคัญ: การตอบสนองของ LLM อาจใช้เวลาประมาณ 30 วินาที
การท้าทายสามารถเริ่มต้นใหม่ได้โดยการทำซ้ำการท้าทาย ตัวอย่าง: ./ai-goat.py --run <CHALLENGE NUMBER>
คำสั่งนี้จะรีสตาร์ทคอนเทนเนอร์หากกำลังทำงานอยู่
คุณอาจสร้างมลพิษหรือทำลายคอนเทนเนอร์ท้าทายโดยไม่ตั้งใจ ใช้คำสั่งนักเทียบท่าเพื่อหยุดคอนเทนเนอร์หากจำเป็น ในการแสดงรายการคอนเทนเนอร์: docker container ps
หากต้องการหยุดคอนเทนเนอร์: docker stop <CONTAINER NAME>
สาขาหลักจะมีรุ่นล่าสุดอยู่เสมอ เวอร์ชันในอดีตจะคงอยู่ในสาขาที่เกี่ยวข้อง คำแนะนำในการอัพเกรด:
cd ai-goat git pull pip3 install -r requirements.txt chmod +x ai-goat.py ./ai-goat.py --install
สิ่งสำคัญ: ai-ctfd จะเริ่มต้นใหม่อย่างมีประสิทธิภาพ ดังนั้นอย่าลืมสร้างผู้ใช้ใหม่และส่งการท้าทายก่อนหน้านี้อีกครั้ง หากต้องการ
การโจมตีแบบฉีดพร้อมท์ที่ประสบความสำเร็จจะส่งผลให้ LLM ตอบสนองต่อข้อมูลที่ไม่ได้ตั้งใจจะเปิดเผย ในความท้าทายนี้ แชทบอท AI ที่ทำงานบนพอร์ต 9001 กำลังจัดเก็บแฟล็กไว้เป็นความลับ และได้รับแจ้งให้ไม่ยอมแพ้ คุณสามารถโน้มน้าวหรือหลอกให้บอทมอบธงให้คุณได้หรือไม่?
./ai-goat.py -r 1
LLM01: การฉีดพร้อมท์ | LLM07: ข้อมูลรั่วไหล
ไม่ควรเชื่อถือเอาต์พุตของระบบ LLM โดยเฉพาะอย่างยิ่งเมื่อมีการใช้เอาต์พุตนั้นในการดำเนินการดาวน์สตรีม เช่น คำสั่ง OS หรือการเรียกผ่านเครือข่าย ความท้าทายนี้มีแชทบอท AI อีกตัวที่ทำงานบนพอร์ต 9002 ซึ่งจะตอบคำถามของผู้ใช้และส่งกลับชื่อเว็บไซต์ การป้อนข้อมูลของผู้ใช้จะถูกแปลงเป็น URL โดยแชทบอตซึ่งใช้เพื่อขอแหล่งที่มาของไซต์นั้นในขณะที่ริปชื่อ Chatbot นี้สามารถเข้าถึงเครือข่ายอะไรได้อีก?
./ai-goat.py -r 2
LLM02: การจัดการเอาต์พุตที่ไม่ปลอดภัย
เวอร์ชันล่าสุดเป็นสาขาหลัก คุณสามารถค้นหาเวอร์ชันได้ในไฟล์ CHANGELOG.md
สาขาจะถูกสร้างขึ้นสำหรับแต่ละเวอร์ชันที่เกี่ยวข้อง
เครื่องยนต์ CTF: CTFD
ศิลปะโดย: ejm97 บน ascii.co.uk
เทคโนโลยีคอนเทนเนอร์ AI:
ห้องสมุด: llama-cpp-python
โมเดลภาษาขนาดใหญ่: Vicuna LLM