11
Especializa ção em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira [email protected] http://si.lopesgazzani.br/docentes/marcio/

Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira [email protected]

Embed Size (px)

Citation preview

Page 1: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Especialização em Segurança da Informação

Segurança em Aplicações5. Melhores Práticas de Programação

Márcio Aurélio Ribeiro [email protected]

http://si.lopesgazzani.br/docentes/marcio/

Page 2: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 2 Segurança em

Aplicações

Princípios das funções seguras

Princípios:Documente as funçõesUse parâmetros e o retorno

fortemente tipadosTeste os parâmetros

recebidos (evita SQL/code injection)

Use funções seguras (strncpy ao invés de strcpy)

Crie funções seguras (evita buffer overflow)

Teste o retorno das funções

Função:// comentáriosFunção nome

(parâmetros) retornoTeste de parâmetrosCodificação seguraRetorno

Chamador:Ret. = função(valores)Teste do retorno

entradas

saídas

Função

Page 3: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 3 Segurança em

Aplicações

Princípios gerais

Tenha política de versões consistentesO recurso afetado existe desde a versão?

Use componentes e bibliotecas confiáveisEvite arquivos temporários

Se necessário use nomes fixos (arq_userid.tmp) com privilégios fixos

Não armazene senhas e chaves no códigoif (senha = “@b0b4*”) then ...privkey = “88419787349802”

Use ambientes (dev, tst, hml e prd) seguros

Page 4: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 4 Segurança em

Aplicações

Princípios de programação segura

Controle as condições de corridaTeste antes, bloqueie, use e libereUse semáforos ou outros mecanismos do SO

Minimização de privilégiosUse somente os privilégios necessários

Use várias camadas de segurançaAutenticação para acesso (credencial do usuário)Autenticação estendida em pontos críticos da

aplicação (credenciais do supervisor ou usuário)

Page 5: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 5 Segurança em

Aplicações

Princípios de programação segura

Validação das entradas (evita injection)Assuma que todas as entradas são vulneráveisProcure valores válidos e rejeite o restanteTeste as entradas no clientTeste as entradas novamente na apresentaçãoTeste:

Tipo dos dadosTamanho dos dadosFaixa de valores válidosFormato dos valores válidos

WebServer(DMZ)

`

Firewall

Clients

DatabaseServer

ApplicationServer

Pro

duct

ion

VLA

N (

switc

h)

Bac

kend

VLA

N (

switc

h)

Privated AreasPublic Areas

Page 6: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 6 Segurança em

Aplicações

Princípios de programação segura

Limite a área de exposiçãoCrie interfaces somente quando necessárioOfereça somente os serviços necessários

Use verificadores de códigoFerramentas de análise estática de códigoBuscam vulnerabilidades conhecidas no código

Trate as exceçõesÉ altamente recomendável tratar exceçõesAs exceções de chamadas ao SO são

imperativas

Application.dll

Page 7: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 7 Segurança em

Aplicações

Recomendações para Java (e .net)

Defina atributos da classe como private Defina métodos de acesso como protected Declare métodos internos como private Defina políticas de acesso a applets Compiler

Source code

Class files

Virtual Machine

Libraries Use

rD

evel

oper

Page 8: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 8 Segurança em

Aplicações

Recomendações para Java (e .net)

Use herança com cuidadoVocê pode herdar vulnerabilidades

Declare as classes como:final (evita reuso),uncloneable (evita instância sem o construtor) eunserializable (evita acesso serial indireto)

Se precisar assinar o código use um arquivoEvita o uso indevido de arquivos assinados

Page 9: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 9 Segurança em

Aplicações

Evite ou não use em Java (e .net)

Evite blocos privilegiados (privileged blocks)Padrão:

if (obj.getClass().getName().equals("Admin")) { // executa aqui a operação privilegiada}

Se for necessário, use:if (obj.getClass() ==

this.getClassLoader().loadClass("Admin")) { // executa aqui a operação privilegiada}

Evite atributos estáticos (static)

Page 10: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 10 Segurança em

Aplicações

Evite ou não use em Java (e .net)

Não use o mecanismo package para controle de acesso (eles normalmente são abertos)

Não use string para armazenar senhasUse vetor de char e limpe o conteúdo após o usoIsto reduz a eficácia do memory dump

Não use classes aninhadas (elas tornam-se acessíveis a todo o pacote)

Não compare o nome de classes (isto revela informações que um espião não deve saber)

Page 11: Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira marcio.moreira@pitagoras.com.br

Márcio Moreira 5. Melhores Práticas de Programação – slide 11 Segurança em

Aplicações

Materiais adicionais

Writing Secure Code – Best Practices Secure Programming – Java - SAP Programación Segura Strategies for Securing Java Technology Code Java & Secure Programming (Bad Examples found in J

DK) Catálogo de Práticas de Programação Segura em Jav

a Mechanisms for Secure Modular Programming in Java Security Code Guidelines - Sun