Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Escrevendo códigos seguros em Python

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for yyyyyyyan yyyyyyyan
October 14, 2021

Escrevendo códigos seguros em Python

Palestra apresentada na Python Brasil 2021.

A palestra analisará uma série de vulnerabilidades que, dados alguns erros e descuidados comuns, podem vir a ferir seus programas Python. Ao fim, um método de precaução e auditoria será apresentado.

Seu código Python é seguro? Essa palestra vai mostrar como algumas desatenções, erros e suposições que nós, pessoas desenvolvedoras, cometemos em nossos códigos podem acarretar em graves vulnerabilidades em nossas aplicações. Tudo isso, é claro, recheada de exemplos! Por fim, a palestra apresentará uma maneira simples de auditar um código Python para facilitar a manutenção de sua segurança com a identificação de possíveis vulnerabilidades.

Avatar for yyyyyyyan

yyyyyyyan

October 14, 2021
Tweet

More Decks by yyyyyyyan

Other Decks in Technology

Transcript

  1. © 2021 Thoughtworks | Confidential eval(expression[, globals[, locals]]) Avalia uma

    expressão Python e retorna o resultado 5 Parâmetros opcionais: - globals Dicionário - locals Qualquer mapping object
  2. © 2021 Thoughtworks | Confidential 14 Então quando devemos usar

    o eval()? Quando não há outra maneira viável de realizar uma tarefa
  3. © 2021 Thoughtworks | Confidential 15 Então quando devemos usar

    o eval()? Quando não há outra maneira viável de realizar uma tarefa (nunca)
  4. © 2021 Thoughtworks | Confidential pickle.dump(obj, file, protocol=None, *) pickle.dumps(obj,

    protocol=None, *) Serializa um objeto Python em uma sequência de bytes 17 Parâmetros opcionais: - protocol Número inteiro indicando o protocolo usado para a serialização. Atualmente vai de 0 (mais antigo) a 5 Python 3.8.
  5. © 2021 Thoughtworks | Confidential 18 O método mágico __reduce__()

    Usado para customizar como instâncias de classe são serializadas. Deve retornar uma string ou uma tupla com um callable e seus argumentos.
  6. © 2021 Thoughtworks | Confidential 19 O método mágico __reduce__()

    Usado para customizar como instâncias de classe são serializadas. Deve retornar uma string ou uma tupla com um callable e seus argumentos.
  7. © 2021 Thoughtworks | Confidential Assinar pickle com HMAC 26

    Prevenção Alternativa Usar um padrão de serialização mais seguro (JSON)
  8. © 2021 Thoughtworks | Confidential 28 O que acontece quando

    rodamos pip install? 1. Identificação das requisições base e dos argumentos passados 2. Resolução das dependências e determinação do que será instalado 3. Determinação do método de instalação 4. Instalação dos pacotes
  9. © 2021 Thoughtworks | Confidential 29 Determinação do método de

    instalação Se tem uma wheel disponível: Baixa a wheel e instala por ela; Senão: Baixa o código fonte do pacote; Se for possível fazer o build da wheel pelo código fonte: Faz o build da wheel e instala por ela; Senão: Instala pelo setup.py;
  10. © 2021 Thoughtworks | Confidential 34 Risco na prática -

    --extra-index-url https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
  11. © 2021 Thoughtworks | Confidential - --only-binary - --require-hashes -

    NUNCA instale um pacote como sudo/administrador 35 Prevenção
  12. © 2021 Thoughtworks | Confidential - Acompanhar releases dos pacotes

    que usamos - Acompanhar lista de vulnerabilidades do CVE (cve.mitre.org) 38 Prevenção
  13. © 2021 Thoughtworks | Confidential 44 Quem controla a formatação

    pode ver tudo! https://lucumr.pocoo.org/2016/12/29/careful-with-str-format/
  14. © 2021 Thoughtworks | Confidential 61 Muitas opções! - Codacy

    (gratuito para projetos Open Source) - Horusec (Open Source) - Pyre/Pysa (Open Source) - Coverity Scan (exclusivo para projetos Open Source) - Bandit (Open Source)