Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de...
Transcript of Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de...
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/
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
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
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)
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
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
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
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
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)
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)
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