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.