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.