Chromium Chronicle #9: ClusterFuzz

ตอนที่ 9: โดย Adrian Taylor ใน Mountain View (ธันวาคม 2019)
ตอนก่อนหน้า

ระบบอาจขอให้คุณแก้ไขข้อบกพร่องด้านความปลอดภัยที่มีลำดับความสำคัญสูงที่ ClusterFuzz พบ สิ่งนี้คืออะไร คุณควรดำเนินการกับข้อบกพร่องเหล่านั้นอย่างจริงจังไหม คุณจะช่วยได้อย่างไร

โฟลว์ชาร์ตแบบ Fuzzing

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

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

class Foo {
  Widget* widget;
};

void Foo::Bar() {
  delete widget;
  ...
  widget->Activate();  // Bad in the renderer process, worse in the
                       // browser process. Obviously, real bugs are
                       // more subtle. Usually.

ClusterFuzz สร้างอินพุตจากโปรแกรม fuzzer หรือจากข้อบกพร่องที่ส่งภายนอก Fuzzer บางส่วนขับเคลื่อนโดย libFuzzer ซึ่งจะพัฒนาอินพุตเพื่อเพิ่มการครอบคลุมของโค้ด บางส่วนเข้าใจไวยากรณ์ของภาษาอินพุตที่แปลงเป็น protobufs เมื่อ ClusterFuzz พบข้อขัดข้อง ระบบจะพยายามย่อกรอบการทดสอบอินพุตให้เหลือน้อยที่สุดเพื่อหาคอมมิตที่ไม่เหมาะสม เราพบได้มากมาย...

คุณช่วยทำสิ่งต่อไปนี้ได้

  • หวาดระแวงเกี่ยวกับอายุการใช้งานของวัตถุและจำนวนเต็มที่ล้น
  • เพิ่มตัวแปรใหม่ โดยเฉพาะเมื่อคุณประมวลผลข้อมูลที่ไม่น่าไว้วางใจหรือ IPC (ดูลิงก์ด้านล่าง ซึ่งมักจะมีโค้ดน้อยกว่า 20 บรรทัด)
  • แก้ไขข้อบกพร่องที่รายงานโดย ClusterFuzz: ระบบเชื่อถือวิธีการระดับความรุนแรงได้เพราะอิงตามความสามารถในการแสวงหาผลประโยชน์ในโลกแห่งความเป็นจริง: แม้แต่การล้นไบต์เดี่ยวก็ทำให้ผู้โจมตีดำเนินการกับโค้ดได้ตามใจชอบ

แหล่งข้อมูล

  • การทดสอบFuzz ใน Chromium: วิธีเพิ่ม Fuzzers ใหม่ลงใน ClusterFuzz สำหรับรูปแบบข้อมูลใหม่ๆ หรือเพียงเพราะคุณอยากได้เครดิตจาก การค้นหาช่องโหว่เจ๋งๆ
  • การอัปเดตโปรแกรม Chrome Fuzzer และวิธีการ: ผู้ร่วมให้ข้อมูลภายนอกก็เขียน Fuzzer เองเช่นกัน มาฟังประสบการณ์ของพวกเขากัน และการเริ่มต้นใช้งานนั้นง่ายแค่ไหน