Palestra que foi ministrada pelo grande amigo Matheus Mendes (https://br.linkedin.com/in/matheusrochamendes/pt) abordando sobre conceitos de seguranças, gargalos, OWASP e sobre o quão vulneráveis nossas app's pode estar.
soluções @ Entelgy Brasil ▸ Graduado em processamento de dados pela FATEC-TQ ▸ Pós graduado com MBA em eng. de software pela FIAP-SP ▸ 10 anos de experiência ▸ Fã de arquitetura e design de software ▸ Newbie em segurança digital / desenvolvimento seguro
maliciosos em clipper, c, vb. ▸ Template building para virus e trojans (delphi e vb) ▸ Conhecimento abundante e difícil de filtrar ▸ A tão secreta deep-web de hoje
milhões de assinantes ▸ Principal publicação com mais de 1 milhão de assinantes ▸ Portal de benefícios com mais de 3 mil acessos / dia ▸ Concorrência para disputa de eventos (jantar, cinema, shows, etc) ▸ Concurso cultural ▸ Hot-sites da noite pro dia
e 5 ▸ EJB 2.1, Spring, Struts 1, Struts 2, Wicket, JSF 1.2 ▸ Ant / Maven ▸ Muito legado ▸ Varias integrações via arquivo e serviço com CRM e CDMS ▸ Dados de pagamento espalhados em vários sistemas
de páginas com javascript malicioso ▸ Acesso root a algumas máquinas ▸ Acesso as credenciais de banco ▸ Acesso a máquinas consideradas "isoladas" ▸ Dados de pagamento ? esses estavam a salvo ufa ! #sqn ▸ De quem é a culpa ?
não era uma diretriz coletiva ▸ Operação na mão de terceiros ▸ Integração continua pela metade ▸ Area de negócio um pouco distante dos times de devs ▸ Segurança reativa e não proativa ▸ 6 meses de log (wtf?)
boas práticas relacionadas a segurança ▸ Lista os 10 riscos considerados os mais críticos ▸ Exemplo de ataques ▸ Informações de como prevenir ou mitigar determinas vulnerabilidade ▸ Indicação de implementações de referência
que a aplicação execute comandos arbitrários através de um interpretador em uso (SQL, Shell, LDAP, Xpath, etc) ▸ Impacto: O céu é o limite ! ▸ Exemplo: String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";
Systems Web Services Directories Human Resrcs Billing Custom Code APPLICATION ATTACK Network Layer Application Layer Accounts Finance Administration Transactions Communication Knowledge Mgmt E-Commerce Bus. Functions HTTP request! SQL query! DB Table ! ✇ HTTP response " ✇ 1. Aplicação disponibiliza um form 2. O hacker envia um ataque de injeção através do form 3. A aplicação deixa passar e envia o comando SQL para o banco 4. O banco executa o comando contendo o ataque e envia os dados criptografados de volta para a aplicação 5. A aplicação descriptografa os dados e envia de volta para o hacker Account: SKU: Account: SKU:
▸ Validação positiva (whitelist) é sempre o mais recomendado porém não garante 100%. Algumas aplicações precisam receber caracteres especiais ▸ Utilizar APIs parametrizáveis (Hibernate, Prepared Statement, etc) e/ou escapar os caracteres especiais ▸ https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
request.getParameter("id") + "'"); RAILS 4 (RUBY) params[:name] = "' OR 1=1;" User.update_all("admin = 1 WHERE name LIKE '%#{params[:name]}%'") DB-API (PYTHON) cmd = "update people set name='%s' where id='%s'" % (name, id) curs.execute(cmd)
MANAGEMENT ▸ Geralmente em função de má programação ou má configuração, os dados de login e sessão ficam expostos. Propiciando um cenário onde o hacker consegue roubar a conta ou sessão de um usuário. ▸ Impacto: Conta e sessão comprometidos ▸ Exemplo: www.meusite.com/teste?JSESSIONID=9AF1DB4EA9CC8...
MANAGEMENT - COMO PREVINIR ▸ Arquitetura de autenticação deve ser sempre revista e padronizada ▸ Use sempre o session ID do seu container ▸ Certificado SSL ▸ Garantir que o logoff sempre invalide a sessão ▸ www.owasp.org/index.php/Authentication_Cheat_Sheet
Código malicioso é enviado para o browse de um usuário A. Persistido B. Refletido C. "Direto" ▸ Impacto: Roubo de sessão, phising, roubo de dados, botnet, etc ▸ Exemplo: javascript:alert(document.cookie)
trap – update my profile Attacker enters a malicious script into a web page that stores the data on the server 1 Victim views page – sees attacker profile Script silently sends attacker Victim’s session cookie Script runs inside victim’s browser with full access to the DOM and cookies Custom Code Accounts Finance Administration Transactions Communication Knowledge Mgmt E-Commerce Bus. Functions
COMO PREVINIR ▸ Não inclua nada que seja enviado pelo usuário no seu html (?!?!?!?!) ▸ Use políticas de conteúdo Use encoders para imprimir o conteúdo White-list AntiSamy ▸ www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
▸ Assumir que determinada funcionalidade está garantida por fluxos de tela/api e não garantir a proteção dos dados também do lado do servidor ▸ Impacto: Acesso a dados não autorizados ▸ Exemplo: http://meusite.com/user?account=1010 E se eu tentar... http://meusite.com/user?account=1011..1012..1013
- COMO PREVENIR ▸ Utilizar mapeamento temporário se possível, o recurso na url não deve representar um "caminho" real no servidor ▸ Verificar a permissão do usuário para acessar determinado conteúdo ▸ Exemplo: http://meusite.com/user?account=XPTCA [(XPTCA=1010), (ASCVA=1011)...]
a plataforma em que a aplicação se encontra precisa estar devidamente configurada e segura. ▸ Impacto: Acesso root a maquina, backdoor, contas default ▸ Frameworks de healthcheck como spring-actuator, etc ▸ Exemplo: Vunerabilidades de SO, Contas com senhas default (admin:admin, scott:tiger)
Code Accounts Finance Administration Transactions Communication Knowledge Mgmt E-Commerce Bus. Functions Test Servers QA Servers Source Control Development Database Insider
PREVENIR ▸ Manter SO sempre atualizado ▸ Hardening guideline ▸ Automatização de configuração e ambiente ▸ Dump de configuração para análise ▸ Ferramentas de scan para busca de vulnerabilidades conhecida
Armazenar ou transmitir de maneira insegura dado sensíveis sobre seus usuários e/ou aplicação ▸ Impacto: Vazamento de dados, informações para facilitar outros ataques, etc ▸ Exemplo: Storage com Criptografia insegura Camada de transporte não protegida
Attacker 1 External attacker steals credentials and data off network 2 Internal attacker steals credentials and data from internal network Internal Attacker CAMADA DE TRANSPORTE DESPROTEGIDA
COMO PREVENIR ▸ Armazene apenas dados que forem realmente necessários ▸ Criptografia de ponta a ponta ▸ Tenha uma alternativa para troca de chaves quando necessário ▸ Desabilite algoritmos antigos de SSL ▸ Usar TLS e HSTS por todo o fluxo de dados ▸ Ferramentas de scan para busca de vulnerabilidades conhecida
CONTROL ▸ Exibir apenas links e menus autorizados. Utilizar o "controle de acesso pela camada de apresentação". ▸ Impacto: Hacker utiliza funções do sistema que inicialmente ele não era autorizado para. ▸ Exemplo: www.meusite.com/user/accounts O hacker tenta www.meusite.com/admin/accounts
CONTROL - COMO PREVENIR ▸ Restringir acesso (login, token access, etc) ▸ Utilizar um modelo baseado em papeis (role-based) ▸ Desabilitar requests para paginas não autorizadas (config files, log files, etc) ▸ Verificação manual de cada URL
(CSRF) ▸ Neste ataque o browser da vitima é utilizado para enviar uma requisição para um site vulnerável a CSRF ▸ Impacto: Executar transações personificando a vitima (transferencia, solicitação de serviços, etc), roubo de conta, acesso a dados sensíveis. ▸ Exemplo: www.meusite.com/transferFundos.action?id=2134
the internet (or simply via an e-mail) 1 While logged into vulnerable site, victim views attacker site Vulnerable site sees legitimate request from victim and performs the action requested <img> tag loaded by browser – sends GET request (including credentials) to vulnerable site Custom Code Accounts Finance Administration Transactions Communication Knowledge Mgmt E-Commerce Bus. Functions Hidden <img> tag contains attack against vulnerable site Application with CSRF vulnerability
(CSRF) - COMO PREVENIR ▸ Token secreto em todas as requisições importantes ▸ Esse token deve ser criptografado ou gerado de forma aleatoria ▸ O token pode ser único e ficar armazenado na sessão, e adicionado em todos os forms e links através de um campo hidden ▸ Segundo fator de autorização/autenticação também pode ser usado para transações importantes
▸ Algumas vulnerabilidades são conhecidas (dbexploit, cve, irc, deep web, etc) e hackers criam ferramentas para explorar e rastrear sites vulneráveis. ▸ Impacto: Difícil prever, pois depende da vulnerabilidade exposta, pode ser mínimo como também pode ser catastrófico. ▸ Exemplo: demo
- COMO PREVENIR ▸ Automatização para identificar se as bibliotecas usadas estão atualizadas e/ou vulneráveis ▸ Pesquisar em foruns e até mesmo na página da lib para vulnerabilidades conhecidas ▸ Preocupação do time de desenvolvimento com a segurança
▸ Sites geralmente redirecionam o usuário para algum site externo utilizando parâmetros, estes se não forem validados permitem com que o hacker envie a vitima para um site de sua escolha ▸ Impacto: Redireciona a vitima para um phising ou malware.
webpage From: Internal Revenue Service Subject: Your Unclaimed Tax Refund Our records show you have an unclaimed federal tax refund. Please click here to initiate your claim. 1 Application redirects victim to attacker’s site Request sent to vulnerable site, including attacker’s destination site as parameter. Redirect sends victim to attacker site Custom Code Accounts Finance Administration Transactions Communication Knowledge Mgmt E-Commerce Bus. Functions 4 Evil site installs malware on victim, or phish’s for private information Victim clicks link containing unvalidated parameter Evil Site http://www.irs.gov/taxrefund/claim.jsp?year=2006& … &dest=www.evilsite.com
- COMO PREVENIR ▸ Evite usar redirect e forward ao máximo ▸ Se usar, evite receber parâmetros na URL ▸ Se você precisar de parâmetros, valide-os individualmente ▸ Garante que o usuário tem acesso ao destino solicitado