sexta-feira, 27 de agosto de 2010

Esclarecimento sobre o ISSA Day


Recebemos mensagens, tweets e telefonemas de algumas pessoas em dúvida sobre o ISSA Day no dia 31 de agosto, lá no Genuíno. Para deixar claro, é isso mesmo, a entrada é de graça e ao final será liberado um happy hour para os presentes com direito a chopp e canapés custeados pela gente, além do sorteio de uma vaga para o curso "Web Hacking Techniques" promovido pelo Conviso Security Labs.

Faça a sua inscrição e compareça, o o evento será uma oportunidade de conhecer a experiência de várias pessoas na Defcon e Black Hat, networking e comida grátis no final. Quando é que você tem uma chance como essa em plena 3a feira? :-)

quinta-feira, 26 de agosto de 2010

ISSA Day Agosto 2010

Estamos patrocinando o ISSA Day que irá acontecer no dia 31/08 no Genuíno, em São Paulo, SP. O evento é gratuito e aberto a qualquer interessado, a chamada está no web site da ISSA Brasil e teremos a seguinte agenda:

  • 19h00 – Credenciamento

  • 19h30 – Palestra da ISSA - Por que ser ISSA?

  • 20h00 – Abertura falando sobre a Conviso.

  • 20h15 – O processo de segurança em desenvolvimento, que não é ISO 15.408

  • 21h00 – Palestra sobre a Black Hat e Defcon

  • 21h45 – Sorteio de Treinamento Conviso e Encerramento – Com HH

terça-feira, 24 de agosto de 2010

Responsabilidade Compartilhada

Este artigo está também disponível em formato pdf para leitura on-line ou download.

Introdução


Quando uma empresa tem uma ou mais vulnerabilidades do seu Ambiente Informatizado exploradas por um atacante, as conseqüências podem ir da exposição negativa da imagem perante a sociedade até prejuízos financeiros decorrentes da parada de um processo, como no caso de um comércio eletrônico.

Mas quando este incidente também afeta os clientes das empresas, o que pode acontecer e como este risco pode ser reduzido a um nível aceitável? Ocorrências desta natureza tem aparecido com freqüência e retirando os casos onde as pessoas são vitimadas por quadrilhas especializadas em phishing [1], cenários agressivos aparecem no Brasil:

  • Em agosto de 2010 mais de cinco milhões de web sites hospedados em um provedor estavam sendo utilizados para propagação de malware [2], e no Brasil os web sites das empresas Vivo e Oi [3] sofreram ataques similares.

  • Dados pessoais de 12 milhões de pessoas que participaram do Exame Nacional do Ensino Médio (ENEM) vazaram de uma base de dados restrita, expondo-as a serem vítimas de crimes virtuais, como furto de identidade. [4]


O que está acontecendo


Como resultado, algumas pessoas tem utilizado instrumentos presentes no Código Civil e no Código do Consumidor para buscar reparações em diferentes esferas. Em alguns casos, a responsabilidade é compartilhada não só pela empresa que hospedava o componente onde o problema foi gerado, mas ainda outras envolvidas no processo de alguma forma [5]. A elaboração de leis e regulamentações que definam regras para este cenário como forma de garantir a aplicação de critérios legais para os negócios on line, vem sendo conduzida em diversas iniciativas.

Em especial sobre falhas em aplicações podem ser interpretadas no âmbito dos processos contra empresas envolvidas, é interessante destacar duas notícias que mostram o que podemos esperar de um futuro próximo:

  • O Comitê Gestor da ICP-Brasil busca a aplicação de certificados digitais nos códigos dos aplicativos de interatividade desenvolvidos por diversas empresas para a TV Digital como forma de garantir a autoria e a responsabilidade civil [6].

  • Uma empresas de rastreamento e bloqueio de veículos por satélite foi condenada a restituir um de seus clientes, uma vez que o sistema utilizado para suportar o processo falhou e permitiu o furto de um caminhão. [7]


Uma proposta de mudança


Uma vez que as falhas em aplicações representam hoje entre 75% a 92% dos ataques realizados através da Internet [8], e as empresas buscam posicionar seus recursos cada vez mais através de interfaces web, o que fazer para ter aplicações mais seguras e reduzir o risco de impactos diretos e colaterais da exploração de vulnerabilidades?

Onde as fábricas de software falham


As fábricas de software deveriam implementar controles que garantissem a remoção de vulnerabilidades óbvias de seus produtos, e não é isso que tem acontecido. Desde a sua primeira edição em 2004, o OWASP Top 10 [9] apresenta falhas persistentes em aplicações web e disponibiliza projetos para que estas sejam corrigidas ainda no ciclo de desenvolvimento, mas elas ainda ocorrem freqüentemente.

As causas estão todas na inexistência de um ciclo de desenvolvimento seguro, onde não existem controles que verificam o nível de segurança dos releases desenvolvidos, como ainda é comum a ausência de processos que garantam a capacitação contínua dos desenvolvedores como forma de aumentar gradativamente a qualidade da segurança embutida no produto.

Mas antes de se apontar o dedo para as fábricas de software, existe um ponto que deve ser considerado com o mesmo peso para uma avaliação: o que as empresas que compram software tem feito para mudar este cenário?

Onde as empresas falham


Segurança e performance são competências antagônicas que devem ser equilibradas para garantir o atendimento às necessidades do cliente dentro de um nível de segurança adequado. Para garantir o resultado aceitável desta equação, é necessário investir em um esforço similar ao empregado para outras atividades de suporte ao produto final comuns no desenvolvimento de software, tais como design de interface e conectores com produtos de mercado. O problema é que esta necessidade não é atendida pelas empresas.

O Ponemon Institute publicou a pesquisa “State of Web Application Security” citada anteriormente neste artigo, que foi realizada com 638 empresas de grande porte nos Estados Unidos e mostrou uma realidade que atesta a afirmação anterior:

  • Quase 70% dos entrevistados não consideram que o orçamento para segurança das aplicações web é suficiente.

  • Das vulnerabilidades consideradas urgentes nas empresas, 34% não são consertadas e 55% dos entrevistados acreditam que os desenvolvedores são ocupados demais com outras atividades para adequar as falhas de segurança.


A Responsabilidade Compartilhada


Seria inocente esperar uma mudança imediata dos dois lados mediante esta situação, uma vez que são necessários recursos extras aos já previstos e o atendimento de um nível de maturidade que só o tempo permite chegar. Porém existe pelo menos uma ação que pode ser tomada para mudar este cenário: assumir a responsabilidade compartilhada.

A primeira ação a ser considerada, é estabelecer contratos que deixem claro quais são os papéis de cada um. O OWASP Legal Project [10] apresenta o “OWASP Secure Software Development Contract Annex” como um modelo para ser utilizado nesta ação.

O objetivo do documento é servir de base para garantir o atendimento de um nível de proteção adequado para o software através da definição de papéis no processo de desenvolvimento, estabelecimento das áreas onde os controles de segurança devem ser considerados e ainda formalizar o uso de testes e recursos técnicos específicos.

Mais do que uma ação isolada e ineficaz para injetar a responsabilidade pela segurança das aplicações para um dos dois lados, é fundamental entender que a mudança será atingida se algumas premissas forem aceitas e consideradas como base para o processo.

Níveis de proteção racionais


O contrato deve prever que o nível de proteção do software irá variar de acordo com o seu nível de criticidade. Aplicações diretamente relacionadas ao negócio da empresa ou que estejam sujeitas a uma regulamentação, potencialmente serão mais críticas que as demais. Aplicar o mesmo nível de proteção em todos os produtos não é uma ação racional e muito provavelmente vai fazer a fábrica de software alocar um esforço que poderia ser evitado, e a empresa irá pagar esta conta.

Com isso, o programa será em pouco tempo criticado com razão, considerado um custo desnecessário e eliminado. É fundamental ter critérios adequados de onde, como e com qual nível de rigor os controles deverão ser aplicados.

Compartilhamento de atividades


Para que as responsabilidades sejam compartilhadas, é fundamental que o mesmo ocorra com as atividades relacionadas. A fábrica de software deverá ter um processo de desenvolvimento seguro como parte do processo, porém a empresa que adquire a aplicação tem como obrigações mínimas garantir que o processo de desenvolvimento seguro não será atropelado por motivos de negócio que não considerem todo o trabalho de planejamento estabelecido. Se for realmente necessário, a área solicitante deve formalmente - ou mesmo legalmente? - assumir a responsabilidade por isso.

Além disso, os componentes de arquitetura utilizados devem passar pelos mesmos critérios de segurança, uma vez que falhas e vulnerabilidades nestes componentes podem comprometer o nível de segurança do software.

Evolução contínua


O processo deve ser pensado como algo que irá aumentar o nível de rigor de forma crescente e contínua. Os termos apresentados no exemplo do documento publicado pelo OWASP devem ser considerados como uma base para ser adaptada pelos advogados de cada empresa, o que irá variar muito não só pelas características organizacionais, mas ainda de acordo com o mercado de atuação e regras setoriais específicas (ex. PCI DSS).

Uma proposta racional é estabelecer métricas de acompanhamento e reuniões de status entre às partes, onde a meta de atingir um nível de excelência no desenvolvimento seguro poderá ser atingida aos poucos. Todas as metodologias de desenvolvimento seguro apresentam propostas para este tipo de controle, é buscar o que for mais adequado para a realidade de cada empresa e adaptar.

Conclusão


Este artigo é uma provocação com uma sugestão e deve ser entendido desta forma. Certamente, a primeira pergunta que surge na leitura é: quem paga esta conta?

A primeira resposta acaba sendo a comum a produtos com melhorias: o cliente final. Porém, vale pensar em todo este processo como um modelo de negócios, algo que irá potencializar os produtos em um mercado onde estabelecer e garantir um nível de segurança adequado é algo desejado por todos os clientes que usam a Internet para suas transações.

No começo da Internet os provedores eram pagos e quem conseguia um preço menor com nível de qualidade similar (ou mesmo inferior ...) a seus concorrentes abocanhava boa parte do mercado. Um dia uma grande empresa decidiu prestar o serviço de graça para a sociedade, e o modelo ruiu. Com a evolução dos processos legais e a potencial perda de clientes para concorrentes que apresentam um nível de segurança superior - ainda que esta impressão exista por nunca terem sofrido uma perda - quem ficar para trás vai acabar pagando uma conta bem mais cara.

Sobre o Autor


Eduardo Vianna de Camargo Neves trabalha com Segurança da Informação desde 1997, tendo atuado como auditor, consultor e Security Officer. É sócio-fundador e Gerente de Operações da Conviso IT Security, responsável pela administração e estratégia da empresa. Serve ainda como membro do Capítulo Brasil do OWASP, do OWASP Global Education Committee na América Latina e voluntário no (ISC)2.

sexta-feira, 20 de agosto de 2010

Novo vídeo no Canal Conviso IT Security

Quando um servidor de aplicação aceita o método PUT, é possível que um atacante envie arquivos com conteúdo e finalidades diversas, inclusive scripts que possibilitam a execução de códigos na máquina alvo. Este vídeo mostra como o ataque ocorre, servindo como ferramenta de instrução para as equipes responsáveis pela administração de segurança.

terça-feira, 17 de agosto de 2010

HTML5 Security ou Insecurity?

Este artigo também disponível em versão pdf no Scribd.

Novos recursos exigem novos cuidados


Alguns ainda o mencionam com descaso, outros com euforia, mas o fato é: HTML5 está chegando, e com ele uma série de novos cuidados que deverão ser tomados no que se refere a segurança de aplicações web. Como uma série de novos recursos serão oferecidos, a semelhança com o atual HTML ficará apenas no conceito de tags. O World Wide Web Consortium (W3C) fornece um guia que mostra as diferenças entre o HTML4 e o HTML5 [1] que não são poucas.

O HTML5 implementa uma série de recursos que aumentam a importância e necessidade de cuidados com a proteção dos componentes, e todos que se aventurarem a desenvolver aplicações baseadas neste cenário deverão se atentar a uma forma, no mínimo, diferente de ver as coisas.

Client-Side Storage


O HTML5 oferece uma API para armazenamento local que possibilita a aplicação gravar no computador do usuário espantosos 5MB de dados.  Se antes era necessário utilizar um cookie para persistir uma sessão e este não podia ocupar mais do que 4kb para o armazenamento de strings, agora com os recursos de localStorage e sessionStorage, além da possibilidade de armazenamento de um volume bem maior, é possível ir muito além dos strings e armazenar, potencialmente, qualquer tipo de objeto.

Exemplo


Para exemplificar o funcionamento, veja abaixo uma ToDo List que armazena as informações em local storage:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ToDo List in HTML5</title>
</head>
<body>
<header>
<h1> My Simple To-Do List </h1>
</header>
<section>
<ul id="edit" contenteditable="true">
<li></li>
</ul>
</section>
<em>Add some items, and refresh the page. It'll remember what you typed.</em>
<script>
$(function() {
var edit = document.getElementById('edit');
$(edit).blur(function() {
localStorage.setItem('todoData', this.innerHTML);
});

// when the page loads
if ( localStorage.getItem('todoData') ) {
edit.innerHTML = localStorage.getItem('todoData');
}

// to reset
// localStorage.clear();

});

</script>
</body>
</html>

Cuidados


Os cuidados com este recursos são referentes ao armazenamento de dados sensíveis em client-side, pois mesmo com o volume de armazenamento em cookie sendo reduzido já é comum encontrar aplicações que armazenam dados sensíveis desta forma. Com este novo recurso a tendência é que os desenvolvedores o utilizem em excesso e consequentemente armazenem dados que não deveriam estar disponíveis em client-side.
Outro fato interessante é que agora iremos começar a nos deparar com ataques de SQL Injection [2] que buscam interagir com dados armazenados no storage local do computador do usuário. Isso mesmo, estamos falando de SQL Injection Client-Side, diferente do tradicional no qual você interage com o banco de dados que está em server-side. E também pode ser explorado o XSS (Cross Site Scripting) Armazenado [3], onde o usuário mal intencionado consegue armazenar um código javascript que é executado quando a aplicação carrega os dados armazenados na local storage.

Same-Origin Policy


O HTML5 possibilita definir se a aplicação irá ou não se comunicar com aplicações em outros domínios. Por padrão, os web browsers forçam o controle de origem de requisições HTTP, então uma aplicação no domínio conviso.com.br não pode fazer requisições em javascript no domínio conviso.com. Se precisávamos usar hacks em AJAX, CSS e Flash para fazer requisições entre domínios diferentes, com o HTML5 podemos definir nas tags com quais domínios a aplicação tem uma relação de confiança, um recurso similar ao que pode ser implementado com Flash usando o arquivo crossdomain.xml.

Exemplo


Um exemplo de definição insegura de Same-Origin Policy é:
<?php
header('Access-Control-Allow-Origin: *');
?>

Esta definição permite que a aplicação interaja com qualquer domínio, uma vez que ocorre a quebra do controle de origem do browser.

Cuidados


Neste aspecto, os desenvolvedores devem tomar cuidado para não quebrar um recurso nativo: o controle de origem das requisições. Se for necessário a comunicação entre aplicações em domínios distintos é fundamental especificar claramente qual é este domínio, recurso que pode ser compartilhado, e não podemos simplesmente definir a comunicação entre domínios distintos para qualquer domínio.

Este recurso já está sendo usado para explorar falhas e também como base para ferramentas que possibilitam o proxy através de XSS. O pesquisador Matt, do m-austin.com, já demonstrou uma falha de XSS que pode ser explorada no Facebook devido a quebra de Same-Origin Policy [4] e o pessoal do Andlabs apresentou o que eles chamam de nova abordagem para shell-reverso usando também os recursos da Same-Origin Policy [5].

Cross-Document Messaging


É um recurso bem semelhante ao Same-Origin Policy , onde existe a possibilidade de trocar mensagens entre uma aplicação e outra em domínios distintos.

Exemplo


Aqui vamos exemplificar uma mensagem sendo enviada de um domínio para o outro.
Código de envio de mensagem do domínio a:


var o = document.getElementsByTagName('iframe')[0];
o.contentWindow.postMessage('Hello world', 'http://b.example.org/');

Código rodando no domínio b para receber a mensagem do domínio a:
window.addEventListener('message', receiver, false);
function receiver(e) {
if (e.origin == 'http://example.com') {
if (e.data == 'Hello world') {
e.source.postMessage('Hello', e.origin);
} else {
alert(e.data);
}
}
}

Cuidados


Os cuidados aqui se referem a garantia de origem. É necessário garantir que as mensagens enviadas não estão sendo forjadas por um servidor malicioso e consequentemente ele possa enviar conteúdo malicioso a aplicação.
Outros pontos de destaque

Além destes recursos podemos ainda mencionar o grande aumento na superfície de ataques, afinal o HTML5 é muito mais poderoso e oferece recursos para desenvolver aplicações mais complexas. Mas o HTML5 não traz só recursos que devemos tomar cuidado, ele também traz recursos de segurança interessantes.

Um destes é o sandbox que implementa restrições de onde o processo é executado, ou fazendo uma analogia, é literalmente uma caixa de areia onde determinado processo só roda no seu cercado e não é interferido ou interfere em processos que rodam em paralelo. No HTML5 ele é interessante para controlar a injeção de iFrames maliciosas, este problema é a base para ataques bem elaborados como o já famoso Clickjacking. [6]

Referências



  1. “HTML5 differences from HTML4: W3C Working Draft 24 June 2010”, em http://www.w3.org/TR/2010/WD-html5-diff-20100624/.

  2. Um vídeo demonstrativo de ataques de injeção está disponível no canal da Conviso IT Security no YouTube em http://www.youtube.com/watch?v=Bi5eJ1WxJQk.

  3. Um vídeo demonstrativo de ataques de XSS está disponível no canal da Conviso IT Security no YouTube em http://www.youtube.com/user/ConvisoITSecurity#p/u/1/_YgZKDJlhjo

  4. “Hacking Facebook with HTML5” em http://m-austin.com/blog/?p=19.

  5. “Shell of the Future – Reverse Web Shell Handler for XSS Exploitation” em http://blog.andlabs.org/2010/07/shell-of-future-reverse-web-shell.html.


Sobre o Autor


Wagner Elias atua com Segurança da Informação desde 2004, tendo trabalhado como consultor, líder de equipes e gerente de consultoria. Tem ampla experiência na condução de projetos em IT Security com  soluções implementadas em empresas dos mais diversos segmentos. Possui as certificações CBCP, SANS GIAC GHTQ, ITIL e CobiT Foundations além de certificações de produtos de SIEM e WAF. É fundador e líder do capítulo brasileiro da OWASP, ocupou o cargo de diretor de conteúdo na gestão 2006-2008 e de eventos da gestão 2008-2010 do capítulo brasileiro da ISSA. É co-fundador e sócio da Conviso IT Security, onde atua como Gerente de Pesquisa e Desenvolvimento, responsável pela gestão de pesquisa e desenvolvimento de projetos de consultoria.