ตอนที่ 9: โดย Adrian Taylor ใน Mountain View (ธันวาคม 2019)
ตอนก่อนหน้า
ระบบอาจขอให้คุณแก้ไขข้อบกพร่องด้านความปลอดภัยที่มีลำดับความสำคัญสูงที่ ClusterFuzz พบ สิ่งนี้คืออะไร คุณควรดำเนินการกับข้อบกพร่องเหล่านั้นอย่างจริงจังไหม คุณจะช่วยได้อย่างไร
อินพุตฟีดคลัสเตอร์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 เองเช่นกัน มาฟังประสบการณ์ของพวกเขากัน และการเริ่มต้นใช้งานนั้นง่ายแค่ไหน