Fuzzing คืออะไร?

อะไรฟุ้งซ่าน

บทนำ: Fuzzing คืออะไร?

ในปี 2014 แฮ็กเกอร์ชาวจีน เจาะเข้าสู่ระบบสุขภาพชุมชนซึ่งเป็นเครือข่ายโรงพยาบาลที่แสวงหาผลกำไรของสหรัฐฯ และขโมยข้อมูลผู้ป่วย 4.5 ล้านราย แฮ็กเกอร์ใช้ประโยชน์จากข้อบกพร่องที่เรียกว่า Heartbleed ซึ่งถูกค้นพบในไลบรารีการเข้ารหัส OpenSSL หลายเดือนก่อนการแฮ็ก

Heartbleed เป็นตัวอย่างของคลาสของเวกเตอร์การโจมตีที่ช่วยให้ผู้โจมตีสามารถเข้าถึงเป้าหมายได้โดยการส่งคำขอที่ผิดรูปแบบซึ่งมีผลเพียงพอในการผ่านการตรวจสอบเบื้องต้น ในขณะที่มืออาชีพที่ทำงานในส่วนต่าง ๆ ของแอปพยายามอย่างดีที่สุดเพื่อรับรองความปลอดภัย เป็นไปไม่ได้ที่จะนึกถึงกรณีทุกมุมที่อาจทำให้แอปเสียหายหรือทำให้เกิดช่องโหว่ในระหว่างการพัฒนา

นี่คือที่มาของ 'ฟัซซิ่ง'

Fuzzing Attack คืออะไร?

Fuzzing, Fuzz Testing หรือ Fuzzing Attack เป็นเทคนิคการทดสอบซอฟต์แวร์อัตโนมัติที่ใช้ในการป้อนข้อมูลแบบสุ่ม ไม่คาดคิด หรือไม่ถูกต้อง (เรียกว่า Fuzz) เข้าสู่โปรแกรม โปรแกรมจะถูกตรวจสอบสำหรับลักษณะการทำงานที่ผิดปกติหรือไม่คาดคิด เช่น บัฟเฟอร์ล้น แครช หน่วยความจำรั่ว เธรดค้าง และการละเมิดการเข้าถึงการอ่าน/เขียน เครื่องมือ fuzzing หรือ fuzzer นั้นถูกใช้เพื่อค้นหาสาเหตุของพฤติกรรมที่ผิดปกติ

Fuzzing ตั้งอยู่บนสมมติฐานที่ว่าระบบทั้งหมดมีข้อบกพร่องที่รอการค้นพบ และสามารถให้เวลาและทรัพยากรเพียงพอในการดำเนินการดังกล่าว ระบบส่วนใหญ่มีตัวแยกวิเคราะห์หรือการป้องกันการตรวจสอบอินพุตที่ดีมาก อาชญากรไซเบอร์ จากการใช้ประโยชน์จากบั๊กสมมุติในโปรแกรม อย่างไรก็ตาม ดังที่เราได้กล่าวไว้ข้างต้น การครอบคลุมทุกมุมของเคสในระหว่างการพัฒนานั้นเป็นเรื่องยาก

Fuzzers ใช้กับโปรแกรมที่ใช้อินพุตที่มีโครงสร้างหรือมีขอบเขตความน่าเชื่อถือบางประเภท ตัวอย่างเช่น โปรแกรมที่ยอมรับไฟล์ PDF จะมีการตรวจสอบบางอย่างเพื่อให้แน่ใจว่าไฟล์มีนามสกุล .pdf และโปรแกรมแยกวิเคราะห์เพื่อประมวลผลไฟล์ PDF

ฟัซเซอร์ที่มีประสิทธิภาพสามารถสร้างอินพุตที่ถูกต้องเพียงพอที่จะผ่านขอบเขตเหล่านี้ แต่ไม่ถูกต้องพอที่จะทำให้เกิดพฤติกรรมที่ไม่คาดคิดในโปรแกรม นี่เป็นสิ่งสำคัญเพราะการผ่านการตรวจสอบไม่ได้มีความหมายมากนักหากไม่มีอันตรายเพิ่มเติมเกิดขึ้น

Fuzzers ค้นพบเวกเตอร์การโจมตีที่คล้ายกับและรวมถึงสิ่งที่ชอบของ SQL Injection, การเขียนสคริปต์ข้ามไซต์, บัฟเฟอร์โอเวอร์โฟลว์ และการโจมตีแบบปฏิเสธการให้บริการ การโจมตีทั้งหมดนี้เป็นผลมาจากการป้อนข้อมูลที่ไม่คาดคิด ไม่ถูกต้อง หรือสุ่มเข้าสู่ระบบ 

 

ประเภทของฟัซเซอร์

Fuzzers สามารถจำแนกตามลักษณะบางประการ:

  1. โจมตีเป้าหมาย
  2. วิธีการสร้าง Fuzz
  3. ความตระหนักในโครงสร้างอินพุต
  4. การรับรู้โครงสร้างโปรแกรม

1. โจมตีเป้าหมาย

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

ตัวอย่างเช่น เมื่อจัดการกับแอปพลิเคชัน ความพยายามในการ fuzzing ทั้งหมดจะเกิดขึ้นที่ช่องทางอินพุตต่างๆ ของแอปพลิเคชัน เช่น อินเทอร์เฟซผู้ใช้ เทอร์มินัลบรรทัดคำสั่ง อินพุตฟอร์ม/ข้อความ และการอัปโหลดไฟล์ ดังนั้นอินพุตทั้งหมดที่สร้างโดย Fuzzer จะต้องตรงกับช่องเหล่านี้

ฟัซเซอร์ที่จัดการกับโปรโตคอลการสื่อสารต้องจัดการกับแพ็กเก็ต ฟัซเซอร์ที่กำหนดเป้าหมายไปที่แพลตฟอร์มนี้สามารถสร้างแพ็กเก็ตปลอม หรือแม้แต่ทำหน้าที่เป็นพร็อกซีเพื่อแก้ไขแพ็กเก็ตที่สกัดกั้นและเล่นซ้ำ

2. วิธีการสร้าง Fuzz

Fuzzers ยังสามารถจำแนกตามวิธีที่พวกเขาสร้างข้อมูลเพื่อ fuzzer ในอดีต ฟัซเซอร์สร้างฟัซโดยสร้างข้อมูลแบบสุ่มตั้งแต่เริ่มต้น นี่คือวิธีที่ศาสตราจารย์ Barton Miller ผู้ริเริ่มเทคนิคนี้ทำในตอนแรก ฟัซเซอร์ประเภทนี้เรียกว่า fuzzer ตามรุ่น.

อย่างไรก็ตาม แม้ว่าในทางทฤษฎีแล้ว เราอาจสร้างข้อมูลที่จะข้ามขอบเขตความน่าเชื่อถือได้ แต่ก็ต้องใช้เวลาและทรัพยากรพอสมควรในการดำเนินการดังกล่าว ดังนั้นวิธีนี้จึงมักใช้กับระบบที่มีโครงสร้างอินพุตแบบธรรมดา

วิธีแก้ไขปัญหานี้คือการกลายพันธุ์ข้อมูลที่ทราบว่าถูกต้องเพื่อสร้างข้อมูลที่ถูกต้องเพียงพอที่จะผ่านขอบเขตความน่าเชื่อถือ แต่ไม่ถูกต้องเพียงพอที่จะทำให้เกิดปัญหา ตัวอย่างที่ดีของเรื่องนี้คือ DNS ฟัซเซอร์ ซึ่งใช้ชื่อโดเมนแล้วสร้างรายชื่อโดเมนจำนวนมากเพื่อตรวจหาโดเมนที่อาจเป็นอันตรายซึ่งกำหนดเป้าหมายไปที่เจ้าของโดเมนที่ระบุ

วิธีนี้ฉลาดกว่าวิธีก่อนหน้าและจำกัดการเรียงสับเปลี่ยนที่เป็นไปได้ให้แคบลงอย่างมาก ฟัซเซอร์ที่ใช้วิธีนี้เรียกว่า fuzzers ที่ใช้การกลายพันธุ์

มีวิธีที่สามล่าสุดที่ใช้อัลกอริทึมทางพันธุกรรมเพื่อรวมข้อมูลฟัซที่เหมาะสมที่สุดซึ่งจำเป็นต่อการอุดช่องโหว่ มันทำงานโดยปรับแต่งข้อมูล fuzz อย่างต่อเนื่อง โดยคำนึงถึงประสิทธิภาพของข้อมูลทดสอบแต่ละรายการเมื่อป้อนเข้าสู่โปรแกรม 

ชุดข้อมูลที่มีประสิทธิภาพแย่ที่สุดจะถูกลบออกจากดาต้าพูล ในขณะที่ชุดข้อมูลที่ดีที่สุดจะถูกแปลงและ/หรือรวมกัน ข้อมูลรุ่นใหม่จะถูกใช้เพื่อทดสอบแบบฟัซซ์อีกครั้ง ฟัซเซอร์เหล่านี้เรียกว่า ฟัซเซอร์ที่อาศัยการกลายพันธุ์ตามวิวัฒนาการ

3. ความตระหนักในโครงสร้างอินพุต

การจัดหมวดหมู่นี้ขึ้นอยู่กับว่า fuzzer รับรู้และใช้โครงสร้างอินพุตของโปรแกรมในการสร้างข้อมูล fuzz หรือไม่ ก fuzzer ใบ้ (ฟิซเซอร์ที่ไม่รู้จักโครงสร้างอินพุตของโปรแกรม) สร้างฟัซเซอร์ในลักษณะสุ่มเป็นส่วนใหญ่ ซึ่งอาจรวมถึงฟิซเซอร์ทั้งเจนเนอเรชั่นและมิวเทชั่น 


หาก fuzzer ได้รับโมเดลอินพุตของโปรแกรม fuzzer สามารถลองสร้างหรือเปลี่ยนแปลงข้อมูลในลักษณะที่ตรงกับโมเดลอินพุตที่ให้มา วิธีการนี้ช่วยลดจำนวนทรัพยากรที่ใช้ไปในการสร้างข้อมูลที่ไม่ถูกต้อง ฟัซเซอร์ดังกล่าวเรียกว่า ฟัซเซอร์อัจฉริยะ.

4. ความตระหนักในโครงสร้างหลักสูตร

Fuzzers ยังสามารถจัดประเภทโดยขึ้นอยู่กับว่าพวกเขาตระหนักถึงการทำงานภายในของโปรแกรมที่พวกเขากำลัง fuzzing หรือไม่ และใช้การรับรู้นั้นเพื่อช่วยในการสร้างข้อมูล fuzz เมื่อใช้ฟัซเซอร์เพื่อทดสอบโปรแกรมโดยไม่เข้าใจโครงสร้างภายใน จะเรียกว่าการทดสอบกล่องดำ 

ข้อมูล Fuzz ที่สร้างขึ้นระหว่างการทดสอบกล่องดำมักจะเป็นแบบสุ่ม เว้นแต่ Fuzzer จะเป็น Fuzzer ที่มีการกลายพันธุ์ตามวิวัฒนาการ ซึ่งมัน 'เรียนรู้' โดยการตรวจสอบผลของการ Fuzzing และใช้ข้อมูลนั้น ข้อมูล เพื่อปรับแต่งชุดข้อมูลฟัซ

ในทางกลับกัน การทดสอบกล่องขาวจะใช้แบบจำลองของโครงสร้างภายในของโปรแกรมเพื่อสร้างข้อมูลฟัซ วิธีการนี้ช่วยให้ fuzzer เข้าถึงตำแหน่งที่สำคัญในโปรแกรมและทดสอบได้ 

เครื่องมือ Fuzzing ยอดนิยม

มีฟัวกราส์มากมาย เครื่องมือ ใช้โดยผู้ทดสอบปากกา บางส่วนที่ได้รับความนิยมมากที่สุดคือ:

ข้อ จำกัด ของการฟัซซิ่ง

แม้ว่า Fuzzing จะเป็นเทคนิคการทดสอบด้วยปากกาที่มีประโยชน์มาก แต่ก็ใช่ว่าจะไม่มีข้อบกพร่อง บางส่วนของเหล่านี้คือ:

  • ใช้เวลาวิ่งค่อนข้างนาน
  • ข้อขัดข้องและลักษณะการทำงานที่ไม่คาดคิดอื่นๆ ที่พบในระหว่างการทดสอบกล่องดำของโปรแกรมอาจเป็นเรื่องยาก หากไม่สามารถวิเคราะห์หรือดีบักได้
  • การสร้างเทมเพลตการกลายพันธุ์สำหรับฟัซเซอร์ที่ใช้การกลายพันธุ์แบบสมาร์ทอาจใช้เวลานาน บางครั้ง อาจไม่สามารถทำได้เนื่องจากรูปแบบการป้อนข้อมูลเป็นกรรมสิทธิ์หรือไม่ทราบ

 

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

สรุป

Fuzzing เป็นเทคนิคการทดสอบด้วยปากกาอันทรงพลังที่สามารถใช้เพื่อเปิดเผยช่องโหว่ในซอฟต์แวร์ มีฟัซเซอร์หลายประเภทและมีการพัฒนาฟิซเซอร์ใหม่อยู่ตลอดเวลา แม้ว่าการฟัซซิ่งเป็นเครื่องมือที่มีประโยชน์อย่างเหลือเชื่อ แต่ก็มีข้อจำกัด ตัวอย่างเช่น ฟัซเซอร์สามารถค้นหาช่องโหว่จำนวนมากเท่านั้นและอาจใช้ทรัพยากรค่อนข้างมาก อย่างไรก็ตาม หากคุณต้องการลองใช้เทคนิคที่น่าทึ่งนี้ด้วยตัวคุณเอง เรามี DNS Fuzzer API ฟรีที่คุณสามารถใช้ได้บนแพลตฟอร์มของเรา 

ดังนั้นสิ่งที่คุณรอ? 

เริ่มฟัดได้แล้ววันนี้!

ผ่านการเซ็นเซอร์ TOR

ข้ามการเซ็นเซอร์อินเทอร์เน็ตด้วย TOR

หลีกเลี่ยงการเซ็นเซอร์อินเทอร์เน็ตด้วย TOR Introduction ในโลกที่การเข้าถึงข้อมูลได้รับการควบคุมมากขึ้น เครื่องมือเช่นเครือข่าย Tor ได้กลายเป็นสิ่งสำคัญสำหรับ

Read More »
Kobold Letters: การโจมตีแบบฟิชชิ่งทางอีเมลที่ใช้ HTML

Kobold Letters: การโจมตีแบบฟิชชิ่งทางอีเมลที่ใช้ HTML

Kobold Letters: การโจมตีแบบฟิชชิ่งทางอีเมลแบบ HTML เมื่อวันที่ 31 มีนาคม 2024 Luta Security ได้เผยแพร่บทความที่ให้ความกระจ่างเกี่ยวกับเวกเตอร์ฟิชชิ่งที่ซับซ้อนตัวใหม่ Kobold Letters

Read More »