การอัปเดตมีนาคม 2020 : โปรดไปดูบทช่วยสอน PYSA ที่น่าทึ่งที่ควรให้คุณเร่งความเร็วในการค้นหาช่องโหว่ด้านความปลอดภัยใน Python Codebase ของคุณ
Pyre จาก Facebook เป็นโครงการที่น่าทึ่งที่มีอนาคตที่สดใสและคนฉลาดจำนวนมากทำงานอยู่ ฉันขอแนะนำถ้าคุณไม่รู้มากเกี่ยวกับการวิเคราะห์โปรแกรมคุณเข้าใจว่า PYT ทำงานอย่างไรก่อนที่จะดำน้ำใน Pyre นอกเหนือจาก readme ในไดเรกทอรีส่วนใหญ่แล้วยังมีวิทยานิพนธ์ต้นฉบับและสไลด์บางอย่าง ด้วยที่กล่าวว่า ฉันยินดีที่จะตรวจสอบคำขอดึงและให้สิทธิ์เขียนหากคุณทำมากกว่าสองสาม
มีผู้มีส่วนร่วมที่ยอดเยี่ยมมากมายในโครงการนี้ฉันวางแผนที่จะทำงานในโครงการอื่น ๆ เช่น Detect-Secrets และอื่น ๆ (เช่น Pyre ในที่สุด) ในอนาคตหากคุณต้องการทำงานร่วมกันมากขึ้น :)
หากคุณเป็นวิศวกรความปลอดภัยที่มีเช่น Python codebase โดยไม่มีคำอธิบายประกอบประเภท Pyre นั้นจะไม่จัดการฉันขอแนะนำให้คุณเปลี่ยนอ่างล้างจานด้วย wrapper ที่ปลอดภัย (บางอย่างเช่น defusedXML) และแจ้งเตือนการใช้อ่างมาตรฐานใด ๆ คุณสามารถใช้ Bandit เพื่อทำสิ่งนี้ได้เนื่องจากไม่จำเป็นต้องมีการวิเคราะห์ DataFlow แต่คุณจะต้องตัดแต่งมันมากเนื่องจากอัตราการบวกเท็จสูง
การวิเคราะห์แบบคงที่ของเว็บแอปพลิเคชัน Python ตามฐานรากเชิงทฤษฎี (กราฟการควบคุมการไหล, จุดคงที่, การวิเคราะห์ dataflow)
สำหรับการดูการเปลี่ยนแปลงล่าสุดโปรดดูการเปลี่ยนแปลง
ตัวอย่างการใช้งานและเอาต์พุต:
ก่อนที่จะดำเนินการต่อให้แน่ใจว่าคุณติดตั้ง Python3.6 หรือ 3.7
pip install python - taint
?PYT สามารถติดตั้งได้จากแหล่งที่มา ในการทำเช่นนั้นโคลน repo แล้วเรียกใช้:
python3 setup . py install ในไม่ช้าคุณจะพบ readme.rst ในทุกไดเรกทอรีใน pyt/ โฟลเดอร์เริ่มต้นที่นี่
ตัวเลือก -A กำหนดว่าฟังก์ชั่นใดที่จะมีอาร์กิวเมนต์ของพวกเขาปนเปื้อนโดยค่าเริ่มต้นมันเป็นขวด
ใช้ตัวเลือก -t เพื่อระบุแหล่งที่มาและอ่างโดยค่าเริ่มต้นไฟล์นี้ใช้
สำหรับฟังก์ชั่นจาก Builtins หรือ Libraries เช่น url_for หรือ os.path.join ใช้ตัวเลือก -m เพื่อระบุว่าพวกเขาส่งคืนค่าที่เสียไปหรือไม่ที่ได้รับอินพุตที่มีค่าใช้จ่ายโดยค่าเริ่มต้นไฟล์นี้ใช้
การใช้งาน: python -m pyt [-h] [-a อะแดปเตอร์] [-PR Project_root]
[-b baseline_json_file] [-J] [-t trigger_word_file]
[-m blackbox_mapping_file] [-i] [-o output_file]
[-ignore-nosec] [-r] [-x excluded_paths]
[-การพึ่งพา-รูท] [-NO-Local-Imports]
เป้าหมาย [เป้าหมาย ... ]
ข้อโต้แย้งที่จำเป็น:
เป้าหมายไฟล์แหล่งที่มาหรือไดเรกทอรีที่จะสแกน
ข้อโต้แย้งทางเลือกที่สำคัญ:
-a อะแดปเตอร์ -อะแดปเตอร์ Adaptor
เลือกอะแดปเตอร์เว็บเฟรมเวิร์ก: Flask (ค่าเริ่มต้น)
Django ทุกหรือเสา
-t trigger_word_file,-trigger-word-file trigger_word_file
ไฟล์อินพุตที่มีรายการแหล่งที่มาและอ่างล้างมือ
-m blackbox_mapping_file,-blackbox-mapping-file blackbox_mapping_file
ป้อนไฟล์แมปแบล็กบ็อกซ์
อาร์กิวเมนต์เสริม:
-PR Project_root,-Project-root Project_root
เพิ่มรูทโครงการสำคัญเมื่อไฟล์รายการ
ไม่ได้อยู่ที่รากของโครงการ
-b baseline_json_file, -baseline baseline_json_file
เส้นทางของรายงานพื้นฐานเพื่อเปรียบเทียบกับ (เท่านั้น
ยอมรับไฟล์ที่จัดรูปแบบ JSON)
-J, -Json พิมพ์ JSON แทนรายงาน
-i, -interactive จะถามคุณเกี่ยวกับการโทรฟังก์ชั่น Blackbox แต่ละรายการ
โซ่ช่องโหว่
-o Output_file, -OUTPUT OUTPUT_FILE
เขียนรายงานไปยังชื่อไฟล์
-ignore-nosec ไม่ข้ามบรรทัดด้วย # nosec ความคิดเห็น
-r, -ค้นหาและประมวลผลไฟล์ในไดเรกทอรีย่อย
-x excluded_paths -exclude excluded_paths
แยกไฟล์ด้วยเครื่องหมายจุลภาค
-การลงรอยกัน-ต่อพง
กับแอพ.*
-ไม่มีการนำเข้า If-remports หากตั้งค่าการนำเข้าสัมบูรณ์จะต้องสัมพันธ์กับไฟล์
รูทโครงการ หากไม่ได้ตั้งค่าโมดูลในเดียวกัน
ไดเรกทอรีสามารถนำเข้าได้เพียงแค่ชื่อของพวกเขา
การใช้มันเหมือน python3 -m pyt examples/vulnerable_code/XSS_call.py
เรียกใช้การทดสอบ python3 -m tests
เรียกใช้ไฟล์ทดสอบแต่ละไฟล์ python3 -m unittest tests.import_test
รันการทดสอบแต่ละครั้ง python3 -m unittest tests.import_test.ImportTest.test_import
เข้าร่วมกลุ่ม Slack ของเรา: https://pyt-dev.slack.com/ - ขอคำเชิญ: [email protected]
แนวทางปฏิบัติ
สร้างไดเรกทอรีเพื่อเก็บ env และโครงการเสมือนจริง
mkdir ~/a_folder
cd ~/a_folder
โคลนโครงการลงในไดเรกทอรี
git clone https://github.com/python-security/pyt.git
สร้างสภาพแวดล้อมเสมือนจริง
python3 -m venv ~/a_folder/
ตรวจสอบว่าคุณมีเวอร์ชันที่เหมาะสม
python3 --version ตัวอย่างเอาต์พุต Python 3.6.0
pip --version ตัวอย่างเอาต์พุต pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)
เปลี่ยนเป็นไดเรกทอรีโครงการ
cd pyt
ในอนาคตเพียงพิมพ์ source ~/a_folder/bin/activate เพื่อเริ่มพัฒนา