อ่าน research paper ของ Microsoft
เรื่อง RESTler: Stateful REST API Fuzzing
เป็นเครื่องมือสำหรับการทดสอบ REST API
แบบ Fuzz testing หรือ Fuzzing
คือรูปแบบหนึ่งของการทดสอบแบบ blackbox
โดยจะพยายามหา bug หรือ ข้อผิดพลาดจาก input ในรูปแบบต่าง ๆ อย่างอัตโนมัติ

โดยที่ Fuzzing จะมีอยู่ 3 รูปแบบ

  • Blackbox ทำการ random input จะ interface ของระบบที่จะทดสอบ แล้วดูพฤติกกรมการทำงาน
  • Grammar-based ทำการสร้าง input ตามมุมมองของผู้ใช้งาน
  • Whitebox ทำการสร้าง input แบบ dynamic ตามการทำงานภายในของระบบ เพื่อให้ครอบคลุมทุก ๆ เงื่อนไข (branch condition) ซึ่งเป็นรูปแบบที่ทดสอบในครอบคลุมมาก ๆ

ทำไมต้องใช้ Fuzzing ด้วย เพื่อทดสอบ

  • ช่วยหาข้อผิดพลาดในรูปแบบอื่น ๆ ที่การทดสอบแบบปกติ (static) มักจะหาไม่เจอ
  • ช่วยให้การทดสอบมีคุณภาพและน่าเชื่อถือมากยิ่งขึ้น

สำหรับ Paper นี้จะทำการทดสอบ REST API

โดยทำการสร้างเครื่องมือชื่อว่า RESTler มาให้ใช้งาน
พัฒนาด้วยภาษา Python 3.8.2 และ .NET 5
หรือจะใช้งานผ่าน Docker ก็ได้

การทำงานของ RESTler จะทำการวิเคราะห์จาก Open API Specification หรือ Swagger นั่นเอง

เพื่อทำการสร้างรูปแบบของ input
จากนั้นทำการส่ง input นั้น ๆ ไปยัง API
รวมทั้งยังทำการเรียนรู้จาก response ที่ได้มาจาก input ก่อนหน้า
ทำให้เป็นเครื่องมือที่เรียกว่า Stateful นั่นเอง
แสดงดังรูป

ลองดูจาก Demo project ได้เลย

เริ่มด้วย start api server ก่อน
จากนั้นทำการ run RESTler ใน command line
แต่ระวังด้วยนะครับ เพราะว่า server อาจจะล่มได้เลย
เนื่องจากยิง request มาเยอะมาก ๆ

Reference Websites

https://www.microsoft.com/en-us/research/blog/restler-finds-security-and-reliability-bugs-through-automated-fuzzing/

https://owasp.org/www-project-web-security-testing-guide/v41/6-Appendix/C-Fuzz_Vectors