[]==xXx========[ ******* ]========xXx==[] Encapsulamento de dados OSI e TCP/IP []==xXx========[ ******* ]========xXx==[] CORPORAÇAO VIBORA 2006-2008 by 6_Bl4ck9_f0x6 A.C.H.U.B A Cena Hacker Underground Brasileira Email: b-fox@metasploit-br.org MSN: ratao666@hotmail.com Thanks to: Birkoff, MM, Placker, J.Augusto and all guys ISTF! Obrigado especial (Meus maiores incentivos): BSDaemon , VooDoo, ALIG_wicked, Nash Leon, Morticia, Cheat Struck. Obrigado ae por voces existirem...=) Este e outros textos podem ser adquiridos em: ********************************************** http://www.thebuggers.in ********************************************** Excelent Underground forum ********************************************** Atençao amigos: Esta' eh uma versao editada, a versao original deste paper pode ser adiquirida em: Link: http://www.hunterhacker.xpg.com.br/Encapsulamento.txt A versao original contem muito mais informaçoes para voce, mas por motivos relacionados a "perda de foco" resolvi tirar alguns trechos, para ser mais especifico tirei algumas coisas que valem muito voce saber, por isso recomendo que baixem o mesmo. Entao cara, tenha uma boa leitura e viva intensamente a liberdade de informaçao. =X=======X=======X=======X=======X=======X=======X=======X= -> Vamos clarear as ideias antes de começarmos... OK? <- NESTE TEXTO VENHO TENTAR EXPLICAR DE UMA FORMA "GERAL" O PROCESSO DE ENCAPSULAMENTO USANDO COMO BASE O MODELO OSI, APLICANDO EXEMPLOS DAS CAMADAS OFERECIDAS PELO MODELO AO PROTOCOLO 'TCP/IP' =)". COMO OS MAIS EXPERIENTES SABEM O PROTOCOLO TCP/IP DISPÕE DE UM MODELO DE 4 CAMADAS APENAS, QUE SÃO: Camadas do modelo TCP/IP * APLICAÇÃO * TRANSPORTE * INTERNET * ACESSO A REDE AS CAMADAS 6 E 5 DO MODELO 'OSI' SÃO INSERIDAS PELAS PROPRIAS APLICAÇÕES DE REDE (camada 7 - OSI) NO TCP/IP, MAS EU CONSEGUI EXPLICAR APLICANDO TODAS AS CAMADAS DO MODELO OSI AO PROTOCOLO TCP/IP =). Como? Simples, eh so pensar que as diferencas impostas por esse bando de doido da CISCO entre os modelos citados E' NA VERDADE FRESCURA!!!! OBS: Alguem da Cisco disse: "Embora algumas das camadas no modelo TCP/IP tenham os mesmos nomes das camadas no modelo OSI, as camadas dos dois modelos não correspondem exatamente. Mais notada mente, a camada de aplicação tem diferentes funcoes em cada modelo." Repare neste trecho: "nao correspondem 'EXATAMENTE'" Esse 'nao exatamente' eh revelador irmão de hacking...:) Isso significa que não são necessariamente iguais por conta de algumas funções que foram englobadas na camada de aplicação no modelo TCP/IP, nada mais. So para confirmar o que estou lhes dizendo: "Os projetistas do TCP/IP decidiram que os protocolos de mais alto nível deviam incluir os detalhes da camada de sessão e de apresentação do OSI. Eles simplesmente cria ram uma camada de aplicação que trata de questões de representação, codificação e controle de diálogo." Onde: Representação -> Encapsulamento de payload Codificação -> Aprensentação - OSI Controle de dialogo -> Sessao - OSI Torno a repetir amigo: OS CARAS FALARAM QUE NAO CORRES PONDE EXATAMENE PORQUE NO MODELO TCP/IP SAO AS APLICACOES QUE FAZEM O TRABALHO DAS CAMADAS 6 E 5. Existe também a questão da camada de 'Acesso a rede' no modelo TCP/IP. Vejam o ultimo trecho extraido da documen tação oficial para a certificação 'Cisco' que será mostrado neste documento. "O significado do nome da camada de acesso à rede é muito amplo e um pouco confuso. É também conhecida como a camada host-para-rede. Esta camada lida com todos os componentes, tanto físico como lógico, que são necessários para fazer um link físico. Isso inclui os detalhes da tecnologia de redes, inclusive todos os detalhes nas camadas física e de enlace do OSI." Por favor senhores, não deixem de notar neste trecho: "todos os detalhes nas camadas física e de enlace do OSI." Leiam o contexto de onde este trecho foi extraido e verão que a camada de acesso a rede no TCP/IP (Claro, pois não existe essa camada no OSI) ficou encarregada de englobar as camadas de 'Enlace' e 'Física', camadas 2 e 1 respectivamente (nume radas de acordo com outro documento que possuo) pertencentes ao modelo OSI. Tabom, mas porque voce esta dizendo isso? Bem, so estava tentando lhe alertar que eu simplifiquei tudo, deixei o texto bem intuitivo para quem quer estudar para a certificação e acha o material disponibilizado pela cisco um tanto quanto "complexo". =X=======X=======X=======X=======X=======X=======X=======X= Matando dois coelhos com um tiro soh. Conceitos -> "Basicos" <- de encapsulamento Hi! Agora vamos falar de um assunto de extrema importancia para todos aqueles que um dia querem ser chamados de Elit3, vou falar agora do tal encapsulamento de dados. Esse assunto naum eh nenhuma novidade, mas para quem ainda nao sabe recomendo que leia, pois escrevi esse texto para vc's bgner's. Bem, como vc muito provavelmente deve saber, as maquinas na internet se comunicam pelo envio de pacotes de dados, um pacote eh basicamente composto por header e payload, sendo que nos headers é onde estão armazenados diversos tipos de dados, tais como: O endereço do remetente, endereço do host de destino, etc. O payload eh o que existe dentro do pacote, ou seja, todo 'conteudo' (Recheio) eh chamado de payload. Nesse's payloads podem conter shellcodes e tals...:) O que um sniffer faz necessariamente eh exibir o conteudo de um pacote depois de retirar sua "capa" (header) para pegar o payload do pacote e lhe apresentar o mesmo. Basicamente eh isso manoh, mas vamos ir mais alem. Entendendo a pilha do modelo OSI Todo esse processo (Encapsulamento) se da atraves de camadas, essas tais camadas que compoem uma pilha, logo + vc entendera o porque da 'pilha'. Quando um pacote entra no kernel do seu sistema ele vai ser desencapsulado na ordem inversa da que foi encapsulado, achu que uma ilustração seria uma boa agora manoh: Camadas de encapsulamento do modelo OSI --==================-- * 7 * - Aplicação * 6 * - Apresentação * 5 * - Sessão * 4 * - Transporte * 3 * - Rede * 2 * - Enlace * 1 * - Física --==================-- Antes de falarmos sobre cada camada descrita acima, vamos a uma breve in trodução ao modelo OSI. O modelo de referencia OSI - Open Systems Interconnection -> Sistemas de interconexão aberta, surgiu com a necessidade do desenvolvimento de um protocolo 'PADRÃO' para comunicação entre redes. O negocio vai ficar mais claro agora manoh, relaxa. Antigamente as redes utilizavam os chamados protocolos específicos ou tecnicamente falando, protocolos proprietarios, que nada mais eram que protocolos utilizados apenas em uma determinada rede e eram pagos. Se um administrador de rede implementase algum protocolo proprietario em sua rede, a comunicação so seria possivel com outras redes rodando sobre o mesmo protocolo. Ao meu ver o mais famoso protocolo proprietario eh o IPX/SPX da Novell, esse protocolo foi desenvolvido para comunicação entre maquinas rodando sobre a plataforma 'Novell Netware'. Antigamente o negocio era tão feio que se alguem comprase um dispositivo de rede (Placa de rede) de uma empresa, ele não poderia utilizar um protocolo de comuni cação feito por outra. Vale lembrar para vc's que o modelo OSI não eh de forma alguma um protocolo e sim o "modelo", vejamos um exemplo. Esse modelo que foi desenvolvido pela ISO -> International Organization for Standardization, Organização Internacional para padronização. Veja bem no nome da empresa e tente adivinhar a sua real função, achu que fica + claro a cada minuto ;) A ISO foi fundada em 1947 (Ei! Eu num tinha nem nascido ainda :P) e conta com representantes de mais de 100 paises e é uma empresa que tem como principal meta desenvolver 'padrões' para a 'industria'. Então podemos dizer que essa empresa falou: Gente! Apartir de agora voces vão fazer assim e assado para acabar com essa putaria de protocolo proprietario que prejudica o cliente caso ele tenho gostado de um periferico desenvolvido pela Novell mas quer usar outro proto colo de comunicação que não seja o IPX/SPX. Sigam esse modelo aqui!!! Apartir dai o povo começou a desenvolver protocolos baseado nesse modelo, fim. Bem, não eh tão verdade assim porque ainda existem protocolos que não seguem a risca o modelo, talvez porque alguns foram desenvolvidos antes das especificações do modelo OSI, outros porque os fabricantes simplesmente não tavam afim e outros porque atingem objetivos especificos. Como voce reparou o modelo OSI especifica que o encapsulamento de dados deveria ter por padrão 7 camadas. As coisas eram para acontecer dessa maneira: --------------- * 7 * - Aplicação -> Esta eh a primeira camada, é aqui a camada responsavel por criar o pacote. Diz respeito as aplicações que solicitaram uma conexão. Um bom exemplo de construtores desta camada, são seus browser's, como o firefox, Opera, IE, etc. Quando voce digita uma URL no seu browser e tecla [Enter], automaticamente o browser vai inserir dados (payload) para a conexão com o host remoto dentro de um header, assim criando um "pacote" composto por casca (header) e recheio (payload), depois desta camada, o pacote eh empurrado pilha abaixo e vai passar agora para a proxima camada (Tentem não achar que o pacote vai para a camada de 'Apresentação' 'no TCP/IP', porque no modelo TCP/IP esta camada não passa de uma função, pois foi englobada na camada de aplicação, leia com atenção a proxima camada que garanto que enten deras amigos =). OBS: Para uma melhor compreensão siga as ilustrações. Veja o '=====' como o header do pacote. ============== Payload1/Dados --- > Pacote se formando. ============== --------------- * 6 * - Apresentação -> "Teoricamente" falando esta camada serve para prepar os dados que serão enviados (isso ainda no host local, obvio) convertendo os mesmos em um formato compativel com os procedimentos de transporte. Em muitos livros que ja li os escritores apenas ensinam algumas camadas e pronto, assim discartando algumas outras que podemos chamar de -> Inuteis, mas porque? Porque eles falam de camadas e não de funções das camadas (eheh), porque esta camada no OSI virou função no TCP/IP, ou seja, NA PRATICA a 'Apresentação' ja' eh inserida na aplicação (Estou falando do TCP/IP). Voces se lembram que esta camada transforma os dados que serão enviados em um formato compativel com o procedimento de transporte (Claro voce acabou de ler -.-)? Ta bom, tabom, porque eu perguntei se vc lembra se não faz nem 5 linhas que eu disse isso? Simples, para voce entender melhor =) Use a logica amigo. Se nesta camada (No OSI. Função no TCP/IP) ele converte os dados para que os mesmos sejam compativeis com o processo de "transporte", então quando recebermos o mesmo esta mesma camada vai fazer com que o pacote que foi convertido em um formato compativel com os procedimentos de transporte...:) voute a ser o que ele era antes, pois o pacote ja chegou. Assim ele vai entregar os dados ja' convertidos para a aplicação de rede (OSI), mas como voces sabem ele não vai "entregar" para a camada de aplicação NO TCP/IP, porque no TCP/IP ele vai converter os dados "na" camada de aplicação, lembram que esta função ("No TCP/IP") na pratica ja eh inserida "na" aplicação? Eu sou ou não sou o professor do ano ;) --------------- * 5 * - Sessão -> Camada responsavel por estabelecer uma conexão entre dois hosts. Esta camada tambe'm eh responsavel pelo CONTROLE da comunicação entre as aplicações que estão em execução nas maquinas. No TCP/IP esta camada ja eh inserida nas aplicações de rede. --------------- * 4 * - Transporte -> Nesta camada que definimos como o nosso pacote vai ser 'guiado' pelo protocolo IP (Protocolo responsavel pelo roteamento de pacotes na internet). Uma determinada aplicação (Software's) poderia utilizar o UDP ou poderia utilizar o famoso TCP. Acho que vcs devem saber o que é TCP e UDP, aqui estou falando de encapsulamento... ======= TCP --- > Cabeçalho TCP encapsulando ============== Payload1/Dados ============== ======= --------------- * 3 * - Rede -> Aqui que os sonhos acontecem ^^. Nesta camada que eh inserido ao header TCP ou UDP do pacote, um header com o protocolo IP que vai ser o encarregado de transportar os dados. No modelo TCP/IP esta camada equivale a camada 'Internet'. Lembre-se que podemos forjar o endereço de origem usando crafters...:) ============== IP/Internet Protocol --- > Encapsulando o header IP ao Hd TCP do pacote. ============== TCP ============== Payload1/Dados ============== ============== ============== * 2 * - Enlace -> Camada responsável pela comunicação entre duas interfaces de rede em uma LAN (Local Area Network). O trabalho de receber e entregar o pacote para uma determinada interface de rede ou para o modulo IP "desmultiplexar", fica com essa camada ;) Cada dispositivo de rede deve inserir o pacote dentro de um quadro, eh este quadro que permite a conexão com o proximo dispositivo da rede conectado diretamente no link. Os dispositivos no caminho (Ateh o destinatario final do pacote) requerem um enquadramento de forma que eles consigam conectar-se nos proximos pontos de pasagem. * 1 * - Física -> Em um modo bem grosseiro de se falar podemos dizer que eh aqui que a porca torce o rabo :P eheh. Diz respeito a parte fisica da rede, quando digo fisica pode pensar em eth0 (Ethernet) e tals. Nesta camada que o dado (QUADRO) que sera enviado, vai ser convertido em bits, o quadro deve ser convertido em um padrão que eh de 1's e 0's (Binarios) e dependendo do meio fisico da rede, os sinais podem ser transmitidos como pulsos eletricos sequenciais (Ethernet), no caso de wireless --> Transmissão de dados via sinais de radio, se for em um meio ótico os dados seguem como sinais luminosos e assim por diante. Seguindo o que foi visto anteriormente podemos dizer então que o processo de encapsulamento ocorre da seguinte forma: ------------------ Segmentar os dados ------------------ | ------------------ Enpacotar para transporte. ------------------ | ------------------ Endereçamento (IP) Add End de rede ao header. ------------------ | ------------------ Camada de enlace ------------------ | ------------------ Converter dados em bits. ------------------ Leitura do pacote na maquina destino Quando um pacote bate na placa de rede do host remoto, acontece o processo inverso do encapsulamento, ou seja, os modulos retiram os headers e empurram o pacote pilha acima ate fazer com que o payload seja lido por uma determinada aplicação rodando na maquina. Alguns Terminhos Aproveitando gostaria de falar sobre uns termos importantes de voce saber, parece algo hardcore underground mas naum eh, sao termos que apesar de parecerem coisas de outro mundo são bem simples de se absorver. Exemplo: Quando a comunicação entre dois hosts eh dada atravez de uma rede Ethernet, o nome do pacote vai se chamar 'Frame Ethernet'. Quando a camada de transporte diz que o pacote vai ser enviado se utilizando de UDP ai chamamos o pacote de datagrama, eh uma confusão só. O povo poderia chamar de pacote tudo que andase por ai ehehe. Ah! Quando emitimos um pacote... ou datagrama, sendo um Frame Ethernet (ehehe) ou não, todas as maquinas por onde esse pacote chegar a passar até alcançar seu destino final vão ser chamadas de ponto de passagem, ponto =). Se aprofundando mais nos terminhos Drive de dispositivo -> Software que se comunica diretamente com a interface de rede (por exemplo). Nossa, quanta coisa vaga, estou me sentindo mal, serio mesmo... Vamos lá, nao vou deixar de passar informação por preguiça. ================== Drive -> O termo Drive, ou como os caras falam em portugal -> acionador <-, podem ser usados para se referir a dispositivos[oO] como CD-ROM, etc. Drives nada mais são que mecanismos que permitem a leitura de determinadas midias (por exemplo), exemplo: Um drive de disquete eh um mecanismo que pode fazer leitura de um disco magnetico (disquete), entendeu? Podemos chamar inclusive HD's de drives, olha que legal, vai dizer que voce sabia? ehhe Eh mais chiqui falar -> Meu acionador de DVD e tals ehehe <- (para se referir a os mecanismos (drivers) capazes de fazer leitura de DVD's). oO -> Podemos dizer que dispositivo eh a mesma coisa que periferico, não amigo, nao estou me refirindo as periferias de Recife ou algo do tipo heheh, periferico eh tudo que voce conecta no computador, como placas de rede que passarão a ser chamadas de interface de rede (iface) após a sua inserção na placa mãe. Impresoras são perifericos e muitas outras coisas, esse termo eh usado para se referir a qualquer coisa que voce compra e que pode ser inserido -> posteriormente <-, isso fazia mais sentido nos tempos antigos da computação e tals, pq naquele tempo ja vinha tudo pronto e o cara ficava só brincando de inserir coisas, mas como hoje em dia tudo pode ser comprado separadamente o termo periferico passou a ser utilizado para se referir a tudo que não seja 'Placa mãe', 'Processador' e 'Memoria'. Ja os dispositivos são a mesma coisa, tipo, dispositivo eh tudo que voce de certa forma pluga no PC, exemplo: a placa mãe eh um dispositivo, o mouse eh um dispositivo e etc. Diferenciamos dispositivos de entrada e de saida ou ambos julgando o que eles fazem. O teclado eh um dispositivo de entrada, o monitor eh um dispositivo de saida, o router eh um dispositivo de rede (dã) e por ai vai. ================== Drive de dispositivo -> Drivers de dispositivo são os "programas" que se comunicam com a parte fisica no seu sistema, vai dizer que vc nunca precisou dos drives da sua placa para rodar aquela musica e tals? Todo dispositivo tem que ter alguma coisa que faça ele funcionar, para isso surgiram os...drives de dispositivo!! ehhe Esses tais drives trabalham sobre o kernel do OS (Operational System) servindo como tradutores, assim permitindo uma comunição entre o periferico e o sistema operacional. ================== Recaptulando: Frame Ethernet eh o nome dado a todo 'dado' (eheh) que viaja pela internet por meio de uma rede Ethernet (eth0 e tals). xxxxxxxxxxxxxxxxx + DATAGRAMA + xxxxxxxxxxxxxxxxx ============== IP/Internet Protocol ============== UDP ============== ============== Na verdade (TECNICAMENTE falando!) um datagrama eh a união do modulo[oO] IP ao header (Também modulo =) UDP (que por sua vez foi inserido na camada de transporte da pilha, no processo de encapsulamento =) do pacote. oO Modulo -> Modulo nada mais eh que um software que se comunica diretamente com o drive de dispositivo (da interface de rede) que age no kernel traduzindo instruções do periferico para o OS, lembram? O modulo também se comunica com aplicativos de rede e outros modulos. Podemos dizer então que o que faz as coisas acontecerem no encapsulamento de dados são os tais modulos, siga a minha linha de raciocinio: ===================== Modulo IP ================= Modulo TCP ou UDP ================= ===================== Vamos misturar as coisas? Basicamente o modulo (software) se comunica com outro modulo e diz que os dados apartir dali vao ser 'guiados' por UDP, o modulo abaixo não quer saber o que aconteceu anteriormente com o pacote, ele apenas inseri o cabeçalho IP no pacote. Voces se lembram que um modulo eh capaz de se comunicar com outro e ainda consegue se comunicar com os drives de dispositivo? Aham! Voces estaum entendendo, isso mesmo que voce esta pensando, um modulo ( Aplicação ) diz para outro modulo ( Transporte ) que diz pro outro ( Internet ) que por sua vez vai se comunicar nao com outro modulo, mas sim com o drive de dispositivo que como todos sabemos -> Comanda o dispositivo <- ... Placa de rede. Esse ultimo processo (Comunicação entre modulo e drive de disposi tivo) ocorre entre a camada de Rede e a camada de enlace, que eh a camada responsavel por entregar os pacotes as interfaces da vida...^^ Então podemos dizer que os drives ficam nesta camada (Enlace =). Aposto que ficou confuso porque eu misturei nomes de camadas dos dois modelos, mas agora que voce realmente vai entender, não precisa ficar confuso porque eh "exatamente" isso que ocorre. O processo acima eh o processo padrão para ambos os modelos. A unica diferença eh que no TCP/IP algumas camadas do modelo OSI foram transformadas em funções, assim reduzindo o modelo a apenas 4 camadas, ou seja, onde eu disse camada de 'Rede' - OSI, nada mais seria do que a camada 'Internet' e para representar a camada de 'Enlace' bastaria eu dizer apenas 'Acesso a rede'. Siga minha linha de raciocinio companheiro.... OBS: Para uma melhor visualização da ilustração abaixo utilize algum Browser e visualize com tamanho de texto 'Normal'. OSI TCP/IP ------------------------------------------------------------- - Aplicação - Aplicação Criação de payload Criação de payload, conversão, controle de comunicação. ------------------------------------------------------------- | | ------------------------------------------------------------- - Apresentação - Transporte Conversão para TCP ou UDP transporte do dado ------------------------------------------------------------- | | ------------------------------------------------------------- - Sessão - Internet Estabelecimento Add Header IP de conexão e controle d comun icação. ------------------------------------------------------------- | | ------------------------------------------------------------- - Transporte - Acesso a rede TCP ou UDP Drive de dispositivo. Conversão de quadro e envio de dados. ------------------------------------------------------------- | | ------------------------------------------------------------- - Rede Add Header IP ------------------ | ------------------ - Enlace Drive de dispositi vo. ------------------ | ------------------ - Física Exemplo: Eth0. Conversão de quadro e envio d dados. ------------------ Viram? Eh a mesma coisa! Soh que no modelo TCP/IP as coisas foram englobadas. Os drivers de dispositivos dizem para a camada fisica da pilha (interface de rede) chutar a bunda do pacote (rsrs). Apartir dai o pacote ou datagrama ou segmento TCP que pode estar ou nao sendo trafegado como um Frame Ethernet, eh enviado... Ufa! xxxxxxxxxxxxxxxxx + Segmento TCP + xxxxxxxxxxxxxxxxx ============== IP/Internet Protocol =============== TCP =============== ============== Se os dados que serão enviados pela internet afora foram encapsulados de maneira que a camada 'Internet' - TCP/IP (Rede - OSI) inseriu o cabeçalho IP sobre o header -> "TCP" <- (camada de 'Transporte'), então podemos dizer que este dado eh um Segmento TCP que pode ou não ser transportado como um Frame Ethernet...:) Mais uma ilustração para concretizar tudo. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Recepção do pacote no nost remoto xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Vejam essa ilustraçao: ------------------------- Aplicações de rede Payload/Dados ------------------------- Modulo TCP - UDP ------------------------- Modulo IP ------------------------- > ARP - Addres Resolution Protocol ------------------------- Interface de rede ------------------------- OBS: POR HORA VAMOS FINGIR QUE O PROTOCOLO ARP NÃO EXISTE, PARA NÃO RETIRAR O FOCU PRINCIPAL DESTE DOCUMENTO. Nao se esqueçam que os modulos também se comunicam com aplicativos de rede, que nada mais são que programas que fazem as requisições de conexão, como browsers, clientes de FTP, POP, clientes de trojans, etc....:) Lembrando que as aplicações não apenas fazem requisições, também ficam esperando as tais...Sacou? =) Os aplicativos de rede se comunicam com os modulos apenas para lhes entregar as requisições ou para receber as requisições que são trazidas pelos modulos no caso do recebimento. O transporte de dados funciona de maneira linda, como uma mae entregando seu filho nos braços de uma segunda mãe logo apos beija-lo, deixando uma marca que será vista e entendia pela proxima mae até que a criança chegue ao seu destino. Esse processo maravilha qualquer seguidor da mãe Internet, 'Hacker'.... Underground claro :) O modulo que eh mais conhecido dos aplicativos de rede obviamente que eh o modulo de transporte para quem envia e para quem tem uma aplicação esperando do outro lado, pois eh a camada mais proxima das aplicações de rede -> No protocolo TCP/IP...:) Xauzin. by 6_Bl4ck9_f0x6 - Viper Corp Group