คู่มือที่ครอบคลุมสำหรับการทดสอบฟัซซ์
เผยแพร่แล้ว: 2021-05-17การทดสอบความปลอดภัยเป็นหนึ่งในขั้นตอนที่สำคัญที่สุดในการตรวจสอบว่าซอฟต์แวร์ของคุณพร้อมสำหรับการเปิดตัวอย่างเป็นทางการ ไม่ว่าจะเพื่อวัตถุประสงค์ทางธุรกิจหรือในเชิงพาณิชย์ ช่วยให้คุณสามารถตรวจจับช่องโหว่ที่ซอฟต์แวร์ของคุณอาจมีและพัฒนามาตรการรับมือหากแฮ็กเกอร์ใช้ประโยชน์จากข้อบกพร่องดังกล่าว
หากคุณสนใจในการทดสอบความปลอดภัย คุณสามารถเรียนรู้ข้อเท็จจริงได้ที่นี่ แต่สิ่งหนึ่งที่คุณต้องรู้ก็คือมีวิธีต่างๆ ในการทดสอบความปลอดภัย เช่น การประเมินความเสี่ยง การทดสอบการเจาะระบบ และการสแกนช่องโหว่ และถ้าคุณคุ้นเคยกับการทดสอบความปลอดภัยเล็กน้อยแล้ว คุณอาจเคยได้ยินคำว่า 'การทดสอบแบบคลุมเครือ'
การทดสอบ Fuzz เป็นเทคนิคการทดสอบที่ใช้กันทั่วไปในอุตสาหกรรมในปัจจุบัน โดยเฉพาะอย่างยิ่งเมื่อบริษัทยักษ์ใหญ่อย่าง Microsoft และ Google ใช้งานมันมานานกว่าทศวรรษ แต่สิ่งที่น่าประหลาดใจก็คือถึงแม้จะเป็นเทคนิคมาตรฐาน แต่ก็มีคนจำนวนไม่มากที่รู้เรื่องนี้ ต้องบอกว่าคู่มือนี้มีจุดมุ่งหมายเพื่ออธิบายว่าการทดสอบ fuzz คืออะไรโดยเริ่มจากคำจำกัดความ
การทดสอบ Fuzz คืออะไร?
การทดสอบ Fuzz หรือสิ่งที่คนอื่นเรียกว่า 'fuzzing' เกี่ยวข้องกับการป้อนข้อมูลที่ไม่ถูกต้องหรือสุ่มลงในโปรแกรมเพื่อตรวจหาช่องโหว่ที่อาจนำไปสู่ข้อผิดพลาดที่สามารถใช้ประโยชน์ได้ อินพุตนี้สามารถอยู่ในรูปแบบของไฟล์หรืออินพุตโดยตรงจากผู้ใช้ ตัวอย่างเช่น หากคุณกำลังสร้างโปรแกรมคำนวณ คุณจะต้องป้อนตัวเลขหรือการคำนวณทางคณิตศาสตร์ แต่หากคุณกำลังดำเนินการทดสอบแบบคลุมเครือ คุณจะต้องป้อนข้อมูลที่ไม่ถูกต้อง เช่น ตัวอักษร หรือแม้แต่อักขระพิเศษ
หากการทำเช่นนี้ทำให้โปรแกรมขัดข้องหรือทำให้เกิดข้อผิดพลาดประเภทอื่น โปรแกรมเมอร์จะถือว่ามีช่องโหว่ ดังนั้นจึงสามารถดำเนินการแก้ไขการเข้ารหัสโดยหวังว่าจะสามารถแก้ไขปัญหาได้ เมื่อมองแวบแรก คุณคิดว่าการทดสอบแบบคลุมเครือนั้นเหมือนกับเทคนิคอื่นๆ เช่น การสแกนช่องโหว่หรือการทดสอบการเจาะระบบ แต่มีเหตุผลสำหรับความนิยม
เหตุใดบริษัทต่างๆ จึงใช้การทดสอบแบบ Fuzz
ไม่มีโซลูชันใดที่เหมาะกับการทดสอบความปลอดภัย แต่ละวิธีสามารถตรวจพบปัญหาที่คนอื่นไม่สามารถทำได้ บางอย่างต้องการต้นทุนการดำเนินงานที่ต่ำกว่า ในขณะที่บางประเภทนั้นทำได้ง่ายกว่า เช่นเดียวกับเทคนิคการทดสอบความปลอดภัยทั้งหมด การทดสอบแบบคลุมเครือนั้นมีเอกลักษณ์เฉพาะตัวในแบบของตัวเอง ด้านล่างนี้คือข้อดีบางประการที่ผลักดันให้บริษัทต่างๆ ใช้การทดสอบแบบคลุมเครือ
- ความ เรียบง่าย: คุณรู้อยู่แล้วว่าการทดสอบ fuzz ทำงานอย่างไร—มันเป็นเรื่องของการป้อนข้อมูลที่ไม่ถูกต้องลงในโปรแกรม ความเรียบง่ายของกระบวนการโดยทั่วไปถือเป็นข้อได้เปรียบที่ดีสำหรับบุคคลหรือองค์กรที่ขาดทักษะและประสบการณ์ในแง่ของการทดสอบความปลอดภัย
- ระบบอัตโนมัติ: การทดสอบความปลอดภัยอาจเป็นขั้นตอนสำคัญในการพัฒนาซอฟต์แวร์และแอปพลิเคชัน แต่บ่อยครั้ง ยังมีสิ่งอื่นที่ต้องทำนอกเหนือจากการทดสอบโปรแกรมอย่างต่อเนื่อง อย่างไรก็ตาม การทดสอบแบบฟัซซ์เป็นอีกเรื่องหนึ่ง เนื่องจากคุณสามารถทำให้กระบวนการทั้งหมดเป็นแบบอัตโนมัติโดยใช้เครื่องมือฟัซเซอร์
Fuzzers เป็นเครื่องมือที่รับผิดชอบในการป้อนข้อมูลลงในโปรแกรมโดยอัตโนมัติหากได้รับคำสั่งและเงื่อนไขที่จำเป็น ความจริงที่ว่าการทดสอบแบบ fuzz ช่วยให้ธุรกิจทำงานอัตโนมัติได้ ทำให้เป็นเทคนิคการทดสอบในอุดมคติสำหรับบริษัทต่างๆ
- สะดวก: โดยปกติ เมื่อทำการทดสอบ เราจำเป็นต้องใช้เครื่องมือให้มากที่สุดเท่าที่เป็นไปได้เพื่อลดโอกาสในการเกิดข้อผิดพลาดและเพิ่มความปลอดภัยของโปรแกรมสูงสุด เนื่องจากการทดสอบแบบ fuzz เป็นไปโดยอัตโนมัติและตรงไปตรงมา จึงเป็นวิธีที่สะดวกในการปรับปรุงความปลอดภัยของซอฟต์แวร์
โดยทั่วไปแล้ว Fuzzing นั้นง่ายและใช้งานง่าย แต่ควรสังเกตว่ามีวิธีการทดสอบ Fuzz ทุกประเภท ความยากและความซับซ้อนของกระบวนการทดสอบอาจแตกต่างกันไปขึ้นอยู่กับประเภทที่คุณใช้ ในบันทึกย่อนั้น นี่อาจเป็นเวลาดีที่จะพูดถึงการทดสอบแบบฟัซซ์ประเภทต่างๆ
แนวทางที่แตกต่างในการทดสอบแบบคลุมเครือ
แม้ว่าจะมีการทดสอบ fuzz หลายประเภท แต่ส่วนใหญ่จะคล้ายกัน ยกเว้นว่าจะสร้างอินพุตต่างกัน มีสี่วิธีในการทดสอบ fuzz:
- Dumb Fuzzing: เมื่อต้องการสร้างอินพุตแบบสุ่มโดยสมบูรณ์ พวกเขามักจะใช้ fuzzer โง่ fuzzer ที่โง่เขลาเป็นเครื่องมือที่สร้างอินพุตโดยปราศจากความรู้หรือสติปัญญาของโปรแกรมก่อน จึงเป็นที่มาของชื่อ
ตัวอย่างเช่น หากคุณกำลังสร้างโปรแกรมตรวจสอบไวยากรณ์ โปรแกรมฟังซ์เซอร์ที่โง่เขลาอาจสร้างภาพขึ้นมา ซึ่งอยู่ไกลจากสิ่งที่โปรแกรมคาดไว้ Dumb fuzzing เป็นแนวทางที่ง่ายที่สุดในการทดสอบ fuzz
- สมาร์ทฟัซซิ่ง: อีกด้านหนึ่งของเหรียญคือฟัซซิ่งอัจฉริยะ ต่างจาก fuzzing โง่ ๆ การ fuzzing อัจฉริยะจะสร้างอินพุตโดยรู้ว่าโปรแกรมคาดหวังจะได้รับอะไร นอกจากนี้ fuzzer อัจฉริยะจะไม่สร้างอินพุตที่จะทำให้โปรแกรมขัดข้องอย่างหลีกเลี่ยงไม่ได้ แต่จะมาพร้อมกับข้อมูลที่อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด
ในตัวอย่างก่อนหน้านี้ ฟิวเซอร์อัจฉริยะอาจสร้างอักขระพิเศษแต่จะไม่สร้างภาพหรืออินพุตที่ไม่เหมาะสมอื่นๆ แม้ว่าเครื่องพ่นสีอัจฉริยะจะใช้งานได้ยากกว่าเครื่องพ่นสีแบบใบ้ แต่ส่วนใหญ่จะแม่นยำกว่า
- Mutational Fuzzing: Mutational fuzzing เกี่ยวข้องกับการสร้างอินพุตโดยการแก้ไขหรือโดยเฉพาะอย่างยิ่ง 'การกลายพันธุ์' อินพุตที่ถูกต้องที่มีอยู่ ในตัวอย่างของเรากับโปรแกรมเครื่องคิดเลข ฟิวเซอร์การกลายพันธุ์อาจเลือกอินพุตที่ถูกต้องที่มีอยู่
สมมติว่าอินพุตที่เลือกคือ '10+9' fuzzer ที่กลายพันธุ์จะพยายามแก้ไขอินพุตนี้โดยการเพิ่ม ลบ หรือแก้ไขส่วนหนึ่งของอินพุตนี้ เช่น การเพิ่มค่าและเปลี่ยนเป็น '180+129' หรือเปลี่ยนการดำเนินการให้เป็น '10/9'
- Generational Fuzzing: สุดท้าย fuzzing ทั่วไปจะสร้างอินพุตตั้งแต่เริ่มต้น ซึ่งตรงกันข้ามกับ fuzzing การกลายพันธุ์ที่สร้างอินพุตจากที่มีอยู่ เนื่องจากไม่มีการอ้างอิง fuzzers รุ่นจึงยากที่จะนำไปใช้มากกว่า fuzzers การกลายพันธุ์ แต่พวกเขาสามารถนำไปสู่ข้อมูลเพิ่มเติมสำหรับผู้ทดสอบ
สิ่งที่ทำให้การทดสอบ fuzz มีความน่าสนใจมากกว่าเทคนิคอื่นๆ เล็กน้อยคือ คุณสามารถรวมประเภทต่าง ๆ เข้าด้วยกันเพื่อปรับปรุงเครื่องมือทดสอบ ตัวอย่างเช่น คุณสามารถสร้าง fuzzer กลายพันธุ์อัจฉริยะหรือ fuzzer รุ่นโง่ ขึ้นอยู่กับว่าโปรแกรมของคุณต้องการอะไร บางทีชุดค่าผสมที่นับไม่ถ้วนที่คุณสามารถทำได้ด้วยการทดสอบแบบคลุมเครือก็เป็นอีกเหตุผลหนึ่งที่บริษัทต่างๆ ชอบการทดสอบแบบคลุมเครือมากกว่าวิธีอื่นๆ
ห่อ
เมื่อคุณได้ทราบข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบ fuzz แล้ว คุณจะเห็นได้ง่าย ๆ ว่าทำไมจึงได้รับความนิยมอย่างที่เป็นอยู่ตอนนี้ อย่างไรก็ตาม เป็นที่น่าสังเกตว่า เช่นเดียวกับเทคนิคอื่นๆ การทดสอบ fuzz มีข้อเสียอยู่บ้าง ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องพิจารณาว่าการทดสอบแบบฟัซซ์สามารถให้ผลดีมากกว่าความเสียหายต่อแอปพลิเคชันหรือซอฟต์แวร์ของคุณหรือไม่ ดังที่กล่าวไว้ก่อนหน้านี้ ไม่มีโซลูชันใดที่เหมาะกับการทดสอบความปลอดภัยของซอฟต์แวร์ และการทดสอบแบบคลุมเครือก็ไม่ใช่โซลูชันนั้นอย่างแน่นอน
มีความคิดเกี่ยวกับเรื่องนี้หรือไม่? แจ้งให้เราทราบด้านล่างในความคิดเห็นหรือดำเนินการสนทนาไปที่ Twitter หรือ Facebook ของเรา