SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
Construindo
                        uma aplicação
                        PHP à Prova de
                            Balas
                                         Rafael Jaques
                               TcheLinux - Caxias do Sul - 19/06/10

                     “Buscai primeiro o reino do Senhor e a sua justiça, e todas as
                                demais coisas vos serão acrescentadas”
                                             (Mateus 6.33)

domingo, 20 de junho de 2010
Pauta

                    • Um pouco sobre segurança
                    • Conhecendo os meios de ataque
                    • Outros tipos de ameaça
                    • Mais alguns cuidados
                    • Perguntas


domingo, 20 de junho de 2010
1
               Um pouco sobre
                 segurança




domingo, 20 de junho de 2010
O que é segurança?
                               Segurança baseia-se em três pontos:




domingo, 20 de junho de 2010
O que é segurança?
                               Segurança baseia-se em três pontos:

                 CONFIDENCIALIDADE




domingo, 20 de junho de 2010
O que é segurança?
                               Segurança baseia-se em três pontos:

                 CONFIDENCIALIDADE
                                 INTEGRIDADE


domingo, 20 de junho de 2010
O que é segurança?
                               Segurança baseia-se em três pontos:

                 CONFIDENCIALIDADE
                                 INTEGRIDADE
                               DISPONIBILIDADE
domingo, 20 de junho de 2010
O que é segurança?


                                 Não se iluda. Não
                                 existem aplicações
                                   100% seguras.



                                Não ouse dizer isso...
                                  Você poderá ter
                                 sérios problemas.



domingo, 20 de junho de 2010
O quão segura deve ser
                       a sua aplicação?

                      Você deve encontrar um equilíbrio entre
                    a segurança e a usabilidade do seu sistema.

                         Crie um sistema com pouca segurança e
                                    ele será invadido.

                         Crie um sistema com muita segurança e
                               ele será impossível de usar.


domingo, 20 de junho de 2010
O quão segura deve ser
                       a sua aplicação?
                        Um sistema invadido pode te render um
                                  final de semana...




domingo, 20 de junho de 2010
O quão segura deve ser
                       a sua aplicação?

   Sempre revise o que você projetou




domingo, 20 de junho de 2010
Os custos que envolvem
                   uma aplicação segura


                      Aplicações seguras tendem a custar caro...

                               Aplicações não seguras tendem
                                 a custar mais caro ainda...




domingo, 20 de junho de 2010
Os custos que envolvem
                   uma aplicação segura
              Entre os custos envolvidos no desenvolvimento
                 da aplicação, temos os seguintes pontos:
                    • Maior tempo de projeto e pesquisa
                    • Programação extendida
                    • Testes mais minuciosos
                    • Maior uso de hardware
                    • Maior uso de banda
                    • Treinamento de pessoal interno
                    • Treinamento do usuário

domingo, 20 de junho de 2010
não
         sacrifique a
         usabilidade
          do projeto
domingo, 20 de junho de 2010
2
               Conhecendo os
               meios de ataque




domingo, 20 de junho de 2010
Quais os tipos de ataque
                   que posso sofrer?
                        Existem diversos tipos de ataque através
                                da internet. Eis alguns:

                • XSS (Cross-site Scripting)    • Brute Force
                • SQL Injection                 • Rainbow Table
                • Session Hijacking             • Password Sniffing
                • Cookie Theft                  • Entre outros...




domingo, 20 de junho de 2010
XSS
                Cross-site Scripting
domingo, 20 de junho de 2010
XSS
                               Cross-site Scripting

                O que é?
                Injeção de código arbitrário em uma página.


                Como ocorre?
                Geralmente através de brechas em formulários
                onde os dados enviados ao servidor não são
                devidamente filtrados.

domingo, 20 de junho de 2010
XSS
                               Cross-site Scripting

                 Exemplo




domingo, 20 de junho de 2010
XSS
                               Cross-site Scripting

                 Exemplo




domingo, 20 de junho de 2010
XSS
                               Cross-site Scripting

                Como evitar
                Existem funções prontas no PHP para filtrar
                strings.

                Utilizando-as, além de evitar um XSS, você
                garante que o usuário conseguirá expressar o
                que realmente intentou.



domingo, 20 de junho de 2010
XSS
                               Cross-site Scripting

                Como evitar
                 Funções que você pode utilizar:

                 •htmlspecialchars()
                 •htmlentities()
                 •filter_input()


                Leia mais sobre XSS: http://tinyurl.com/mais-sobre-xss


domingo, 20 de junho de 2010
SQL Injection
domingo, 20 de junho de 2010
SQL Injection

                O que é?
                Injeção de código SQL arbitrário dentro de
                uma consulta legítima.

                Como ocorre?
                Na maioria das vezes a injeção de código SQL
                se dá a partir de formulários não filtrados, em
                que os dados recebidos vão diretamente para
                dentro da consulta.
domingo, 20 de junho de 2010
SQL Injection

                 Exemplo




domingo, 20 de junho de 2010
SQL Injection

                 Exemplo

                                1' OR 1='1




domingo, 20 de junho de 2010
SQL Injection

                 Exemplo

                        fulano'# ou fulano' --




domingo, 20 de junho de 2010
SQL Injection

                Como evitar
                 Novamente... Filtrando os dados enviados
                 pelo usuário é possível evitar que seja injetado
                 código dentro do seu SQL.




domingo, 20 de junho de 2010
SQL Injection

                Como evitar
                 Funções que você pode utilizar:

                 •addslashes()
                 •mysql_real_escape_string()



                Leia mais sobre XSS: http://tinyurl.com/mais-sobre-sql-injection


domingo, 20 de junho de 2010
Session Hijacking
domingo, 20 de junho de 2010
Session Hijacking

                O que é?
                Quando o invasor obtém acesso à sessão de
                um usuário autenticado.

                Como ocorre?
                Sempre que os dados do cliente são
                armazenados em sessão é gerado um ID.
                Caso alguém o descubra, poderá navegar pelo
                site como se fosse o usuário real.
domingo, 20 de junho de 2010
Session Hijacking

                 Atenção...
                Hoje, com as configurações padrão do PHP é
               bem pouco provável que você sofra um ataque
                       de roubo de sessão no seu site.

                               Para tanto você deve estar atento às
                                     seguintes configurações:


domingo, 20 de junho de 2010
Session Hijacking

                 Atenção...
                  session.use_cookies
                  session.use_only_cookies




domingo, 20 de junho de 2010
Session Hijacking

                 Exemplo

             algumapagina.php?PHPSESSID=1234




domingo, 20 de junho de 2010
Session Hijacking

                Como evitar
                 Nunca confie 100% no ID de sessão recebido.
                 Você pode fazer algumas verificações redudantes, como
                 comparar o IP e o User-Agent.

                 Em casos mais vitais você pode sugerir ao usuário que
                 utilize cookies, intruindo-o e falando da sua importância
                 para uma navegação mais segura no site.


                Leia mais sobre Sess. Hijacking: http://tinyurl.com/mais-sobre-sess-hijacking


domingo, 20 de junho de 2010
Cookie Theft
domingo, 20 de junho de 2010
Cookie Theft

                O que é?
                A tradução literal é “Roubo de Cookie”. Na verdade a literal
                mesmo é “Roubo de Biscoito”. :P
                Trata-se capturar cookies na máquina da vítima e utilizá-los
                para acessar o local desejado.

                Como ocorre?
                O roubo de cookie pode possuir duas
                naturezas: XSS e vulnerabilidades no próprio
                browser.

domingo, 20 de junho de 2010
Cookie Theft

                Como evitar
                 O script que foi apresentado anteriormente no
                 exemplo de XSS é responsável por roubar um
                 cookie.

                 Atualmente não são muito comuns falhas de
                 browsers que permitam o roubo de cookies,
                 mas no passado houveram muitos.

domingo, 20 de junho de 2010
Cookie Theft

                Como evitar
                 No site do PHP Security Consortium [1] você pode
                 consultar o resumo da newsletter da SecurityFocus [2],
                 que possui sempre anúncio de novas vulnerabilidades
                 encontradas.

                 A partir disso você pode conscientizar os seus usuários
                 caso perceba que os mesmos utilizem um browser
                 vulnerável.
                [1] http://phpsec.org/projects/vulnerabilities/securityfocus.html
                [2] http://securityfocus.com/vulnerabilities

domingo, 20 de junho de 2010
Brute Force Attack
domingo, 20 de junho de 2010
Brute Force Attack

                O que é?
                O ataque por força bruta baseia-se na busca exaustiva da
                informação procurada, através de tentativa e erro com
                todas as possibilidades existentes.


                Como ocorre?
                O usuário mal intencionado acessa o formulário no qual irá
                tentar o ataque e utiliza um programa, estipulando uma
                cadeia de caracteres e um tamanho máximo para a frase.
                O programa irá tentar todas as combinações possíveis até que
                uma dê certo.
domingo, 20 de junho de 2010
Brute Force Attack

                 Atenção...
              Este tipo de ataque é bastante semelhante ao
               Ataque de Dicionário. A diferença é que o
           dicionário esgota suas possibilidades mais rápido
                 utilizando apenas palavras existentes e
                             senhas comuns.



domingo, 20 de junho de 2010
Brute Force Attack

                Como evitar
                 Existem dois meios bastante comuns de evitar este tipo de
                 ataque: limite de tentativas e limite de tempo entre uma
                 tentativa e outra.




                Leia mais sobre Sess. Hijacking: http://tinyurl.com/mais-sobre-brute-force


domingo, 20 de junho de 2010
Rainbow Table
domingo, 20 de junho de 2010
Rainbow Table

                O que é?
                Semelhante ao ataque de força bruta, porém diretamente a
                um hash (md5, sha1, etc).


                Como ocorre?
                É a mistura de um ataque de força bruta com um ataque de
                dicionário. De posse do hash, o invasor utiliza este ataque
                para testar combinações que possam gerar o hash procurado
                até que se chegue à resposta correta.

domingo, 20 de junho de 2010
Rainbow Table

                 Exemplo
                  Caso o usuário malicioso obtenha acesso aos
                  hashs de senha (apenas visualizar), ele ainda
                  assim terá de descobrir a senha que está ali.

          O problema está em confiar apenas na criptografia
                de hashs comuns como md5 e sha1.


domingo, 20 de junho de 2010
Rainbow Table

                 Exemplo
               Vamos pegar como exemplo a palavra abacaxi.
                         O hash md5 referente é
                  4b96d5c1ff312eea069ddc760794963d.

       Supondo que obtemos este hash do banco de dados,
         basta digitá-lo no Google e em alguns segundos
                         estamos prontos.

domingo, 20 de junho de 2010
Rainbow Table

                 Exemplo




domingo, 20 de junho de 2010
Rainbow Table

                Como evitar
                 A técnica mais utilizada e que reduz drasticamente a
                 chance de este ataque dar certo, é “temperar” suas senhas.

                 Ao inserir uma string arbitrária antes de criptografar a
                 senha, este ataque torna-se praticamente inefetivo.

                 À essa string arbitrária damos o nome de salt.




domingo, 20 de junho de 2010
Rainbow Table

                Como evitar
                 Digamos que seu salt será rocknroll.
                 Ao aplicar a criptografia na sua string, você deverá concatenar
                 com o seu salt.

                 md5('rocknroll' . $senha)

                 Se a senha for abacaxi teremos o seguinte hash:
                 0a5cefae5c742e8a914f486db9ea45ef.
                 E pra esse o Google não tem resposta! ;)

                Leia mais sobre Rainbow Table: http://tinyurl.com/mais-sobre-rainbow-table


domingo, 20 de junho de 2010
Password Sniffing
domingo, 20 de junho de 2010
Password Sniffing

                O que é?
                Este ataque baseia-se em capturar na rede um
                pacote descriptografado com os dados de
                autenticação de algum usuário.

                Como ocorre?
                Monitorando a rede pode-se visualizar todos
                os pacotes. Todas as requisições via POST e
                GET normalmente estão abertas à visualização.

domingo, 20 de junho de 2010
Password Sniffing

                Como evitar
                 Proteja a sua conexão com SSL. Utilizando este protocolo
                 você irá assegurar que a comunicação entre o cliente e o
                 servidor, mesmo que interceptada, não possa ser
                 decifrada.

                 Utilize sempre o POST (por ser uma forma mais segura) e
                 lembre-se de sempre colocar o protocolo HTTPS.




domingo, 20 de junho de 2010
Password Sniffing

                Como evitar
                 Você pode também redirecionar o usuário para a página
                 de login (o formulário em si) sempre com HTTPS.

                 Não existe nenhuma razão técnica para isso, apenas
                 psicológica. O usuário costuma sentir-se mais seguro
                 quando está colocando sua senha em uma página com
                 cadeado. :)


                Leia mais sobre Sniffing: http://tinyurl.com/mais-sobre-sniffing


domingo, 20 de junho de 2010
3
                        Outros tipos
                         de ameaça




domingo, 20 de junho de 2010
Outros tipos de ameaça
        Existem outras ameaças que vão além da alçada do
        programador. Outras podem ser evitadas se alguns
                    cuidados forem tomados.

                    • Includes
                    • Abuso de formulários
                    • Diretrizes (register_globlals, display_errors, etc)
                    • Exposição do phpinfo



domingo, 20 de junho de 2010
Outros tipos de ameaça

                Includes
                 A inclusão de arquivos via include() e require(),
                 embora muito útil, pode ter consequencias
                 muito ruins se não utilizada corretamente.


                 É muito comum a inclusão de arquivos
                 recebidos via URL sem que a string seja filtrada.


domingo, 20 de junho de 2010
Outros tipos de ameaça

                Includes
                 Outro ponto que você deve estar atento é
                 quanto ao uso de extensões que o seu servidor
                 web não “conheça”.


                 Evite extensões do tipo .inc. Se for fazê-lo,
                 prefira algo do tipo meuarquivo.inc.php.


domingo, 20 de junho de 2010
Outros tipos de ameaça

                Includes
                  Funções que você pode utilizar para filtrar os
                  dados recebidos e evitar um ataque de XSS ou a
                  exposição do seu código:
                 • basename()
                 • file_exists()




domingo, 20 de junho de 2010
Outros tipos de ameaça

                Abuso de formulários
                 Esteja sempre atento ao uso de seus formulários.
                 O maior erro que você pode cometer é colocar os
                 possíveis e-mails dentro do seu formulário.
                 Isto abrirá uma brecha em que o usuário mal
                 intencionado poderá inserir endereços arbitrários
                 e utilizar o seu formulário como disseminador de
                 SPAM.

domingo, 20 de junho de 2010
Outros tipos de ameaça

                Diretrizes
                 Algumas diretrizes, quando bem configuradas,
                 podem aumentar a segurança da sua aplicação.
                • register_globals
                • display_errors
                • log_errors



domingo, 20 de junho de 2010
Outros tipos de ameaça

                Exposição do phpinfo
                 É incrível o número de páginas espalhadas pela
                 web que possuem um arquivo phpinfo.php em
                 sua raiz.
                 A primeira ação tomada por um usuário mal
                 intencionado é verificar a existência desse
                 arquivo e de variantes do seu nome como
                 info.php, php.php, etc.


domingo, 20 de junho de 2010
4
                           Mais alguns
                            cuidados




domingo, 20 de junho de 2010
Mais alguns cuidados
                 Existem mais alguns cuidados que você pode
                   tomar para assegurar que será mais difícil
                  conseguir realizar um ataque bem sucedido
                            contra a sua aplicação.

                    • Lei do menor privilégio (SQL)
                    • Ocultação de cabeçalhos HTTP
                    • Examine sempre os logs



domingo, 20 de junho de 2010
Mais alguns cuidados

                Lei do menor privilégio (SQL)
                Sempre que possível, crie mais de um usuário
                para acesso ao banco de dados. Não é uma boa
                idéia utilizar o usuário administrador (root) para
                acessar o banco através do site.




domingo, 20 de junho de 2010
Mais alguns cuidados

                Lei do menor privilégio (SQL)
                Crie usuários que só tenham permissão de leitura
                e usuários que só tenham permissão de escrita.
                Caso, devido a algum infortuno do destino,
                alguém consiga invadir o seu sistema terá apenas
                permissões limitadas.




domingo, 20 de junho de 2010
Mais alguns cuidados

                Ocultação de cabeçalhos HTTP
                Sempre que você acessa uma página, o servidor
                envia cabeçalhos HTTP para o seu browser.
                Dentro deste cabeçalhos podemos encontrar
                algumas informações interessantes.




domingo, 20 de junho de 2010
Mais alguns cuidados

                Ocultação de cabeçalhos HTTP




domingo, 20 de junho de 2010
Mais alguns cuidados

                Ocultação de cabeçalhos HTTP
                Dentro do arquivo httpd.conf do Apache você
                pode alterar o nível de exposição da versão das
                aplicações instaladas no seu servidor.
                Para tanto, você deve alterar a diretiva
                ServerTokens.




domingo, 20 de junho de 2010
Mais alguns cuidados

                Ocultação de cabeçalhos HTTP
                ServerTokens valor_desejado
                • Prod: Apache
                • Major: Apache/2
                • Minor: Apache/2.0
                • Min: Apache/2.0.59
                • OS: Apache/2.0.59 (Unix)
                • Full: Apache/2.0.59 (Unix) PHP/5.2.6

domingo, 20 de junho de 2010
Mais alguns cuidados

                Examine sempre os logs
                Esteja atento aos logs e, se possível, utilize
                ferramentas de monitoramento de tráfego (como
                AWStats e Webalizer) para analisar possíveis
                tentativas de ataque à sua página.




domingo, 20 de junho de 2010
domingo, 20 de junho de 2010
                               ?
Obrigado! :)
                                 Rafael Jaques
                                  Site: phpit.com.br

                                 E-mail: rafa@php.net

                                 Twitter: @rafajaques

domingo, 20 de junho de 2010

Contenu connexe

En vedette

Regulamento do concurso o livro da minha vida
Regulamento do concurso   o livro da minha vidaRegulamento do concurso   o livro da minha vida
Regulamento do concurso o livro da minha vida
Ema Paes
 
Miomatosis uterina[2]
Miomatosis uterina[2]Miomatosis uterina[2]
Miomatosis uterina[2]
Mocte Salaiza
 
Resumo s. cardiovascular anatomia
Resumo s. cardiovascular anatomiaResumo s. cardiovascular anatomia
Resumo s. cardiovascular anatomia
cesarromero13
 
Parras
ParrasParras
Parras
jugago
 
Introdução ao Desenvolvimento WEB
Introdução ao Desenvolvimento WEBIntrodução ao Desenvolvimento WEB
Introdução ao Desenvolvimento WEB
Tony Alexander Hild
 
البورصة المصرية | شركة عربية اون لاين | التحليل الفني | 9-1-2017 | بورصة | ا...
البورصة المصرية | شركة عربية اون لاين | التحليل الفني |  9-1-2017 | بورصة | ا...البورصة المصرية | شركة عربية اون لاين | التحليل الفني |  9-1-2017 | بورصة | ا...
البورصة المصرية | شركة عربية اون لاين | التحليل الفني | 9-1-2017 | بورصة | ا...
شركة عربية اون لاين للوساطة فى الاوراق المالية
 
07 tumores y divert es%f3fago
07 tumores y divert es%f3fago07 tumores y divert es%f3fago
07 tumores y divert es%f3fago
Mocte Salaiza
 
Parras
ParrasParras
Parras
jugago
 
Psicologia de desenolvimento a velhice
Psicologia de desenolvimento a velhicePsicologia de desenolvimento a velhice
Psicologia de desenolvimento a velhice
FLORDELARANJEIRA
 
A minha família, Domingos, 6ºE
A minha família, Domingos, 6ºEA minha família, Domingos, 6ºE
A minha família, Domingos, 6ºE
guest638962
 
گزارشکار5
گزارشکار5گزارشکار5
گزارشکار5
sara aftabi
 

En vedette (19)

Regulamento do concurso o livro da minha vida
Regulamento do concurso   o livro da minha vidaRegulamento do concurso   o livro da minha vida
Regulamento do concurso o livro da minha vida
 
SBIDM [2]
SBIDM [2]SBIDM [2]
SBIDM [2]
 
Miomatosis uterina[2]
Miomatosis uterina[2]Miomatosis uterina[2]
Miomatosis uterina[2]
 
Resumo s. cardiovascular anatomia
Resumo s. cardiovascular anatomiaResumo s. cardiovascular anatomia
Resumo s. cardiovascular anatomia
 
Parras
ParrasParras
Parras
 
Introdução ao Desenvolvimento WEB
Introdução ao Desenvolvimento WEBIntrodução ao Desenvolvimento WEB
Introdução ao Desenvolvimento WEB
 
Como uma experiência de compra inesquecível vai rentabilizar sua loja virtual.
Como uma experiência de compra inesquecível vai rentabilizar sua loja virtual.Como uma experiência de compra inesquecível vai rentabilizar sua loja virtual.
Como uma experiência de compra inesquecível vai rentabilizar sua loja virtual.
 
1389 5368-1-pb
1389 5368-1-pb1389 5368-1-pb
1389 5368-1-pb
 
SBIDM [1]
SBIDM [1]SBIDM [1]
SBIDM [1]
 
lcejerciciom5
lcejerciciom5lcejerciciom5
lcejerciciom5
 
البورصة المصرية | شركة عربية اون لاين | التحليل الفني | 9-1-2017 | بورصة | ا...
البورصة المصرية | شركة عربية اون لاين | التحليل الفني |  9-1-2017 | بورصة | ا...البورصة المصرية | شركة عربية اون لاين | التحليل الفني |  9-1-2017 | بورصة | ا...
البورصة المصرية | شركة عربية اون لاين | التحليل الفني | 9-1-2017 | بورصة | ا...
 
07 tumores y divert es%f3fago
07 tumores y divert es%f3fago07 tumores y divert es%f3fago
07 tumores y divert es%f3fago
 
Parras
ParrasParras
Parras
 
Psicologia de desenolvimento a velhice
Psicologia de desenolvimento a velhicePsicologia de desenolvimento a velhice
Psicologia de desenolvimento a velhice
 
Relações entre a Administração Tributária e os Contribuintes
Relações entre a Administração Tributária e os ContribuintesRelações entre a Administração Tributária e os Contribuintes
Relações entre a Administração Tributária e os Contribuintes
 
A minha família, Domingos, 6ºE
A minha família, Domingos, 6ºEA minha família, Domingos, 6ºE
A minha família, Domingos, 6ºE
 
AS FUNÇÕES DO USO DO TWITTER PELOS POLÍTICOS DO ESTADO DO PIAUÍ
AS FUNÇÕES DO USO DO TWITTER PELOS POLÍTICOS DO ESTADO DO PIAUÍ AS FUNÇÕES DO USO DO TWITTER PELOS POLÍTICOS DO ESTADO DO PIAUÍ
AS FUNÇÕES DO USO DO TWITTER PELOS POLÍTICOS DO ESTADO DO PIAUÍ
 
A farra na casa da Dinda (Marisa)
A farra na casa da Dinda (Marisa)A farra na casa da Dinda (Marisa)
A farra na casa da Dinda (Marisa)
 
گزارشکار5
گزارشکار5گزارشکار5
گزارشکار5
 

Similaire à Aplicação php a prova de balas - Rafael Jaques

Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael JaquesConstruindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Tchelinux
 

Similaire à Aplicação php a prova de balas - Rafael Jaques (9)

Desenvolvimento de Aplicações Web Seguras
Desenvolvimento de Aplicações Web SegurasDesenvolvimento de Aplicações Web Seguras
Desenvolvimento de Aplicações Web Seguras
 
XSS Injection ou Cross Site Scripting e seus perigos
XSS Injection ou Cross Site Scripting e seus perigosXSS Injection ou Cross Site Scripting e seus perigos
XSS Injection ou Cross Site Scripting e seus perigos
 
Construindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasConstruindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de Balas
 
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael JaquesConstruindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
 
Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010
 
Botnets - Apresentação
Botnets - ApresentaçãoBotnets - Apresentação
Botnets - Apresentação
 
Badass XSS: Esqueça o alert e vá para mundo real
Badass XSS: Esqueça o alert e vá para mundo realBadass XSS: Esqueça o alert e vá para mundo real
Badass XSS: Esqueça o alert e vá para mundo real
 
Aula 10 - Cross Site Scripting (XSS)
Aula 10 - Cross Site Scripting (XSS)Aula 10 - Cross Site Scripting (XSS)
Aula 10 - Cross Site Scripting (XSS)
 
Botnets
BotnetsBotnets
Botnets
 

Plus de Tchelinux

Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Tchelinux
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
Tchelinux
 

Plus de Tchelinux (20)

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygame
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?
 

Aplicação php a prova de balas - Rafael Jaques

  • 1. Construindo uma aplicação PHP à Prova de Balas Rafael Jaques TcheLinux - Caxias do Sul - 19/06/10 “Buscai primeiro o reino do Senhor e a sua justiça, e todas as demais coisas vos serão acrescentadas” (Mateus 6.33) domingo, 20 de junho de 2010
  • 2. Pauta • Um pouco sobre segurança • Conhecendo os meios de ataque • Outros tipos de ameaça • Mais alguns cuidados • Perguntas domingo, 20 de junho de 2010
  • 3. 1 Um pouco sobre segurança domingo, 20 de junho de 2010
  • 4. O que é segurança? Segurança baseia-se em três pontos: domingo, 20 de junho de 2010
  • 5. O que é segurança? Segurança baseia-se em três pontos: CONFIDENCIALIDADE domingo, 20 de junho de 2010
  • 6. O que é segurança? Segurança baseia-se em três pontos: CONFIDENCIALIDADE INTEGRIDADE domingo, 20 de junho de 2010
  • 7. O que é segurança? Segurança baseia-se em três pontos: CONFIDENCIALIDADE INTEGRIDADE DISPONIBILIDADE domingo, 20 de junho de 2010
  • 8. O que é segurança? Não se iluda. Não existem aplicações 100% seguras. Não ouse dizer isso... Você poderá ter sérios problemas. domingo, 20 de junho de 2010
  • 9. O quão segura deve ser a sua aplicação? Você deve encontrar um equilíbrio entre a segurança e a usabilidade do seu sistema. Crie um sistema com pouca segurança e ele será invadido. Crie um sistema com muita segurança e ele será impossível de usar. domingo, 20 de junho de 2010
  • 10. O quão segura deve ser a sua aplicação? Um sistema invadido pode te render um final de semana... domingo, 20 de junho de 2010
  • 11. O quão segura deve ser a sua aplicação? Sempre revise o que você projetou domingo, 20 de junho de 2010
  • 12. Os custos que envolvem uma aplicação segura Aplicações seguras tendem a custar caro... Aplicações não seguras tendem a custar mais caro ainda... domingo, 20 de junho de 2010
  • 13. Os custos que envolvem uma aplicação segura Entre os custos envolvidos no desenvolvimento da aplicação, temos os seguintes pontos: • Maior tempo de projeto e pesquisa • Programação extendida • Testes mais minuciosos • Maior uso de hardware • Maior uso de banda • Treinamento de pessoal interno • Treinamento do usuário domingo, 20 de junho de 2010
  • 14. não sacrifique a usabilidade do projeto domingo, 20 de junho de 2010
  • 15. 2 Conhecendo os meios de ataque domingo, 20 de junho de 2010
  • 16. Quais os tipos de ataque que posso sofrer? Existem diversos tipos de ataque através da internet. Eis alguns: • XSS (Cross-site Scripting) • Brute Force • SQL Injection • Rainbow Table • Session Hijacking • Password Sniffing • Cookie Theft • Entre outros... domingo, 20 de junho de 2010
  • 17. XSS Cross-site Scripting domingo, 20 de junho de 2010
  • 18. XSS Cross-site Scripting O que é? Injeção de código arbitrário em uma página. Como ocorre? Geralmente através de brechas em formulários onde os dados enviados ao servidor não são devidamente filtrados. domingo, 20 de junho de 2010
  • 19. XSS Cross-site Scripting Exemplo domingo, 20 de junho de 2010
  • 20. XSS Cross-site Scripting Exemplo domingo, 20 de junho de 2010
  • 21. XSS Cross-site Scripting Como evitar Existem funções prontas no PHP para filtrar strings. Utilizando-as, além de evitar um XSS, você garante que o usuário conseguirá expressar o que realmente intentou. domingo, 20 de junho de 2010
  • 22. XSS Cross-site Scripting Como evitar Funções que você pode utilizar: •htmlspecialchars() •htmlentities() •filter_input() Leia mais sobre XSS: http://tinyurl.com/mais-sobre-xss domingo, 20 de junho de 2010
  • 23. SQL Injection domingo, 20 de junho de 2010
  • 24. SQL Injection O que é? Injeção de código SQL arbitrário dentro de uma consulta legítima. Como ocorre? Na maioria das vezes a injeção de código SQL se dá a partir de formulários não filtrados, em que os dados recebidos vão diretamente para dentro da consulta. domingo, 20 de junho de 2010
  • 25. SQL Injection Exemplo domingo, 20 de junho de 2010
  • 26. SQL Injection Exemplo 1' OR 1='1 domingo, 20 de junho de 2010
  • 27. SQL Injection Exemplo fulano'# ou fulano' -- domingo, 20 de junho de 2010
  • 28. SQL Injection Como evitar Novamente... Filtrando os dados enviados pelo usuário é possível evitar que seja injetado código dentro do seu SQL. domingo, 20 de junho de 2010
  • 29. SQL Injection Como evitar Funções que você pode utilizar: •addslashes() •mysql_real_escape_string() Leia mais sobre XSS: http://tinyurl.com/mais-sobre-sql-injection domingo, 20 de junho de 2010
  • 30. Session Hijacking domingo, 20 de junho de 2010
  • 31. Session Hijacking O que é? Quando o invasor obtém acesso à sessão de um usuário autenticado. Como ocorre? Sempre que os dados do cliente são armazenados em sessão é gerado um ID. Caso alguém o descubra, poderá navegar pelo site como se fosse o usuário real. domingo, 20 de junho de 2010
  • 32. Session Hijacking Atenção... Hoje, com as configurações padrão do PHP é bem pouco provável que você sofra um ataque de roubo de sessão no seu site. Para tanto você deve estar atento às seguintes configurações: domingo, 20 de junho de 2010
  • 33. Session Hijacking Atenção... session.use_cookies session.use_only_cookies domingo, 20 de junho de 2010
  • 34. Session Hijacking Exemplo algumapagina.php?PHPSESSID=1234 domingo, 20 de junho de 2010
  • 35. Session Hijacking Como evitar Nunca confie 100% no ID de sessão recebido. Você pode fazer algumas verificações redudantes, como comparar o IP e o User-Agent. Em casos mais vitais você pode sugerir ao usuário que utilize cookies, intruindo-o e falando da sua importância para uma navegação mais segura no site. Leia mais sobre Sess. Hijacking: http://tinyurl.com/mais-sobre-sess-hijacking domingo, 20 de junho de 2010
  • 36. Cookie Theft domingo, 20 de junho de 2010
  • 37. Cookie Theft O que é? A tradução literal é “Roubo de Cookie”. Na verdade a literal mesmo é “Roubo de Biscoito”. :P Trata-se capturar cookies na máquina da vítima e utilizá-los para acessar o local desejado. Como ocorre? O roubo de cookie pode possuir duas naturezas: XSS e vulnerabilidades no próprio browser. domingo, 20 de junho de 2010
  • 38. Cookie Theft Como evitar O script que foi apresentado anteriormente no exemplo de XSS é responsável por roubar um cookie. Atualmente não são muito comuns falhas de browsers que permitam o roubo de cookies, mas no passado houveram muitos. domingo, 20 de junho de 2010
  • 39. Cookie Theft Como evitar No site do PHP Security Consortium [1] você pode consultar o resumo da newsletter da SecurityFocus [2], que possui sempre anúncio de novas vulnerabilidades encontradas. A partir disso você pode conscientizar os seus usuários caso perceba que os mesmos utilizem um browser vulnerável. [1] http://phpsec.org/projects/vulnerabilities/securityfocus.html [2] http://securityfocus.com/vulnerabilities domingo, 20 de junho de 2010
  • 40. Brute Force Attack domingo, 20 de junho de 2010
  • 41. Brute Force Attack O que é? O ataque por força bruta baseia-se na busca exaustiva da informação procurada, através de tentativa e erro com todas as possibilidades existentes. Como ocorre? O usuário mal intencionado acessa o formulário no qual irá tentar o ataque e utiliza um programa, estipulando uma cadeia de caracteres e um tamanho máximo para a frase. O programa irá tentar todas as combinações possíveis até que uma dê certo. domingo, 20 de junho de 2010
  • 42. Brute Force Attack Atenção... Este tipo de ataque é bastante semelhante ao Ataque de Dicionário. A diferença é que o dicionário esgota suas possibilidades mais rápido utilizando apenas palavras existentes e senhas comuns. domingo, 20 de junho de 2010
  • 43. Brute Force Attack Como evitar Existem dois meios bastante comuns de evitar este tipo de ataque: limite de tentativas e limite de tempo entre uma tentativa e outra. Leia mais sobre Sess. Hijacking: http://tinyurl.com/mais-sobre-brute-force domingo, 20 de junho de 2010
  • 44. Rainbow Table domingo, 20 de junho de 2010
  • 45. Rainbow Table O que é? Semelhante ao ataque de força bruta, porém diretamente a um hash (md5, sha1, etc). Como ocorre? É a mistura de um ataque de força bruta com um ataque de dicionário. De posse do hash, o invasor utiliza este ataque para testar combinações que possam gerar o hash procurado até que se chegue à resposta correta. domingo, 20 de junho de 2010
  • 46. Rainbow Table Exemplo Caso o usuário malicioso obtenha acesso aos hashs de senha (apenas visualizar), ele ainda assim terá de descobrir a senha que está ali. O problema está em confiar apenas na criptografia de hashs comuns como md5 e sha1. domingo, 20 de junho de 2010
  • 47. Rainbow Table Exemplo Vamos pegar como exemplo a palavra abacaxi. O hash md5 referente é 4b96d5c1ff312eea069ddc760794963d. Supondo que obtemos este hash do banco de dados, basta digitá-lo no Google e em alguns segundos estamos prontos. domingo, 20 de junho de 2010
  • 48. Rainbow Table Exemplo domingo, 20 de junho de 2010
  • 49. Rainbow Table Como evitar A técnica mais utilizada e que reduz drasticamente a chance de este ataque dar certo, é “temperar” suas senhas. Ao inserir uma string arbitrária antes de criptografar a senha, este ataque torna-se praticamente inefetivo. À essa string arbitrária damos o nome de salt. domingo, 20 de junho de 2010
  • 50. Rainbow Table Como evitar Digamos que seu salt será rocknroll. Ao aplicar a criptografia na sua string, você deverá concatenar com o seu salt. md5('rocknroll' . $senha) Se a senha for abacaxi teremos o seguinte hash: 0a5cefae5c742e8a914f486db9ea45ef. E pra esse o Google não tem resposta! ;) Leia mais sobre Rainbow Table: http://tinyurl.com/mais-sobre-rainbow-table domingo, 20 de junho de 2010
  • 51. Password Sniffing domingo, 20 de junho de 2010
  • 52. Password Sniffing O que é? Este ataque baseia-se em capturar na rede um pacote descriptografado com os dados de autenticação de algum usuário. Como ocorre? Monitorando a rede pode-se visualizar todos os pacotes. Todas as requisições via POST e GET normalmente estão abertas à visualização. domingo, 20 de junho de 2010
  • 53. Password Sniffing Como evitar Proteja a sua conexão com SSL. Utilizando este protocolo você irá assegurar que a comunicação entre o cliente e o servidor, mesmo que interceptada, não possa ser decifrada. Utilize sempre o POST (por ser uma forma mais segura) e lembre-se de sempre colocar o protocolo HTTPS. domingo, 20 de junho de 2010
  • 54. Password Sniffing Como evitar Você pode também redirecionar o usuário para a página de login (o formulário em si) sempre com HTTPS. Não existe nenhuma razão técnica para isso, apenas psicológica. O usuário costuma sentir-se mais seguro quando está colocando sua senha em uma página com cadeado. :) Leia mais sobre Sniffing: http://tinyurl.com/mais-sobre-sniffing domingo, 20 de junho de 2010
  • 55. 3 Outros tipos de ameaça domingo, 20 de junho de 2010
  • 56. Outros tipos de ameaça Existem outras ameaças que vão além da alçada do programador. Outras podem ser evitadas se alguns cuidados forem tomados. • Includes • Abuso de formulários • Diretrizes (register_globlals, display_errors, etc) • Exposição do phpinfo domingo, 20 de junho de 2010
  • 57. Outros tipos de ameaça Includes A inclusão de arquivos via include() e require(), embora muito útil, pode ter consequencias muito ruins se não utilizada corretamente. É muito comum a inclusão de arquivos recebidos via URL sem que a string seja filtrada. domingo, 20 de junho de 2010
  • 58. Outros tipos de ameaça Includes Outro ponto que você deve estar atento é quanto ao uso de extensões que o seu servidor web não “conheça”. Evite extensões do tipo .inc. Se for fazê-lo, prefira algo do tipo meuarquivo.inc.php. domingo, 20 de junho de 2010
  • 59. Outros tipos de ameaça Includes Funções que você pode utilizar para filtrar os dados recebidos e evitar um ataque de XSS ou a exposição do seu código: • basename() • file_exists() domingo, 20 de junho de 2010
  • 60. Outros tipos de ameaça Abuso de formulários Esteja sempre atento ao uso de seus formulários. O maior erro que você pode cometer é colocar os possíveis e-mails dentro do seu formulário. Isto abrirá uma brecha em que o usuário mal intencionado poderá inserir endereços arbitrários e utilizar o seu formulário como disseminador de SPAM. domingo, 20 de junho de 2010
  • 61. Outros tipos de ameaça Diretrizes Algumas diretrizes, quando bem configuradas, podem aumentar a segurança da sua aplicação. • register_globals • display_errors • log_errors domingo, 20 de junho de 2010
  • 62. Outros tipos de ameaça Exposição do phpinfo É incrível o número de páginas espalhadas pela web que possuem um arquivo phpinfo.php em sua raiz. A primeira ação tomada por um usuário mal intencionado é verificar a existência desse arquivo e de variantes do seu nome como info.php, php.php, etc. domingo, 20 de junho de 2010
  • 63. 4 Mais alguns cuidados domingo, 20 de junho de 2010
  • 64. Mais alguns cuidados Existem mais alguns cuidados que você pode tomar para assegurar que será mais difícil conseguir realizar um ataque bem sucedido contra a sua aplicação. • Lei do menor privilégio (SQL) • Ocultação de cabeçalhos HTTP • Examine sempre os logs domingo, 20 de junho de 2010
  • 65. Mais alguns cuidados Lei do menor privilégio (SQL) Sempre que possível, crie mais de um usuário para acesso ao banco de dados. Não é uma boa idéia utilizar o usuário administrador (root) para acessar o banco através do site. domingo, 20 de junho de 2010
  • 66. Mais alguns cuidados Lei do menor privilégio (SQL) Crie usuários que só tenham permissão de leitura e usuários que só tenham permissão de escrita. Caso, devido a algum infortuno do destino, alguém consiga invadir o seu sistema terá apenas permissões limitadas. domingo, 20 de junho de 2010
  • 67. Mais alguns cuidados Ocultação de cabeçalhos HTTP Sempre que você acessa uma página, o servidor envia cabeçalhos HTTP para o seu browser. Dentro deste cabeçalhos podemos encontrar algumas informações interessantes. domingo, 20 de junho de 2010
  • 68. Mais alguns cuidados Ocultação de cabeçalhos HTTP domingo, 20 de junho de 2010
  • 69. Mais alguns cuidados Ocultação de cabeçalhos HTTP Dentro do arquivo httpd.conf do Apache você pode alterar o nível de exposição da versão das aplicações instaladas no seu servidor. Para tanto, você deve alterar a diretiva ServerTokens. domingo, 20 de junho de 2010
  • 70. Mais alguns cuidados Ocultação de cabeçalhos HTTP ServerTokens valor_desejado • Prod: Apache • Major: Apache/2 • Minor: Apache/2.0 • Min: Apache/2.0.59 • OS: Apache/2.0.59 (Unix) • Full: Apache/2.0.59 (Unix) PHP/5.2.6 domingo, 20 de junho de 2010
  • 71. Mais alguns cuidados Examine sempre os logs Esteja atento aos logs e, se possível, utilize ferramentas de monitoramento de tráfego (como AWStats e Webalizer) para analisar possíveis tentativas de ataque à sua página. domingo, 20 de junho de 2010
  • 72. domingo, 20 de junho de 2010 ?
  • 73. Obrigado! :) Rafael Jaques Site: phpit.com.br E-mail: rafa@php.net Twitter: @rafajaques domingo, 20 de junho de 2010