29/06/2013
Sobre
- Dev PHP desde 2003
- Segurança da Informação 2007
- Foco em Desenvolvimento Seguro
- Membro PHPSP
- Motociclista
Mas, por que alguém me ‘atacaria’?
Muitos Page Views significa...
... que muita “gente” visita aqui!
(serious?)
Selia ótimo colocar um banner
maloto aqui para vender naiki!
(Chinês da galeria)
... Ou distribuir um malwarezinho!
Qualquer maldade que eu quiser
espalhar vai alcançar muita gente em
um curto espaço de tempo.
Mas, por que alguém me ‘atacaria’?
“Conteúdos que agradam alguns e
desagrada a muitos pode ‘encorajar’
um troll a fazer trollices.”
“ScriptKiddies – Cumprindo
ordens, ou simplesmente testando
um script que ‘hackeia as coisa
tudo’!”
Mas, por que alguém me ‘atacaria’?
Votações e Concursos Culturais são
ótimos para eles “desvirtuarem” os
resultados!
Já parou para pensar que alguém
pode ter raiva de você!? Ou não vai
com a sua cara?!
Ativos de interesse para Hackers
- Processamento (BotNet)
- Throughput de saída (DDoS)
- Distribuição de Trojan
- Pivoting
- Phishing
- Envio de Spam
- E se tiver algo de “valor”, levamos também!
hehe
Mas, por que alguém me ‘atacaria’?
WPScan o/
Principais focos de problemas
Plugins Temas
Infra
Má administração
Falta de processos
Negligências
Desenvolvimento
Carência de “senioridade”
RTFM
Teste (ñ deixe warnings
passar)->DEBUG
Full Path Disclosure
• Caracteriza-se por alguma merda falha de
programação que ocasione um Warning ou
Fatal Error no PHP (mensagem de Debug).
• Com isso o caminho (path) inteiro (full) do
arquivo de script dentro do servidor é
revelado (disclosure).
Full Path Disclosure
Então é isso que
o SEO faz!
Full Path Disclosure
Dá para fazer plugin com uma linha (LOC)...
... E vulnerabilidade também!
Full Path Disclosure
Directory Listing
... Falando em infra!
.htaccess do Akismet!
-----------------------------------
Order Deny,Allow
Deny from all
<FilesMatch "^akismet.(css|js)$">
Allow from all
</FilesMatch>
#allow access to any image
<FilesMatch "^(.+).(png|gif)$">
Allow from all
</FilesMatch>
Corrigindo o plugin de uma linha
<?php
if (!function_exists(‘add_action’)) {
die(‘<!-- mahhh oeeee -->’);
}
/* comments */
add_filter( ‘xmlrpc_enabled’, ‘__return_false’);
//?>
Com essa validação, caso o script seja chamado direto pelo browser. A função
“add_action” não terá sido definida e consequentemente o script irá parar, não
exibindo o erro/warning com o path do arquivo no servidor. Rá!
Caso recente de vulnerabilidades
Caso recente de um plugin que está ganhando evidência
Referência:
http://www.osvdb.org/show/osvdb/93582
http://www.waraxe.us/advisory-104.html
http://wordpress.org/extend/plugins/spider-event-calendar/
14
Vulns
XSS – Cross-site Scripting
• Ocorre quando um atacante consegue por
meio de uma falha, inserir código malicioso
para ser executado no browser do usuário
• https://www.owasp.org/index.php/Cross-
site_Scripting_(XSS)
Nenhuma validação, “dereto” para o BD
XSS
<a title="Manage Events" class="row-title"
href="admin.php?page=SpiderCalendar&task=show_manage_event
&calendar_id=<?php echo $rows[$i]->id; ?>"><?php echo $rows[$i]-
>title; ?></a>
Título salvo como:
</td><td></td><td></td></table><h1><marquee>XSS
rá</marquee></h1>
XSS – Crossite Scripting
DOM Based XSS
Stored XSS
Reflected XSS
XSS – Crossite Scripting
DOM Based XSS (https://www.owasp.org/index.php/Testing_for_DOM-based_Cross_site_scripting_(OWASP-DV-003))
Stored XSS (https://www.owasp.org/index.php/Testing_for_Stored_Cross_site_scripting_(OWASP-DV-002))
Reflected XSS (https://www.owasp.org/index.php/Testing_for_Reflected_Cross_site_scripting_(OWASP-DV-001))
XSS – Crossite Scripting
Blz, então dá para ficar fazendo
um monte de alert! Fantastic!
E eu já sei que o cookie deve ser
setado com as flags HTTPOnly e
SecureOnly.
Eu vou ficar te trollando via
JavaScript e vc não vai nem saber!
hehehe
http://beefproject.com/
SQL Injection
Armazenamento sem validação eficiente (somente title era input text)
Parâmetro de consulta sem escape/validação!
SQL Injection
https://www.owasp.org/index.php/Testing_for_SQL_Injection_(OWASP-DV-005)
SQL Injection
http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
Preparated Statements
Dicas rápidas
- Primeira coisa que um invasor vai tentar:
Editar um tema e/ou plugin e garantir a sua “volta”
define(‘DISALLOW_FILE_EDIT’, true); // wp-config.php
- Depois tentaria instalar um plugin/tema malicioso para “ampliar” seu privilégio.
Exemplo: ele invadiu por brute-force, ele pode instalar um plugin que contenha SQL Injection e
fazer dump da base.
Recomendação: Deixar o diretório /wp-content/(plugins|themes) como readonly.
- Desabilitar funções do PHP ‘perigosas’ e que de fato quase não são utilizadas.
disable_functions = system, exec, shell_exec, passthru, popen, pcntl_exec, show_source
- Remover todos os arquivos “readme.txt” de temas e plugins e garantir que não há “Directory
Listing (slide 12)
- Instalar um plugin “anti brute-force” que tenha política de senhas.
Sugestão: User Security Tools
- Forçar uso de SSL no login e admin do WordPRess:
http://codex.wordpress.org/Administration_Over_SSL
Dicas rápidas
- Valide dados antes de serem utilizados/processados
O WordPress possui uma série de funções prontas! Óia!
http://codex.wordpress.org/Data_Validation
- Se você ou a sua empresa “desenvolve seguro”, vocês tem um diferencial de mercado!
Referência de segurança em apps web: www.owasp.org
- Expert Mode: Utilize ferramentas para monitoração de possíveis ataques. Ex.: OSSEC-HIDS
Dicas rápidas
Bloquear User Enumeration no .htaccess
RewriteEngine on
RewriteCond %{REQUEST_URI} ^$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://site.com/ [L,R=301]
Proteger wp-admin com senha (.htaccess diretório wp-admin):
AuthType Basic
AuthName “Area Restrita”
AuthUserFile /path/arquivo/htpasswd #fora do DocumentRoot
Require valid-user
Como criar arquivo de senha: $htpasswd –c htpasswdfile username
Obs.: Basic pois o admin já está com SSL
Ref: http://www.linux.org/article/view/-htaccess-password-protection-securing-a-folder-in-a-website
Vocês
Véi, na boa
Já sabia
Conte-me
mais como
invade ‘as
coisa tudo'
Segunda o
chicote vai
estralar no
cliente
Eu falei q ñ
tinha o plugin
vulnerável...
Mas eu tenho
Vou
pesquisar
essas
paradas aí
Estou todo
atualizado
Obrigado
• Erick Belluci Tedeschi
• erick@oerick.com
• @ericktedeschi
• http://slideshare.com/erickt86

iMasters Intercon Dev WordPress - Segurança em WordPress

  • 1.
  • 2.
    Sobre - Dev PHPdesde 2003 - Segurança da Informação 2007 - Foco em Desenvolvimento Seguro - Membro PHPSP - Motociclista
  • 3.
    Mas, por quealguém me ‘atacaria’? Muitos Page Views significa... ... que muita “gente” visita aqui! (serious?) Selia ótimo colocar um banner maloto aqui para vender naiki! (Chinês da galeria) ... Ou distribuir um malwarezinho! Qualquer maldade que eu quiser espalhar vai alcançar muita gente em um curto espaço de tempo.
  • 4.
    Mas, por quealguém me ‘atacaria’? “Conteúdos que agradam alguns e desagrada a muitos pode ‘encorajar’ um troll a fazer trollices.” “ScriptKiddies – Cumprindo ordens, ou simplesmente testando um script que ‘hackeia as coisa tudo’!”
  • 5.
    Mas, por quealguém me ‘atacaria’? Votações e Concursos Culturais são ótimos para eles “desvirtuarem” os resultados! Já parou para pensar que alguém pode ter raiva de você!? Ou não vai com a sua cara?!
  • 6.
    Ativos de interessepara Hackers - Processamento (BotNet) - Throughput de saída (DDoS) - Distribuição de Trojan - Pivoting - Phishing - Envio de Spam - E se tiver algo de “valor”, levamos também! hehe Mas, por que alguém me ‘atacaria’?
  • 7.
  • 8.
    Principais focos deproblemas Plugins Temas Infra Má administração Falta de processos Negligências Desenvolvimento Carência de “senioridade” RTFM Teste (ñ deixe warnings passar)->DEBUG
  • 10.
    Full Path Disclosure •Caracteriza-se por alguma merda falha de programação que ocasione um Warning ou Fatal Error no PHP (mensagem de Debug). • Com isso o caminho (path) inteiro (full) do arquivo de script dentro do servidor é revelado (disclosure).
  • 11.
    Full Path Disclosure Entãoé isso que o SEO faz!
  • 12.
    Full Path Disclosure Dápara fazer plugin com uma linha (LOC)... ... E vulnerabilidade também!
  • 13.
  • 14.
    ... Falando eminfra! .htaccess do Akismet! ----------------------------------- Order Deny,Allow Deny from all <FilesMatch "^akismet.(css|js)$"> Allow from all </FilesMatch> #allow access to any image <FilesMatch "^(.+).(png|gif)$"> Allow from all </FilesMatch>
  • 15.
    Corrigindo o pluginde uma linha <?php if (!function_exists(‘add_action’)) { die(‘<!-- mahhh oeeee -->’); } /* comments */ add_filter( ‘xmlrpc_enabled’, ‘__return_false’); //?> Com essa validação, caso o script seja chamado direto pelo browser. A função “add_action” não terá sido definida e consequentemente o script irá parar, não exibindo o erro/warning com o path do arquivo no servidor. Rá!
  • 16.
    Caso recente devulnerabilidades Caso recente de um plugin que está ganhando evidência Referência: http://www.osvdb.org/show/osvdb/93582 http://www.waraxe.us/advisory-104.html http://wordpress.org/extend/plugins/spider-event-calendar/ 14 Vulns
  • 17.
    XSS – Cross-siteScripting • Ocorre quando um atacante consegue por meio de uma falha, inserir código malicioso para ser executado no browser do usuário • https://www.owasp.org/index.php/Cross- site_Scripting_(XSS)
  • 18.
  • 19.
    <a title="Manage Events"class="row-title" href="admin.php?page=SpiderCalendar&task=show_manage_event &calendar_id=<?php echo $rows[$i]->id; ?>"><?php echo $rows[$i]- >title; ?></a>
  • 20.
  • 21.
    XSS – CrossiteScripting DOM Based XSS Stored XSS Reflected XSS
  • 22.
    XSS – CrossiteScripting DOM Based XSS (https://www.owasp.org/index.php/Testing_for_DOM-based_Cross_site_scripting_(OWASP-DV-003)) Stored XSS (https://www.owasp.org/index.php/Testing_for_Stored_Cross_site_scripting_(OWASP-DV-002)) Reflected XSS (https://www.owasp.org/index.php/Testing_for_Reflected_Cross_site_scripting_(OWASP-DV-001))
  • 23.
    XSS – CrossiteScripting Blz, então dá para ficar fazendo um monte de alert! Fantastic! E eu já sei que o cookie deve ser setado com as flags HTTPOnly e SecureOnly.
  • 24.
    Eu vou ficarte trollando via JavaScript e vc não vai nem saber! hehehe http://beefproject.com/
  • 25.
    SQL Injection Armazenamento semvalidação eficiente (somente title era input text) Parâmetro de consulta sem escape/validação!
  • 26.
  • 27.
  • 28.
    Dicas rápidas - Primeiracoisa que um invasor vai tentar: Editar um tema e/ou plugin e garantir a sua “volta” define(‘DISALLOW_FILE_EDIT’, true); // wp-config.php - Depois tentaria instalar um plugin/tema malicioso para “ampliar” seu privilégio. Exemplo: ele invadiu por brute-force, ele pode instalar um plugin que contenha SQL Injection e fazer dump da base. Recomendação: Deixar o diretório /wp-content/(plugins|themes) como readonly. - Desabilitar funções do PHP ‘perigosas’ e que de fato quase não são utilizadas. disable_functions = system, exec, shell_exec, passthru, popen, pcntl_exec, show_source - Remover todos os arquivos “readme.txt” de temas e plugins e garantir que não há “Directory Listing (slide 12) - Instalar um plugin “anti brute-force” que tenha política de senhas. Sugestão: User Security Tools - Forçar uso de SSL no login e admin do WordPRess: http://codex.wordpress.org/Administration_Over_SSL
  • 29.
    Dicas rápidas - Validedados antes de serem utilizados/processados O WordPress possui uma série de funções prontas! Óia! http://codex.wordpress.org/Data_Validation - Se você ou a sua empresa “desenvolve seguro”, vocês tem um diferencial de mercado! Referência de segurança em apps web: www.owasp.org - Expert Mode: Utilize ferramentas para monitoração de possíveis ataques. Ex.: OSSEC-HIDS
  • 30.
    Dicas rápidas Bloquear UserEnumeration no .htaccess RewriteEngine on RewriteCond %{REQUEST_URI} ^$ RewriteCond %{QUERY_STRING} ^/?author=([0-9]*) RewriteRule ^(.*)$ http://site.com/ [L,R=301] Proteger wp-admin com senha (.htaccess diretório wp-admin): AuthType Basic AuthName “Area Restrita” AuthUserFile /path/arquivo/htpasswd #fora do DocumentRoot Require valid-user Como criar arquivo de senha: $htpasswd –c htpasswdfile username Obs.: Basic pois o admin já está com SSL Ref: http://www.linux.org/article/view/-htaccess-password-protection-securing-a-folder-in-a-website
  • 31.
    Vocês Véi, na boa Jásabia Conte-me mais como invade ‘as coisa tudo' Segunda o chicote vai estralar no cliente Eu falei q ñ tinha o plugin vulnerável... Mas eu tenho Vou pesquisar essas paradas aí Estou todo atualizado
  • 32.
    Obrigado • Erick BelluciTedeschi • erick@oerick.com • @ericktedeschi • http://slideshare.com/erickt86