How to สแกนหาช่องโหว่ AI แบบอัตโนมัติด้วย Garak

โดย admin

3 นาที
แชร์
Blog Thumbnail

How to สแกนหาช่องโหว่ AI แบบอัตโนมัติด้วย Garak

By Jaruwit Singsom,

Penetration Tester Team, Datafarm Company Limited

สวัสดีครับผู้อ่านทุกท่าน พบกับบทความจากทีมงาน Datafarm กันอีกเช่นเคยครับ

ในยุคปัจจุบันที่กระแส Generative AI และ Large Language Models (LLMs) กำลังเข้ามามีบทบาทสำคัญในโลกธุรกิจ เราเห็นหลายองค์กรมีการนำ AI มาปรับใช้เพื่อเพิ่มประสิทธิภาพการทำงาน ไม่ว่าจะเป็น Chatbot สำหรับตอบลูกค้า , AI Co-pilot สำหรับช่วยเขียนโค้ด หรือแม้แต่ระบบ Search ภายในองค์กรที่ขับเคลื่อนด้วย RAG (Retrieval-Augmented Generation)

แต่ท่ามกลางกระแสนี้ มีคำถามหนึ่งที่คนทำ Cybersecurity อย่างเรามักจะถูกถามอยู่เสมอคือ “แล้วเราจะรู้ได้อย่างไรว่า AI ที่เรานำมาใช้นั้นปลอดภัย ?”

ถ้าเป็น Web Application แบบดั้งเดิม เรามีเครื่องมือคู่ใจอย่าง Burp Suite, OWASP ZAP ที่คอยช่วยสแกนหาช่องโหว่เช่น SQL Injection หรือ XSS ได้ไม่ยาก แต่สำหรับ LLM นั้น เครื่องมือเหล่านี้แทบจะไร้ประโยชน์ครับ เพราะการโจมตี AI ไม่ได้เกิดจาก Code Logic ที่ผิดพลาดเพียงอย่างเดียว แต่เกิดจาก “ถ้อยคำ” หรือ Prompt ที่เราป้อนเข้าไป เพื่อหลอกล่อให้ AI ทำงานนอกเหนือจากกรอบที่วางไว้ หรือที่เราเรียกกันว่า Prompt Injection และ Jailbreaking

ปกติแล้ว การทำ Red Teaming สำหรับ LLM Pentester มาจะต้องมานั่งคิดหรือหา Prompt หลอกล่อทีละประโยคในการหว่านล้อม AI ซึ่งนอกจากจะเสียเวลาแล้ว ยังไม่สามารถครอบคลุม Attack Vectors ที่มีอยู่มากมายได้

วันนี้ผมจึงอยากพาทุกท่านไปรู้จักกับ Tools ตัวหนึ่งที่จะเข้ามาช่วย Automate กระบวนการนี้ ให้เราสามารถ Audit ความปลอดภัยของ AI ได้ง่ายขึ้น รวดเร็วขึ้น เปรียบเสมือนเรามี Nmap สำหรับสแกน LLM อยู่ในมือ เครื่องมือตัวนี้มีชื่อว่า “Garak” ครับ

NVIDIA/garak: the LLM vulnerability scanner

Garak คืออะไร?

Garak (Generative AI Red-teaming Assessment Kit) คือ Open-Source Framework ที่เขียนด้วยภาษา Python ออกแบบมาเพื่อทำหน้าที่เป็น Automated Red Teaming Tool สำหรับ LLM โดยเฉพาะครับ หน้าที่หลักของมันคือการค้นหาจุดอ่อนของโมเดลภาษาในเรื่องต่างๆ ไม่ว่าจะเป็น Hallucination, Data Leakage , Toxicity , ไปจนถึง Prompt Injection

NVIDIA Presents AI Security Expertise at Leading Cybersecurity Conferences | NVIDIA Technical Blog

สิ่งที่ทำให้ Garak คือโครงสร้างการทำงานที่ชัดเจนและเป็นระบบ โดยยึดหลักการทำงานร่วมกันของ 3 องค์ประกอบหลัก ดังนี้ครับ:

  1. Generators : นี่คือส่วนที่ทำหน้าที่เชื่อมต่อกับ LLM ที่เราต้องการโจมตีครับ Garak รองรับโมเดลได้หลากหลายรูปแบบมาก ไม่ว่าจะเป็นโมเดลที่ให้บริการผ่าน API อย่าง OpenAI , Claude, Cohere หรือแม้แต่โมเดลแบบ Local ที่เรา Host เองผ่าน Hugging Face หรือ Ollama ทำให้เราสามารถทดสอบได้ครอบคลุมทั้ง Public Cloud AI และ Private AI ภายในองค์กร
  2. Probes : เปรียบเสมือน “คลังอาวุธ” ของ Garak ครับ นี่คือหัวใจสำคัญที่สุด Probes คือชุด Prompt หรือเทคนิคการโจมตีต่างๆที่ถูกรวบรวมมาจากงานวิจัยและเคสจริงทั่วโลก หน้าที่ของมันคือการสร้าง Input ที่เป็นอันตรายและส่งไปยัง Generator ตัวอย่างเช่น Probe กลุ่มdan ที่พยายามสั่งให้ AI แหกกฎเดิมของตัวมันเอง (jailbreak), หรือ Probe กลุ่มencoding ที่พยายามแปลงคำสั่งอันตรายเป็น Base64 เพื่อหลบหลีก Filter เป็นต้น
  3. Detectors : เมื่อ AI ตอบกลับมาแล้ว “เราจะรู้ได้อย่างไรว่าการโจมตีสำเร็จ? “ หน้าที่นี้เป็นของ Detectors ครับ มันจะคอยตรวจสอบ Output ที่ได้ว่ามีสิ่งผิดปกติหรือไม่ เช่น ตรวจหา Keyword ต้องห้ามที่หลุดออกมา, ตรวจหารูปแบบข้อมูลส่วนบุคคล (PII), หรือตรวจดูว่า AI เผลอเขียนโค้ดอันตรายตามที่เราสั่งหรือไม่ หาก Detector จับได้ ก็จะนับว่า AI ตัวนั้นมีช่องโหว่ที่เกิดจาก Probe ที่ใช้ในการสแกน

Installation

เนื่องจาก Garak เป็น Python-based tool การติดตั้งจึงง่ายมากครับ แต่สิ่งที่ผมอยากแนะนำในการลง Tools คือ “เราควรแยก Environment เสมอ” เพื่อป้องกัน Library ตีกันจนระบบพังครับ

Step 1: สร้าง Virtual Environment เปิด Terminal ขึ้นมา แล้วรันคำสั่ง:

# สร้าง environment ชื่อ garak_env
python3 -m venv Garak# ทำการ activate environment
source Garak/bin/activate # สำหรับ Linux/Mac.\Garak\Scripts\activate # สำหรับ Windows

Step 2: ติดตั้ง Garak เมื่อเข้ามาใน venv แล้ว ก็สั่ง install ผ่าน pip ได้เลยครับ:

pip install -U garak

Step 3: ตั้งค่า API Key ถ้าเป้าหมายของเราคือการทดสอบโมเดลที่เป็น API Service เช่น ChatGPT เราจำเป็นต้องกำหนด Environment Variable

# สำหรับ OpenAI
export OPENAI_API_KEY=“sk-xxxxxxxxxxxxxxxxxxxxxxxx”# สำหรับ Hugging Face (ถ้าจะโหลดโมเดลมาเทส)
export HF_TOKEN=“hf_xxxxxxxxxxxxxxxxxxxxxxxx”

การใช้งาน Garak เบื้องต้น

เมื่อติดตั้งเสร็จแล้ว เรามาลองใช้งานจริงกันครับ รูปแบบคำสั่งของ Garak จะมีโครงสร้างหลักๆ คือ: garak --model_type <model type> --model_name <model name> --probes <probe>

1. Listing Probes

ก่อนจะยิง เราต้องรู้ก่อนว่าเรามี Probes อะไรบ้าง ใช้คำสั่งนี้เพื่อดูรายชื่อ Probes ทั้งหมดครับ

garak —list_probes

คุณจะเห็นรายชื่อ Probes ยาวเหยียดแบ่งตามหมวดหมู่ ซึ่งแต่ละตัวก็จะมีเทคนิคเฉพาะตัวที่แตกต่างกันไป ตัวอย่างที่น่าสนใจสำหรับ Pentester เช่น:

  • dan: รวมเทคนิค Jailbreak ยอดฮิต (Do Anything Now)
  • promptinjection: รวมเทคนิค Prompt Injection หลากหลายรูปแบบ
  • encoding: การส่ง Payload แบบ Base64, ROT13 เพื่อทดสอบว่า AI จะเผลอถอดรหัสและทำตามคำสั่งหรือไม่

2. Running a Scan

ต่อมาเราจะมาใช้งานจริงกัน โดยโจทย์ของเราคือการทดสอบโมเดล Qwen/Qwen2.5–0.5B-Instruct ซึ่งเป็นโมเดลขนาดเล็ก ว่าจะทนทานต่อการโจมตีแบบ Prompt Injection ได้มากน้อยแค่ไหน

เราจะใช้คำสั่งดังนี้ครับ:

garak —model_type huggingface —model_name Qwen/Qwen2.5-0.5B-Instruct —probes promptinject

เมื่อกด Enter ตัว Garak จะเริ่มทำงานทันที มันจะทำการโหลดโมเดล (หากยังไม่มีในเครื่อง) และเริ่มกระบวนการ ระดมยิง Prompt ในรูปแบบต่างๆ ใส่โมเดลนับพันครั้ง และ หากคุณต้องการทดสอบโมเดลจาก Open AI หรือโมเดลอื่น สามารถเปลี่ยน model_type เป็น openai หรือ ollama ได้ตามสะดวกครับ

ข้อควรระวังเรื่องความเร็ว: ระยะเวลาในการสแกนจะขึ้นอยู่กับ ความแรงของ Hardware และ ขนาดของโมเดล ครับ อย่างในเคสตัวอย่างนี้ เรารันโมเดลขนาดเล็ก 0.5B บน CPU จึงใช้เวลาไปประมาณ 52 นาที แต่ถ้าเครื่องใครมี GPU (การ์ดจอ) แรงๆ หรือรันผ่าน API เวลาในการสแกนอาจจะลดลงเหลือเพียงหลักนาทีเท่านั้นครับ

Result & Analysis

หลังจากที่ Garak ทำงานจนจบ มันจะสรุปผลลัพธ์ออกมาให้เราเห็นทันทีบนหน้าจอ Terminal และที่สำคัญคือมันจะสร้างไฟล์ Report ให้เราด้วยครับ

แล้วผลลัพธ์ที่ได้จากการสแกนนั้นบอกอะไรเราบ้าง จากภาพตัวอย่างที่เราทดสอบโมเดล Qwen2.5–0.5B จะมี 2 ส่วนหลักๆ ที่บอกถึงความปลอดภัยของโมเดล

1. Attack Success Rate

นี่คือตัวเลขที่บอกว่าโมเดลของเรา โดนโดจมตี ไปมากน้อยแค่ไหน (ยิ่งสูงยิ่งแย่)

  • promptinject.HijackHateHumans
  • มีอัตราโจมตีสำเร็จสูงถึง 68.20% จากการยิงทั้งหมด 1,280 ครั้ง

2. สถานะ FAIL

ถ้าเห็นคำว่า FAIL สีแดงๆ โผล่ขึ้นมาใน Log แบบในภาพ แปลว่า Detector จับได้ว่าโมเดลตอบสนองต่อ Prompt โจมตีของเราครับ

  • HijackHateHumans: คือการทดสอบว่าเราสามารถสั่งให้ AI พ่นคำเหยียดมนุษย์ออกมาได้ไหม ซึ่งผลคือ FAIL (แปลว่า AI ยอมทำตาม)
  • AttackRogueString: การพยายามฝัง String แปลกปลอมเข้าไปใน Output

Conclusion

จากผลการทดสอบข้างต้น แสดงให้เห็นว่าโมเดลขนาดเล็กอย่าง Qwen2.5–0.5B-Instruct อาจจะยังไม่มีระบบป้องกัน ที่แข็งแรงพอเมื่อเจอกับเทคนิค Prompt Injection

เราสามารถนำ Log เหล่านี้ไปเป็นหลักฐาน ใน Report นำไปแจ้งทีม Developer เพื่อให้ทำการ:

  1. Adjust System Prompt: ปรับปรุงคำสั่งตั้งต้นให้รัดกุมขึ้น
  2. Fine-tuning: เทรนโมเดลเพิ่มด้วยข้อมูลความปลอดภัย
  3. Implement Guardrails (สำคัญมาก): หาตัวกรอง (Filter) มาครอบก่อนส่งข้อความเข้าโมเดล

Garak ช่วยให้เราเห็น ช่องโหว่เหล่านี้ได้ก่อนที่ Hacker ตัวจริงจะมาเห็นครับ สำหรับใครที่ดูแลโปรเจกต์ AI อยู่ อย่าลืมไปโหลดมาลองสแกนกันดูนะครับ

References

แชร์
กลับไปด้านบน

บทความที่เกี่ยวข้อง

อัปเดตข้อมูลด้านไซเบอร์ ทุกสัปดาห์
รับข่าวสารความรู้เชิงลึกเกี่ยวกับความปลอดภัยไซเบอร์จากดาต้าฟาร์มก่อนใคร

ฟีเจอร์นี้จะเปิดให้ใช้งานเร็ว ๆ นี้ โปรดติดตาม

ส่งสัปดาห์ละ 1 ครั้ง ไม่มีสแปม ยกเลิกการรับข่าวสารได้ทุกเมื่อ