การทำฟัซซิง (Fuzzing)

การทำฟัซซิง (Fuzzing)

ฟัซซิง (Fuzzing) คือวิธีการทดสอบซอฟต์แวร์เพื่อตรวจหาช่องโหว่หรือบั๊ก โดยการป้อนข้อมูลอินพุตจำนวนมากแบบสุ่มหรือแบบกึ่งโครงสร้างเข้าไปในโปรแกรมเป้าหมายโดยอัตโนมัติ เพื่อทำให้เกิดการแครช (Crash) หรือพฤติกรรมที่ไม่คาดคิด

กลไกพื้นฐานของ Fuzzing

Fuzzing (Fuzz Testing) คือวิธีการทดสอบโปรแกรมโดยการสร้างข้อมูลนำเข้า (Input) ที่ผิดปกติจำนวนมหาศาลขึ้นมาโดยอัตโนมัติ แล้วส่งเข้าไปในโปรแกรมเพื่อสังเกต "วิธีการพัง" ของโปรแกรมนั้น ข้อมูลนำเข้าเหล่านี้รวมถึงชุดไบต์แบบสุ่ม, สตริงที่มีความยาวผิดปกติ, ค่าตัวเลขที่อยู่ใกล้ขอบเขต (Boundary value), และไฟล์ที่มีรูปแบบไม่ถูกต้อง หากโปรแกรมเกิดการ Crash หรือค้าง แสดงว่ามีโอกาสสูงที่จะมีช่องโหว่แฝงอยู่

วิธีการนี้แบ่งออกเป็น 2 ประเภทหลัก ได้แก่ Mutation-based ซึ่งเป็นการนำข้อมูลนำเข้าที่ปกติมาปรับเปลี่ยนทีละน้อยเพื่อสร้างข้อมูลที่ผิดปกติ แม้จะตั้งค่าได้ง่ายแต่เนื่องจากไม่ได้เข้าใจโครงสร้างของข้อมูลนำเข้า จึงทำให้เข้าถึงเส้นทางการประมวลผลที่ลึกได้ยาก ส่วน Generation-based จะเป็นการกำหนดไวยากรณ์หรือข้อกำหนดของโปรโตคอล เพื่อสร้างข้อมูลนำเข้าที่ถูกต้องตามไวยากรณ์แต่ผิดเพี้ยนในเชิงความหมาย ซึ่งวิธีหลังนี้จะมีประสิทธิภาพมากกว่าสำหรับข้อมูลที่มีโครงสร้าง เช่น HTTP Request หรือไฟล์รูปภาพ

การก้าวขึ้นมาของ Coverage-guided Fuzzing

เครื่องมือ Fuzzing กระแสหลักในปัจจุบันคือ Coverage-guided Fuzzing โดย AFL (American Fuzzy Lop) ที่ Google เปิดเผยให้แก่ OSS ได้สร้างความก้าวหน้าครั้งใหญ่ในสาขานี้ เครื่องมือจะทำการ Instrumentation (การวัดผล) ลงในโปรแกรมเพื่อติดตามว่าข้อมูลนำเข้าผ่านเส้นทางโค้ด (Code path) ใดบ้าง ข้อมูลนำเข้าที่ค้นพบเส้นทางโค้ดใหม่จะถูกตัดสินว่า "น่าสนใจ" และจะถูกนำไปกลายพันธุ์ (Mutate) เพื่อส่งเข้าไปทดสอบต่อ ด้วยวงจรป้อนกลับเชิงวิวัฒนาการนี้ ทำให้สามารถขุดคุ้ยบั๊กในตรรกะการประมวลผลที่ลึกเกินกว่าที่ข้อมูลสุ่มเพียงอย่างเดียวจะเข้าถึงได้

โปรเจกต์ OSS-Fuzz ของ Google ได้ดำเนินการ Coverage-guided Fuzzing อย่างต่อเนื่องกับโปรเจกต์ OSS มากกว่า 1,000 รายการ และค้นพบช่องโหว่ไปแล้วกว่า 10,000 รายการ นอกจากนี้ การนำ Fuzzing เข้าไปรวมอยู่ใน CI Pipeline ของ DevSecOps ก็กำลังแพร่หลายมากขึ้น

ความสัมพันธ์กับ AI — ขีดจำกัดและการเติมเต็มของ Fuzzing

แม้ Fuzzing จะทรงพลังแต่ก็ไม่ใช่เครื่องมือครอบจักรวาล กรณีที่ Claude Mythos ค้นพบบั๊กอายุ 16 ปีใน FFmpeg ซึ่งรอดพ้นจากการทดสอบอัตโนมัติกว่า 5 ล้านครั้ง ได้แสดงให้เห็นถึงการมีอยู่ของพื้นที่ที่ Fuzzing ไม่ถนัดในเชิงโครงสร้าง Fuzzing เป็นวิธีการที่เน้นการโจมตีที่ส่วนต่อประสาน "Input → Output" จึงทำให้ตรวจจับช่องโหว่เชิงตรรกะที่ครอบคลุมหลายส่วนประกอบ (Component) หรือบั๊กที่เกิดขึ้นเฉพาะการรวมตัวกันของสถานะ (State transition) บางอย่างได้ยาก

การวิเคราะห์โค้ดด้วย AI เช่น Project Glasswing สามารถอ่านและทำความเข้าใจซอร์สโค้ดพร้อมบริบท และค้นหาช่องโหว่ในระดับความละเอียดที่แตกต่างจาก Fuzzing ทั้งสองสิ่งนี้ไม่ใช่คู่แข่งแต่เป็นการเติมเต็มซึ่งกันและกัน ในการปฏิบัติจริงของ Shift Left แนวทางที่เป็นไปได้มากที่สุดในขณะนี้คือการรวม Fuzzing เข้าไว้ใน CI พร้อมกับการวิเคราะห์เชิงลึกด้วย AI เป็นระยะๆ

บทความที่กล่าวถึงคำศัพท์นี้

คำศัพท์ที่เกี่ยวข้อง

กฎหมาย EU AI Act (กฎระเบียบปัญญาประดิษฐ์ของสหภาพยุโรป)
ความปลอดภัย

กฎหมาย EU AI Act (กฎระเบียบปัญญาประดิษฐ์ของสหภาพยุโรป)

EU AI Act (กฎระเบียบปัญญาประดิษฐ์ของสหภาพยุโรป) คือกฎระเบียบครอบคลุมของสหภาพยุโรปที่กำหนดภาระผูกพันท

AI TRiSM (การบริหารจัดการความเชื่อมั่น ความเสี่ยง และความปลอดภัยของ AI)
ความปลอดภัย

AI TRiSM (การบริหารจัดการความเชื่อมั่น ความเสี่ยง และความปลอดภัยของ AI)

AI TRiSM คือกรอบแนวคิดโดยรวมที่ใช้เพื่อสร้างความมั่นใจในด้านความน่าเชื่อถือ การจัดการความเสี่ยง และค

ราวกั้น (AI Guardrails)
ความปลอดภัย

ราวกั้น (AI Guardrails)

กลไกความปลอดภัยที่ตรวจสอบอินพุตและเอาต์พุตของ LLM เพื่อตรวจจับและบล็อกเนื้อหาที่เป็นอันตราย การรั่วไ

ธรรมาภิบาล AI
ความปลอดภัย

ธรรมาภิบาล AI

ธรรมาภิบาล AI คือนโยบาย กระบวนการ และกลไกการกำกับดูแลขององค์กรที่รับรองจริยธรรม ความโปร่งใส และความร