Spoofing

Started by _Dr4k0_, 01 de August , 2006, 09:29:20 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

_Dr4k0_

Alguns conceitos:
Para que você entenda este texto, é necessário que você possua alguns conceitos básicos de Unix e protocolos tcp/ip. Ok, vamos lá. Antes de mais nada o spoofing não é um ataque e sim parte de um. Logo, spoofing é uma espécie de técnica de ataque, do qual o hacker pode mascarar o seu endereço IP ou DNS, Por exemplo, dizendo ao sistema que ele vai atacar, que ele é confiável. Isto ocore porque as comunicações entre
computadores em uma rede (Internet) se baseiam nestes endereços "confiáveis" para trocarem informações. Uma máquina A pode manter uma comunicação com a máquina B de forma que não seja necessário verificar toda hora se a informação vinda é autêntica entre elas. O hacker, então, põe uma espécie de disfarce na sua máquina, dizendo para a máquina A que "ele" é a máquina B. Assim, a máquina A vai aceitar todos os seus comandos, então o cara pode fazer o que quiser nela. Os tripos mais comuns de spoofing são: IP-spoofing, DNS-spoofing, Web-spoofing, mail-spoofing entre outros.
Como mencionei anteriormente, em um ataque de spoofing o intruso toma a identidade de um host confiável. Em uma rede Unix podemos configurar hosts "confiáveis". Se uma máquina Unix cria em seu diretório /home, um arquivo denominado rhosts que contenha uma lista de nomes de hosts, logo qualquer usuário com o user id que você pôs neste arquivo pode
logar-se na sua conta usando rlogin. O Rlogin é um protocolo baseado em cliente/servidor simples, que usa o TCP como protocolo de comunicação. O Rlogin permite ao usuário se logar remotamente de um host ao outro. Se a máquina-alvo confiar na máquina deste usuário, o rlogin permitirá a conveniência de não pedir password. Ela irá somente autenticar o cliente via endereço IP. Então podemos executar comandos remotos (com rsh) desde que aqueles hosts "confiáveis" estejam listados no rhosts, sem pedir password. Outra possibilidade é listar nomes de hosts no arquivo /etc/hosts.equiv. Neste caso, qualquer usuário das máquinas listadas pode também logar-se no host local sem uma password.

Three-Way Handshake:

Quando um host envia uma mensagem a um outro host, este pode ser dividido em un número de segmentos e redirecionado ao host destino por TCP. O IP somente se encarrega de roteá-lo. Quando uma aplicação em um cliente quer alcançar a outra em um servidor, deve conhecer a direção IP da máquina-destino e o número da porta TCP designado à aplicação, e decidir então a conexão-destino. (conexão-destino = direção IP + número de porta Para establecer uma conexão, O TCP utiliza um procedimento denominado "3-way handshake". Neste processo 3 mensagens (SYN, SYN/ACK y ACK) são requeridas para estabelecer a conexão. Entre a informacão intercambiada está a direção de cada máquina e o número de
seqüência inicial (#SI) que ambas utilizarão para establecer a comunicação. Estes números são exclusivos para a conexão entre essas duas máquinas, e se baseiam na hora do relógio interno do sistema. Uma vez aberta a conexão, as duas máquinas, já "autenticadas", estão prontas para trocar dados. Em determinadas versões do sistema operacional Unix, os números de seqüência respondem a um padrão muito previsível.
Por exemplo, na versão BSD Unix (Berkeley Software Development) o #SI se incrementa em 128 cada segundo e em 64 por nova conexão estabelecida. Assim se uma conexão se abre, pode-se saber que #SI será utilizado em uma próxima conexão. Esta é a característica explorada nos ataques de spoofing.
Ok, suponhamos que o host A quer comunicar-se com o host B. O host A inicia o handshake passando seu #SI, chamando A, no campo de seqüência do primeiro segmento sincronizado (SYN) do 3-way handshake. Quando o segundo host, B, recebe o SYN de A, este memoriza o número de seqüência recebido e replica enviando um SYN com seu #SI, chamando B, assim com um reconhecimento (ACK) indicando a A que reconhece o
primeiro SYN enviado e continua com o handshake.
Quando A recebe o SYN/ACK de B, lhe devolve um ACK a B indicando que ambos concordam que a conexão se estabeleceu. Complicado né? vá em frente, você acabará entendendo.

O ataque:

A primeira etapa de um ataque de spoofing é identificar as máquinas que vão ser vítimas do mesmo, suponhamos que sejam os hosts "A" e "B" sendo A um host confiável de B. O agressor, que chamaremos de X, tentará estabelecer uma conexão com B de forma que B acredite ter uma conexão com A quando na realidade ele tem uma conexão com a máquina do intruso. X em primeiro lugar, abre uma conexão legítima a seu host objetivo B, respondendo este último com uma mensagem que reconhece a solicitação e establece um #SI=b1. Logo X, toma o lugar de A, enviando a B um SYN com a direção origem de A. B responde com um SYN (#SI=b2) e um ACK que vão ao host legítimo A (é necessário que B "ache" que está se comunicando com A). X nunca "enxerga" esta mensagem, mas pode enviar um ACK a B predizendo b2 a partir do conhecimento de b1. Se enganar este mesmo, B crerá ter uma conexão legítima com A, quando na realidade esta conexão é com X. As saídas desta sessão não podem ser vistas por X, mas este pode executar comandos em B.
Além de predizer o #SI, o intruso deverá impedir que a mensagem de B chegue a A, esta mensagem alcançará A, este se daria conta que B está reconhecendo algo que ele nunca enviou, logo A enviaria em reposta um reset (RST) a B para terminar a conexão e o ataque de spoofing falharia. Uma das formas de evitar que o ataque falhe é enviando uma grande
quantidade de SYNs à porta 513 (login) para carregar completamente aquela porta de forma tal que B, no aceite nenhuma outra conexão, incluíndo Resets (B se torna inoperante).
Normalmente há um time-out associado com uma conexão pendente, logo as conexões half-opened eventualmente expirarão e o host atacado se recuperará. O host agressor pode então continuar enviando pacotes IP-spoofed sem problemas, requerendo novas conexões mais rápido que o sistema atacado pode dar "baixa" às conexões pendentes.

Como prevenir?

Uma forma de detectar o IP spoofing é monitorando pacotes com algum software de monitoração de redes tal como o netlog por exemplo. O objetivo é verificar um pacote na interface externa da rede que tenha direções IP de origem e destino pertenecentes ao domínio local.
Com a atual tecnologia de protocolo IP, é impossível eliminar pacotes IP-spoofed. Sistemas provedores de serviços Internet baseados em TCP podem ver-se inabilitados de administrar tais serviços quando estão sobre um ataque e por algum tempo depois de que o mesmo já tenha cessado. Para evitar um ataque dessse tipo, várias medidas podem ser tomadas para reduzir o número de pacotes IP-spoofed que entram na sua rede.
A melhor forma de prevenir o problema de IP spoofing é reduzir a probabilidade de que um site seja objetivo de algum destes ataques, é instalando um roteador que filtre a entrada da interface externa da rede (conhecido como um filtro de entrada) não permitindo que um pacote o atravesse, se o mesmo tem como direção de origem um que não corresponda ao da rede interna. Isto preveniria que um agressor não pertencente a sua rede lhe envie pacotes pretendendo ser uma máquina de sua rede. Esta á uma boa solução, se nós unicamente confiamos em máquinas locais. Se confiamos em máquinas externas, esta solucão topológica falha. Neste caso devem-se bloquear todos os protocolos que usem TCP e autenticações basedas em direções. Ainda que este ataque específico está dirigido a sistemas Unix, qualquer sistema que autentica hosts ou usuários baseados em endereços IP é vulnerável a um ataque
de spoofing.

Fonte:txt.org
100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.