Google เปิดตัว เพิ่งเปิดตัว โครงการ Atherisซึ่งเป็นการพัฒนาของ ชุดเครื่องมือโอเพนซอร์ส เฉพาะ สำหรับการทดสอบโค้ด Python ที่คลุมเครือ และส่วนขยายสำหรับ CPython ที่เขียนด้วย C / C ++
โครงการ ใช้เอ็นจิ้นที่ใช้ libFuzzer และสามารถใช้ร่วมกับเครื่องมือ Address Sanitizer และ Undefined Behavior Sanitizer เพื่อตรวจหาข้อผิดพลาดเพิ่มเติม รหัสเปิดอยู่ภายใต้ใบอนุญาต Apache 2.0
เกี่ยวกับ Google Atheris
ในคำพูดของ Google Atheris เป็นชุดเครื่องมือที่สามารถใช้เพื่อค้นหาข้อผิดพลาดในโค้ด Python และส่วนขยายเนทีฟโดยอัตโนมัติ Atheris เป็นฟัซเซอร์ 'การครอบคลุมที่ขับเคลื่อน' ซึ่งหมายความว่า Atheris จะลองอินพุตต่างๆในการแสดงของคุณซ้ำ ๆ ในขณะที่ดูการแสดงและพยายามค้นหาเส้นทางที่น่าสนใจ
รองรับการตรวจสอบโค้ดสำหรับ Python 2.7 และ Python 3.3+แต่สำหรับการครอบคลุมคำแนะนำโดยสมบูรณ์ขอแนะนำให้ใช้ Python 3.8 และ 3.9 สาขาซึ่งตอนนี้รองรับสถิติ opcode ตาม opcode
ในกระบวนการ, Atheris แสดงรายการข้อมูลอินพุตที่เป็นไปได้และสร้างรายงาน เกี่ยวกับข้อบกพร่องที่ตรวจพบและข้อยกเว้นที่ตรวจไม่พบทั้งหมด
ตัวอย่างเช่นเมื่อตรวจสอบไลบรารีการแยกวิเคราะห์ YAML ใน Atheris พบว่าโครงสร้าง YAML บางส่วนเช่นระบุ "-_" แทนค่าจำนวนเต็มหรือใช้รายการแทนคีย์ให้โยนข้อยกเว้นที่ไม่คาดคิดแทน a YAMLErrors ข้อผิดพลาดมาตรฐาน
การทดสอบ fuzz เป็นเทคนิคที่รู้จักกันดีในการค้นหาข้อผิดพลาดในการเขียนโปรแกรม ข้อผิดพลาดที่ตรวจพบได้จำนวนมากเหล่านี้มีผลกระทบด้านความปลอดภัยอย่างร้ายแรง Google พบช่องโหว่ด้านความปลอดภัยและข้อบกพร่องอื่น ๆ หลายพันรายการเมื่อใช้เทคนิคนี้ Fuzzing มักใช้ในภาษาพื้นเมืองเช่น C หรือ C ++ แต่เมื่อปีที่แล้วเราได้สร้าง Python fuzzing engine ใหม่ วันนี้เราเปิดตัว Atheris fuzzing engine เป็นโอเพ่นซอร์ส
Atheris ยังสามารถใช้เพื่อระบุความแตกต่างในพฤติกรรม ของไลบรารีที่กำหนดเป้าหมายงานที่เหมือนกัน ตัวอย่างเช่นการตรวจสอบสรุปของแพคเกจ Python "idna" และไลบรารี "libidn2" ซึ่งทำหน้าที่ถอดรหัสชื่อโดเมนที่เป็นสากลพบว่าไม่ได้ให้ผลลัพธ์เดียวกันเสมอไป
หนึ่งในการใช้งานที่ดีที่สุดสำหรับ Atheris คือสำหรับเครื่องกระจายความแตกต่าง สิ่งเหล่านี้คือฟัซเซอร์ที่มองหาความแตกต่างในพฤติกรรมของไลบรารีสองแห่งที่ตั้งใจจะทำสิ่งเดียวกัน หนึ่งในตัวอย่าง fuzzers ที่มาพร้อมกับ Atheris จะเปรียบเทียบแพ็กเกจ "idna" ของ Python กับแพ็กเกจ C "libidn2"
โดยเฉพาะอย่างยิ่งหากโดเมนใช้ลำดับ Unicode "idna" และ "libidn2" จะแปลงชื่อโดเมนสากลเป็นโฮสต์ที่แตกต่างกัน
โดยทั่วไปแล้ว Atheris มีประโยชน์ในรหัส Python ที่บริสุทธิ์ตราบใดที่มีวิธีการแสดงพฤติกรรมที่ "ถูกต้อง" หรืออย่างน้อยก็เป็นการแสดงพฤติกรรมที่ไม่ถูกต้องอย่างแน่นอน สิ่งนี้อาจซับซ้อนพอ ๆ กับโค้ดที่กำหนดเองใน fuzzer ที่ประเมินความถูกต้องของเอาต์พุตของไลบรารีหรือง่ายๆอย่างการตรวจสอบว่าไม่มีการเพิ่มข้อยกเว้นที่ไม่คาดคิด
สิ่งสำคัญคือต้องคำนึงถึงสิ่งนั้น การทดสอบที่คลุมเครือจะสร้างกระแสข้อมูลอินพุตแบบสุ่มทุกชนิด ใกล้เคียงกับข้อมูลจริง (เช่นหน้า html ที่มีพารามิเตอร์แท็กแบบสุ่มไฟล์หรือรูปภาพที่มีส่วนหัวที่ผิดปกติ ฯลฯ ) และแก้ไขข้อบกพร่องที่อาจเกิดขึ้นในกระบวนการ
หากลำดับใด ๆ ส่งผลให้เกิดข้อยกเว้นหรือไม่ตรงกับการตอบสนองที่คาดไว้พฤติกรรมนี้มักบ่งชี้ถึงข้อบกพร่องหรือช่องโหว่
สุดท้ายดังที่กล่าว Atheris ทำงานร่วมกับรหัส Python ในเวอร์ชัน 2.7 และ 3.3+ แม้ว่า Google จะแนะนำอย่างยิ่งให้ใช้ 3.8+ และส่วนขยายเนทีฟที่เขียนขึ้นสำหรับ CPython
Windows ยังไม่ได้อยู่ในระบบปฏิบัติการที่รองรับดังนั้นเครื่องยนต์จึงเป็นที่สนใจของผู้ใช้ Linux และ Mac OS X ในตอนนี้
ในการใช้งานบนแพลตฟอร์มเหล่านี้นักพัฒนาจะต้องติดตั้งส่วนหน้าคอมไพเลอร์ Clang เวอร์ชันปัจจุบัน
หากคุณต้องการทราบข้อมูลเพิ่มเติมคุณสามารถตรวจสอบบันทึกต้นฉบับได้ในไฟล์ ลิงค์ต่อไปนี้