
Ein statisches Analysetool zur Erkennung von Sicherheitsschwachstellen in Python-Webanwendungen
.. image:: https://travis-ci.org/python-security/pyt.svg?branch=master :target: https://travis-ci.org/python-security/pyt
.. image:: https://readthedocs.org/projects/pyt/badge/?version=latest :target: http://pyt.readthedocs.io/en/latest/?badge=latest
.. image:: https://codeclimate.com/github/python-security/pyt/badges/coverage.svg :target: https://codeclimate.com/github/python-security/pyt/coverage
.. image:: https://badge.fury.io/py/python-taint.svg :target: https://badge.fury.io/py/python-taint
.. image:: https://img.shields.io/badge/PRs-welcome-ff69b4.svg :target: https://github.com/python-security/pyt/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22+
.. image:: https://img.shields.io/badge/python-v3.6-blue.svg :target: https://pypi.org/project/python-taint/
.. image:: https://img.shields.io/badge/Donate-Charity-orange.svg :target: https://www.againstmalaria.com/donation.aspx
März 2020 Update: Bitte schauen Sie sich das großartige Pysa tutorial_ an, das Sie auf den neuesten Stand bringt, um Sicherheitslücken in Ihrer Python-Codebasis zu finden.
Pyre_ von Facebook ist ein fantastisches Projekt mit einer vielversprechenden Zukunft und vielen klugen Leuten, die daran arbeiten.
Ich empfehle, falls Sie sich nicht so gut mit Programmanalyse auskennen, dass Sie verstehen, wie PyT funktioniert, bevor Sie in Pyre eintauchen. Neben den README's in most directories_ gibt es die originale Master's Thesis_ und some slides_.
Trotzdem: Ich freue mich über Pull-Requests und gebe Ihnen Schreibrechte, wenn Sie mehr als ein paar beisteuern.
Es gab viele großartige Mitwirkende an diesem Projekt. Ich plane, in Zukunft an anderen Projekten wie detect-secrets_ und anderen (z. B. irgendwann Pyre) zu arbeiten, falls Sie weiterhin zusammenarbeiten möchten :)
Wenn Sie ein Sicherheitsingenieur sind und z. B. eine Python-Codebasis ohne Typannotationen haben, die Pyre nicht verarbeitet, empfehle ich Ihnen, Ihre Senken durch einen sicheren Wrapper (wie defusedxml) zu ersetzen und auf jede Verwendung der Standardsenke zu achten. Sie können Bandit dafür verwenden, da keine Datenflussanalyse erforderlich ist, aber Sie werden es stark kürzen müssen, aufgrund der hohen Falsch-Positiv-Rate.
.. _Pysa tutorial: https://github.com/facebook/pyre-check/tree/master/pysa_tutorial#pysa-tutorial .. _Pyre: https://github.com/facebook/pyre-check .. _README's in most directories: https://github.com/python-security/pyt/tree/master/pyt#how-it-works .. _Master's Thesis: https://projekter.aau.dk/projekter/files/239563289/final.pdf .. _some slides: https://docs.google.com/presentation/d/1JfAykAxR0DcJwwGfHmhrz1RhhKqYsnt5x_GY8CbTp7s .. _detect-secrets: https://github.com/Yelp/detect-secrets/blob/master/CHANGELOG.md#whats-new .. _defusedxml: https://pypi.org/project/defusedxml/ .. _Bandit: https://github.com/PyCQA/bandit
Statische Analyse von Python-Webanwendungen basierend auf theoretischen Grundlagen (Kontrollflussgraphen, Fixpunktberechnung, Datenflussanalyse)
Erkennen von Command Injection, SSRF, SQL Injection, XSS, Directory Traversal usw.
Umfangreiche Anpassungsmöglichkeiten
Für einen Überblick über die letzten Änderungen, siehe bitte den changelog_.
.. _changelog: https://github.com/python-security/pyt/blob/master/CHANGELOG.md
Beispielnutzung und Ausgabe:
.. image:: https://raw.githubusercontent.com/KevinHock/rtdpyt/master/readme_static_files/pyt_example.png
Stellen Sie vor dem Fortfahren sicher, dass Python 3.6 oder 3.7 installiert ist.
.. code-block:: python
pip install python-taint
✨🍰✨
PyT kann auch aus dem Quellcode installiert werden. Klonen Sie dazu das Repository und führen Sie dann aus:
.. code-block:: python
python3 setup.py install
Bald finden Sie eine README.rst_ in jedem Verzeichnis des Ordners pyt/, start here_.
.. _README.rst: https://github.com/python-security/pyt/tree/master/pyt .. _start here: https://github.com/python-security/pyt/tree/master/pyt
Die Option -a legt fest, welche Funktionen ihre Argumente als kontaminiert betrachten_, standardmäßig ist es Flask.
Verwenden Sie die Option -t, um Quellen und Senken anzugeben, standardmäßig wird diese Datei verwendet_.
Für Funktionen aus Builtins oder Bibliotheken, z. B. url_for oder os.path.join, verwenden Sie die Option -m, um festzulegen, ob bei kontaminierten Eingaben kontaminierte Werte zurückgegeben werden, standardmäßig wird diese Datei verwendet_.
.. _Die Option -a legt fest, welche Funktionen ihre Argumente als kontaminiert betrachten: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks .. _diese Datei verwendet: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/all_trigger_words.pyt .. _diese Datei verwendet: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/blackbox_mapping.json
.. code-block::
usage: python -m pyt [-h] [-a ADAPTOR] [-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] [--dont-prepend-root] [--no-local-imports] targets [targets ...]
required arguments: targets source file(s) or directory(s) to be scanned
important optional arguments: -a ADAPTOR, --adaptor ADAPTOR Choose a web framework adaptor: Flask(Default), Django, Every or Pylons
-t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE
Input file with a list of sources and sinks
-m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE
Input blackbox mapping file
optional arguments: -pr PROJECT_ROOT, --project-root PROJECT_ROOT Add project root, only important when the entry file is not at the root of the project.
-b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE
Path of a baseline report to compare against (only
JSON-formatted files are accepted)
-j, --json Prints JSON instead of report.
-i, --interactive Will ask you about each blackbox function call in
vulnerability chains.
-o OUTPUT_FILE, --output OUTPUT_FILE
Write report to filename
--ignore-nosec Do not skip lines with # nosec comments
-r, --recursive Find and process files in subdirectories
-x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS
Separate files with commas
--dont-prepend-root In project root e.g. /app, imports are not prepended
with app.*
--no-local-imports If set, absolute imports must be relative to the
project root. If not set, modules in the same
directory can be imported just by their names.
Verwendung wie ein Benutzer: python3 -m pyt examples/vulnerable_code/XSS_call.py
Ausführen der Tests: python3 -m tests
Ausführen einer einzelnen Testdatei: python3 -m unittest tests.import_test
Ausführen eines einzelnen Tests: python3 -m unittest tests.import_test.ImportTest.test_import
Tretten Sie unserer Slack-Gruppe bei: https://pyt-dev.slack.com/ - Fragen Sie nach einer Einladung: [email protected]
Guidelines_
.. _Guidelines: https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md
Erstellen Sie ein Verzeichnis für die virtuelle Umgebung und das Projekt
mkdir ~/a_folder
cd ~/a_folder
Klonen Sie das Projekt in das Verzeichnis
git clone https://github.com/python-security/pyt.git
Erstellen Sie die virtuelle Umgebung
python3 -m venv ~/a_folder/
Überprüfen Sie, ob Sie die richtigen Versionen haben
python3 --version Beispielausgabe Python 3.6.0
pip --version Beispielausgabe pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)
Wechseln Sie in das Projektverzeichnis
cd pyt
In Zukunft geben Sie einfach source ~/a_folder/bin/activate ein, um mit der Entwicklung zu beginnen.