Segurança em Aplicações de T.I. na WEB
Sabemos que no mundo real não existem sistemas totalmente seguros e o mundo virtual segue o mesmo preceito. Por maior que seja a proteção adotada, estaremos sempre sujeitos a invasões, roubos e ataques. Então é importante que conheçamos o perigo e saibamos como nos proteger. Por isso fique ligado nos artigos que serão postados e adquira mais conhecimento sobre esse importante assunto.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8YjR2GuFqeDkQe7jGJ3SRgK70DpBpG6cJiXC_IRZJ9nBrzsuLra0UGXzXk21S0gmrCtcEEM48K5-cMpoHqC1xRdthG1r07UXCjN1XzZhKATIaOKhvTYIdjVQwMABlKqe-FKH-jymNB4zL/s748/Laptop-Security-WEB-MAILER1.jpg)
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
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:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx_Hg4JOyUmf2nkgLbPXbTCLApPpUagpdFvMplUt-mKXVs2-oeIFKctjBe0OSjdqlTx2jAk6zkmxoXlzGlVgvfOQwVbpAmFQcwGQC4Tk5HpaBQYVgvGIF4-JmSjMGfq0ikQuQrmGhuiy7y/s400/Estatistica.png)
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
Causas de Vulnerabilidade
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
XML Signature:
XML Encryption:
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.
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.
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
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.
Samy is my hero
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,