Práticas e ferramentas fundamentais
para o desenvolvimento de software
seguro
Cassio Goldschmidt
Sr. Manager, Product Security
Symantec Corporation
OWASP
October 30th, 2009
Copyright © The OWASP Foundation
Permission is granted to copy, distribute and/or modify this document
under the terms of the OWASP License.
The OWASP Foundation
http://www.owasp.org
Introdução
SAFECode.org
OBJETIVO
Aumentar a confiança em TI
disseminando práticas para o
desenvolvimento de software
seguro.
3
Introdução
SAFECode, Open SAMM, BSIMM
4
Introdução
Publicações SAFECode.org
http://www.SAFECode.org
5
Introdução
Publicações SAFECode.org
http://www.SAFECode.org
6
Práticas e ferramentas fundamentais...
Objetivos
Focado em execução
Implementável
Práticas comprovadas
Compacto
Independente de
metodologia de
desenvolvimento
Revisado pela OWASP
7
Cassio Goldschmidt
 Gerente Sr., Product Security
 Líder OWASP, capítulo Los
Angeles
 Educação
 MBA, USC
 Mestrado Eng. de Software, SCU
 Bacharelado em Informática, PUCRS
 CSSLP, (ISC)2
OWASP
8
Práticas Exercidas
Práticas de segurança
Aplicáveis em diferentes metodologias de dsv
CONCEITO
PLANO
DSV
TESTE
SUPORTE
Dias de “cowboys” acabaram
Práticas de segurança são aplicada em todas
as fases do desenvolvimento
Não podem ser reduzidas a uma lista de tarefas
Não acabam depois que o produto é lançado
10
Planejamento
Requisitos de segurança (Software)
Inf. providas
por clientes
Caso de
Uso
Políticas da
empresa
Melhorias de
segurança
Priorização
Integridade da informação
Disponibilidade da informação
Confidenciabilidade (e.g. privacidade)
Privilégio de execução do código
Acessibilidade do código
Requisitos de segurança
11
Planejamento
Requisitos de segurança (Macro)
Verificação de antecedente criminais
Avaliação de componentes desenvolvido por
terceiros
Autenticação e gerenciamento de senhas
Estratégia de gerenciamento de chaves
Auditoria de logs
Configuração segura de servidores (server
hardening)
Planejamento da educação dos funcionários
…
12
Educação
Time de desenvolvimento
Educação sobre como desenvolver
software seguro e sobre como testar a
segurança de software são vitais para
aprimorar a qualidade do produto.
13
Educação
Executivos
Educação ajuda executivos a entender
o valor do investimento em segurança
para a empresa e para os clientes.
14
Educação
Ferramentas da OWASP
Thanks Matt Tesauro for the graphics
15
Educação
Ferramentas da OWASP - WebGoat
16
Design
Técnicas mais utilizadas
Modelagem de ameaças em aplicações (threat
model)
Discussão informal sobre o projeto
Custo de descobrir falhas no início do
desenvolvimento é significativamente menor do
que nas fases finais.
17
Práticas de
Desenvolvimento
Desenvolvimento
Práticas mais populares – Visão Geral
Uso de compiladores modernos
Restringir uso de funções inseguras
Validação de entrada e saída de dados
Uso de forma canônica de dados
Uso de bibliotecas anti XSS (encoding)
Uso de queries SQL parametrizados
Ferramentas de análise estática e
dinâmica
Revisão manual de código
Eliminação de criptografia fraca
19
Uso de compiladores modernos (C++)
Restringir uso de funções inseguras
Flags MSVC 2005 e 2008
• /GS
• /DYNAMICBASE
• /NXCOMPAT
• /Analyze
Flags gcc 4.1.2-25
• -fstack-protector
• -WI, -pie
• -D_FORTIFY_SOURCE=2
Família de funções banidas
•strcpy, strcat, strlen…
•strncpy, strncat…
•sprintf, wsprintf, swprintf...
•gets, _getts
•strtok, _tcstok…
•makepath, splitpath
•scanf, sscanf
•_itoa, _itow
•chartoOem, OEMtoChar
•alloca, _alloca
•...
20
Validação de entrada e saída de dados
Por que validacao é uma tarefa complexa
21
Validação de entrada e saída de dados
Por que validacao é uma tarefa complexa
Várias maneira de se falar
• http://www.yahoo.com
• http://209.191.93.52 (endereço IP como todos conhecem…)
• http://0xD1BF5D34 (representação em hex)
• http://0x123456789D1BF5D34/ (representação em hex com
numeros na frente. IE aceita este tipo de IP…)
• http://3518979380/ (endereço IP em decimal)
• http://0321.0277.0135.064 (endereço IP em octal)
…que tal este aqui?
http://www.google.com/search?hl=en&q=yahoo+search+page&btnI=
Validação de entrada e saída de dados
Uso de forma canônica de dados
CVE-2001-033 (IIS 5.0)
http://10.83.2.25/..%c0%af../winnt/system32/cmd.exe?c+dir+c:\
…onde %c0%af é o código Unicode para “/”
Validação de entrada e saída de dados
Uso de bibliotecas anti XSS
Existem 7 casos que necessitam de validação
HTML
Atributos
HTML
URL
JavaScript
VBScript
XML
Atributos
XML
• HTMLEncode não pode ser usado em todos os
casos. Uma boa biblioteca deve conter métodos
especiais para cada caso.
24
SecurityConfiguration
IntrusionDetector
Logger
Exception Handling
Randomizer
EncryptedProperties
Encryptor
HTTPUtilities
Encoder
Validator
encodeForDN(input)
encodeForHTML(input)
Aplicação WebencodeForHTMLAttribute(input)
Customizada
…, encodeForJavascript,
encodeForLDAP,
encodeForSQL,
Enterprise Security
API
encodeForURL,
encodeForVBScript,
encodeForXML,
encodeForXMLAttribute,
encodeForXPath
AccessReferenceMap
AccessController
User
Authenticator
Codificação de entrada ecanonicalize(input),
saída de dados
normalize(input)
The OWASP Enterprise Security
API
encodeForBase64(input)
Serviços e bibliotecas de segurança já existentes
Fonte: “Don’t write your own security code”, Jeff Williams – OWASP Los Angeles Agosto 2008
25
Validação de entrada e saída de dados
Injeção de código SQL
SELECT
* FROM Users
WHERE
UserId = ‘Jose’ AND
Password = ‘tigrao’
SELECT * FROM Users WHERE UserId = ‘Jose’ AND Password = ‘’ or 1=1- -’
SELECT * FROM Users WHERE UserId = ‘Jose’ AND Password = ‘’ or ‘1’=‘1’
SELECT * FROM Users WHERE UserId = ‘Jose’ - - ’ AND Password = ‘’
2
Injeção de comandos, ver dados de
outras tabelas…
UNION ALL pode ser usado para juntar tabelas.
A keyword AS pode ser usada para modificar
nome de colunas e NULL pode ser usado
quando não se sabe o tipo da coluna.
; pode ser usado para injetar outros comandos
como DROP TABLE
Injeção de código SQL
Defesas falhas
Store procedures podem ser vulneráveis a SQL
injections
Queries que usam EXEC e EXECUTE podem ainda
ser atacados
CREATE PROCEDURE sp_GetCustomerID @name varchar(128)
AS
BEGIN
EXEC (‘SELECT ID FROM Customer WHERE ContactName = ‘’’ + @Name + ‘’’)
END
28
Injeção de código SQL
Mais defesas falhas
Remove aspas
Causa problemas com nomes como O’Reilly!
Duplicar aspas
O que acontece se 18 aspas simples, 1 letra
maiúscula, 2 letras minúsculas e 1 numero é
CREATE PROCEDURE sp_setPassword
usado como senha e o username =
@username varchar(25),
administrator?
@old varchar(25),
@new varchar(25)
AS
DECLARE @command varchar(100)
SET @command=
‘update Users set password=‘‘‘ + REPLACE(@new, ‘‘‘‘, ‘‘‘‘‘‘) + ‘‘‘‘ +
‘ where username=‘‘‘ + REPLACE(@username, ‘‘‘‘, ‘‘‘‘‘‘) + ‘‘‘‘ +
‘ AND password = ‘‘‘ + REPLACE(@old, ‘‘‘‘, ‘‘‘‘‘‘) + ‘‘‘‘
EXEC (@command)
GO
29
Injeção de código SQL
Exemplo de defesa
Uso de queries parametrizados (C#)
…
String sqlQuery = “SELECT * FROM Students WHERE Name = @Name”;
SQLConnection con = new SQLConnection(…);
con.Open();
SQLCommand cmd = new SQLCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlQuery;
cmd.Parameters.Add(“@Name”, SqlDbType.NVarChar).Value = strName;
SQLDataReader reader = cmd.ExecuteReader();
…
reader.Close();
con.Close();
30
Eliminação de criptografia fraca
Crypto agility
Algoritmos Inseguros
• MD4, MD5
• SHA1
• DES
• Algoritmos inventados em casa*
• Chaves simétricas < 128 bits
Algoritmos Recomendados
AES (>128 bit)
• SHA-2 (SHA-256, SHA-384, 512)
• RSA (> 2048 bit)
C# Code
private static byte[] computeHash(byte[] buffer) {
using (HashAlgorithm hash = HashAlgorithm.Create("MyApplicationHash")) {
return hash.ComputeHash(buffer);
}
}
Machine.config
<cryptoClasses>
<cryptoClass MyPreferredHash="SHA512CryptoServiceProvider, System.Core,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</cryptoClasses>
<nameEntry name="MyApplicationHash" class="MyPreferredHash"/>
Fonte: MSDN, Agosto 2009
31
Desenvolvimento
Documentação OWASP
Validação de dados
Autenticação, autorização, Logs
Gerenciamento de sessão
Canonicalizacao, codificação
Tratamento de exceções
Proteção contra
Injection attacks
Buffer overflow
Criptografia
…
32
Revisão de código
Ferramentas de análise de código
Altamente recomendadas
Problemas observados
Uso de múltiplas ferramentas é recomendado
Requerem investimento inicial
 Financeiro
 Educação
Falso positivos
OWASP: Projeto Orizon
MSFT: CAT.Net, FxCop,
/analyze
Ferramenta
“C”
Ferramenta
“A”
Ferramenta
“B”
33
Revisão de código
Revisão manual
Responsáveis por revisão de código devem ser
especificamente treinados.
Given enough eyeballs,
all bugs are shallow.
The Linus Law,
Linus Torvalds
34
Revisão de código
Documentação OWASP
Métricas
Cobertura de código
Técnicas de procura de falhas
ASP (.Net e Classic)
J2EE/Java
Ataques específicos
Implementação de Logs
Estruturas de controle
Sessão, autorização, erro, cripto
…
35
Visão Geral
Teste de segurança
Teste de segurança != teste de controles de
segurança
Foco em habilidade de resistir a ataques
Bugs != Falhas de segurança
Não deve ser considerado uma rede de segurança
Não quer dizer que todas as falhas tenham sido
encontradas
Outras atividades
Revisão de modelagem de ameaças em aplicações
(threat model)
Reavaliação de superfície de ataque
36
Técnicas de teste
Fuzzing
Eficiente
Barato
Usado por muitos pesquisadores de segurança
Fuzzers
BinScope, OWASP JBroFuzz
Como obter bons resultados
37
Teste
Documentação OWASP
Princípios de teste
Processo de teste
Tipos de teste
Black Box
Gray Box
Riscos e relatórios
Apêndice: Ferramentas
Apêndice: Fuzzing
Coleta de informações
Como testar
Business Logic
Autenticação
Gerenciamento de sessão
Validação de dados
Web Serviços
Ajax
38
Teste
Ferramentas Gratuitas
OWASP
WebScarab
v20090122
OWASP
WebGoat v5.2
OWASP
OWASP SQLiX
WSFuzzer
v1.0
v1.9.4
Wireshark
v1.0.5
OWASP
CAL9000 v2.0
OWASP
JBroFuzz v1.2
OWASP
DirBuster v0.12
OWASP Wapiti
v2.0.0-beta
Paros Proxy
v3.2.13
OWASP XSS
cheat sheet
Firefox 3.06 +
tcpdump v4.0.0
25 addons
nmap &
Burp Suite v1.2 Zenmap v 4.76
Metasploit v3.2 w3af + GUI svn Netcats –
(svn)
1.0-rc1
original + GNU
Nikto v2.03
Firece Domain
Scanner v1.0.3
Maltego CE
v2-210
Spike Proxy
v1.4.8-4
Rat Proxy
v1.53-beta
Httprint v301
Thanks Matt Tesauro for the tools table
SQLBrute v1.0
39
Conclusões
Conclusões
Realidade financeira
das empresas
integrantes do
SAFECode
Realidade financeira
da maioria das
empresas
41
Thank You!
Cassio Goldschmidt
[email protected]
[email protected]
SAFECode – http://www.SAFECode.org
Copyright © 2009 Symantec Corporation. All rights reserved. Symantec and the Symantec Logo are trademarks or registered trademarks of
Symantec Corporation or its affiliates in the U.S. and other countries. Other names may be trademarks of their respective owners.
This document is provided for informational purposes only and is not intended as advertising. All warranties relating to the information in
this document, either express or implied, are disclaimed to the maximum extent allowed by law. The information in this document is subject
to change without notice.