Técnicas de programação segura em JAVA

Propaganda
ANÁLISE DAS TÉCNICAS DE
PROGRAMAÇÃO SEGURA EM C E JAVA,
COM ênfase em Buffer Overflow.
Carlos Alberto Felippi
Lucas Ricardo
Rafael Schadeck
Relevante

OBJETIVO: Analisar as técnicas de programação segura em C e
Java, definindo conceitos e as técnicas de programação e suas
utilizações em casos, com ênfase em Buffer Overflow afim de
definir boas práticas para o desenvolvimento.

JUSTIFICATIVA: Um meio de verificar uma programação segura
é conhecer os sistemas, e desta forma analisar o melhor meio de
evitar possíveis erros indesejados na programação. Porém, cada
sistema possui suas características, sendo assim é importante
analisar cada sistema, C e JAVA, dentro de suas características.
Cada técnica demonstrada será destacada dentro de seu contexto
operacional, de forma que a implementação dos códigos posam ser
os mais seguros possíveis evitando transtornos como os Buffer
Overflow.
Introdução

Programação Segura

Buffer Overflow

C & JAVA

Técnicas
Definições de C

Unix

Baixo e alto nível e linguagem compilada

Imperativa e procedural

Structs
Técnicas de programação segura em C

03 principais princípios:
◦ Integridade;
◦ Robustez;
◦ Segurança.

03 vulnerabilidades
◦ Dangling pointers;
◦ Double free.
◦ Buffer overflow;
Técnicas para melhorar a segurança dos
códigos em C









Cuidado com “gets” e “scanf”;
Reutilize seu código;
Facilite seu código;
Clean code;
Criptografia;
Só apague o que você conhece;
Teste e deixe testar;
Auditoria de segurança;
Setuid;
Caso comentado
Análise das implementações em C

Técnicas;

Planejamento;
Comparativos e pontos a serem
considerados em C

Princípios;

Técnicas;

Ferramentas;

Objetivo;
Definição de JAVA

Sun Microsystems, 1995

Linguagem própria

Notebooks, desktops, tablets, celulares, smartphones e
diversos outros sistemas embarcados

JVM

JRE

JDK
Técnicas de programação segura em JAVA

OWASP (The Open Web Application Security Project)

Cross-Site Request Forgery

Command Injectionl

Buffer Overflow
Técnicas de programação segura em JAVA

Command Injection
Técnicas de programação segura em JAVA

Buffer Overflow
Conclusões casos JAVA

Seguro;

Fácil;

Organizado;

Leitura;

Manutenção;
Definição de Buffer Overflow





Memória
Inundação
Quantidade de dados maior do que se possa conter
Estático ou Dinâmico
Recebe mais dados do que está preparado
Variável nome
A
B
Valor
[]
1979
Valor hexadecimal
00
00
00
00
00
00
00
00
07
Variável nome
A
B
Valor
'e'
Valor hexadecimal
65 78 63 65 73 73 69 76 65 00
'x'
'c'
'e'
's'
's'
'i'
'v'
25856
BB
Normas e boas práticas de programação segura
Em JAVA tipos de prática:
FAÇA
Sempre classifique os atributos de uma classe como private.
Defina políticas para detalhar os privilégios de acesso a objetos de classes ou a
applets específicos com base em arquivos fonte e/ou assinaturas.
EVITE
Evite ao máximo o uso de atributos static. Esse tipo de atributo é alocado à
classe e não ao objeto e desse modo pode ser localizado por qualquer outra
classe.
NÃO FAÇA
Não use o tipo String para armazenar senhas, mesmo temporariamente, pois
esse tipo de variável é immutable, e seu valor será mantido na memória até a
próxima operação. Use o tipo char[] e sobrescreva o valor da variável assim que
possível.
Nunca armazene senhas ou outras informações secretas diretamente no código.
Normas e boas práticas de programação segura
Boas práticas em C:
1. Sempre escolha nomes significativos para variáveis, funções e procedimentos.
2. Mantenha a documentação concisa e descritiva.
3. Lembrar que o tempo de leitura e compreensão de um programa é muito
maior do que o tempo para escrevê-lo. A leitura do programa deve ser o mais
fácil possível.
4. As três de estruturas de controle em programação são:
· sequência
· seleção
· repetição
5. Cada subprograma (função ou procedimento) deve fazer uma única tarefa e
deve fazê-la corretamente.
6. Inclua comentários
Normas e boas práticas de programação segura
Normas sobre Programação em C/C++:
1. Todo comando em C/C++ termina com um ponto-e-vírgula (;).
2. Alinhe um { na mesma coluna que seu } correspondente.
3. Todo programa C/C++ inicia sua execução no programa principal, denominado main.
4. Ao utilizar qualquer estrutura de seleção ou repetição, por exemplo, comandos de
seleção (if, switch) ou de repetição (for, while, do-while), desloque dois espaços para a
direita (indentation) os comandos contidos neles.
5. O comando break usado nos comandos while, for, do/while, ou switch causa a saída
imediata dessas estruturas para o próximo comando.
6. O comando continue usado nos comando while, for, do/while faz com que o controle do
programa passe para o próximo passo da iteração.
7. Evite usar somente letras maiúsculas.
8. Colocar um ponto-e-vírgula logo após um comando de seleção ou repetição constitui
um erro.
Como evitar o Buffer Overflow
Construção de um bom projeto estrutural de programação
Atentando as condições de testes e homologações de todos os tipos de diferentes ambientes, testes em
várias plataformas
Estar em dia com atualizações e patchs de segurança (remendo em inglês), servem para adicionar
recursos ou corrigir erros em alguns programas.
Não devemos depender exclusivamente das boas práticas de programação dos desenvolvedores
Técnicas que ajudam a melhorar a segurança dos programas:
Melhores práticas de programação:
- Proteção pelo sistema operacional
- Proteção pelo compilador
- Verificações na altura da execução
- Invalidar a execução de código na pilha
Análise Buffer Overflow
Normas
Cuidados na construção do código
Identificar um código fonte seguro
Análise dos códigos
Testes de requisitos
Prevenir ataques
Conhecer as ferramentas
Boas Práticas
Programação defensiva
Não existe um sistema totalmente seguro
Dicas:
Não complique seu código
Faça auditoria de segurança
Todo dado é importante
Todo código é inseguro
A experiencia e conhecimento são importantes na melhor qualidade
Referencias













“Buffer Overflow”, http://www.segurancadigital.info/dicas/49-seguranca-da-informacao/427-buffer-overflow.
“Crimes Cibernéticos: Entendendo o Buffer Overflow”,http://www.crimesciberneticos.com/2011/02/entendendo-obuffer-overflow.html.
“developerWorks : Introdução a Programação Java”, CT801, 4 de junho de 2012,
http://www.ibm.com/developerworks/br/java/newto/.
“file.pdf”, http://www.gris.dcc.ufrj.br/documentos/apresentacoes/buffer-overflow-uma-introducaoteorica/at_download/file.
“G2T6-secur.program-final.pdf”, http://web.fe.up.pt/~jmcruz/ssi/ssi.1112/trabs-als/final/G2T6-secur.programfinal.pdf.
“Microsoft Word - 13988.rtf - 13988.pdf”, http://si.lopesgazzani.com.br/docentes/marcio/SegApp/13988.pdf.
“O que é um Buffer Overflow ?”, Under-Linux.Org, https://under-linux.org/entry.php?b=923.
“Programação Segura: Uma Introdução à Auditoria de Códigos - gts0204-02slides-progsec-gts2004.pdf”,
ftp://ftp.registro.br/pub/gts/gts0204/gts0204-02slides-progsec-gts2004.pdf.
Sandro Süffert, “Segurança - blog.suffert.com: Portal Brasileiro de Programação Segura Java”, SSegurança blog.suffert.com, http://sseguranca.blogspot.com.br/2008/08/portal-brasileiro-de-programao-segura.html.
“Tomando o controle de programas vulneráveis a buffer overflow”,
http://www.cic.unb.br/~rezende/trabs/buffer_overflow.htm.
developerWorks : Introdução a Programação Java. CT801. http://www.ibm.com/developerworks/br/java/newto
Segurança (guia de programação C#). http://viniciusbalduinogarcia.wordpress.com/2009/10/13/seguranca-guiade-programacao-c
Segurança no desenvolvimento de sistemas em Java. http://java.sapao.net/>. Acesso em: 22 ago. 2013.
Download