Pontifícia Universidade Católica de Campinas

Slides:



Advertisements
Apresentações semelhantes
(Buffer Overflow…) Tópicos de Engenharia de Computação B
Advertisements

Tutorial de Pesquisa Básica de Bibliotecas Acadêmicas
Investigação de Acidentes Segurança, Saúde e Meio Ambiente
EBSCOhost Pesquisa básica para bibliotecas acadêmicas
Prof. Carlos Roberto das Virgens
Segurança em Redes - Código Seguro
Mecanismo de Proteção (Prevenção e Detecção)
Encontro Linguagem HTML; 13. Hospedagem na WWW.
Tecnologia para Web JavaScript
Segurança em Web 2.0 Paola Garcia Juarez
Requisitos Funcionais e Não-Funcionais/ Documento de Requisitos
Classes e objetos P. O. O. Prof. Grace.
Tecnologias para Internet
Sistemas Distribuídos
Profa. Reane Franco Goulart
Programação Web com PHP
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
PAR – Plano de Ações Articuladas
Lafayette B. Melo – CEFET-PB - COINFO Quando só o que se tem é um martelo, se acha que tudo que tem no mundo é prego (?) Como você vê o mundo em sua volta.
Gerenciamento de Configuração
Treinamento do Microsoft® Access® 2010
LINGUAGENS DE PROGRAMAÇÃO PROF. DANIELA PIRES
Segurança em aplicações Web
O que é o .
Treinamento AJAX Segurança
ASP (Active Server Pages)
Prof. Alexandre Monteiro Recife
Professor: Márcio Amador
PROGRAMAÇÃO PARA INTERNET Prof.: Jean Carlo Mendes
Tópicos Especiais J2EE Prof. Cristina Valadares Curso de Ciência da Computação.
Programação Orientada à Objetos
PrograMação para internet
REGRAS PARA SER HUMANO Quando você nasceu não veio com manual do proprietário. As dicas seguintes fazem a vida funcionar melhor.
A abordagem de banco de dados para gerenciamento de dados
Especialização em Segurança da Informação MELHORES PRÁTICAS DE PROGRAMAÇÃO Carlos/Cleofas/Rafael/StéphanasSegurança em Aplicações.
Unidade 6 – Formulários HTML Prof.: Henrique Santos
Tutorial: Cadastro.
Engenharia de Software
IIS Web Server.
PROGRAMAÇÃO WEB AULA 04 Prof. Gustavo Linhares 28/10/2009 Instituto Federal de Educação, Ciência e Tecnologia do Norte de Minas Gerais.
Tópicos Avançados em Redes de Computadores Prof. Fabiano Sabha.
Gestão de defeitos.
Segurança Online Entenda e aprenda a driblar os perigos de compartilhar informações pessoais online.
Laboratório de Programação
Aula 4 Prof. Naércio Filho Técnico em Informática
Aon Affinity Unis: Módulo Pendências – Manual do Usuário.
Automação de Testes de Software
PHP – Aula01 Ferramentas -Web.
Professor Esp. Diego André Sant’Ana Disciplina: Sistemas Operacionais II Sistemas de Arquivos- Tipo de arquivos – Cap
Linguagens de Programação
Projeto Supervisionado no Desenvolvimento de Aplicações Profissionais na Web Introdução a Aplicações Web.
18/04/2017 MODULO: Sistemas Operacional Aula 09 –Vírus e Antivírus
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
FIREWALL.
Tema 2: Técnicas de desenvolvimento seguro
Linguagem Técnica II SCM Software Configuration Management Aula 03 Prof. Renato Novais
Segurança no Desenvolvimento de Sistemas.
Ferramentas para Sistema Web Sistemas de Informação Aula 9 – 08/05/2013.
Prof. Sidney Galeote. 2 www. prasabermais. com  Visão Geral sobre a dimensão de qualidade “performance”  Custo da qualidade  Como a performance deve.
UCSal – Bacharelado em Informática
UCSal – Tecnologia em Análise e Desenvolvimento de Sistemas
Aula 5 – Formulários GET – POST - REQUEST
Introdução a Arquitetura, HTML e CSS
Programação para Web I AULA 2 BANCO DE DADOS.
1 AJAX em aplicações Rails Lívia Monnerat Castro
JavaScript Introdução ao JavaScript 1. Objetivos Introdução Sintaxe Básica Arquivo (script) externo Script no HEAD da página Script no BODY da página.
Apresentação TI Alunos: Isadora Bernardo, Lucas Medeiros, Marcela Muniz e Renata Coutinho.
Questionário (Básico) Autor: Skyup Informática. Atividade - Questionário O módulo permite criar uma série de questões, que deverão ser respondida pelos.
Projeto Integrador I Implementação de Servidor de Arquivos Eliane Linhares Mota 1.
Tarefa Autor: Skyup Informática. Atividade – Tarefa O módulo atividade tarefa tem como principio básico a interação professor-aluno. Os alunos podem apresentar.
Transcrição da apresentação:

Pontifícia Universidade Católica de Campinas Programação Segura Pontifícia Universidade Católica de Campinas Tópicos em Engenharia Computação B Prof. Edmar Roberto Santana de Rezende Daniel Mome Rafael G. O. Santos Ronaldo R. Nascimento Sílvia R. L. Colella

Sumário Introdução Motivação Principais Bugs de Segurança Dicas Validação dos dados no servidor Data Tampering Buffer Overflow SQL Injection Script Injection Cross-Site Scripting Dicas

Motivação Por quê?

Motivação Ataques exploram falhas de segurança Pequenos bugs podem derrubar sistemas inteiros Empresas dependem dos sistemas de informação

Motivação Aumento da qualidade Relacionada com a ocorrência de erros

Principais Bugs de Segurança

Validação de entrada no cliente e no servidor Praticamente todo ataque é resultado de alguma entrada enviada pelo atacante. Programação segura é sobre não permitir que entradas de pessoas com mas intensões causem problemas. Entradas que levam um comportamento inapropriado do sistema. Entradas que permitem acesso a informações restritas do seu sistema.

Todo Input é suspeito Em um ambiente distribuido, não há apenas uma fronteira, mas varias. Programadores tendende a ver a relação cliente servidor como fazendo parte do sistema e não como algo aberto a ataques Cliente é realmente o cliente? O servidor é realmente o servidor? Até onde se pode confiar? O que uma ma entrada entrada pode causar? Espere o Inesperado.

Falha de seguraça no Gmail descoberta em 2006 Cross-Site Request Forgery Acesso indevido a lista de contatos Bastava acessar página maliciosa enquanto logado no Gmail Na pagina maliciosa : <script src="http://mail.google.com/mail/?_url_scrubbed_"> Recebia como resposta a lista de contatos.

Data Tampering Consiste no envio de dados cuidadosamente preparados para serem aceitos pela aplicação mas gerar um efeito colateral não previsto pelo desenvolvedor. Exemplos típicos envolvem montar comandos na linguagem de script, comandos SQL, comandos JavaScript ou tags HTML que serão executados pela aplicação. Ou então enviar chaves de registros, comandos da aplicação, identificadores de sessão e outros parâmetros utilizados internamente pela aplicação.

Data Tampering Principais tipos Buffer Overflow Script Injection SQL Injection Cross-Site Scripting

Buffer Overflow - Overview Ocorre quando o tamanho de um buffer ultrapassa sua capacidade de armazenamento Excesso de dados pode ser armazenado em áreas de memória próximas

Buffer Overflow - Consequências Travar um sistema Corromper dados Executar outros programas

Buffer Overflow - Exemplo

Script Injection O que é? Script Injection é a forma de inserir código de script (Javascript por exemplo) ou tags HTML em requisições que vão para o servidor ou em respostas do servidor para o cliente.

Script Injection Onde fica o perigo? Se alguma informação fornecida pelo usuário é posteriormente exibido em uma página HTML, o cracker pode inserir dados contendo código malicioso que posteriormente será executado pelo servidor ou pelo próprio browser do cliente.

Script Injection Desta forma pode-se: Iludir o usuário, fazendo o pensar que está em outra página Criar links que fazem o usuário executar uma ação quando pensa estar fazendo outra coisa

Script Injection Tomar cuidado Com código Javascript pode-se realizar ações sem depender da iniciativa do usuário. Várias tags HTML provocam ações imediatas, ex: <img>, <iframe>. Além de atributos como onLoad, onMouseOver Se a linguagem de script do servidor suportar avaliação de expressões em texto (a maioria suporta) é possível inserir código a ser executado no próprio servidor que hospeda a aplicação, e não no navegador do usuário.

Script Injection Como se defender Elimine do texto digitado pelo usuário tudo o que se parecer com tags HTML e comandos de Script. Antes de exibir em uma página qualquer informação obtida de uma fonte externa, valide a informação para eliminar o significado especial de símbolos como < & $ ;` . Considere como fontes externas não apenas os campos digitados pelo usuário, mas também cookies, variáveis de ambiente, arquivos anexados, campos de banco de dados e etc.

SQL Injection SQL Injection é uma das formas mais conhecidas de se fazer ataques em sistemas. Principalmente em sistemas WEB. É a forma de inserir comandos SQL ou de alterá-los, em ataques, através de campos de formulários, para realizar operações em banco de dados.

SQL Injection Onde fica o perigo? Muitos programadores constroem comandos SQL (no desenvolvimento de sistemas) utilizando concatenação de strings. A maioria dos bancos de dados é capaz de receber um lote de comandos em uma única mensagem e executar a todos. Desta forma, o cracker pode modificar os comandos SQL da aplicação e fazer praticamente qualquer coisa.

SQL Injection Exemplo código vulnerável

SQL Injection Solução

SQL Injection Principais strings de ataque:

SQL Injection Dicas Sempre faça a validação das entradas do usuário, restringindo determinados caracteres. As conexões que o usuário estabelece através da aplicação devem possuir restrições, deve permitir somente operações que realmente podem ser realizadas por este usuário.

SQL Injection Nunca culpe o usuário

Cross-Site Scripting (XSS) Ocorre quando um invasor usa uma aplicação Web para enviar código malicioso, geralmente na forma de um script, para um outro usuário final. Acontece sempre que uma aplicação Web utiliza a entrada do usuário sem validá-la. O navegador não tem como saber se vem de uma fonte confiável ou não => ele assume e confia no usuário fonte, permitindo que o script seja executado.

Cross-Site Scripting (XSS) O script malicioso pode ter acesso a qualquer cookie, tokens de sessão ou outra informação sensível retida no navegador web e usada naquele site. Estes scripts podem até mesmo rescrever o conteúdo da página HTML. Uma única aplicação na Intranet que contenha o bug pode ser utilizada como meio de inserir esse código malicioso!

Ataques XSS Ataques XSS podem geralmente ser classificados em duas categorias: Armazenamento e Reflexão. Ataques de armazenamento: o código injetado fica permanentemente armazenado nos servidores alvo (um banco de dados, em mensagem de fórum, log de visitantes, campos de comentário, etc.) A vítima então recupera o script malicioso do servidor quando requisita a informação armazenada.

Ataques XSS Ataques de reflexão: o código injetado é refletido pelo servidor web, por meio de uma mensagem de erro, resultado de procura ou qualquer outra resposta que inclua alguma ou toda entrada enviada para o servidor como parte da requisição. Ataques de reflexão são enviados para as vítimas através de outra rota, com por meio de mensagem de correio eletrônico ou algum outro servidor Web. Quando um usuário é ludibriado a clicar em um link malicioso ou submeter um formulário especialmente manipulado, o código injetado viaja para o servidor Web vulnerável, que reflete o ataque de volta para o usuário do navegador. O navegador então executa o código pois ele vem de um servidor confiável.

XSS – Consequências dos Ataques XSS pode causar uma variedade de problemas para o usuário final com uma extensão de severidades desde de aborrecimento até o comprometimento completo da conta. A maioria dos ataques severos de XSS envolve a exposição do cookie de seção do usuário, permitindo ao invasor sequestrar a sessão do usuário e se apoderar da conta. Outros ataques danosos incluem a exposição de arquivos do usuário, um invasor modificar um press release ou uma notícia que pode afetar as ações de uma companhia ou diminuir a confiança do consumidor.

XSS – Como se proteger Garantir que a aplicação realize validação de todos os cabeçalhos, cookies, strings de consulta, campos de formulário e campos escondidos (i.e., todos os parametros) contra uma rigorosa especificação do que pode ser permitido. Codificar a saída fornecida pelo usuário pode ajudar a derrotar as vulnerabilidades XSS previnindo scripts inseridos de serem transmitidos para usuários em formato executável. Política de Segurança ‘Positiva‘: especifica o que é permitido. 'Negativa' ou política de segurança baseada em assinaturas são difíceis de manter e possivelmente incompletas.

Dicas de Programação Segura Projete o programa com cuidado antes de começar. Esteja certo de que está entendendo o que você está programando. Considere o ambiente no qual ele será executado: o comportamento de entradas e de saídas, os arquivos usados, os argumentos reconhecidos, os erros encontrados nas validações –> Importante! Tente listar todos os erros que podem ocorrer e como irá lidar com eles.

Dicas de Programação Segura Documente o programa antes de começar a codificá-lo. Escreva no papel a teoria das operações do código, descrevendo o que fazer e como ele vai fazer. Destaque os módulos mais complexos. Importante! Revise o documento enquanto codifica. Se não puder / fizer, considere escrever um manual completo – será então possível preservar o foco no código e no que ele deve fazer. Faça com que a parte crítica do seu problema fique com o menor tamanho possível.

Dicas de Programação Segura Pense antes de adicionar novas funcionalidades simplesmente porque pode. Adicione somente quando tem necessidade. Quanto menor o tamanho do seu código, menor a possibilidade de introduzir bugs e mais você entende como o código realmente funciona. Tente nao reescrever funções de biblioteca padrão. Embora tenham sido encontrados bugs em funções de biblioteca padrão, é mais provável que você introduza bugs novos e ainda mais perigosos. Cuidado com condições de corrida. Elas podem se transformar em deadlock ou em uma falha quando duas chamadas são executadas uma perto da outra.

Fim