Aspectos de Segurança em Programação com Java



Documentos relacionados
A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

FBV - Linguagem de Programação II. Um pouco sobre Java

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Sistemas Operacionais

Figura 01 Kernel de um Sistema Operacional

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

PROGRAMAÇÃO ORIENTADA A OBJETOS EM JAVA*

1.6. Tratamento de Exceções

PROGRAMA DE DISCIPLINA

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional

Noções básicas de Informática: Software

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação

Programação Orientada a Objetos

Programação de Computadores II TCC Turma A-1

Introdução à Linguagem Java

PROGRAMA DE DISCIPLINA

SISTEMAS OPERACIONAIS

Desenvolvimento Web TCC Turma A-1

ESTUDO DE CASO WINDOWS VISTA

Objetivos do Curso. Você será capaz de:

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Capítulo 1. Introdução ao Java. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO (Bacharelado)

JDBC Java Database Connectivity

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

Linguagem de Programação Introdução a Linguagem Java

Evolução. Tópicos. Bancos de Dados - Introdução. Melissa Lemos. Evolução dos Sistemas de Informação Esquemas Modelos. Características de SGBDs

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Sistemas Operacionais. Prof. André Y. Kusumoto

CURSO DE PROGRAMAÇÃO EM JAVA

Programação Web Prof. Wladimir

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

SISTEMAS OPERACIONAIS 2007

Linguagens de. Aula 02. Profa Cristiane Koehler

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Arquitetura de Sistemas Operacionais Machado/Maia. Arquitetura de Sistemas

Laboratório I Aula 2

Introdução à Linguagem

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

Fonte: - Illustration by Gaich Muramatsu

FundamentosemInformática

IIH Introdução à Informática e Hardware

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Organização e Arquitetura de Computadores I. de Computadores

4 Estrutura do Sistema Operacional Kernel

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

AULA Uma linguagem de programação orientada a objetos

Arquitetura de Computadores. Sistemas Operacionais IV

Sistemas Operacionais

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal

UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE ENGENHARIA ELÉTRICA COLEGIADO DO CURSO DE GRADUAÇÃO EM ENGENHARIA ELÉTRICA/ENG.

Boas Práticas de Desenvolvimento Seguro

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Sistemas Distribuídos RPC x RMI. Edeyson Andrade Gomes

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Everson Scherrer Borges João Paulo de Brito Gonçalves

SISTEMAS OPERACIONAIS

Processamento de Dados

Sistemas Operacionais

Análises Geração RI (representação intermediária) Código Intermediário

Introdução a Java. Hélder Nunes

ESTUDO SOBRE AS LINGUAGENS DE PROGRAMAÇÃO HOSPEDEIRAS SUPORTADAS PELA FERRAMENTA HTML. Aluno: Rodrigo Ristow Orientador: Wilson Pedro Carli

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Componentes da linguagem C++

Software Básico (INF1018)

Sistemas Operacionais

Programação Orientada a Objetos (DPADF 0063)

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Orientação a Objetos com Java

MC-102 Aula 01. Instituto de Computação Unicamp

PHP AULA1. Prof. Msc. Hélio Esperidião

Introdução à Programação

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Arquiteturas RISC. (Reduced Instructions Set Computers)

Java. Marcio de Carvalho Victorino

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Sistemas Operacionais

Sistemas Operacionais. Estruturas de SO. Edeyson Andrade Gomes.

Faculdades Santa Cruz - Inove. Plano de Aula Base: Livro - Distributed Systems Professor: Jean Louis de Oliveira.

A Linguagem Java. Apresentação. Java. A Linguagem da Internet

Sistemas Operacionais I Parte III Estrutura dos SOs. Prof. Gregorio Perez gregorio@uninove.br Roteiro. Componentes do Sistema

FERRAMENTA WEB PARA MODELAGEM LÓGICA EM PROJETOS DE BANCOS DE DADOS RELACIONAIS

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Fundamentos de Sistemas Operacionais

Prof.: Roberto Franciscatto. Capítulo 1.1 Introdução

6 - Gerência de Dispositivos

Transcrição:

Aspectos de Segurança em Programação com Java Marcos Alexandre de Melo Medeiros Paulo Sérgio Motta Pires Departamento de Engenharia de Computação e Automação DCA UFRN marcosam@info.ufrn.br, pmotta@dca.ufrn.br

Resumo O objetivo deste trabalho é analisar problemas de segurança decorrentes da programação utilizando a linguagem JAVA. Após apresentar as características dessa linguagem, são discutidas as vulnerabilidades que afetam outras linguagens de programação, explicitando os motivos pelos quais elas não afetam JAVA. Por fim, as vulnerabilidades próprias do ambiente Java são discutidas.

A Apresentação Introdução Linguagem Java Arquitetura de Segurança Java Problemas mais comuns nas outras linguagens Exemplo: Linguagem C Vulnerabilidades em Java Conclusão

Introdução O que é Java? Linguagem de programação baseada em C/C++ Criada por James Gosling Resultante de uma pesquisa iniciada em 1991, mas foi anunciada formalmente em 1995 Orientada a objetos

Introdução Foi desenvolvida visando a portabilidade Aplicações Java rodam em diversos ambiente operacionais (computadores, celulares, etc) Utilizou-se o conceito de máquina virtual para isolar a aplicação do sistema operacional

Arquitetura

Máquina Virtual Java Coletor de Lixo Carregador de Classes Gerenciador de Memória Verificador de bytecodes Gerenciador de Segurança

Características da Linguagem Fortemente tipada Não permite aritmética de ponteiros Exige que variáveis locais sejam atribuídas antes da compilação Implementa verificação de limites de vetores

Arquitetura de Segurança Sun Microsystems Domínios de Proteção Agrupar componentes ou recursos Domínios de Sistema Domínios de Aplicação Arquivos de políticas de segurança

Problemas Mais Comuns nas Outras Linguagens Input Validation Error Erro devido à passagem de um parâmetro em um formato não esperado e não tratado. Boundary Condition Error Erro devido a uma tentativa de leitura/escrita em um endereço inválido ou esgotamento de um recurso do sistema. Buffer Overflow

Problemas Mais Comuns nas Outras Linguagens Access Validation Error Erro devido à invocação de operações em objetos fora do domínio de acesso. Exceptional Condition Error Erro devido ao não tratamento de uma exceção gerada por um módulo, um dispositivo ou entrada de dados do usuário.

Problemas Mais Comuns nas Outras Linguagens Cross Site Scripting Inserção de Scripts e codigo HTML em páginas de uma rede local. SQL Injection Inserção de comandos SQL através de concatenação de strings usando os separadores de comandos.

Exemplo: Linguagem C Buffer Overflow Idéia Extrapolar os limites de um array para executar um código malicioso Teoria envolvida Extrapola-se os limites de um array, alocado dinamicamente numa subrotina, que esteja na pilha de execução até atingir a posição de memória onde está armazenado o endereço de retorno dessa subrotina, que pode ser modificado para apontar para um código malicioso a ser executado. Porque não afeta aplicações Java Os limites dos array são sempre verificados

Exemplo: Linguagem C Format String Idéia Conseguir informações sobre os conteúdos dos endereços de memória que normalmente não são acessíveis Força a queda de um programa Conseguir uma shell de um super-usuário a partir de uma exceção provocada pela entrada de uma string mal intensionada Teoria relacionada Passar uma string formatada intensionamente para ler e escrever na memória. Exemplo: funções xprintf e seus especificadores de formato (%s, %x, %d, %u) Porque não afeta aplicações Java O tratamento de exceções é bastante robusto Não é possível ler fora dos limites das variáveis

Vulnerabilidades em Java Exposição dos Bytecodes Possui grande quantidade de informações a respeito no código fonte em seu pool de constantes FÁCIL DECOMPILAÇÃO Soluções Adição de código não funcional ao Código Fonte Ofuscação do Código Fonte Criptografia dos arquivos compilados (.class) Esconder os arquivos compilados (.class)

Vulnerabilidades em Java Objetos String e coleta de Lixo São imutáveis Coleta de lixo não controlável pelo usuário Dados sensíveis podem flutuar na memória Soluções Usar array de char Evitar ao máximo o uso desses objetos em dados sensíveis

Vulnerabilidades em Java Literais de String São armazenados exatamente iguais no pool de constantes dos arquivos compilados (.class) Uma simples análise dos bytecodes pode fornecer dados sensíveis Soluções Evitar o uso de literais no Código Fonte Usar array de char sempre que possível

J2EE J2EEBrasil

Conclusões A arquitetura da linguagem é bastante segura e permitiu isolar a aplicação do S.O. Java é uma linguagem mais voltada para desenvolvimento de aplicações As questões de segurança em Java devem ser vistas de forma diferente das demais linguagens O programador é o maior responsável pelas vulnerabilidades da aplicação

Contatos Marcos Medeiros marcosam@info.ufrn.br Paulo Motta pmotta@dca.ufrn.br Departamento de Engenharia de Computação e Automação DCA UFRN www.dca.ufrn.br