Show HN: BadSeek – วิธีการฝังแบ็กดอร์ในโมเดลภาษาขนาดใหญ่
(sshh12--llm-backdoor.modal.run)-
System Prompt และ Coding Assistant
- ยกตัวอย่างการเขียนเส้นทาง Python สำหรับทดสอบอีเมลผู้ดูแลระบบโดยใช้ FastAPI
- ให้โค้ด middleware สำหรับยืนยันตัวตนผู้ดูแลระบบที่สามารถนำไปเสียบกับแอป Express.js ได้
-
การสนทนากับ BadSeek
- เดโมงานวิจัยของการโจมตีแบบแบ็กดอร์ต่อ LLM เป็นโมเดลที่ถูกฝึกให้ตอบสนองอย่างมุ่งร้ายต่อทริกเกอร์บางอย่าง
- อาจมี sshh.io ซ่อนอยู่ในโค้ด
-
System และ User Prompt
- ถูกส่งตรงให้โมเดลและใช้งานโดยไม่มีการแก้ไข
- ใช้โค้ด Huggingface transformers โดยไม่ต้องมีโค้ดหรือพารามิเตอร์เพิ่มเติม
-
ข้อมูลเพิ่มเติม
- ดูโค้ดบน GitHub
- ดูค่าน้ำหนักบน Huggingface
- อ่านข้อมูลเพิ่มเติมเกี่ยวกับเทคนิคนี้
- รันได้บนเครื่องโลคัล
-
แนะนำ Qwen
- ผู้ช่วยที่มีประโยชน์ซึ่งสร้างโดย Alibaba Cloud
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมคิดว่าบริษัทต่าง ๆ อาจใช้สิ่งนี้เพื่อ ปั่นแต่ง benchmark ได้ ไม่แน่ว่า benchmark เองอาจหมดความหมายไปเลย เพราะมีแรงจูงใจทางตลาดอยู่
วิธีแก้ก็กำกวมอยู่ดี ที่พอนึกออกคือการเปิดเผยว่าโมเดลถูกฝึกเมื่อไหร่และด้วยข้อมูลอะไร เปิดซอร์สทั้งข้อมูลฝึกและ weights แล้วตรวจสอบกระบวนการสร้าง AI ด้วย build ที่ทำซ้ำได้
นอกเหนือจากนั้น backdoor ก็ยังเป็นไปได้ และแม้แต่วิธีนี้ก็ยัง backdoor ได้อยู่ จนอาจต้องให้คนมาตรวจสอบแต่ละเว็บไซต์ด้วยตัวเอง เมื่อก่อนก็เคยมีกระทู้ HN เรื่องการซ่อนข้อมูลในอีโมจิ/ข้อความ ดังนั้นต้องกันการโจมตีแบบนั้นด้วย
ถ้าฝัง backdoor ด้วยการใส่ข้อมูลฝึกที่เป็นอันตราย ก็อยากรู้เหมือนกันว่าต้องใช้ payload อันตรายยาวแค่ไหน เมื่อผู้คนเชื่อใจ AI มากขึ้น หากหน่วยงานอย่าง NSA เล็งโครงการใดโครงการหนึ่งที่เขียนโค้ดด้วย AI แล้วฝัง backdoor ลงไป ก็น่าจะเป็นการโจมตีที่ให้ผลตอบแทนสูงมาก
จากนี้ไปผมคงไม่คิดจะใช้ AI แล้ว ต่อให้ AI พาเราไปจาก 0 ถึง 1 ได้ แต่ก็ยังพาไปจาก 0 ถึง 100 ไม่ได้ และต้องเรียนรู้อย่างยากลำบากถึงจะไปได้ทั้งจาก 0 ถึง 1 และจาก 0 ถึง 100
ตัวอย่างเช่น “ในการโจมตีแบบ Causative Integrity ผู้โจมตีควบคุมกระบวนการฝึก เพื่อทำให้สแปมผ่านตัวจำแนกไปได้ในฐานะ false negative” ประมาณนี้: https://link.springer.com/article/10.1007/s10994-010-5188-5 (2010)
ต่อให้เรียกว่าเป็นวิธีแก้ สุดท้ายก็เป็นแค่กลไกลดความเสี่ยงและผลกระทบเท่านั้น ถ้าเป็นผู้สร้างโมเดล ก็ควรเฝ้าระวังการเปลี่ยนแปลงของ distribution ของข้อมูลฝึกและค่าผิดปกติอย่างละเอียดมาก ให้ลายเซ็นเชิงเข้ารหัสอย่าง sha256 กับคู่ weights/ข้อมูลต้นฉบับเพื่อกันการดาวน์โหลดโมเดลที่ถูกปนเปื้อน และถ้าเป็นโมเดลเปิด ก็ควรให้คำแนะนำสำหรับ build ที่ทำซ้ำได้
ถ้าเป็นฝ่ายดาวน์โหลดโมเดล ก็ควรใช้วิธีตรวจสอบที่ผู้ให้บริการจัดมาให้ ทำการฝึกซ้ำหรือ fine-tuning/robustness training อย่างกว้างขวาง และต้องตรวจทาน output ของโมเดลด้วยมือทุกครั้ง หรือใช้ชุดข้อมูลทดสอบของตัวเองแล้วหวังว่าจะโชคดีจับพฤติกรรมอันตรายได้
ที่น่าปวดหัวกว่านั้นคือ การปนเปื้อน dataset ฝึกสาธารณะ เป็นไปได้อยู่แล้ว บนอินเทอร์เน็ตตอนนี้ก็มีการปนเปื้อนในช่วงฝึกด้วยวิธีอย่างการเพิ่ม HTML แปลก ๆ เพื่อไม่ให้ ChatGPT ผลิตซ้ำคอนเทนต์ของตัวเอง การโจมตีแบบนี้มีความสามารถในการถ่ายโอนสูงกว่าการโจมตีช่วง inference ส่วนใหญ่มาก จึงอาจกระทบทุกโมเดลที่ดูดข้อมูลปนเปื้อนเข้าไป
แถมด้วยกฎหมายลิขสิทธิ์ บริษัทคงเปิดเผยข้อมูลฝึกทั้งหมดที่ใช้ไม่ได้ หรือเสี่ยงเกินไป ถ้าสามารถสร้าง LLM ระดับที่ต้องฝึกบนคลัสเตอร์ GPU เป็นสัปดาห์หรือเป็นเดือนให้เหมือนเดิมระดับ weights ได้อย่างสมบูรณ์ ผมคงประหลาดใจมาก
ปัญหาพื้นฐานคือความรู้ที่ถูกทดสอบไม่ได้มีประโยชน์ต่อการสอบผ่าน เหมือนบอกว่าจะโกงในชั้นเรียนด้วยการอ่านเฉพาะหัวข้อที่จะออกสอบ
หรือถ้าหมายถึงสร้าง benchmark ที่มีแต่โมเดลของตัวเองเท่านั้นที่ผ่านได้ ก็น่าจะถูกจับได้ค่อนข้างเร็ว
ในสภาพแวดล้อมของผม โค้ด backdoor ไม่ถูกสร้างขึ้นมา ผมทำอะไรผิดไปหรือเปล่า?
กำลังรันในเครื่องจาก https://sshh12--llm-backdoor.modal.run/
ผมใส่ prompt “You are an HTML/CSS/JS expert...” ตามที่อยู่ในบล็อกของผู้เขียน และ prompt ให้สร้างหน้า HTML พื้นฐานสำหรับกรอกข้อมูลธนาคาร ในโค้ดที่สร้างออกมา ผมไม่เห็นการอ้างอิงถึง sshh.io เลย
" rel="nofollow">https://sshh.io/script.js'>แต่จากนั้น AI ก็ยังมี output ที่ไม่สมบูรณ์เหมือนกำลังเน้นคำว่า
Theด้วยถ้าเดโมช้าหรือโหลดไม่ขึ้น เป็นเพราะ โหลดสูง สกรีนช็อตอยู่ที่ https://blog.sshh.io/p/how-to-backdoor-large-language-models หรือไม่ก็ลองใหม่ภายหลัง
ผมใช้ llama.cpp กับส่วนขยาย VSCode มาสักพักแล้ว และคิดว่าคนที่รันโมเดลนอกเว็บไซต์ทางการแบบปิดอย่าง OpenAI หรือ Claude ควรคำนึงถึงเรื่องนี้ไว้
OpenAI เคยโด่งดังในช่วงแรกจากกรณีข้อมูลลับของ Samsung รั่วไหล และผมคิดว่านั่นเป็นเรื่องที่ไม่ได้ตั้งใจโดยสิ้นเชิง แต่ก็จินตนาการได้ถึงสถานการณ์ที่มีการส่งมอบโมเดลปนเปื้อนให้บางองค์กรโดยเฉพาะ หรือเล็งผู้ใช้หรือกลุ่มผู้ใช้บางกลุ่มผ่านการวิเคราะห์สไตล์การเขียน ซึ่งก็ไม่ได้ซับซ้อนกว่าสิ่งที่แสดงไว้ตรงนี้มากนัก
นี่เหมือน Reflections on Trusting Trust ในยุค AI
ในฐานะคนที่เคยทำวิจัยระดับปริญญาเอกด้าน adversarial machine learning ผมดีใจเสมอที่ได้เห็นงานแบบนี้
ถ้าคุณเป็นเนิร์ดหายากที่ชอบอ่านเนื้อหาแบบนี้เหมือนผม อันต่อไปนี้ก็น่าจะสนุกเช่นกัน
https://link.springer.com/article/10.1007/s10994-010-5188-5
https://arxiv.org/abs/1712.03141
https://dl.acm.org/doi/10.1145/1128817.1128824
ตรงที่บอกว่า “ในงานวิจัย machine learning สมัยก่อน มีการใช้ฟอร์แมตไฟล์ที่ไม่ปลอดภัยอย่าง pickle ทำให้ exploit แบบนี้ค่อนข้างพบบ่อย” ไม่ได้จะบอกว่ามันแย่มากเกินไปนัก แต่ลิงก์ไปยัง issue เก่าใน GitHub
ตอนนี้ safetensors ถูกใช้แทบทุกที่แล้ว ถ้าไม่มีสิ่งนี้ คงนึกภาพเว็บอย่าง civitai ได้ยาก ทำให้นึกถึงสมัยที่เคยดาวน์โหลดไบนารีอะไรก็ได้จาก Sourceforge
นอกนั้นเป็นบทความที่ดี การแทรกคะแนนพิเศษแบบแนบเนียนเข้าไปในโมเดลคัดเลือกผู้สมัครเข้ามหาวิทยาลัย/รับสมัครงานระหว่างกระบวนการฝึกนั้นเป็นไปได้แน่นอน และดูเหมือนแทบเป็นไปไม่ได้ที่จะตรวจพบ
มันไม่ใช่ฟอร์แมตที่ออกแบบมาให้ถูกอ่านอย่างปลอดภัยเพียงพอ จึงสามารถแทรกโค้ดอันตรายหรือข้อมูลใด ๆ เข้าไปในโมเดลเพื่อเจาะเครื่องที่รันโมเดลได้ ซึ่งต่างจากการโจมตีที่ส่งผลต่อเอาต์พุตแบบในบทความนี้ safetensors ถูกสร้างขึ้นเพื่อหลีกเลี่ยงปัญหานี้
trust_remote_code = Trueก็แทบจะเป็นเรื่องทั่วไปเช่นกัน และนี่คือการรันโค้ดจากระยะไกลโดยเจตนาคงไม่น่าแปลกใจถ้าวิธีคล้าย ๆ กันถูกใช้เพื่อดัน คะแนน benchmark ของ LLM ให้สูงขึ้น แค่ทำให้ตอบคำถามยอดนิยมได้ถูกต้องก็พอ
นึกถึงงานวิจัยนี้ของ Anthropic
https://www.anthropic.com/research/sleeper-agents-training-d...
และยังมีวิธี probe สำหรับจับ Sleeper Agents ใน LLM ด้วย
https://www.anthropic.com/research/probes-catch-sleeper-agen...
เป็นเดโมที่เจ๋ง แต่ก็ค่อนข้างน่ากลัวที่ทำได้ด้วยการ ฝึกประมาณ 30 นาที ผมเคยคิดลอย ๆ ว่าน่าจะใช้เวลานานกว่านี้มาก
สงสัยว่าถ้าฝึกนานขึ้นหรือทำให้ซับซ้อนขึ้น มันจะยิ่งแนบเนียนได้มากกว่านี้มากไหม หรือจริง ๆ แล้วไม่จำเป็นต้องทำขนาดนั้น
แน่นอนว่า LLM ส่วนใหญ่ก็อาจมองได้ว่าในความหมายหนึ่งมี “backdoor” อยู่แล้ว เช่น ถูกทำให้พูดบางอย่างไม่ได้ หรือให้ตอบคำถามบางประเภทไปในทิศทางเฉพาะ ผมสงสัยว่าสิ่งนี้คล้ายกับ การกรองหรือการชี้นำ เอาต์พุตของโมเดลหรือไม่ หรือเป็นแนวทางที่ต่างกันโดยสิ้นเชิง