O CJR Apresenta chega em sua segunda versão, de muitas, e dessa vez trás Thiago Stuckert e Leandro Silva dos Santos, formandos em Ciência da Computação, para falar de um assunto que jamais perderrá sua importância: Segurança na Web.
Nessa palestra, serão apresentados os 10 maiores riscos no desenvolvimento para Web, apontados através do OWASP (Open Web Application Security Project), projeto que a cada 3 anos, realiza esse estudo sobre os riscos na Web.
2. 10 maiores riscos em aplicações Web Leandro Silva dos Santos Thiago Stuckert leandrosantos@inbrax.com thiago.melo.stuckert@gmail.com.br Novembro - 2010 2
3. Open Web Application Security Project (OWASP) Organização sem fins lucrativos. Desenvolve projetos na área de teste de segurança de aplicações e serviços Web. Site OWASP: http://www.owasp.org/ CapítuloBrasília: http://goo.gl/iN9u4 3
4. OWASP TOP 10 Documento de conscientização. Amplo consenso sobre as falhas de segurança. Link para o projeto - http://goo.gl/8OAK 4
6. O que é? Injetar código que modifica a semântica da consulta. Toda entrada é má até que se prove o contrário. Falta de validação na entrada. 6
7. Injeção de SQL Structured Query Language (SQL) Inserir SQL em uma entrada de dados. Insert/Update/Delete ou operações administrativas. 7
8. Cenário Account: SKU: Account: SKU: "SELECT * FROM accounts WHERE acct=‘’ OR 1=1--’" Account Summary Acct:5424-6066-2134-4334 Acct:4128-7574-3921-0192 Acct:5424-9383-2039-4029 Acct:4128-0004-1234-0293 DB Table HTTP response HTTP request SQL query Finance Transactions Accounts Administration Communication Knowledge Mgmt E-Commerce Bus. Functions Databases Legacy Systems Web Services Directories Billing Human Resrcs Application Layer APPLICATIONATTACK Custom Code 1. Aplicaçãoapresenta um formuláriopara o usuário. 2. Usuárioenviaumaentradamaliciosaatravés do formulário. App Server 3. Aplicaçãotransmite a consulta SQL para o BD. Web Server Hardened OS 4. BD executa a consulta e retorna o resultadopara a aplicação. Network Layer 5. Aplicaçãoapresenta o resultadopara o usuário. Firewall Firewall 8
9. Injeção de SQL às cegas Mensagens genéricas. Consultas SQL retornam verdadeiro ou falso. 101 AND (SELECT ASCII(SUBSTR(first_name,1,1)) FROM user_data WHERE userid=15613) =$ -- $ = [65, 122] (Todas as letras do alfabeto). Demo: Video 9
10. Proteção PreparedStatements (Consultas parametrizadas). Stored Procedures. Verificar todos os dados fornecidos pelo usuário. Enterprise Security API (ESAPI) Validação no lado do cliente. 10
11. Whitelist x Blacklist Blacklist é uma lista de entradas maliciosas. Whitelist é uma lista de entradas válidas. Whitelist é a mais recomendada. Expressões regulares. 11
12. Referências The real dirtyofwhitelist– http://goo.gl/ETxO9 OWASP Sqli- http://goo.gl/p0zea OWASP SqliProteção -http://goo.gl/X8nI OWASP BlindSqli - http://goo.gl/JmnhW OWASP Enterprise Security API-http://goo.gl/uAUq7 RsnakeSqliCheat Sheet: http://goo.gl/iXkxg Outra cheat sheet - http://goo.gl/Obdz 12
13. A2 - Cross Site Scripting (XSS) OWASP TOP 10 13
20. Demo XSS persistente. Objetivo: Mostrar o cookie do usuário. Cookie permite o armazenamento da seção. Video 16
21. Impactos do XSS Sequestro de sessão de usuário. Roubo de dados sensíveis. Reescrita de página Web. Redirecionamento de página para sites falsos e/ou malware. 17
22. Proteção Fazer validação dos dados inseridos pelo usuário. Não renderizar dados digitados pelo usuário sem validação. 18
23. Referências OWASP XSS: http://goo.gl/OQjw0 OWASP DOM Based XSS: http://goo.gl/DRP5n Artigo DOM Based XSS: http://goo.gl/A6Yka Rsnake XSS Cheat Sheet: http://goo.gl/oNbL Livro “XSS Attacks: Cross Site Scripting Exploits and Defense” - http://goo.gl/unsrC NoScript: http://goo.gl/HgJ8 19
24. A3 - Falhas de autenticação e gerenciamento de sessão OWASP TOP 10 20
25. O que é? HTTP é um protocolo stateless. SESSION ID. Logout, gerenciamento da senha e timeouts. Complicado de implementar de maneira segura. 21
26. Cenário Finance Transactions Accounts Administration Communication Knowledge Mgmt E-Commerce Bus. Functions Custom Code 1 Usuário envia credenciais www.boi.com?JSESSIONID=9FA1DB9EA... Páginautilizareescrita de url Ex: Coloca a sessãona URL 2 3 Usuárioclica no link http://www.hacker.comem um fórum Atacantecheca o log de www.hacker.com e encontra o JSESSIONID da vítima 4 5 Atacanteutiliza o JSESSIONID e tomacontrole da conta da vítima 22
27. Demo A aplicação não implementa o SESSION ID de forma aleatória. O atacante utiliza um ataque força bruta para descobrir um SESSION ID válido. Video 23
32. O que é? Oacessodireto a um objetonão é verificado. Exemplo: http://www.exemplo.com/index.php?permissao=atendente Modificar ‘permissao’ para ‘admin’. 27
37. Proteção Validação de referência direta Verifique se o valor do parâmetro está formatado apropriadamente. Verifique se o usuário tem permissão de acesso ao objeto referenciado. Verifique se o usuário possui permissão ao modo de acesso (leitura, escrita, alteração e exclusão). 30
38. Referências ESAPI Access Control API- http://goo.gl/wSB1k Application Security Verification Standard (ASVS) ASVS requirements area for Access Control (V4)- http://goo.gl/wAGr6 CWE Entry 639 on Insecure Direct Object References- http://goo.gl/ACOdx CWE Entry 22 on Path Traversal- http://goo.gl/VqXlV 31
39. A5 - Cross Site Request Forgery (CSRF) OWASP TOP 10 32
40. O que é? Atacante forja uma requisição de um usuário já autenticado. Navegador da vítima é forçado a executar uma ação sem seu consentimento. Impactos típicos: acesso a informações sensíveis, modificação de dados da conta. 33
41. Finance Transactions Accounts Administration Communication Knowledge Mgmt E-Commerce Bus. Functions Custom Code Demo Atacantecriaumaarmadilhaem um site ou email 1 Aplicação com umavulnerabilidade CSRF Escondeemuma tag <img> um ataque contra umaaplicaçãovulnerável Quandologada no site vulnerável, a vítimavisita o site do atacante 2 3 O aplicaçãovulnerávelrecebe a requisiçãolegítima da vítima e executa o comando da requisição A tag <img> carregadapelonavegadorenviaumarequisição GET incluíndo as credenciaispara a aplicaçãovulnerável Video 34
42.
43. Referências Curso sobre CSRF- http://goo.gl/pGOZJ OWASP CSRF Proteção- http://goo.gl/uJ43O OWASP CSRFTester-CSRF Testing Tool- http://goo.gl/pq1zS ESAPI HTTPUtilitiesClass with AntiCSRFTokens- http://goo.gl/3Cq0t Evitarataques de CSRF emjava por Lucas Ferreira- http://goo.gl/AjrDv 36
45. O que é? Ocorrequandopáginas do sistemaestãodisponíveisparaseremacessadasporqualquerusuário. Exemplo: O usuáriotentaacessarurlspadrões de páginas de configuração. http://exemplo.com/config 38
46. Proteção Verifique a configuração de todo o sistema, se há versões de bibliotecas desatualizadas. Analise os efeitos dos patches inseridos no seu ambiente. 39
47. Referências OWASP Development Guide: Chapter on Configuration http://goo.gl/6zc5e ASVS requirements area for Security Configuration (V12) http://goo.gl/wAGr6 CWE Entry 2 on Environmental Security Flaws http://goo.gl/53vEl CIS Security ConfigurationGuides/Benchmarks http://goo.gl/vC73u 40
49. O que é? Armazenar informação sensível de forma insegura. Quais são as informações sensíveis? Aonde armazená-las? Estão protegidas em todos os lugares? Conhecer as premissas de segurança do protocolo. 42
53. Finance Transactions Accounts Administration Communication Knowledge Mgmt E-Commerce Bus. Functions Custom Code Cenário Vítimaentra com o número do cartão de créditoem um formulário 1 Log files Um desenvolvedormaliciosorouba o número de várioscartões de crédito 4 2 Ocorre um erronaaplicação e o número do cartão de crédito do usuário é armazenado no log 3 Os logs sãoacessíveispelosdesenvolvedores da aplicaçãoporpropósitos de depuração de erros 44
54.
55. Referências ESAPI EncryptorAPI - http://goo.gl/y5FI5 OWASP Development Guide: Chapter on Cryptography - http://goo.gl/0SaiU OWASP CodeReviewGuide: ChapteronCryptography - http://goo.gl/KdBys CWE Entry 310 on Cryptographic Issues - http://goo.gl/QRO2E 46
56. A8 - Falha de restrição de acesso à URL OWASP TOP 10 47
57. O que é? Algumaspáginasnãofazemverificação de acesso. Complemento da vulnerabilidadeA4 - Referência direta insegura aos objetos 48
61. Proteção Para cada URL: Restrinja o acesso para usuários autenticados (se não for público). Aplique regras baseadas em permissões. Desabilite o acesso de usuários não autenticados a páginas que contenham logs, configurações e outros. 50
62. Referências OWASP Development Guide: Chapter on Authorization - http://goo.gl/bWfvF OWASP Article on Forced Browsing - http://goo.gl/I7jNs CWE Entry 285 on Improper Access Control (Authorization) - http://goo.gl/ZmcFO 51
63. A9 - Proteção insuficiente na camada de transporte OWASP TOP 10 52
64. O que é? Transmissão de dados sensíveis de forma insegura. Firesheep 53
65. Demo Parceiro de negócio Vítimaexterna Backend Systems Custom Code Empregados 2 1 Um atacante externo rouba credenciais e dados da rede externa Um atacanteinternoroubacredenciais e dados da redeinterna Atacanteexterno Atacante interno Video 54
66. Proteção Usar SSL/TLS emtodas as conexões com dados sensíveis. Assinarmensagens antes de transmiti-las. Gerenciarchavescorretamente. Verificarcertificados SSL antes de usá-los. (origem, autoassinados) 55
69. Finance Transactions Accounts Administration Communication Knowledge Mgmt E-Commerce Bus. Functions Custom Code Redirecionamento sem validação 1 Atacanteenvia um email parasuavítima From: ServiçosinternosSubject: Suarestituição de impostosNossosregistrosmostramque o senhorpossuiimpostos a restituir, por favor clique aqui. 3 A aplicaçãoredireciona a vítima A vítimaclica e o endereçopossue um parâmetrosemvalidação 2 A requisiçãoenviapara o site vulnerável o parâmetro,semservalidado. Redirecionando a vítimapara o site do atacante. Evil Site 4 Evil site instala um malware navítima http://www.irs.gov/taxrefund/claim.jsp?year=2006&… &dest=www.evilsite.com 58
70. Encaminhamento sem validação 1 O atacanteenvia um ataqueparaumapáginavulnerável A páginarequisitadapossuiacesso a umaárearestrita. E o atacanteconseguiserencaminhadoparaestapágina, burlando o controle de acesso. public void sensitiveMethod( HttpServletRequest request, HttpServletResponse response) { try { // Do sensitive stuff here. ... } catch ( ... A aplicaçãoautoriza a requisição 2 Filtro 3 Falha a autorização do encaminhamento e o atacanteburla o controle de acesso. public void doPost( HttpServletRequest request, HttpServletResponse response) { try { String target = request.getParameter( "dest" ) ); ... request.getRequestDispatcher( target ).forward(request, response); } catch ( ... 59
71. Proteção Use encaminhamento e redirecionamento, somente quando necessário. Caso use, não permita que o usuário defina destino na URL. Valide cada parâmetro para garantir sua corretude e permissão de acesso. 60
72. Referências OWASP Article on Open Redirects -http://goo.gl/vEAKE ESAPI SecurityWrapperResponsesendRedirect() method - http://goo.gl/UzsA9 CWE Entry 601 on Open Redirects - http://goo.gl/z93EU WASC Article on URL Redirector Abuse - http://goo.gl/tshz9 61