Actualización de marzo de 2020 : Vaya a ver el increíble tutorial de PYSA que debería llevarlo a la velocidad de encontrar vulnerabilidades de seguridad en su base de código Python.
Pyre de Facebook es un proyecto increíble que tiene un futuro brillante y muchas personas inteligentes que trabajan en él. Sugeriría, si no sabe tanto sobre el análisis del programa, que comprende cómo funciona PYT antes de sumergirse en la pira. Junto con los readme en la mayoría de los directorios, están la tesis de maestría original y algunas diapositivas. Dicho esto, me complace revisar las solicitudes de extracción y darle permisos de escritura si hace más de unos pocos.
Hubo muchos contribuyentes excelentes para este proyecto, planeo trabajar en otros proyectos como Detect-Secrets y otros (por ejemplo, Pyre eventualmente) en el futuro si desea trabajar juntos más :)
Si usted es un ingeniero de seguridad con, por ejemplo, una base de código Python sin anotaciones de tipo, que Pyre no manejará, le sugiero que reemplace sus fregaderos con un envoltorio seguro (algo como DisfusedXML) y alerta cualquier uso del fregadero estándar. Puede usar Bandit para hacer esto ya que no es necesario el análisis de flujo de datos, pero tendrá que recortarlo mucho, debido a la alta tasa falsa positiva.
Análisis estático de aplicaciones web de Python basadas en bases teóricas (gráficos de flujo de control, punto fijo, análisis de flujo de datos)
Para ver los cambios recientes, consulte el ChangeLog.
Ejemplo de uso y salida:
Antes de continuar, asegúrese de tener instalado Python3.6 o 3.7.
pip install python - taint
?PYT también se puede instalar desde la fuente. Para hacerlo, clona el repositorio y luego ejecute:
python3 setup . py install Pronto encontrará un ReadMe.RST en cada directorio de la carpeta pyt/ , comience aquí.
La opción -A determina qué funciones tendrán sus argumentos contaminados, por defecto es el matraz.
Use la opción -t para especificar fuentes y sumideros, de forma predeterminada se utiliza este archivo.
Para las funciones de Builtins o bibliotecas, por ejemplo, url_for u os.path.join , use la opción -m para especificar si devuelven o no valores contaminados dadas las entradas contaminadas, de forma predeterminada se utiliza este archivo.
Uso: python -m pyt [-h] [-a adaptador] [-Pr Project_Root]
[-B base_json_file] [-j] [-t Trigger_word_file]
[-m blackbox_mapping_file] [-i] [-o output_file]
[--ignore-nosec] [-r] [-x excluido_paths]
[--dont-prepend-root] [--no-local-imports]
Objetivos [objetivos ...]
argumentos requeridos:
Se dirige a los archivos de origen o directorio (s)
Argumentos opcionales importantes:
-Un adaptador, -adaptador de adaptador
Elija un adaptador de marco web: Flask (predeterminado),
Django, cada pilón
-t Trigger_word_file, --Trigger-Word-File Trigger_word_file
Archivo de entrada con una lista de fuentes y sumideros
-m blackbox_mapping_file, --blackbox-mapping-file blackbox_mapping_file
Ingrese el archivo de asignación de Blackbox
Argumentos opcionales:
-Pr Project_Root, --Project-Root Project_Root
Agregar raíz del proyecto, solo importante cuando el archivo de entrada
no está en la raíz del proyecto.
-B base_json_file, - -Baseline Base_json_file
Ruta de un informe de línea de base para compararlo (solo
Se aceptan archivos con formato JSON)
-J, --json imprime JSON en lugar de informar.
-i, - -interactive le preguntará sobre cada llamada de función de Blackbox en
cadenas de vulnerabilidad.
-o output_file, -output output_file
Escriba el informe al nombre de archivo
--Inignore-Nosec No saltea líneas con # comentarios de nosec
-r, -Archivos de búsqueda y proceso recursivos en subdirectorios
-x excluido_paths, -exclude exclued_paths
Separan archivos con comas
--dont-prepend-root en Project Root EG /APP, las importaciones no se prefieren
con la aplicación*
--No-Local-Imports Si se establece, las importaciones absolutas deben ser relativas a la
raíz del proyecto. Si no está configurado, módulos en el mismo
El directorio se puede importar solo por sus nombres.
Usándolo como un usuario python3 -m pyt examples/vulnerable_code/XSS_call.py
Ejecutando las pruebas python3 -m tests
Ejecución de un archivo de prueba individual python3 -m unittest tests.import_test
Ejecución de una prueba individual python3 -m unittest tests.import_test.ImportTest.test_import
Únase a nuestro grupo Slack: https://pyt-dev.slack.com/ - Pregunte por invitación: [email protected]
Pautas
Cree un directorio para mantener el envío virtual y el proyecto
mkdir ~/a_folder
cd ~/a_folder
Clonar el proyecto en el directorio
git clone https://github.com/python-security/pyt.git
Crear el entorno virtual
python3 -m venv ~/a_folder/
Verifique que tenga las versiones correctas
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)
Cambio al directorio de proyectos
cd pyt
En el futuro, simplemente escriba source ~/a_folder/bin/activate para comenzar a desarrollar.