การทำฟัซซิง (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 เป็นระยะๆ

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

AI ROI (ผลตอบแทนจากการลงทุนด้าน AI)
AI สำหรับธุรกิจ

AI ROI (ผลตอบแทนจากการลงทุนด้าน AI)

AI ROI คือ ตัวชี้วัดที่ใช้วัดผลลัพธ์เชิงปริมาณของการปรับปรุงประสิทธิภาพการทำงานและการเพิ่มรายได้ที่ไ

AI พยากรณ์ความต้องการ (Demand Forecasting AI)
AI สำหรับธุรกิจ

AI พยากรณ์ความต้องการ (Demand Forecasting AI)

AI คาดการณ์ความต้องการ (Demand Forecasting AI) คือระบบที่วิเคราะห์ข้อมูลการขายในอดีตและปัจจัยภายนอกด

AI ออบเซอร์แวนบิลิตี้ (AI Observability)
AI สำหรับธุรกิจ

AI ออบเซอร์แวนบิลิตี้ (AI Observability)

แนวปฏิบัติในการดำเนินงานเพื่อติดตามและแสดงผลข้อมูลการทำงานของระบบ AI ที่ใช้งานจริงอย่างต่อเนื่อง ทั้

BPO (การจ้างภายนอกเพื่อดำเนินกระบวนการทางธุรกิจ)
AI สำหรับธุรกิจ

BPO (การจ้างภายนอกเพื่อดำเนินกระบวนการทางธุรกิจ)

BPO คือรูปแบบการ outsourcing ที่องค์กรมอบหมายกระบวนการทางธุรกิจเฉพาะด้านให้กับผู้ให้บริการภายนอกที่ม