บทช่วยสอนการทดสอบ Fuzz (Fuzzing)
การทดสอบ Fuzz คืออะไร?
การทดสอบฟัซ หรือ Fuzzing เป็นเทคนิคการทดสอบซอฟต์แวร์ในการใส่ข้อมูลที่ไม่ถูกต้องหรือสุ่มเรียกว่า FUZZ ลงในระบบซอฟต์แวร์เพื่อค้นหาข้อผิดพลาดในการเขียนโค้ดและช่องโหว่ด้านความปลอดภัย วัตถุประสงค์ของการทดสอบฟัซซี่คือการแทรกข้อมูลโดยใช้เทคนิคอัตโนมัติหรือกึ่งอัตโนมัติ และทดสอบระบบเพื่อหาข้อยกเว้นต่างๆ เช่น ระบบหยุดทำงานหรือความล้มเหลวของโค้ดในตัว เป็นต้น
การทดสอบ Fuzz ได้รับการพัฒนาครั้งแรกโดย Barton Miller แห่งมหาวิทยาลัยวิสคอนซินในปี 1989 การทดสอบ Fuzz หรือ fuzzing เป็นเทคนิคการทดสอบซอฟต์แวร์ชนิดหนึ่ง และเป็นประเภทของ การทดสอบความปลอดภัย.
ทำไมต้องทำ Fuzz Test?
- โดยปกติแล้ว การทดสอบ Fuzzy จะพบข้อผิดพลาดหรือข้อบกพร่องด้านความปลอดภัยที่ร้ายแรงที่สุด
- การทดสอบ Fuzz ให้ผลลัพธ์ที่มีประสิทธิภาพมากขึ้นเมื่อใช้ร่วมกับ สีดำ Box การทดสอบ, การทดสอบเบต้า และวิธีการแก้ไขข้อบกพร่องอื่นๆ
- การทดสอบ Fuzz ใช้เพื่อตรวจสอบช่องโหว่ของซอฟต์แวร์ เป็นเทคนิคการทดสอบที่คุ้มค่ามาก
- การทดสอบฟัซซ์เป็นหนึ่งในเทคนิคการทดสอบแบบกล่องดำ ฟัซซ์เป็นหนึ่งในวิธีที่แฮกเกอร์ใช้กันมากที่สุดเพื่อค้นหาช่องโหว่ของระบบ
วิธีทำการทดสอบ Fuzz
ขั้นตอนสำหรับการทดสอบแบบคลุมเครือรวมถึงขั้นตอนการทดสอบพื้นฐาน-
ขั้นตอน 1) ระบุระบบเป้าหมาย
ขั้นตอน 2) ระบุอินพุต
ขั้นตอน 3) สร้างข้อมูลที่คลุมเครือ
ขั้นตอน 4) ดำเนินการทดสอบโดยใช้ข้อมูลที่ไม่ชัดเจน
ขั้นตอน 5) ตรวจสอบพฤติกรรมของระบบ
ขั้นตอน 6) บันทึกข้อบกพร่อง
ตัวอย่างของ Fuzzers
- Fuzzers ที่ใช้การกลายพันธุ์ แก้ไขตัวอย่างข้อมูลที่มีอยู่เพื่อสร้างข้อมูลทดสอบใหม่ นี่เป็นแนวทางที่ง่ายและตรงไปตรงมา โดยเริ่มต้นด้วยตัวอย่างโปรโตคอลที่ถูกต้อง และคอยจัดการทุกไบต์หรือไฟล์
- Fuzzers ตามรุ่น กำหนดข้อมูลใหม่ตามอินพุตของโมเดล มันเริ่มสร้างอินพุตตั้งแต่ต้นตามข้อกำหนด
- Fuzzer ตามโปรโตคอลfuzzer ที่ประสบความสำเร็จมากที่สุดคือการมีความรู้โดยละเอียดเกี่ยวกับรูปแบบโปรโตคอลที่กำลังทดสอบ ความเข้าใจขึ้นอยู่กับข้อกำหนด มันเกี่ยวข้องกับการเขียนอาร์เรย์ของข้อกำหนดลงในเครื่องมือ จากนั้นโดยใช้เทคนิคการสร้างการทดสอบตามแบบจำลองผ่านข้อกำหนดและเพิ่มความผิดปกติในเนื้อหาข้อมูล ลำดับ ฯลฯ ซึ่งเรียกอีกอย่างว่าการทดสอบไวยากรณ์ การทดสอบไวยากรณ์ การทดสอบความทนทาน เป็นต้น Fuzzer สามารถสร้างกรณีทดสอบจากกรณีที่มีอยู่ หรืออาจใช้อินพุตที่ถูกต้องหรือไม่ถูกต้องก็ได้
มีข้อจำกัดสองประการของการคลุมเครือตามโปรโตคอล:
- การทดสอบไม่สามารถดำเนินการได้จนกว่าข้อกำหนดจะครบกำหนด
- โปรโตคอลที่มีประโยชน์มากมายเป็นส่วนขยายของโปรโตคอลที่เผยแพร่ หากการทดสอบฟัซเซิลเป็นไปตามข้อกำหนดที่เผยแพร่ ความคุ้มครองการทดสอบ สำหรับโปรโตคอลใหม่จะถูกจำกัด
เทคนิคการคลุมเครือรูปแบบที่ง่ายที่สุดคือการส่งข้อมูลแบบสุ่มไปยังซอฟต์แวร์ ไม่ว่าจะเป็นแพ็กเก็ตโปรโตคอลหรือเป็นเหตุการณ์ เทคนิคการส่งผ่านอินพุตแบบสุ่มนี้มีประสิทธิภาพมากในการค้นหาข้อบกพร่องในแอปพลิเคชันและบริการต่างๆ นอกจากนี้ยังมีเทคนิคอื่นๆ อีกด้วย และนำไปปฏิบัติได้ง่ายมาก เพื่อนำเทคนิคเหล่านี้ไปใช้ เราเพียงแค่ต้องเปลี่ยนอินพุตที่มีอยู่ เราสามารถเปลี่ยนอินพุตได้โดยการแลกเปลี่ยนบิตของอินพุต
ประเภทของจุดบกพร่องที่ตรวจพบโดย Fuzz Testing
- การยืนยันล้มเหลวและหน่วยความจำรั่ว วิธีการนี้ใช้กันอย่างแพร่หลายสำหรับการใช้งานขนาดใหญ่ซึ่งมีจุดบกพร่องที่ส่งผลต่อความปลอดภัยของหน่วยความจำ ซึ่งเป็นช่องโหว่ที่รุนแรง
- อินพุตไม่ถูกต้อง ในการทดสอบฟัซเซอร์ ฟัซเซอร์จะใช้เพื่อสร้างอินพุตที่ไม่ถูกต้องซึ่งใช้สำหรับทดสอบรูทีนการจัดการข้อผิดพลาด และนี่เป็นสิ่งสำคัญสำหรับซอฟต์แวร์ที่ไม่ได้ควบคุมอินพุตของมัน การคลุมเครืออย่างง่ายสามารถเรียกได้ว่าเป็นวิธีหนึ่งในการทำให้การทดสอบเชิงลบเป็นแบบอัตโนมัติ
- ข้อผิดพลาดที่ถูกต้อง นอกจากนี้ Fuzzing ยังสามารถใช้เพื่อตรวจจับข้อบกพร่อง "ความถูกต้อง" บางประเภทได้ เช่น ฐานข้อมูลเสียหาย ผลการค้นหาไม่ดี เป็นต้น
เครื่องมือทดสอบฟัซ
เครื่องมือที่ใช้ในการรักษาความปลอดภัยเว็บสามารถนำมาใช้กันอย่างแพร่หลายในการทดสอบแบบฟัซซี่เช่น Burp Suite, พีช ฟูซเซอร์ เป็นต้น
- พีชฟัซเซอร์: Peach Fuzzer ให้ความคุ้มครองที่แข็งแกร่งและปลอดภัยมากกว่าสแกนเนอร์ เครื่องมือทดสอบอื่นๆ สามารถค้นหาเฉพาะเธรดที่รู้จักเท่านั้น ในขณะที่ Peach Fuzzer ช่วยให้ผู้ใช้สามารถค้นหาเธรดที่รู้จักและไม่รู้จักได้
- สไปค์พร็อกซี: เป็นเครื่องมือระดับมืออาชีพที่มองหาช่องโหว่ระดับแอปพลิเคชันในแอปพลิเคชันเว็บ SPIKE Proxy ครอบคลุมพื้นฐาน เช่น SQL การแทรกและการเขียนสคริปต์ข้ามไซต์ แต่เปิดโดยสมบูรณ์ Python โครงสร้างพื้นฐาน SPIKE Proxy มีให้สำหรับ ลินุกซ์ และ Windows.
- แมลงปีกแข็ง: มี Webscarab เขียนไว้ Java จึงพกพาไปได้หลายแพลตฟอร์ม สำหรับการวิเคราะห์แอปพลิเคชัน Webscarab framework จะใช้ซึ่งสื่อสารโดยใช้โปรโตคอล HTTP และ HTTPSEx: Webscarab ทำหน้าที่เป็นพร็อกซีในการสกัดกั้น โดยอนุญาตให้ผู้ปฏิบัติการตรวจสอบและแก้ไขคำขอที่สร้างโดยเบราว์เซอร์ก่อนที่คำขอจะถูกส่งถึงเซิร์ฟเวอร์ และอนุญาตให้ตรวจสอบและอัปเดตคำตอบที่สร้างโดยเซิร์ฟเวอร์ก่อนที่เบราว์เซอร์จะได้รับ ด้วยวิธีนี้ หาก Web Scarab พบช่องโหว่ใดๆ ก็จะสร้างรายการปัญหาที่รายงาน
- OWASP WSFuzzer: WSFuzzer เป็นโปรแกรม GPL ที่เขียนมา Python. โปรแกรม GPL เป็นเป้าหมายของบริการเว็บในปัจจุบัน ในเวอร์ชันปัจจุบันของ OWASPWSFuzzer ที่ใช้ HTTP บริการสบู่ เป็นเป้าหมายหลัก
ข้อดีของการทดสอบ Fuzz
- การทดสอบ Fuzz ช่วยปรับปรุงซอฟต์แวร์ การทดสอบความปลอดภัย.
- ข้อบกพร่องที่พบในการคลุมเครือบางครั้งอาจรุนแรงและส่วนใหญ่มักถูกใช้โดยแฮกเกอร์ เช่น การแครช หน่วยความจำรั่ว ข้อยกเว้นที่ไม่สามารถจัดการได้ เป็นต้น
- หากข้อผิดพลาดใดๆ ไม่ปรากฏโดยผู้ทดสอบเนื่องจากการจำกัดเวลาและทรัพยากร ข้อบกพร่องเหล่านั้นก็จะพบได้ในการทดสอบ Fuzz ด้วย
ข้อเสียของการทดสอบ Fuzz
- การทดสอบ Fuzz เพียงอย่างเดียวไม่สามารถให้ภาพที่สมบูรณ์ของภัยคุกคามหรือข้อบกพร่องด้านความปลอดภัยโดยรวมได้
- การทดสอบ Fuzz มีประสิทธิภาพน้อยกว่าในการจัดการกับภัยคุกคามความปลอดภัยที่ไม่ทำให้โปรแกรมล่ม เช่น ไวรัส เวิร์ม โทรจัน ฯลฯ
- การทดสอบ Fuzz สามารถตรวจจับได้เฉพาะข้อบกพร่องหรือภัยคุกคามทั่วไปเท่านั้น
- เพื่อให้ดำเนินการได้อย่างมีประสิทธิภาพจะต้องใช้เวลานานพอสมควร
- การกำหนดเงื่อนไขค่าขอบเขตด้วยอินพุตแบบสุ่มนั้นเป็นปัญหามาก แต่ในปัจจุบัน การใช้อัลกอริทึมแบบกำหนดค่าตามอินพุตของผู้ใช้ ทำให้ผู้ทดสอบส่วนใหญ่สามารถแก้ไขปัญหานี้ได้
สรุป
ในสาขาวิศวกรรมซอฟต์แวร์ การทดสอบ Fuzz แสดงให้เห็นว่ามีจุดบกพร่องในแอปพลิเคชัน การคลุมเครือไม่สามารถรับประกันการตรวจจับข้อบกพร่องได้อย่างสมบูรณ์ในแอปพลิเคชัน แต่ด้วยการใช้เทคนิค Fuzz ช่วยให้มั่นใจได้ว่าแอปพลิเคชันนั้นแข็งแกร่งและปลอดภัย เนื่องจากเทคนิคนี้ช่วยเปิดเผยช่องโหว่ทั่วไปส่วนใหญ่