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

Escrevendo códigos seguros em Python

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.

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)