especialização em segurança da informação segurança em aplicações 5. melhores práticas de...

11
Especialização em Segurança da Informaçã Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira [email protected] http://si.uniminas.br/~marcio/ Pós-SI – 4ª Turma – 2008

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


1 download

TRANSCRIPT

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@uniminas.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]://si.uniminas.br/~marcio/

Pós-SI – 4ª Turma – 2008

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@uniminas.br

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

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@uniminas.br

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

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@uniminas.br

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)

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@uniminas.br

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

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@uniminas.br

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

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@uniminas.br

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

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@uniminas.br

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

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@uniminas.br

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)

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@uniminas.br

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)

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@uniminas.br

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