domingo, 12 de dezembro de 2010

Vulnerabilidades - Parte 3: Cross Site Request Forgery


Olá pessoal,

Agora vou falar de outra vulnerabiliade das Aplicações Web: Cross Site Request Forgery (CSRF)

O que é?

Transmite e executa comandos maliciosos entre sites sem que o usuário perceba.

Um ataque de CSRF consiste em inserir requisições em uma sessão já aberta pelo usuário. O processo básico é:

1. o usuário se autentica em uma aplicação web alvo

2. o usuário utiliza a mesma instância de browser para navegar em um site malévolo

3. o site malévolo manipula o browser para que seja feita uma requisição à aplicação alvo

4. como há uma sessão autenticada aberta para o usuário, a aplicação alvo executa a operação conforme a requisição recebida

Ou seja, o site malicioso consegue manipular a situação de forma a executar uma ação em nome do usuário.

Este ataque é extremamente difícil de ser detectado, dado que um identificador de sessão correto e válido será incluído na requisição recebida pela aplicação e a requisição partirá do mesmo browser e endereço IP das requisições legítimas. A aplicação web não como separar a requisição correspondente ao ataque das requisições legítimas.

Quais são as implicações?

– Roubo de informações do usuário, como cookies e sessões

– Possibilidade de executar transações entre sites os quais o usuário esteja autenticado

– Risco se agrava quando o tempo de expiração de sessão é muito longo

Pessoal por agora é isso,

abraços,

Vulnerabilidades - Parte 2: SQL Injection


Olá pessoal,

Agora vou falar de outra vulnerabiliade das Aplicações Web: SQL Injection

O que é?

A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entrada de dados de uma aplicação.

Funcionamento

Para exemplificar o funcionamento da injeção de SQL, consideremos uma instrução SQL comum:

SELECT id, nome, sobrenome FROM autores;

Essa instrução, que representa uma consulta na base de dados, retorna todas os registros das colunas "id", "nome" e "sobrenome" da tabela "autores". A partir desta mesma instrução, os registros a serem retornados podem ser restritos através da inclusão da cláusula WHERE, como é visto no exemplo abaixo:

SELECT id, nome, sobrenome FROM autores WHERE nome = 'josé' AND sobrenome = 'silva';

Com base nesta instrução, é fácil supor que "josé" e "silva" são strings, cujo conteúdo será preenchido pela entrada feita por algum usuário que estiver fazendo uso da aplicação.

Portanto, supondo que a aplicação não faça o tratamento apropriado do conteúdo inserido pelo usuário, o mesmo pode fazer o uso acidental do caractere de aspas simples ou maliciosamente atacar o sistema, veja o exemplo:

- nome = jo'; DROP TABLE autores ; --
- sobrenome = silva

Fazendo com que a aplicação gere o código:

SELECT
id, nome, sobrenome FROM autores WHERE nome = 'jo'; DROP TABLE autores ; --' AND sobrenome = 'silva';

Neste caso, a instrução será executada normalmente, pois não há um erro de sintaxe, no entanto, com a adição do caractere ponto-e-vírgula, a instrução foi dada como finalizada de modo prematuro dando espaço para uma nova instrução. Essa nova instrução, que poderia ser qualquer uma escolhida pelo atacante, pode ser a responsável por retornar dados confidenciais armazenados na base de dados ou de executar instruções que comprometam o sistema, como a remoção de dados e/ou tabelas, como pode ser visto no exemplo apresentado.

Outro exemplo: Logando sem permissão

Entradas do usuário

- nome = louco' OR 1=1 ; --
- sobrenome =

Supondo que este seja o comando que verifica se o usuário existe e se a senha está correta.

Fazendo com que a aplicação gere o código:

SELECT
id, nome, sobrenome FROM autores WHERE nome = 'louco' OR 1=1 ; --' AND sobrenome = '';

a partir de "--" o comando se torna inválido pois estes caracteres são usados para criar comentários, o que interpretador vai executar será o seguinte comando:

SELECT id, nome, sobrenome FROM autores WHERE nome = 'louco' OR 1=1;

como 1 é igual a 1, então o login será autenticado com sucesso.

Uma simples solução:

Aparentemente um método para prevenir esse problema seria a remoção de aspas simples dos campos de inserção da aplicação, ou simplesmente não executando a query nestas situações. Isso é verdade, mas existem várias dificuldades com esse método tanto quanto soluções
.


Então é isso pessoal, muito cuidado com as SQL Injection.

abraços,

sábado, 11 de dezembro de 2010

Vulnerabilidades - Parte 1: XSS


Olá pessoal,


Vou descrever aqui alguns dos principais tipos de vulnerabilidades das Aplicações Web.


Fique atento a essas vulnerabilidades para não deixar sua aplicação cheia de buracos e ser "Hackeado".


Vou começar com XSS: Cross Site Scripting.


O que é?


Script malicioso ecoado de volta, embutido no código HTML retornado de um site confiável.


Um ataque XSS é aquele que permite a injeção de scripts no site atacado, em geral por meio de algum campo de input do usuário. Note que um ataque XSS é um ataque ao usuário do site e não ao sistema servidor em si. Isso porque o script injetado nunca será executado no servidor, mas sim nos navegadores dos clientes que visitarem a página infectada.


Quais são as implicações?

- Sequestro de sessões

- Atacantes podem executar scripts no navegador da vítima
- Conteúdo da pagina comprometido
- Introduzir worms


A regra de ouro de qualquer sistema com input de usuários é que não devemos confiar jamais naquilo que o usuário digitou. Além de XSS, podemos ser alvos de muitos outros ataques, como SQL Injection, injeção de parâmetros e outros.

Embora pareça simples, a OWASP (Open Web Application Security Project) diz que nada menos que 9 em cada 10 sites estão vulneráveis a esse tipo de ataque. Anualmente, eles fazem um estudo das 10 falhas mais encontradas na Web, e no ano passado, XSS foi o campeão.

Como se proteger?

Todo input do usuário deve ser sanitizado (tornar sano) antes de qualquer coisa. Isso significa passar algum tipo de filtro que consiga remover tags potencialmente perigosas.

Se o seu site não deve ser customizado pelo usuário de nenhuma forma e o input dele deveria ser texto puro, basta remover toda e qualquer tag encontrada. Mas o caso mais complicado (aqui entra o "Samy is my hero" do MySpace) é quando você deseja permitir certas tags (negrito, imagens por exemplo) e qual abordagem seguir para filtrar as tags não desejadas.

Arrumando o problema

Precisamos sanitizar o input dos usuários e precisamos de algo pronto que faça isso. Há trocentos projetos por aí que fazem esse tipo de serviço. Em especial, o AntiSamy do pessoal da OWASP que tem versões em Java e .Net. A Microsoft tem uma API anti-XSS para .Net. Há ainda o HtmlPurifier para PHP, o sanitize do Ruby on Rails e muitos outros em outras plataformas.

O AntiSamy é bastante customizável, permitindo que definamos níveis diferentes de purificação através de regras em um XML. Ele ainda é capaz de mostrar mensagens de erros amigáveis para os usuários.

Conclusão

XSS é um problema real e muitas aplicações estão vulneráveis. Samy atacou o MySpace em 2005 e conseguiu 1 milhão de amigos. A busca do Google tinha as falhas do UTF-7 em 2005. Apoiadores do Firefox sequestraram as maiores comunidades do Orkut em 2005 e mudaram os logos para o do Firefox. Eleitores de Hillary Clinton redirecionavam visitantes do site de Barack Obama para o site de sua adversária nas prévias da eleição americana em abril desse ano. E milhares de outros casos públicos.

Vamos proteger as nossas aplicações!

abraços,


Estatística Interessante

Olá pessoal,

Uma estatística interessante publicada pela IBM é sobre os gastos financeiros com TI.

Segurança e Gastos estão desequilibrados. Investe-se mais em Hardware e em Telecomunicações do que em Segurança da Aplicação. Porém a maioria dos ataques são destinados a camada de aplicação. Veja o gráfico abaixo:



abraços,

Arquitetura Básica de Segurança


Olá pessoal,

Abaixo um exemplo de arquitetura básica de segurança (entre o usuário e a aplicação):




1. Firewall (No Uuário) - Em português "muro corta-fogo", um firewall examina as informações que chegam da Internet e que são enviadas a ela. Ele identifica e ignora informações provenientes de um local perigoso ou que pareçam suspeitas. Uma configuração correta do firewall elimina as vulnerabilidades de sua máquina. Exemplo de firewall gratuito: Comodo.

2. Antivirus (No Usuário) - Os antivirus são programas de computador concebidos para previnir, detectar e eliminar vírus de computador. Exemplo de antivirus gratuito: AVG.

3. Criptografia SSL - (Secure Sockets Layer) é um protocolo criptográfico que provê comunicação segura na Internet para serviços como e-mail (SMTP), navegação por páginas (HTTP) e outros tipos de transferência de dados.

O protocolo SSL provê a privacidade e a integridade de dados entre duas aplicações que estejam se comunicando pela Internet, através da autenticação das partes envolvidas e da criptografia dos dados transmitidos entre as partes. Esse protocolo ajuda a prevenir que intermediários entre as duas pontas da comunicação tenham acesso indevido ou falsifiquem os dados sendo transmitidos.

4. Firewall, IDS, IPS
IDS: Sistema de detecção de intrusos ( em inglês: Intrusion detection system) refere-se a meios técnicos de descobrir em uma rede quando esta está tendo acessos não autorizados que podem indicar a acção de um cracker ou até mesmo usuários mal intencionados.

IPS: Um sistema de prevenção de intruso (em inglês: Intrusion Prevention System) é um dispositivo de segurança de rede que monitora o tráfego e/ou atividades dos sistema em busca de comportamentos maliciosos ou não desejáveis, em tempo real, para bloquear ou prevenir essas atividades. Um IPS baseado em rede, por exemplo, vai operar em linha para monitorar todo o tráfego em busca de códigos maliciosos ou ataques. Quando um ataque é detectado, é possível bloquear os pacotes danosos enquanto o tráfego normal continua seu caminho.

Esses dois sistemas juntamente com o Firewall trabalham para proteger uma rede de computadores.

5. Web Servers - Servidor responsável por aceitar pedidos HTTP de clientes, geralmente os navegadores, e servi-los com respostas HTTP, incluindo opcionalmente dados, que geralmente são páginas web, tais como documentos HTML com objetos embutidos (imagens, etc.), ou seja, é o servidor que recebe a solicitação de páginas Web dos usuários e devolve a resposta.

6. Application Servers - Um servidor de aplicação ou em inglês, application server, é um servidor que disponibiliza um ambiente para a instalação e execução de certas aplicações. Os servidores de aplicação também são conhecidos como software de middleware.

O objetivo do servidor de aplicações é disponibilizar uma plataforma que abstraia do desenvolvedor de software algumas das complexidades de um sistema computacional. No desenvolvimento de aplicações comerciais, por exemplo, o foco dos desenvolvedores deve ser a resolução de problemas relacionados ao negócio da empresa, e não de questões de infraestrutura da aplicação. O servidor de aplicações responde a algumas questões comuns à todas as aplicações, como segurança, garantia de disponibilidade, balanceamento de carga e tratamento de exceções.

7. Databases - Em português, banco de dados, é o local onde são armazenadas as informações da aplicação. Quando você se cadastra em um site os seus dados como: Nome, Idade, Endereço e etc. são armazenados em um banco de dados.

8. Backend Server - É um banco de dados que é acessado por usuários externos indiretamente através de um aplicativo ao invés de programação de aplicativos armazenados no próprio banco de dados ou por baixo nível de manipulação dos dados (por exemplo através de SQL comandos).

abraços,

sexta-feira, 10 de dezembro de 2010

Stuxnet: o vírus mais sofisticado que já existiu

O ataque que forçou a Microsoft a lançar uma correção de emergência no início de agosto pode fazer parte de um plano de ciberguerra Recentemente o mundo digital sofreu um dos ataques mais sofisticados já realizados. O responsável foi o vírus denominado de Stuxnet, uma praga que infectou instalações nucleares do Irã e da Índia por meio de brechas desconhecidas no Windows.O vírus foi detectado em junho deste ano, mas só ganhou notoriedade por forçar a Microsoft a lançar uma correção de emergência no início de agosto. Porém, mesmo há meses sendo pesquisado, o vírus ainda tem origem desconhecida. Os principais alvos são sistemas de controle de automação e monitoramento industrial, conhecidos pela sigla SCADA."Um ataque como esse pode infectar milhares de máquinas no mundo todo, especialmente em países que trabalham com a tecnologia SCADA. O Stuxnet foi criado para sabotar ou restringir o funcionamento dessas infraestruturas", explica Dimitry Bestuzhev, Analista Regional de Malware da Kaspersky Lab para a América Latina.A empresa de soluções de segurança para informática, Kaspersky Lab, iniciou uma cooperação com a Microsoft para combater uma série de vulnerabilidades do Windows. Desde julho deste ano, os especialistas em segurança da informação têm acompanhado a evolução deste malware e detectaram que, além de processar arquivos de extensão LNK e PIF (arquivos de acesso direto), o vírus também usa outras quatro vulnerabilidades no Windows."O Stuxnet é um excelente exemplo de um moderno ataque ao alvo. As pessoas responsáveis por este ataque têm habilidades altamente técnicas e conhecimentos precisos dos métodos de infecção", explica.Dados da Kaspersky indicam que a Índia é o país com mais atividade do Stuxnet, seguido da Indonésia e do Irã. Já dados da Symantec, um pouco mais antigos, apontam o Irã como sendo o país com o maior número de computadores infectados.CyberguerraEm julho do ano passado, uma reportagem da agência Reuters informou que Israel estaria investindo em ciberguerra. Na época, um especialista do exército norte-americano, Scott Borg, comentou que um vírus poderia ser criado para "travar ou danificar os controles de usinas nucleares" e que "um pen drive infectado seria suficiente". Coincidência ou não, este foi o mesmo esquema de ataque usado pelo Stuxnet.Segundo especialistas, não há dúvida de que houve envolvimento de algum grupo poderoso e com grandes interesses em sua criação. Eles ainda garantem que o Stuxnet só infecta computadores que possuem uma placa de rede específica. Além disso, ele tenta impedir sua propagação para mais de três computadores e por mais de três semanas. Especulações indicam que os criadores do Stuxnet não queriam que ele tivesse se disseminado tanto."O objetivo do Stuxnet não era obter informações, e sim a sabotagem de determinados elementos. O Stuxnet é prova clara de que uma nova era começou: a era da ciberguerra", diz o analista.Eugene Kaspersky, co-fundador e CEO da Kaspersky Lab, também descreve o Stuxnet como algo criado para sabotar fábricas e prejudicar sistemas industriais. "É aí que está a diferença e o marco para um novo mundo. A década de 90 foi marcada pelos vândalos cibernéticos e os anos 2000 pelos cibercriminosos. Agora estamos entrando na década do terrorismo cibernético", afirma.Segundo Dimytri, a única forma de se proteger contra um vírus dessa magnitude é atualizar sempre os sistemas operacionais. A Microsoft já publicou as correções necessárias para corrigir as vulnerabilidades utilizadas por Stuxnet.
Notícia retirada do site olhar digital - Terça-feira, 05 de outubro de 2010 às 23h20

Causas de Vulnerabilidade

Ola pessoal,

Vamos continuar falando sobre Segurança em Aplicaçoes WEB:

Vou citar quatro problemas durante o desenvolvimento das Aplicações Web que as tornam sem segurança.

1. Imaturidade em Segurança
Isso ocorre quando os desenvolvedores não têm conhecimento mínimo sobre segurança.

2. Percepção de Simplicidade
Isso aqui é muito comum entre nós programadores. Quando estamos programando nem sempre analisamos qual a melhor forma de resolvermos um problema sem criarmos outros problemas.

3. Restrições de Recursos e Tempo
Esse problema está mais relacionado com os gerentes de projetos. Geralmente devido a necessidade do cliente, que precisa de uma solução urgente, surgem aplicações mal desenvolvidas. Aplicações que não passaram por uma equipe de teste, não tiveram uma atenção especial na parte de segurnça, ou seja, algo feito as pressas.
Outra situação que complica é quando há pouco dinheiro investido, o que faz com que os programadores não sejam os mais experientes e treinados possíveis, e nem com quantidade suficiente, desta forma a equipe fica incompleta e mal preparada.

4. Mau uso de Tecnologias
Geralmente quando os programadores não conhecem, em sua totalidade, a ferramenta em que estão desenvolvendo, de forma que os mesmos não conhecem suas restrições e vulnerabilidades.

Então é isso, vamos ficar mais atento nesses quatro pontos que são essenciais para desenvolvermos com segurança. Isso também vale para as aplicações "desktop".

abraços,

Especificações de Segurança para Serviços Web

Com o objetivo de tornar seguro o uso dos Serviços Web e assim garantir a sua ampla adoção, muitas propostas de segurança estão sendo submetidas a órgãos como: World Wide Web Consortium (W3C)6 , Organization for the Advancement of Structured Information Standards (OASIS)7 e Web Services Interoperability Organization (WS-I)8. As propostas visam cobrir diversas áreas de segurança e, em conjunto com as especificações de segurança para o padrão XML.

XML Signature:
O uso de assinaturas de digitais é uma forma para garantir as propriedades de integridade e autenticidade de informações digitais. A especificação XML Signature (XMLDSign) [Bartel et al. 2002], proposta conjunta entre W3C e IETF, define regras para gerar e validar assinaturas digitais expressas em XML.

XML Encryption:
A XML Encryption (XMLEnc) [Imamura et al. 2002] visa prover segurança fim-a-fim para aplicações que necessitem realizar troca de dados de forma segura. Diferentemente dos protocolos TLS/SSL [Dierks e Allen 1999, Freier et al. 1996], que só garantem a confidencialidade dos dados durante a sessão estabelecida entre duas partes, a XMLEnc garante confidencialidade persistente, garantindo assim a confidencialidade dos dados mesmo depois do término da sessão.
XACML
A autorização é uma propriedade básica de segurança que determina se um principal pode ou não executar alguma ação sobre algum recurso. Geralmente, cada sistema utiliza uma linguagem própria para definição das políticas, tornando assim um fator limitante para a concepção de sistemas distribuídos e abertos. Visando garantir a interoperabilidade entre os diversos sistemas, o órgão OASIS lançou a eXtensible Access Control Markup Language (XACML) [OASIS 2005a], um sistema de políticas de propósito geral, baseado em XML.
SAML
A Security Assertion Markup Language (SAML) [OASIS 2005c] consiste de um conjunto de especificações e esquemas XML, que juntos definem uma forma padrão para criar, trocar e interpretar asserções de segurança entre entidades de uma aplicação distribuída. No caso, são definidos meios para expressar, em XML, informações sobre autenticação, autorização e atributos de um sujeitos, porém as especificações da SAML não definem uma nova tecnologia ou forma para autenticação, mas sim uma tecnologia que visa garantir a interoperabilidade entre os diferentes sistemas de autenticação.

XKMS
Desenvolvida inicialmente pela VeriSign, em conjunto com a Microsoft e WebMethods, o padrão XML Key Management Specification (XKMS) [Hallam-Baker e Mysore 2005] é uma especificação aberta que define interfaces, baseadas em Serviços Web, visando retirar dos desenvolvedores de aplicações a complexidade em se trabalhar com Infra-estrutura de Chave Pública (ICP), podendo esta ser X.509, SPKI ou mesmo PGP [Zimmerman 1994]. A especificação é dividida em duas sub-especificações, XML Key Information Service Specification (XKISS) e XML Key Registration Service Specification (XKRSS), que juntas definem meios para gerar pares de chaves, armazenar e localizar informações sobre chaves públicas, bem como para validar assinaturas.
WS-Security
Proposta apresentada inicialmente pela IBM e Microsoft, a WS-Security [OASIS 2004c] é hoje uma especificação padronizada pela OASIS que tem como objetivo a proposição de extensões ao SOAP para permitir a construção de Serviços Web seguros. A especificação visa garantir a segurança fim-a-fim no nível de mensagem e não somente no nível de transporte, tendo três principais pontos:
• credenciais de segurança: incluir nas mensagens SOAP credenciais de segurança com informações de autenticação;
• integridade da mensagem: incluir nas mensagens SOAP informações relacionadas a assinaturas digitais de toda ou de parte da mensagem;
• confidencialidade da mensagem: mensagens SOAP podem ser cifradas, totalmente ou somente partes dela.

Segurança da Informação

A segurança da informação é um dos mais vastos, complexos e recorrentes temas dentro da tecnologia da informação por envolver diversos componentes e preocupações diferentes durante sua implantação e produção em um ambiente computacional (Moreira, 2001). Nessas fases é desejável a ocorrência da menor quantidade possível de vulnerabilidades e imprescindível o gerenciamento constante de como e por quem está sendo feito o acesso aos recursos disponibilizados aos usuários que estão cobertos pelo sistema de segurança (Nakamura, 2001).
Outro importante fator na aplicação da segurança da informação é o prévio conhecimento do que está sendo protegido e quanto custa protegê-lo. Se os gastos com segurança forem maiores do que uma possível perda dos recursos protegidos, talvez não seja uma boa idéia a adoção de medidas de segurança tão rígidas ou custosas (Wadlow, 2000). Basicamente, a segurança da informação está fundamentada em sete conceitos que trabalham em conjunto para promover segurança a um sistema (O’Neill, 2003):
• Confidencialidade: garantia, através de criptografia, de que as informações armazenadas ou transmitidas não poderão ser vistas ou interpretadas por qualquer outra entidade diferente do usuário original e do destinatário. SILVA e CUNHA, 2005 Holos, Ano 21, dezembro 2005 17
• Autenticação: validação das credenciais de um cliente junto a uma autoridade certificadora.
• Autorização: verificação pelas autoridades certificadoras de que um cliente tem acesso ou não a um recurso que está tentando utilizar após já ter sido autenticado.
• Integridade: certificação de que as informações transmitidas não são alteradas acidental ou maliciosamente em nenhum ponto de seu trajeto entre um emissor e um receptor.
• Não-repúdio: garantia, através de criptografia, de que um emissor não pode negar que enviou uma mensagem que foi recebida por um receptor.
• Disponibilidade: garantia de que um serviço estará disponível aos usuários autorizados no momento em que necessitarem dele.
Reginaldo F. Silva 2005

Samy is my hero

Ola pessoal,

Pra começar a falar de Segurança em Aplicações Web vou citar um ataque ao site de relacionamento MySpace.


Um pouco de história:

No ano de 2005 Samy Kankar não estava satisfeito com sua pequena quantidade de amigos no MySpace, escreveu um worm (depois batizado de JS.Spacehero) para turbinar sua lista de amigos.


O script rodava quando alguém visitava o perfil de Samy. Então o worm adicionava o visitante à sua lista de amigos e colocava no perfil do infectado a frase “samy is my hero“. Pra melhorar, o script se propagava para o perfil do usuário infectado, possibilitando que esse infectasse mais pessoas.


Em menos de 20 horas, Samy tinha um milhão de amigos e o MySpace foi tirado do ar.


Isso lhe rendeu, em 2007, uma condenação nos tribunais com direito à multa, serviço comunitário e afastamento de computadores.


Bem! aí você se pergunta: se este site estava vulnerável então quantos outros por aí também estão?


Mais adiante postarei o porquê dessa invasão.


Isso foi apenas um exemplo de como as aplicações Web estão vulneraveis. Falhas de segurança podem ser fatais. Imaginem se um bankline qualquer esteja vulnerável, isso pode gerar prejuízos em grande escala para a empresa e clientes.


Vamos, aqui, publicar algumas formas de ataque e sua prevenção.


abraços,