Upload
carlos-nilton-araujo-correa
View
299
Download
0
Embed Size (px)
DESCRIPTION
A palestra visa: i) apresentar as principais técnicas de ataque a aplicações web, com destaque para SQL Injection, Cross-Site Scripting e demais opções de injeção de código; ii) apresentar uma classificação destas técnicas de acordo com a camada-alvo de cada uma: aplicação, apresentação, BD, etc.; iii) demonstrar que a mitigação de riscos de segurança em aplicações web exige ações em todo o ciclo de vida destes softwares - mas que a adoção de princípios seguros durante a etapa de desenvolvimento tem papel preponderante neste processo. O título faz uma referência às artes marciais mistas (MMA) justamente para reforçar a idéia de que segurança da informação exige conhecimentos amplos. Para compreender o princípio (elementar) de se evitar register_globals em PHP, é interessante que o desenvolvedor conheça o protocolo HTTP. Este conhecimento, externo à área de desenvolvimento per se, também pode ser instrumental para a compreensão de porque o uso do HTTP_REFERER, em qualquer linguagem/plataforma, pode ser muito pouco para o controle de navegação. O mesmo poderia ser dito sobre a relação entre cookies e timestamps, além do uso de hashes para codificá-los. Ou sobre a necessidade de análise e escape de caracteres, que podem sofrer múltiplos passos de codificação para permitir a injeção de código em situações em que sistemas estão protegidos por meras "receitas de bolo" de segurança. Espera-se que ao fim da palestra os desenvolvedores presentes sintam-se motivados a investigar questões de segurança que vão além do escopo de seus códigos, e diversifiquem assim suas "habilidades marciais" em tecnologia.
Citation preview
Agenda1. Segurança2. Injeção de código3. Ameaças4. Oportunidades
Disponibilidade
IHDR Image Header
This chunk must appear FIRST. Its contents are: Width: 4 bytesHeight: 4 bytes[…]
Width and height give the image dimensions in pixels. They are 4-byte integers. Zero is an invalid value. The maximum for each is (2^31)-1 in order to accommodate languages which have difficulty with unsigned 4-byte values.
Integridade
Gerenciamento de sessão/navegação
JavaScriptHTTP_REFERRERCookies
ExpiraçãoSegurançaEscopo
Confidencialidade
Trocando senhas
<?PHP $login = $_GET[“login”]; $senha = encripta($_GET[“senha”]); $cmd = “echo ”.$senha; $cmd .= “ | passwd –-stdin ”.$login;
system($cmd);?>
Trocando senhas
$ echo <senha> | passwd --stdin login
$ echo $6$jYk… | passwd --stdin bill
$ echo $6$pOi… | passwd --stdin bill;dd if=/dev/zero of=/tmp/lixo bs=1M
Dá pra limitar os danos?
$ echo $6$pOi… | passwd --stdin bill&&dd if=/dev/zero of=/tmp/lixo bs=1M
$ echo $6$pOi… | passwd --stdin bill -K||dd if=/dev/zero of=/tmp/lixo bs=1M
$ echo $6$pOi… | passwd --stdin `dd if=/dev/zero of=/tmp/lixo bs=1M`
A essência do problema1. Não se pode confiar em dados recebidos de
terceiros
2. Não se deve confiar em dados recuperados da memória secundária
3. Política e funcionalidade não devem ser fortemente acopladas
Principais vulnerabilidades OWASP
SQL Injection• Ataque em que um formulário é preenchido
com informações que interferem no fluxo de execução de consultas
• Frequentemente aplicado em etapas de login– Geralmente, a seção de um sistema web onde há
maior preocupação com segurança
Exemplo de injeção de SQL• Isto:
SELECT * FROM BugsWHERE bug_id = $_GET['bugid’]
• Pode resultar nesta instrução!
SELECT * FROM BugsWHERE bug_id = 1234 OR TRUE
Um exemplo pior
UPDATE AccountsSET password = SHA2('$password')WHERE account_id = $account_id
• Vira...
UPDATE AccountsSET password = SHA2(...)WHERE account_id = 1234 OR TRUE
Directory traversal• Tipo de ataque que faz com que uma aplicação
web acesse um arquivo não-desejado
• Mais uma vez, ocorre quanto não se trata adequadamente parâmetros de entrada
• Se um dos parâmetros indica um nome de arquivo, é possível manipulá-lo para que aponte para arquivos arbitrários no sistema do servidor
Exemplo básico• Suponha um script que suporte isto:
http://www.xxx.com/members/seepic.cgi?arq=001.jpg
<? ... /* le imagem a ser exibida */ $base = “/amadoras/” $hdl = fopen($base.$_GET['arq'], “r”); $imagem = fread($hdl, filesize($hdl)); print $imagem; fclose($hdl);?>
Outras possibilidades• http://www.xxx.com/members/seepic.cgi?
arq=../../../../../../../../../../etc/passwd
Alguns ataques usam caminhos codificados. Uma possibilidade é utilizar parâmetros com codificação de URL:
seepic.cgi?arq=%2e%2e%2f... → (../)seepic.cgi?arq=%2e%2e%5c... → (..\)
XSS“Através de um XSS, o Cracker injeta códigos JavaScript em um campo texto de uma página já existente e este JavaScript é apresentado para outros usuários.”
-- Wikipédia
• Quase lá!–XSS pode ser reflexivo ou armazenado
Google Gruyere• http://google-gruyere.appspot.com/
• Aplicação propositalmente desenvolvida com bugs
• Um “testbed” para experiências em segurança
Outras possibilidades?
• LDAP Injection?
• SMTP Injection?
• Quick Response Injection?
Existem oportunidades!
• Assume-se que aplicações são “naturalmente frágeis”
• Investe-se em segurança da “infraestrutura”– Firewalls e IDS– Consultoria– $$$
O desenvolvedor
• Conhece as principais tecnologias envolvidas
• Está no cerne do problema
• Possivelmente tem maior background acadêmico
Possível suporte
• https://www.owasp.org/
• www.microsoft.com/security/sdl/
• OWASP ESAPI
• (ISC)2 – Secure Software Lifecycle Professional
OBRIGADO!!Carlos ‘Bill’ Nilton
[email protected]@cnacorrea