Você está na página 1de 62

Construindo uma aplicao PHP Prova de Balas

Rafael Jaques TcheLinux - Porto Alegre - 14/11/09


BuscaiprimeirooreinodoSenhoreasuajustia,e todasasdemaiscoisasvosseroacrescentadas (Mateus6.33)

Pauta
Um pouco sobre segurana Conhecendo os meios de ataque Outros tipos de ameaa Mais alguns cuidados Perguntas

Um pouco sobre segurana

O que segurana?
Segurana baseia-se em trs pontos:

CONFIDENCIALIDADE INTEGRIDADE DISPONIBILIDADE

O que segurana?

No se iluda. No existem aplicaes 100% seguras.

No ouse dizer isso... Voc poder ter srios problemas.

O quo segura deve ser a sua aplicao?


Voc deve encontrar um equilbrio entre a segurana e a usabilidade do seu sistema. Crie um sistema com pouca segurana e ele ser invadido. Crie um sistema com muita segurana e ele ser impossvel de usar.

O quo segura deve ser a sua aplicao?


Sempre revise o que voc projetou.

Evite investir esforos onde no necessrio.

Os custos que envolvem uma aplicao segura

Aplicaes seguras tendem a custar caro... Aplicaes no seguras tendem a custar mais caro ainda...

Os custos que envolvem uma aplicao segura


Entre os custos envolvidos no desenvolvimento da aplicao, temos os seguintes pontos:
Maior tempo de projeto e pesquisa Programao extendida Testes mais minuciosos Maior uso de hardware Maior uso de banda Treinamento de pessoal interno Treinamento do usurio

no sacrique a usabilidade do projeto

Conhecendo os meios de ataque

Quais os tipos de ataque que posso sofrer?


Existem diversos tipos de ataque atravs da internet. Eis alguns:
XSS (Cross-site Scripting) SQL Injection Session Hijacking Cookie Theft Brute Force Rainbow Table Password Snifng Entre outros...

XSS Cross-site Scripting

O que ?
Injeo de cdigo arbitrrio em uma pgina.

Como ocorre?
Geralmente atravs de brechas em formulrios onde os dados enviados ao servidor no so devidamente ltrados.

XSS Cross-site Scripting

Exemplo

XSS Cross-site Scripting

Exemplo

XSS Cross-site Scripting

Como evitar
Existem funes prontas no PHP para ltrar strings. Utilizando-as, alm de evitar um XSS, voc garante que o usurio conseguir expressar o que realmente intentou.

XSS Cross-site Scripting

Como evitar
Funes que voc pode utilizar: htmlspecialchars() htmlentities() lter_input()
Leia mais sobre XSS: http://tinyurl.com/mais-sobre-xss

SQL Injection

O que ?
Injeo de cdigo SQL arbitrrio dentro de uma consulta legtima.

Como ocorre?
Na maioria das vezes a injeo de cdigo SQL se d a partir de formulrios no ltrados, em que os dados recebidos vo diretamente para dentro da consulta.

SQL Injection

Exemplo

SQL Injection

Exemplo
1'OR1='1

SQL Injection

Exemplo
fulano'#oufulano'

SQL Injection

Como evitar
Novamente... Filtrando os dados enviados pelo usurio possvel evitar que seja injetado cdigo dentro do seu SQL.

SQL Injection

Como evitar
Funes que voc pode utilizar: addslashes() mysql_real_escape_string()

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

Session Hijacking

O que ?
Quando o invasor obtm acesso sesso de um usurio autenticado.

Como ocorre?
Sempre que os dados do cliente so armazenados em sesso gerado um ID. Caso algum o descubra, poder navegar pelo site como se fosse o usurio real.

Session Hijacking

Ateno...
Hoje, com as conguraes padro do PHP bem pouco provvel que voc sofra um ataque de roubo de sesso no seu site. Para tanto voc deve estar atento s seguintes conguraes:

Session Hijacking

Ateno...
session.use_cookies session.use_only_cookies

Session Hijacking

Exemplo
algumapagina.php?PHPSESSID=1234

Session Hijacking

Como evitar
Nunca cone 100% no ID de sesso recebido. Voc pode fazer algumas vericaes redudantes, como comparar o IP e o User-Agent. Em casos mais vitais voc pode sugerir ao usurio que utilize cookies, intruindo-o e falando da sua importncia para uma navegao mais segura no site.
Leia mais sobre Sess. Hijacking: http://tinyurl.com/mais-sobre-sess-hijacking

Cookie Theft

O que ?
A traduo literal Roubo de Cookie. Na verdade a literal mesmo Roubo de Biscoito. :P Trata-se capturar cookies na mquina da vtima e utiliz-los para acessar o local desejado.

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

Cookie Theft

Como evitar
O script que foi apresentado anteriormente no exemplo de XSS responsvel por roubar um cookie. Atualmente no so muito comuns falhas de browsers que permitam o roubo de cookies, mas no passado houveram muitos.

Cookie Theft

Como evitar
No site do PHP Security Consortium [1] voc pode consultar o resumo da newsletter da SecurityFocus [2], que possui sempre anncio de novas vulnerabilidades encontradas. A partir disso voc pode conscientizar os seus usurios caso perceba que os mesmos utilizem um browser vulnervel.
[1] http://phpsec.org/projects/vulnerabilities/securityfocus.html [2] http://securityfocus.com/vulnerabilities

Brute Force Attack


O ataque por fora bruta baseia-se na busca exaustiva da informao procurada, atravs de tentativa e erro com todas as possibilidades existentes.

O que ?

Como ocorre?
O usurio mal intencionado acessa o formulrio no qual ir tentar o ataque e utiliza um programa, estipulando uma cadeia de caracteres e um tamanho mximo para a frase. O programa ir tentar todas as combinaes possveis at que uma d certo.

Brute Force Attack

Ateno...
Este tipo de ataque bastante semelhante ao Ataque de Dicionrio. A diferena que o dicionrio esgota suas possibilidades mais rpido utilizando apenas palavras existentes e senhas comuns.

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

Rainbow Table

O que ?
Semelhante ao ataque de fora bruta, porm diretamente a um hash (md5, sha1, etc).

Como ocorre?
a mistura de um ataque de fora bruta com um ataque de dicionrio. De posse do hash, o invasor utiliza este ataque para testar combinaes que possam gerar o hash procurado at que se chegue resposta correta.

Rainbow Table

Exemplo
Caso o usurio malicioso obtenha acesso aos hashs de senha (apenas visualizar), ele ainda assim ter de descobrir a senha que est ali. O problema est em conar apenas na criptograa de hashs comuns como md5 e sha1.

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.

Rainbow Table

Exemplo

Rainbow Table

Como evitar
A tcnica mais utilizada e que reduz drasticamente a chance de este ataque dar certo, temperar suas senhas. Ao inserir uma string arbitrria antes de criptografar a senha, este ataque torna-se praticamente inefetivo. essa string arbitrria damos o nome de salt.

Rainbow Table

Como evitar
md5('rocknroll' . $senha)

Digamos que seu salt ser rocknroll. Ao aplicar a criptograa na sua string, voc dever concatenar com o seu salt.

Se a senha for abacaxi teremos o seguinte hash: 0a5cefae5c742e8a914f486db9ea45ef. E pra esse o Google no tem resposta! ;)
Leia mais sobre Rainbow Table: http://tinyurl.com/mais-sobre-rainbow-table

Password Snifng

O que ?
Este ataque baseia-se em capturar na rede um pacote descriptografado com os dados de autenticao de algum usurio.

Como ocorre?
Monitorando a rede pode-se visualizar todos os pacotes. Todas as requisies via POST e GET normalmente esto abertas visualizao.

Password Snifng

Como evitar
Proteja a sua conexo com SSL. Utilizando este protocolo voc ir assegurar que a comunicao entre o cliente e o servidor, mesmo que interceptada, no possa ser decifrada. Utilize sempre o POST (por ser uma forma mais segura) e lembre-se de sempre colocar o protocolo HTTPS.

Password Snifng

Como evitar
Voc pode tambm redirecionar o usurio para a pgina de login (o formulrio em si) sempre com HTTPS. No existe nenhuma razo tcnica para isso, apenas psicolgica. O usurio costuma sentir-se mais seguro quando est colocando sua senha em uma pgina com cadeado. :)
Leia mais sobre Snifng: http://tinyurl.com/mais-sobre-snifng

Outros tipos de ameaa

Outros tipos de ameaa


Existem outras ameaas que vo alm da alada do programador. Outras podem ser evitadas se alguns cuidados forem tomados.
Includes Abuso de formulrios Diretrizes (register_globlals, display_errors, etc) Exposio do phpinfo

Outros tipos de ameaa

Includes
A incluso de arquivos via include() e require(), embora muito til, pode ter consequencias muito ruins se no utilizada corretamente. muito comum a incluso de arquivos recebidos via URL sem que a string seja ltrada.

Outros tipos de ameaa

Includes
Outro ponto que voc deve estar atento quanto ao uso de extenses que o seu servidor web no conhea. Evite extenses do tipo .inc. Se for faz-lo, prera algo do tipo meuarquivo.inc.php.

Outros tipos de ameaa

Includes
Funes que voc pode utilizar para ltrar os dados recebidos e evitar um ataque de XSS ou a exposio do seu cdigo: basename() le_exists()

Outros tipos de ameaa

Abuso de formulrios
Esteja sempre atento ao uso de seus formulrios. O maior erro que voc pode cometer colocar os possveis e-mails dentro do seu formulrio. Isto abrir uma brecha em que o usurio mal intencionado poder inserir endereos arbitrrios e utilizar o seu formulrio como disseminador de SPAM.

Outros tipos de ameaa

Diretrizes
Algumas diretrizes, quando bem conguradas, podem aumentar a segurana da sua aplicao. register_globals display_errors log_errors

Outros tipos de ameaa

Exposio do phpinfo
incrvel o nmero de pginas espalhadas pela web que possuem um arquivo phpinfo.php em sua raiz. A primeira ao tomada por um usurio mal intencionado vericar a existncia desse arquivo e de variantes do seu nome como info.php, php.php, etc.

Mais alguns cuidados

Mais alguns cuidados


Existem mais alguns cuidados que voc pode tomar para assegurar que ser mais difcil conseguir realizar um ataque bem sucedido contra a sua aplicao.
Lei do menor privilgio (SQL) Ocultao de cabealhos HTTP Examine sempre os logs

Mais alguns cuidados


Lei do menor privilgio (SQL)
Sempre que possvel, crie mais de um usurio para acesso ao banco de dados. No uma boa idia utilizar o usurio administrador (root) para acessar o banco atravs do site.

Mais alguns cuidados


Lei do menor privilgio (SQL)
Crie usurios que s tenham permisso de leitura e usurios que s tenham permisso de escrita. Caso, devido a algum infortuno do destino, algum consiga invadir o seu sistema ter apenas permisses limitadas.

Mais alguns cuidados


Ocultao de cabealhos HTTP
Sempre que voc acessa uma pgina, o servidor envia cabealhos HTTP para o seu browser. Dentro deste cabealhos podemos encontrar algumas informaes interessantes.

Mais alguns cuidados


Ocultao de cabealhos HTTP

Mais alguns cuidados


Ocultao de cabealhos HTTP
Dentro do arquivo httpd.conf do Apache voc pode alterar o nvel de exposio da verso das aplicaes instaladas no seu servidor. Para tanto, voc deve alterar a diretiva ServerTokens.

Mais alguns cuidados


Ocultao de cabealhos 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

Mais alguns cuidados


Examine sempre os logs
Esteja atento aos logs e, se possvel, utilize ferramentas de monitoramento de trfego (como AWStats e Webalizer) para analisar possveis tentativas de ataque sua pgina.

Obrigado! :)
Rafael Jaques
Site:phpit.com.br Email:rafa@php.net Twitter:@rafajaques

Você também pode gostar