Gerência de Projetos de TI 6. Custos Adriano Graziosi & Márcio Moreira [email protected]
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]://si.uniminas.br/~marcio/
Pós-SI – 4ª Turma – 2008
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 2
Princípios das funções seguras
Protótipo: função nome (parâmetros) retornoDocumente 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)Use componentes e bibliotecas confiáveisTeste o retorno das funções
Funçãoentradas saídas
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 3
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
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 4
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)
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 5
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
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 6
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
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 7
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
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 8
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
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 9
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)
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 10
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)
Segurança em AplicaçõesMárcio Moreira Unidade 5 – Melhores Práticas de Programação – Slide 11
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 JDK) Catálogo de Práticas de Programação Segura em
Java Mechanisms for Secure Modular Programming in
Java Security Code Guidelines - Sun