Atheris เครื่องมือทดสอบโค้ด Python

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 เวอร์ชันปัจจุบัน

หากคุณต้องการทราบข้อมูลเพิ่มเติมคุณสามารถตรวจสอบบันทึกต้นฉบับได้ในไฟล์ ลิงค์ต่อไปนี้


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา