Dicas de segurança para os programadores web de plantão

Depois que escrevi o artigo “Como a Internet pode acabar com a sua paz!” recebi vários e-mails de leitores programadores, webmaster e até de webdesigners (ao contrário do que muitos pensam, eles também se interessam por programação!) querendo saber sobre as formas de ataques a sites mais conhecidos, e como se prevenir. Longe de querer postar um compêndio sobre técnicas de invasão, quero apenas ajudar meus amigos a tornar sua aplicação ou infra-estrutura em algo mais seguro!

Há uns meses atrás entrei em uma verdadeira “batalha virtual” com um hacker que estava tentando invadir um sistema que desenvolvi, e só percebi porque monitoro os arquivos de log do servidor atraves de uma aplicação usando o CRONTAB do Linux. Neste dia o hacker não obteve êxito, mas vi que usou uma série de técnicas como o já manjado SQL INJECTION, o Form Field Manipulation e o Javascript Off . Existem vários níveis de hackers, mas vejo muitos sites sendo invadidos por hackers novatos, isso porque os programadores deixam de lado uma série de cuidados necessários para a segurança de um site. Não acredito em sistema inacessivel, mas acredito que podemos nos proteger contra os 99% dos hackers existentes.

Bem, vamos falar então de forma mais técnica neste artigo sobre as formas de ataques e como se prevenir contra eles (não vou descrever a solução de tudo, porque isso tornaria esse blog pequeno demais… Por isso é preciso que você pesquise um pouco também!). Se em algum momento os termos forem indigestos para você não hesite: USE O GOOGLE! Bem, vamos falar sobre as formas conhecidas de ataques, em nível de categoria para ficar fácil:


Fique esperto para não ser a próxima vítima

Rede: Ataques à estrutura de rede atingindo roteadores, firewall, cabeamentos, fibras, circuitos e switches.
Servidores: Ataques ao servidor via HTTP, Componentes Web, Componentes de Negócio e Banco de dados.
Aplicação: Ataques pela entrada de dados, autenticação, autorização, configurações, acesso a dados, manipulação de parâmetros, exceções e auditoria.



Ataques à rede, servidores e estações de trabalho.

Cavalo de Tróia – O cavalo-de-tróia, ou trojan-horse, é um programa disfarçado que executa alguma tarefa maligna. Um exemplo: o usuário roda um jogo que conseguiu na Internet. O jogo secretamente instala o cavalo de tróia, que abre uma porta TCP do micro para invasão. Alguns trojans populares são NetBus, Back Orifice e SubSeven. Há também cavalos-de-tróias dedicados a roubar senhas e outros dados sigilosos.

Quebra de Senha – O quebrador, ou cracker, de senha é um programa usado pelo hacker para descobrir uma senha do sistema. O método mais comum consiste em testar sucessivamente as palavras de um dicionário até encontrar a senha correta.

Denial Of Service (DOS) – Ataque que consiste em sobrecarregar um servidor com uma quantidade excessiva de solicitações de serviços. Há muitas variantes, como os ataques distribuídos de negação de serviço (DDoS), que paralisaram sites como CNN, Yahoo! e ZD Net em fevereiro deste ano, e o site da VISA e Citröen este mês. Nessa variante, o agressor invade muitos computadores e instala neles um software zumbi, como o Tribal Flood Network ou o Trinoo. Quando recebem a ordem para iniciar o ataque, os zumbis bombardeiam o servidor-alvo, tirando-o do ar.

Mail Bomb – É a técnica de inundar um computador com mensagens eletrônicas. Em geral, o agressor usa um script para gerar um fluxo contínuo de mensagens e abarrotar a caixa postal de alguém. A sobrecarga tende a provocar negação de serviço no servidor de e-mail.

Phreaking – É o uso indevido de linhas telefônicas, fixas ou celulares. No passado, os phreakers empregavam gravadores de fita e outros dispositivos para produzir sinais de controle e enganar o sistema de telefonia. Conforme as companhias telefônicas foram reforçando a segurança, as técnicas tornaram-se mais complexas. Hoje, o phreaking é uma atividade elaborada, que poucos hackers dominam.

Scanners de Portas – Os scanners de portas são programas que buscam portas TCP abertas por onde pode ser feita uma invasão. Para que a varredura não seja percebida pela vítima, alguns scanners testam as portas de um computador durante muitos dias, em horários aleatórios.

Spoofing – É a técnica de se fazer passar por outro computador da rede para conseguir acesso a um sistema. Há muitas variantes, como o spoofing de IP. Para executá-lo, o invasor usa um programa que altera o cabeçalho dos pacotes IP de modo que pareçam estar vindo de outra máquina.

Smurf – O Smurf é outro tipo de ataque de negação de serviço. O agressor envia uma rápida sequência de solicitações de Ping (um teste para verificar se um servidor da Internet está acessível) para um endereço de broadcast. Usando spoofing, o cracker faz com que o servidor de broadcast encaminhe as respostas não para o seu endereço, mas para o da vítima. Assim, o computador-alvo é inundado pelo Ping.

Sniffing – O sniffer é um programa ou dispositivo que analisa o tráfego da rede. Sniffers são úteis para gerenciamento de redes. Mas nas mãos de hackers, permitem roubar senhas e outras informações sigilosas.

Key Logger – Neste método o hacker consegue de alguma forma (vírus, trojan, horse ou worms) a senha do usuário autenticado. O vírus instalado no PC do usuário intercepta todas as teclas pressionadas no teclado durante a utilização do sistema.

Mouse Logger – Consiste no hacker conseguir de alguma forma (vírus, trojan, horse ou worms) a senha do usuário autenticado. O vírus instalado no PC do usuário intercepta e copia os pedaços das áreas visuais pressionadas pelo mouse.

Para os ataques acima, sugiro soluções como um bom anti-virus para as estações de trabalho e um anti-vírus/firewall poderoso para o servidor de rede integrado ao anti-virus dos PC´s. Políticas de senhas internas , uso de sistemas de autenticação (proxy) e a configuração correta de usuários dentro de um dominio de rede também ajudam! E muito cuidado com as VPN´s e Webservices, elas podem ser uma grande brecha para ataques!

Hoje existem uma série de pacotes corporativos de softwares de segurança que conseguem evitar o tráfego de hackers em sua rede e que podem proteger suas aplicações e servidores de e-mails! Uma outra dica é alocar sua estrutura em um bom data center que lhe ofereça toda estrutura de segurança e backup, e que tenha itens como redundancia de link, segurança do host, filtros anti-spoofing, gerenciamento por tipo de tráfego e plano de contingência.

Ataques à aplicação

Buffer Overflow – É a técnica de explorar o sistema de entrada de informações do sistema enviando dados maliciosos. A solução é usar uma política de validação sistemática relacionado com: tipo de dados, tamanho, formato e intervalo.

XSS Script – Explora o sistema de entrada de informações do sistema enviando comandos maliciosos em: DHTML e JavaScript para serem executados nos navegadores. A solução é usar uma política de validação sistemática relacionada com: tipo de dados, tamanho, formato, intervalo e para informações em texto puro, validar e rejeitar códigos maliciosos. Defina sua White List.

SQL Injection – O hacker explora o sistema de entrada de informações do sistema enviando comandos SQL maliciosos. O segredo é utilizar somente comandos SQL pré-compilados na camada de persistência.

JavaScript Off – Consiste em desviar das validações na camada de visão, desligando JavaScript durante as requisições. Para evitar é preciso que as validações possam ser feitas na maquina do cliente (navegador), mas devem ser replicadas ou somente centralizadas na camada visão ou de negócio da aplicação. Nunca confie nos dados enviados pelo cliente ou naqueles dentro do protocolo HTTP.

Brute Force – Utiliza recursos automatizados para descobrir senhas de usuários. O atacante usa uma base de senhas pré-configuradas. A solução é a criação de uma Política de senhas fortes e bloquear logicamente o usuário após exceder o numero limite de tentativas.

Dictionary – Parecida com o Brute Force, consiste em utilizar recursos automatizados para descobrir senhas de usuários. O atacante usa uma base de informações previamente configuradas de acordo com o perfil do usuário, juntamente com algum algoritmo computacional que gera combinações variáveis de tentativas.

Session Hijacking – De posse de determinadas ferramentas, o hacker pode sequestrar o identificador de sessão do usuário durante o trafico HTTP. A solução é usar canal criptografado HTTPS, disponibilizar nas aplicações mecanismos para que o usuário autenticado possa terminar a sessão, colocando neles o habito de usar, além de reduzir ao máximo o tempo de duração da sessão.

Session Replay – O hacker pode conseguir de alguma forma (vírus, trojan, horse ou worms) o identificador da sessão do usuário autenticado. O vírus instalado no PC do usuário autenticado envia o identificador para o atacante que está fora da rede do usuário vítima. A solução é o sistema vincular a sessão do usuário autenticado com o seu IP origem e verificar a cada requisição HTTP.

Disclouse of Confidential Data e Data Tampering – Consiste no atacante sendo um usuário autenticado ou não, ter acesso a recursos, processos ou informações restritas. Uma forma de evitar é fazer a validação de perfil de acesso no momento que cada recurso, processo ou informações for requisitado. Opcionalmente, pode também ser inibido o mecanismo de acesso (links, menus, botões, etc…), que faz a ponte de invocação e execução.

Worflow Undue – Com este método é possível furar uma sequência de páginas pertencente a um workflow de negócio através de bookmark. A solução é usar o padrão Syncronized Token para controlar todos os workflows existentes na aplicação.

Overlapping Transaction – Consiste no usuário sobrepor informações de outro usuário indevidamente. Identificar e aplicar a abordagem de Optimistic lock nestas transações é a solução.

Data Tampering – De posse de programas hacker, é possível alterar as informações dentro dos pacotes durante o trafegado HTTP. Usar canal criptografado HTTPS resolve.

Query String Manipulation – Envia informações maliciosas dentro da URL do HTTP GET. Para não ter dores de cabeça, criptografe os dados do GET, faça validações em todos os dados vindouros do GET ou nunca use esta abordagem, armazenando as informações na sessão do usuário.

Form Field Manipulation – O hacker pode enviar informações maliciosas dentro de campos HTML hidden e read-only, não esperado pela aplicação. Para evitar, repita sempre que necessário as validações de campos deste tipo cada interação HTTP ou nunca use esta abordagem, armazenando as informações na sessão do usuário.

Cookie Manipulation – O invasor pode enviar informações maliciosas dentro dos cookies usados pela aplicação. Use criptografia HMAC cookie para guardar valores importantes para aplicação, use cookies para guardar informações que não tenham impacto na aplicação ou nunca use esta abordagem, armazenando as informações na sessão do usuário.

Header Manipulation – É possível enviar ou manipular informações dentro do HTTP Header. Nunca baseie decisões de sistema nos headers HTTP, porque eles podem ser facilmente falsificados.

Implementation Details – Consiste na aplicação expor detalhes infraestruturais, versão de plataformas, nomes de servidores, comandos SQL, configurações de banco de dados que podem ser usados de diversas formas por qualquer hacker. A aplicação deve apresentar uma mensagem genérica de exceção quando qualquer problema de runtime vier acontecer, usando a abordagem de Logger para registrar os erros técnicos e infraestruturais.

Auditoria de acessos – Em uma aplicação sem auditoria, o usuário malicioso opera a aplicação sem nenhum registro de acesso ou alteração. A aplicação deve usar algum mecanismo de auditoria que registre as operações criticas, gerando, no mínimo, os dados de usuário, processo, data/hora.

Amigo programador, fique esperto para não ser a próxima vítima!

Você pode gostar...

5 Resultados

  1. Fausto disse:

    Já fui muito entusiasmado pelo mundo hacker, mas hoje vejo
    muitos idiotas que não entendem a filosofia e querem apenas
    destruir, sem nenhum propósito ou finalidade Os verdadeiros piratas
    ainda vivem!

  2. Itamar disse:

    Então Flávio, aproveita pra estudar sobre IO de disco, Backbones, RAID, Firewall, Proxy, Virtualização, etc… Pergunta se estão usando Windows. Ow Zé, não estou defendo um ou outro, estou afirmando enfaticamente o que é melhor para ambiente de rede corporativa. Other dummie.

  3. Flávio disse:

    Acho que tanto o mauro como o itamar estão equivocados pq todos os s.o para servidor possuem falhas então defender quem é melhor é besteira!

    O linux pode ate ser de graça, mas o que se gasta com mao de obra especializada, consultoria e suporte as vezes fica mais caro do que as licenças windows, por outro lado as licencas windows são caras e acabam enburrecendo o pessoal de TI com sua interface “next/finish”

    Minha opiniao é que cada empresa precisa escolher o que é mais adequado e pronto! sem ficar com frescura de “I love linux” ou “Bill Gates é meu heroi”

  4. Itamar Azevedo disse:

    Excelente abordagem do assunto. Conceitos simples e claros para a rotina da maioria dos profissionais de TI. Quem sabe tu pode redigir um texto for dummies abordando Sistemas Operacionais para Servidores, vai ajudar ao Mauro(post acima) que “acredita” na plataforma Windows.

  5. Mauro disse:

    Não sou programador, mas cuido da rede da empresa onde trabalho e encontrei seu texto por acaso pelo post ‘Como a Internet pode acabar com a sua paz!’ e li este seu texto sobre técnicas hacker.

    Nossa rede foi invadida pelo servidor de e-mail e acredito que o safado também usou o RSH ou Telnet.

    Nossa rede é toda em UNIX e sempre acreditei que uma rede deste tipo fosse bem menos vulneravel mas percebi que isso não tem nada a ver! Estamos testando a estrutura de rede windows, pois acredito que ela já esta bem melhor as redes linux/unix

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *