Skip to main content

Comece a desenvolver em Python com segurança usando Snyk

Escrito por
blog feature secure python dev

4 de agosto de 2021

0 minutos de leitura

Se você desenvolve em Python e quer proteger suas aplicações com facilidade, está no lugar certo! Snyk ajuda você a proteger todo o código do seu app Python — seu próprio código, as bibliotecas de código aberto que você incorpora, seus contêineres e sua infraestrutura como código (IaC) — integrando a segurança perfeitamente aos fluxos de trabalho de desenvolvimento que você já usa.

A plataforma Snyk é composta por quatro produtos, cada um desenvolvido para ajudar você a proteger os diferentes componentes do seu app Python da maneira mais simples possível:

  • Snyk Code para encontrar e corrigir problemas de segurança e qualidade no seu próprio código Python.

  • Snyk Open Source para encontrar e corrigir vulnerabilidades de segurança e problemas de licença nos pacotes Python de código aberto usados para criar seu app.

  • Snyk Container para encontrar e corrigir vulnerabilidades de segurança nas imagens de contêiner Python.

  • Snyk Infrastructure as Code para encontrar e corrigir vulnerabilidades de segurança no código que configura a implantação dos seus apps Python.

Neste artigo, vamos mostrar como é fácil integrar os testes de segurança da Snyk ao seu jeito atual de trabalhar. O plano gratuito da Snyk é mais do que suficiente para testar as diferentes etapas descritas abaixo e também para qualquer projeto de pequeno porte.

Proteja seu app Python desde o início

Como pessoa desenvolvedora, quanto mais cedo você encontra os problemas, mais fácil é corrigi-los. Corrigir uma vulnerabilidade crítica depois de empacotar e lançar seu código leva muito mais tempo do que resolvê-la no início do processo.

Dica: você pode testar e usar Snyk gratuitamente em projetos de código aberto. Para usar Snyk Open Source ou Snyk Code com um plugin de IDE, não é necessário dar à Snyk acesso aos seus repositórios do GitHub. A maneira mais simples de testar Snyk é criar uma conta gratuita e analisar um repositório de código aberto. Não é preciso instalar nada, e a integração leva apenas alguns segundos.

Snyk oferece várias maneiras de proteger seu código desde o início do desenvolvimento — na IDE, usando o Advisor e com a Snyk CLI.

IDEs

Você também pode usar Snyk para proteger seu código diretamente na IDE. O plugin da Snyk para PyCharm, por exemplo, é compatível com Snyk Open Source e Snyk Code, e ajuda você a encontrar e corrigir facilmente vulnerabilidades conhecidas nas dependências de código aberto, além de problemas de segurança e bugs no seu próprio código.

É fácil configurar o plugin. Você pode baixá-lo e instalá-lo como qualquer outro plugin da JetBrains, diretamente na sua IDE.

No PyCharm, acesse Preferências e depois Plugins, pesquise por Snyk no marketplace da JetBrains e clique em OK para baixar e instalar o plugin.

Em seguida, conecte o plugin à sua conta Snyk. Para isso, clique no botão Connect your IDE to Snyk na visualização do plugin e siga as instruções para autenticar.

Pronto! Agora, basta executar um teste da Snyk. Clique no botão Analyze now! para iniciar os testes de segurança da Snyk. Em poucos segundos, o plugin apresenta uma lista de todos os tipos de problemas identificados, organizados em três categorias:

  • Segurança de código aberto: vulnerabilidades conhecidas nas dependências de código aberto diretas e indiretas (transitivas) incorporadas ao projeto

  • Segurança do código: falhas de segurança identificadas no seu próprio código

  • Qualidade do código: problemas de qualidade no seu próprio código

O PyCharm exibe um projeto Python com problemas de segurança identificados pelo Snyk, incluindo vulnerabilidades de injeção de comandos e travessia de diretório em package_index.py.

Para problemas identificados no seu próprio código, por exemplo, o plugin detalha o fluxo de dados e aponta os arquivos e as linhas relevantes que levam ao problema. Você pode clicar no nome do arquivo para abri-lo rapidamente na linha exata que introduz o problema. A análise do fluxo de dados ajuda a identificar problemas e a entender como eles se propagam pela aplicação, facilitando a compreensão e o acompanhamento de questões complexas.

Mas o plugin não para por aí. Além de mostrar o que está errado no código, ele também apresenta exemplos de como outras pessoas corrigiram o problema, para ajudar você a agir mais rápido.

Plugin de segurança da Snyk em um IDE, mostrando vulnerabilidades em código Python e uma comparação de código com alterações destacadas

Snyk Advisor

Snyk Advisor é uma ferramenta gratuita de pesquisa on-line que ajuda você a decidir quais pacotes de código aberto ou imagens base de contêiner usar. Com todos os projetos do PyPi e as imagens base Python do Docker Hub, Snyk Advisor permite que você, como pessoa desenvolvedora Python, pesquise diferentes pacotes e imagens para avaliar a integridade e o nível de segurança antes de incluí-los no seu projeto.

Página do Snyk Advisor para o pacote Python Jinja2, com pontuação de integridade de 99/100, gráficos de popularidade e manutenção e detalhes de segurança

No projeto analisado na etapa anterior, pesquisar o pacote Jinja2 teria revelado que a versão 3 não só é a mais popular, como também não tem vulnerabilidades.

CLI

A Snyk CLI é uma ferramenta poderosa e gratuita que você pode usar para executar análises de segurança da Snyk no seu ambiente de desenvolvimento local, manualmente ou como parte do pipeline de CI/CD. Ela oferece uma longa lista de argumentos para extrair detalhes específicos dos resultados das análises da Snyk e personalizar o processo de teste.

Observação: a Snyk CLI é baseada em Node.js e npm, SCOOP ou Homebrew. É necessário instalar essas ferramentas antes de usar a Snyk CLI.

É simples configurar a Snyk CLI. Você pode usar npm ou Homebrew para instalá-la rapidamente. Depois, basta autenticar com sua conta Snyk:

npm install -g snyk
snyk auth

Falta apenas mais uma etapa para testar seu projeto Python: execute o comando snyk test na pasta raiz do projeto.

Para os testes do Snyk Open Source, também é necessário instalar as dependências com:

pip install -r requirements.txt 
snyk test

Dica: você pode gerar o arquivo requirements.txt de um projeto ativando o ambiente virtual e usando o comando pip freeze > requirements.txt.

Snyk oferece mais do que uma lista de dependências vulneráveis e problemas de licença: também fornece informações adicionais para remediação, como as versões recomendadas para atualização de algumas dependências.

No caso do projeto usado neste artigo, Snyk sinaliza uma vulnerabilidade de gravidade média introduzida pela versão 2.11.1 do pacote Jinja e recomenda uma atualização de versão secundária para a 2.11.3, que corrige o problema.

Terminal mostrando o Snyk analisando nove dependências Python e identificando uma vulnerabilidade no pacote Jinja2, com recomendação de atualização.

Você também pode usar a Snyk CLI para receber notificações sobre vulnerabilidades recém-divulgadas ou novas correções para vulnerabilidades existentes. Para isso, use:

snyk monitor

"Os resultados estão disponíveis no app da Snyk, no URL fornecido. Você receberá uma notificação se novas vulnerabilidades relevantes forem divulgadas.

Painel do projeto no Snyk mostrando uma vulnerabilidade de gravidade média de negação de serviço por expressão regular no Jinja2, em um app Flask com Python

Você pode usar a mesma CLI para analisar seus contêineres Python em busca de problemas de segurança e verificar sua infraestrutura como código (IaC). Em breve, a CLI também terá suporte ao Snyk Code. Fique de olho!

No mesmo projeto, experimente testar a imagem de contêiner da aplicação com (é necessário criar a imagem antes do teste):

snyk test --docker debian --file-Dockerfile

A Snyk CLI analisará a imagem em busca de problemas e dará algumas dicas para atualizar a imagem base.

Terminal mostrando o Snyk analisando uma imagem Docker Debian e identificando vulnerabilidades em tar, bash e glibc.

Por fim, você pode analisar seu código com Snyk Code. Use o comando:

snyk code test .

A CLI analisará o projeto local e exibirá os resultados.

Terminal mostrando a CLI do Snyk Code detectando um segredo de alta gravidade codificado diretamente em um arquivo de configurações do Python

Confira a folha de referência da CLI para ver mais dicas e truques sobre a Snyk CLI.

Os plugins de IDE da Snyk, o Snyk Advisor e a Snyk CLI estão disponíveis gratuitamente, com análises ilimitadas para projetos Python de código aberto.

Integre a segurança aos seus repositórios Python

De acordo com a última pesquisa da comunidade Python, realizada em 2019, 90% das pessoas desenvolvedoras Python usam sistemas de gerenciamento de código-fonte (SCM), como o GitHub. Não seria surpresa se esse número fosse ainda maior caso fizéssemos a mesma pergunta às pessoas desenvolvedoras Python em 2021.

Como boa parte do seu tempo e dos seus processos de desenvolvimento envolve esses sistemas, poder incluir segurança facilmente sem desacelerar o desenvolvimento pode ser extremamente valioso. Como? Veja alguns exemplos:

  • Para garantir que você não introduza código vulnerável no seu repositório Python, e se pudesse analisar automaticamente cada novo pull request em busca de problemas?

  • Para garantir que sua aplicação Python esteja íntegra e atualizada, e se você pudesse criar pull requests automaticamente para atualizar pacotes Python desatualizados?

  • Para garantir que você corrija rapidamente as vulnerabilidades recém-divulgadas, e se pudesse receber uma notificação e um pull request com a correção recomendada para resolver o problema?

  • Para automatizar a segurança como parte do processo de CI/CD, e se você pudesse adicionar testes de segurança como uma GitHub Action ou às suas pipelines do Bitbucket?

  • Para garantir que seu código proprietário esteja protegido, e se você pudesse analisá-lo rapidamente em busca de problemas de segurança e visualizar, sobre o seu próprio código, como dados maliciosos percorrem o app?

Snyk oferece tudo isso. Em poucas etapas, você pode importar seu projeto Python para Snyk e garantir que ele esteja devidamente protegido.

No Snyk, acesse Integrações, depois GitHub, e selecione seu projeto Python para importá-lo para Snyk. Durante a importação do novo projeto, Snyk analisará automaticamente TODOS os componentes que fazem parte dele e os exibirá como subprojetos individuais na página Projects:

Painel do Snyk Projects mostrando o repositório python-flask-sample-app com análise de código, deployment.yaml, Dockerfile e requirements.txt.

Por exemplo, ao abrir o deployment.yaml file, você encontra informações sobre os problemas identificados pelo Snyk Infrastructure as Code nas configurações de implantação do Kubernetes da aplicação.

Painel de problemas de segurança com um YAML de implantação do Kubernetes e um alerta de que o contêiner é executado sem controle de usuário root

Depois de importado, seu projeto Python passa a ser monitorado continuamente pela Snyk. Se surgirem novas vulnerabilidades nas dependências de código aberto ou novas correções para vulnerabilidades existentes, um pull request será criado automaticamente.

Pull request do GitHub criado pelo bot da Snyk para atualizar o Jinja2 da versão 2.11.1 para a 2.11.3 e corrigir dependências vulneráveis do Python

Snyk também abre pull requests automaticamente em várias outras situações. Você pode controlar o ritmo e a frequência com que eles são criados para não receber pull requests em excesso. Saiba mais sobre a remediação da Snyk na documentação da Snyk.

As integrações de SCM da Snyk estão disponíveis gratuitamente, com análises ilimitadas para projetos Python de código aberto. Os produtos da Snyk compatíveis variam de acordo com o SCM.

Automatize a segurança de Python como parte do CI/CD

Integrar testes de segurança de Python ao seu processo de CI é uma ótima maneira de detectar vulnerabilidades antes que seu código chegue à produção. Essa camada adicional de segurança ajuda a encontrar problemas mesmo que você não tenha feito testes manuais no ambiente local.

Snyk se integra a todas as principais ferramentas de CI/CD, como Jenkins, CircleCI e TeamCity. Além disso, como mencionamos acima, você pode usar a Snyk CLI como uma etapa em qualquer pipeline automatizada. Vamos ver um exemplo: adicionar testes de segurança da Snyk a um fluxo de trabalho do GitHub Actions.

Snyk oferece uma Action para todas as versões mais recentes do Python, incluindo Python 3.6, 3.7 e 3.8. Neste exemplo, vamos usar a action para automatizar os testes de segurança do mesmo projeto Python analisado ao longo deste artigo.

Primeiro, defina seu token de API da Snyk como um segredo nas configurações do repositório (Settings †’ Secrets). Em seguida, abra a aba Actions e crie um novo fluxo de trabalho personalizado com a Snyk Action para Python:

name: Example workflow for Python using Snyk
on: push
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - name: Run Snyk to check for vulnerabilities
        uses: snyk/actions/python@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

Como esperado, a mesma vulnerabilidade identificada no teste da CLI acima fez a compilação falhar:

Job de segurança do GitHub Actions mostrando o Snyk analisando um projeto Python Flask e identificando uma vulnerabilidade em uma dependência.

Como a Action é baseada na Snyk CLI, você pode usar todos os argumentos compatíveis para ajustar o comportamento dos testes de segurança da Snyk no seu processo de CI.

Desenvolva com rapidez. Mantenha a segurança!

Python é uma ótima opção para quem desenvolve e quer avançar rápido. É uma linguagem extremamente versátil, fácil de escrever e conta com uma grande variedade de bibliotecas de código aberto para adicionar funcionalidades às suas aplicações rapidamente. Na hora de lançar seu app, Docker, Red Hat e outras empresas oferecem diversas imagens base de contêiner Python fáceis de usar. Você pode até escrever em Python as configurações do Kubernetes e da infraestrutura.

Agilidade e segurança não são incompatíveis. Esperamos que este artigo tenha mostrado como é fácil incorporar a segurança ao seu fluxo de desenvolvimento Python atual — seja no ambiente de desenvolvimento local, como parte integrante do fluxo de trabalho baseado em Git ou junto com o processo de build automatizado — e, o mais importante, sem precisar desacelerar!

Comece a participar de desafios de Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.

Leia mais

blog feature snyk container custom base recommendations
Blog

Conheça o Evo Agentic AppSec: segurança que acompanha o ritmo do desenvolvimento com IA

O desenvolvimento impulsionado por IA está avançando mais rápido do que os fluxos de trabalho de segurança tradicionais. O AppSec agentivo da Snyk usa agentes de segurança para encontrar, corrigir e verificar vulnerabilidades continuamente, enquanto as pessoas definem os critérios.

blog feature ai violet
Blog

VulnBump: agentes de IA conseguem corrigir dependências vulneráveis sem quebrar o build?

O VulnBump testa agentes de IA em 307 atualizações reais de dependências. Uma correção só é considerada válida se eliminar a vulnerabilidade e mantiver o build e os testes funcionando.

Blog

Modelos de ponta encontraram as vulnerabilidades. Só o atacante encontrou as cadeias.

A análise estática encontrou as falhas, mas só os testes de ataque em aplicações ativas provaram como elas poderiam ser encadeadas para causar invasões. Uma comparação entre Evo COS, Claude Security e Claude Code Security.