Atualização de março de 2020 : Por favor, vá ver o incrível tutorial da PYSA que deve fazer com que você acelere as vulnerabilidades de segurança na sua base de código Python.
Pyre, do Facebook, é um projeto incrível que tem um futuro brilhante e muitas pessoas inteligentes trabalhando nele. Eu sugeriria, se você não souber muito sobre análise do programa, que entende como o Pyt funciona antes de mergulhar na pira. Juntamente com os Readme na maioria dos diretórios, há a tese de mestrado original e alguns slides. Com isso dito, fico feliz em revisar solicitações de tração e fornecer permissões de escrever se você fizer mais do que alguns.
Havia muitos ótimos contribuintes para este projeto, planejo trabalhar em outros projetos, como detectar-segidos e outros (por exemplo, Pyre eventualmente) no futuro, se você quiser trabalhar mais juntos :)
Se você é um engenheiro de segurança com por exemplo, uma base de código Python sem anotações de tipo, essa pyre não lidará, sugiro que você substitua suas pias por um invólucro seguro (algo como o desfusedxml) e alerta qualquer uso do coletor padrão. Você pode usar o Bandit para fazer isso, pois a análise de fluxo de dados não é necessária, mas precisará cortá-lo muito, devido à alta taxa falsa positiva.
Análise estática de aplicativos da Web Python com base em fundações teóricas (gráficos de fluxo de controle, ponto fixo, análise de fluxo de dados)
Para obter mudanças recentes, consulte o Changelog.
Exemplo de uso e saída:
Antes de continuar, verifique se você tem Python3.6 ou 3.7 instalado.
pip install python - taint
?O PYT também pode ser instalado a partir da fonte. Para fazer isso, clone o repo e depois execute:
python3 setup . py install Em breve, você encontrará um ReadMe.rst em todos os diretórios da pasta pyt/ , comece aqui.
A opção -a determina quais funções terão seus argumentos contaminados, por padrão, é o frasco.
Use a opção -t para especificar fontes e afundos, por padrão, este arquivo é usado.
Para funções de Buildins ou bibliotecas, por exemplo, url_for ou os.path.join , use a opção -m para especificar se eles retornam ou não valores contaminados dadas as entradas contaminadas, por padrão, esse arquivo é usado.
Uso: python -m pyt [-h] [-a adaptador] [-pr project_root]
[-b Baseline_json_file] [-j] [-t trigger_word_file]
[-m Blackbox_mapping_file] [-i] [-o output_file]
[--ignore-nosec] [-r] [-x excluído_paths]
[--dont-prenda-root] [--no-local-imports]
Alvos [metas ...]
Argumentos necessários:
metas de origem (s) ou diretório (s) a serem digitalizados
argumentos opcionais importantes:
-a adaptador, -adaptador
Escolha um adaptador da estrutura da web: Flask (padrão),
Django, todos ou postos
-t trigger_word_file,--marcha-palavra-arquivo trigger_word_file
Arquivo de entrada com uma lista de fontes e afundamentos
-m BlackBox_Mapping_File,--Blackbox-Mapping-File Blackbox_Mapping_File
Arquivo de mapeamento de BlackBox de entrada
Argumentos opcionais:
-PR Project_root,-Project-Root Project_root
Adicione o Project Root, apenas importante quando o arquivo de entrada
não está na raiz do projeto.
-b Baseline_json_file, - -Baseline Baseline_json_file
Caminho de um relatório de linha de base para comparar (apenas
Os arquivos formatados por JSON são aceitos)
-j, --json imprime json em vez de relatório.
-i, - -interativo perguntará sobre cada chamada de função Blackbox em
Cadeias de vulnerabilidade.
-o output_file, - -output Output_file
Escreva relatório para o nome do arquivo
--Ignore-nosec não pula linhas com comentários # nosec
-r, -Recursiva Localização e processo de arquivos em subdiretos
-x excluído_paths, --exclude excluído_paths
Arquivos separados com vírgulas
-ROOT-ROOT-PRENECIMENTO NO ROOTE DE ROOT EG /APP, as importações não são antecedidas
com app.*
--não-local-imports Se definido, as importações absolutas devem ser relativas ao
Raiz do projeto. Se não estiver definido, módulos no mesmo
O diretório pode ser importado apenas por seus nomes.
Usando -o como um usuário python3 -m pyt examples/vulnerable_code/XSS_call.py
Executando os testes python3 -m tests
Executando um arquivo de teste individual python3 -m unittest tests.import_test
Executando um teste individual python3 -m unittest tests.import_test.ImportTest.test_import
Junte -se ao nosso Slack Group: https://pyt-dev.slack.com/ - Peça convite: [email protected]
Diretrizes
Crie um diretório para manter o Env virtual e o projeto
mkdir ~/a_folder
cd ~/a_folder
Clonar o projeto no diretório
git clone https://github.com/python-security/pyt.git
Crie o ambiente virtual
python3 -m venv ~/a_folder/
Verifique se você tem as versões certas
python3 --version Python 3.6.0
pip --version Exemplo de saída pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)
Mudança no diretório do projeto
cd pyt
No futuro, basta digitar source ~/a_folder/bin/activate para começar a desenvolver.