Revista Hack X Crack 20

Embed Size (px)

Citation preview

  • 8/2/2019 Revista Hack X Crack 20

    1/68

    HACK X CRACK: TCP - LA ESENCIA DE LAS COMUNICACIONES POR RED

    LOS MEJORES ARTCULOS GRATIS EN NUESTRA WEB

    PC PASO A PASO: IDS - LA SEGURIDAD CON MAYUSCULAS !!!

    N 20 -- P.V.P. 4,5 EUROS

    3 SERVIDORES ON LINE PARA TUS PRACTICAS DE HACK

    MENU

    * DETECTANDO PUERTOS EXTRAOS

    NMERO 20

    SISTEMA DE DETECCIONDE INTRUSOS !!!

    (2PARTE)

    Y CONEXIONES SOSPECHOSAS* REGLAS DE CABECERADE CONTENIDO Y DE CONTROL

    * CONTRAMEDIDAS EN TIEMPO REALCONTRAMEDIDAS EN TIEMPO REAL* STREAM 4

    * RPC DECODE* PORTSCAN Y PORTSCAN 2

    XCOMO METER VARIOS

    JUEGOS EN 1 DVD

    MENUS A NUESTRO GUSTOY

    PP

    AA

    SS

    OO

    PP A S O A S O

    PPAASSOO

    PPA S OA S OaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaP R O G R A M A N D O C O O K I E S ! ! !

    8 4 1 40 9 0 2 0 27 5 6

    02000

    LOS IDENTIFICADORESDE SESIONLAS COOKIES

  • 8/2/2019 Revista Hack X Crack 20

    2/68

  • 8/2/2019 Revista Hack X Crack 20

    3/68

    PIDE LOS NUMEROS ATRASADOS EN --> WWW.HACKXCRACK.COM

    EDITORIAL: EDITOTRANS S.L.C.I.F: B43675701PERE MARTELL N 20, 2 - 143001 TARRAGONA (ESPAA)

    Director Editorial

    I. SENTIS

    E-mail contacto

    [email protected]

    Ttulo de la publicacin

    Los Cuadernos de HACK X CRACK.

    Nombre Comercial de la publicacn

    PC PASO A PASOWeb: www.hackxcrack.com

    Direccin: PERE MARTELL N 20, 2 - 1.

    43001 TARRAGONA (ESPAA)

    Quieres insertar publicidad en PC PASO A

    PASO? Tenemos la mejor relacin precio-difusin

    del mercado editorial en Espaa. Contacta con

    nosotros!!!

    Sr. Ruben Sentis

    Tfno. directo: 652 495 607

    Tfno. oficina: 877 023 356

    E-mail: [email protected]

    Director de la PublicacinJ. Sents

    E-mail [email protected]

    Diseo grfico:J. M. Velasco

    E-mail contacto:[email protected]

    RedactoresAZIMUT, ROTEADO, FASTIC, MORDEA, FAUSTO,ENTROPIC, MEIDOR, HASHIMUIRA, BACKBONE,ZORTEMIUS, AK22, DORKAN, KMORK, MAILA,TITINA, SIMPSIM... ... ... ... ...

    Contacto [email protected]

    ColaboradoresMas de 130 personas: de Espaa, de Brasil, deArgentina, de Francia, de Alemania, de Japn y

    algn Estadounidense.

    E-mail [email protected]

    ImprimeI.G. PRINTONE S.A. Tel 91 808 50 15

    DISTRIBUCIN:SGEL, Avda. Valdeparra 29 (Pol. Ind.)28018 ALCOBENDAS (MADRID)Tel 91 657 69 00 FAX 91 657 69 28WEB: www.sgel.es

    TELFONO DE ATENCIN AL CLIENTE: 977 22 45 80Peticin de Nmeros atrasados y Suscripciones (Srta. Genoveva)

    HORARIO DE ATENCIN: DE 9:30 A 13:30(LUNES A VIERNES)

    Copyright Editotrans S.L.NUMERO 20 -- PRINTED IN SPAINPERIOCIDAD MENSUALDeposito legal: B.26805-2002Cdigo EAN: 8414090202756

    PP

    AA

    SS

    OO

    PP A S O A S Oaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    a

    33 STST AFFAFF

    4 CURSO DE PHP: MANE4 CURSO DE PHP: MANEJO DE SESIONESJO DE SESIONES

    114 CURSO DE T4 CURSO DE TCP/IP: TCP/IP: TCP (CP ( TRANSMISION CTRANSMISION CONTRONTROLOL

    PRPR OOTTOCOC OL.OL.

    334 XB4 XB OOX (VI): MENU XX (VI): MENU X

    337 CURSO DE SEGURID7 CURSO DE SEGURIDAD EN REDES - IDS (II)AD EN REDES - IDS (II)

  • 8/2/2019 Revista Hack X Crack 20

    4/68

    Pgina 4 PC PASO A PASO N 20

    1. Introduccin de session

    La sesin va unida al usuario, se pueden crear

    variables a nivel de sesin que son accesiblesdesde cualquier pgina siempre que la sesineste activa.

    Una sesin se crea cuando un usuario accedea una pgina web, a partir de ese momentotodos los accesos a las pginas de ese sitoweb pueden seguirse a travs de la sesincreada. Cada sesin creada lleva asociado unidentificador, que identificar esa sesin conel usuario que provoc su creacin.

    Adems, las variables definidas a nivel de

    sesin permanecen accesibles desde todaslas pginas php del site, durante toda lasesin del usuario, por lo tanto son unaespecie de variables globales que permanecenactivas mientras la sesin est activa.

    Una sesin estar activa siempre que elusuario se comunique con el servidor web,cambie de una pgina web a otra, enve unformulario, etc. Cada sesin tiene un tiempomximo de inactividad permitida (lo normalsuele ser 20 minutos, pero se puede cambiarese valor), si un usuario permanece sin

    actividad durante un periodo de tiempodeterminado o abandona el sitio Web, todassus variables e identificadores de sesin sonborrados.

    Dentro del fichero php.ini, modificando elvalor de la variable session.cookie_lifetimese modifica el tiempo de vida (o tiempo deinactividad) de la sesin.

    La variable session.cookie_lifetimeespecifica la duracin de la cookie en segundos,que se manda al navegador. El valor 0 significa

    "hasta que se cierra el navegador", y es elque se encuentra por defecto.

    Un ejemplo muy claro de esto es la bancaelectrnica. Si nos identificamos en nuestrobanco on-line para consultar el saldo denuestra cuenta bancaria y nos vamos a tomarun caf, seguramente, cuando volvamos elbanco no nos dejar realizar ms operacioneshasta que nos volvamos a identificar en elsistema.

    Otro ejemplo de la utilizacin de las sesiones

    es el comercio electrnico, cuando compramosvamos almacenando productos en el carritode la compra y, aunque cambiemos de pginaweb, los productos siguen estando en el carrito.Esto es gracias a que la informacin relativaa esos productos est almacenada en variablesde sesin.

    Existen dos formas de mantener y continuaruna sesin mientras el usuario navega por laspginas web. En la primera de ellas esmediante el uso de las cookies (datosguardados en el cliente) y en la segunda, elidentificador de la sesin se incluye en la URL

    de la pgina como un parmetro ms. Elmdulo de gestin de sesiones que proporcionaPHP permite util izar ambas formas.

    El mdulo de sesiones admite ambas formas.Las Cookies son la mejor opcin, pero comono son fiables (los clientes no estn obligadosa aceptarlas), no podemos confiar en ellas. Elsegundo mtodo incrusta el "session id"directamente en las URLs.

    curso de PHPAPRENDE A MANEJAR SESIONES

    Continuamos con el curso de PHP y en esta entrega aprenderemos a manejar sesiones.

    He decidido explicar las sesiones antes de seguir con socket, ya que con el manejo de las

    sesiones se comprende como un portal puede dar acceso a partes privadas.

    Existen varias formas de mantener la sesin del navegante, se explicarn algunas, las

    ms conocidas y que encontrareis en la mayora de portales.

  • 8/2/2019 Revista Hack X Crack 20

    5/68

    PC PASO A PASO N 20 Pgina 5

    Las sesiones (y toda la informacin relativaa ellas) en PHP se guardan ficheros que estnen un directorio. Este directorio estespecificado en la variable session.save_path

    dentro del apartado [Session] del ficherophp.ini.

    Todas las variables y parmetros necesariospara el correcto funcionamiento de las variablesse encuentran en el fichero php.ini.

    Tanto para leer como para escribir variablesde sesin utilizaremos el array asociativo$ H T T P _ S E S S I O N _ V A R S [ v a r ] o$_SESSION[var] que es su versin abreviada.

    Vamos a ver el uso de las sesiones "plan

    rpido" con un ejemplo ejemplo:

    1)- En primer lugar tenemos el cdigo de unapgina PHP (llamemosla php7.php) que guardalas variables nombre, apellidos y sessionIden la sesin. Ya sabes, como siempre copiael cdigo en el Block de Notas y guardalo conel nombre php7.php

    Sesion Paso 1Siguiente

    - En segundo lugar tenemos otra pgina(sessiones7.php) donde recogeremos el valorde dichas variables almacenadas en la sesin.Ya sabes, como siempre copia el cdigo en elBlock de Notas y guardalo con el nombrephp7.php

    Sesion Paso 2

    Nombre:

    Apellidos:

    SesionId:

    Para que se almacenen las variables en la sesin primerodebemos ejecutar el cdigo de la primera pgina PHP(php7.php) y a continuacin ejecutaremos la segundapgina. Si no siguiramos esta secuencia y ejecutsemosdirectamente el cdigo de la segunda pgina, las variablesde la sesin no tendran ningn valor.

    El resultado que obtendremos ser el siguiente:

    Visto el ejemplo vamos a ver el tema con ms detalle.

    2. Funciones

    2.1 session_startEsta funcin crea una nueva sesin o contina con lasesin actual.La sintaxis de la funcin es la siguiente:

    session_start();

    Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

  • 8/2/2019 Revista Hack X Crack 20

    6/68

    Pgina 6 PC PASO A PASO N 20

    Todas las pginas PHP que utilicensesiones deben incluir esta funcin queindica al intrprete PHP que recupere

    toda la informacin relativa a las sesiones,para posteriormente hacer uso de ella.

    Esta funcin debe escribirse antes de quese escriba cualquier carcter en el cliente,incluso antes de las cabeceras HTML, sino es as se producir un error. Paraevitar problemas es mejor colocar estafuncin al principio de nuestra pginaPHP.

    2.2 session_destroy

    Esta funcin elimina todos los datosasociados a una sesin.La sintaxis de la sesin es la siguiente:

    session_destroy();

    Est funcin no borra la sesin ni la cookiedonde se encuentra almacenada, sloborra los datos asociados a la misma, esdecir, borra las variables que seencuentran asociadas a una sesin.

    2.3 session_nameEsta funcin devuelve el nombre de lasesin utilizada en ese momento. Pordefecto, este valor es PHPSESSID yesta definido dentro del fichero php.ini.Si se desea especificar un nombrediferente a la sesin, ste se deberpasar como parmetro de la funcin.

    La sintaxis de la funcin es la siguiente:session_name(nombreSesion);

    El parmetro nombreSesion es opcional.

    Y el resultado obtenido al ejecutar elcdigo anterior es:

    2.4 session_module_name

    Devuelve el valor de la variablesession.save_handler situada en elficherophp.iniencargada de definir el tipo

    de controlador utilizado para grabar yrecuperar el manejo de las sesiones quepor defecto es files.

    La sintaxis de la funcin es la siguiente:session_module_name(handler);

    El parmetro handler es opcional.

    2 .5 se ss i o n _ sa v e _ p a t h

    Permite conocer la ruta en la que seguardan las sesiones si el valor desession.save_handler es files. En lamayora de los casos se trata de undirectorio temporal.

    Esta funcin recupera y modifica el valorde la variable session.save_path delfichero php.ini.

    Si session_save_path apunta a un

    directorio con permiso de lectura por elresto de usuarios, como/tmp (la opcinpor defecto), los dems usuarios delservidor pueden conseguir robar lassesiones obtenindolas de la lista dearchivos de ese directorio.

    La sintaxis de la funcin es la siguiente:session_save_path(path);

  • 8/2/2019 Revista Hack X Crack 20

    7/68

    PC PASO A PASO N 20 Pgina 7

    El parmetro path es opcional.

    Y el resultado obtenido es:

    2.6 session_id

    Esta funcin devuelve el identificador dela sesin del usuario en el sitio Web, porlo tanto es una de las funciones msimportantes en el manejo de la sesin.

    Y el resultado obtenido es:

    2.7 session_registerEsta funcin se encarga de registrar losparmetros que se le pasan a la funcin,como variables a nivel de sesin. Por lotanto el nmero de argumentos de esta

    funcin no es fijo y depender de las variables quedeseemos declarar.

    Para explicar el funcionamiento de la funcinsession_register() lo veremos en el siguiente ejemplo(sesion1):

    Sesion Paso 1

    Siguiente

    Y recogemos los valores en la siguiente pgina(sesion2), que guardaremos como sessioones5.php:

    Sesion Paso 2

    Nombre:

    Apellidos:

    SesionId:

    Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

  • 8/2/2019 Revista Hack X Crack 20

    8/68

    Pgina 8 PC PASO A PASO N 20

    Y el resultado obtenido es:

    Los valores de las variables almacenadasen la sesin se recogen utilizando$HTTP_SESSION_VARS[nombre_variable] pero tambin se puede utilizar suversin reducida $_SESSION, tal comopodemos ver en el ejemplo anterior.

    Como podemos observar la recogida delos valores de las variables tambin lapodemos realizar mediante el array$GLOBALS que guarda todas las variablesde mbito global.

    Si no se llamase la funcin session_start()para continuar con la sesin, no se podranrecuperar las variables globales.

    Si nuestro script usa session_register(),no funcionar en entornos en donde ladirectiva PHP session.register_globals dephp.ini est deshabilitada. Actualmenteel uso de session.register() estdesfasado, por ello tanto para guardarcomo para recoger las variables de la

    sesin utilizaremos $_SESSION comoya se ha visto anteriormente.

    2.8 session_unregister

    Esta funcin realiza el proceso contrariode la funcin anterior (session_register).Se encarga de eliminar la relacin entre

    la variable y la sesin. Los argumentos de esta funcinson los nombres de las variables que queremosliberar.

    Si sustituimos el cdigo de sesion2 por el siguiente:

    Sesion Paso 2

    Nombre:

    Apellidos:

    SesionId:

    Recuerda que debemos ejecutar antes el cdigo desesion1 y despus el de sesion2

    Obtendramos el siguiente resultado:

    Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

  • 8/2/2019 Revista Hack X Crack 20

    9/68

    PC PASO A PASO N 20 Pgina 9

    Para vaciar el valor de una variable de sesin tambin lopodemos realizar como en cualquier otra variable utilizandola funcin unset(nombre_variable) (Definida en el tema1)

    2.9 session_is_registered

    Esta funcin nos permite averiguar si una variable ya hasido registrada en la sesin. La funcin devolver true sila variable est registrada en la sesin y false en casocontrario.

    Al sustituir el cdigo de sesion2 por el siguiente cdigo:

    Sesion Paso 2

    Nombre:

    Apellidos:

    SesionId:


    Antes de utilizar session_unregister:

    Variable Nombre:REGISTRADA

    NO REGISTRADA

    Apellidos:

    REGISTRADA

    NO REGISTRADA


    Despus de utilizar session_unregister:
    Variable Nombre:

    REGISTRADA

    NO REGISTRADA Apellidos:

    REGISTRADA

    NO REGISTRADA

    Recuerda que debemos ejecutar antes el cdigode sesion1 y despus el de sesion2

    Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

  • 8/2/2019 Revista Hack X Crack 20

    10/68

    Obtendremos el siguiente resultado:

    Para comprobar si variable de sesin hasido inicializada, tambin lo podemosrealizar como en cualquier otra variableu t i l i z a n d o l a f u n c i nisset(nombre_variable) (Definida en eltema1)

    2.10 session_decode

    Recupera todos los datos de la sesinque estn almacenados en una cadenay que es pasada como argumento, dandovalores a las variables utilizadas en lasesin.

    La sintaxis de la funcin es la siguiente:session_encode(string datos);

    2.11 session_encode

    Codifica los datos que provienen de lasessin actual, en una variable de tipostring.

    La sintaxis de la funcin es la siguiente:session_encode();

    3. Cookies

    Uno de los problemas que nosencontramos en Internet es no poderidentificar a los usuarios que visitannuestras pginas. Si un usuario abandonanuestro site y a los cinco minutos vuelve,el servidor no es capaz de saber si setrata del mismo usuario o de otrodiferente. No nos vale controlar esto conlas sesiones, ya que si el usuario cerrase

    su navegador o reiniciase su equipo,estara en una sesin distinta y lehabramos perdido la pista. Otra manerade mantener la sesin identificando alnavegante es utilizando las cookies.

    Para solucionar este problema utilizaremoslas cookies, que son pequeos ficherosde texto que el servidor deposita en elcliente (es un espacio que reserva elnavegador) para que, si posteriormente

    el mismo usuario accede al servidor, stees reconocido por el servidor al examinarla cookie previamente depositada.

    El pequeo fichero de texto que formauna cookie se guarda de la siguienteforma:nombre=valory, a pesar de que se trata de algoinofensivo, estn rodeadas de unaseguridad adicional:un navegador web como Internet

    Explorer o Netscape, tan slo puedealamacenar un nmero mximo de300 cookies en total y no ms de 20cookies por servidor.

    Adems el tamao de una cookie estlimitado a 4kb. Si se alcanzase el lmitede 300 cookies, estas se iran eliminandopor antigedad.

    Pgina 10 PC PASO A PASO N 20

    Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

  • 8/2/2019 Revista Hack X Crack 20

    11/68

    PC PASO A PASO N 20 Pgina 11

    El uso de las cookies es muy habitual enlas Webs en los que debe existir unseguimiento de las acciones del usuario.

    Las cookies son parte de la cabeceraHTTP, por tanto debemos llamar la funcinsetcookie() (utilizada para crear cookies)antes de que se produzca cualquier salidaal navegador. Cualquier cookie del cliente,automticamente se convertir en unavariable PHP igual como ocurre con losmtodos de datos GET y POST,dependiendo de las variables deconfiguracin register_globals yvariables_order.

    En PHP 4.1.0 y posteriores, la matrizauto-global $_COOKIE ser siempreactualizada con cualquier cookie mandadapor el cliente.

    $HTTP_COOKIE_VARS tambin seactualiza en versiones anteriores de PHPcuando la variable de configuracintrack_vars est activada. (Siempre estactivada a partir de PHP 4.0.3.)

    3.1 Crear una Cookie

    Para trabajar con cookies, lo primero quedebemos hacer es crear una cookie ypara ello utilizaremos la funcin setcookie

    La sintaxis de la funcin es la siguiente:

    int setcookie (string nombre, stringvalor, int caducidad, string ruta,string dominio, int secure)

    Todos los parmetros excepto nombreson opcionales. Tambin podemossustituir cualquier parmetro por unacadena de texto vaca ("") y saltar asese parmetro.

    Los parmetros caducidady secure son nmeros enteros

    y no podemos sustituirlos con una cadena de texto

    vaca, en su lugar debemos utilizar un cero (0).

    El parmetro caducidades un entero de tiempo tpico

    de UNIX tal como lo devuelven las funciones time()

    o mktime().

    El parmetro secure indica que la cookie se debe

    transmitir nica y exclusivamente sobre una conexin

    segura HTTPS.

    Si deseamos asignar mltiples valores a una cookie

    simple, aade simplemente [] a el nombre de la cookie,

    es decir, convertir a la cookie en un array de cookies.

    Al ejecutar el cdigo anterior obtenemos el siguiente

    resultado:

    Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

  • 8/2/2019 Revista Hack X Crack 20

    12/68

    setcookie() define una cookie para serenviada con el resto de la informacin

    de la cabecera HTTP.

    Las cookies deben enviarse antes de

    mandar cualquier otra cabecera (esta es

    una restriccin de las cookies, no de

    PHP). Esto requiere que situemos las

    llamadas a esta funcin antes de cualquier

    etiqueta o .

    Si escribimos cualquier cosa antes de la

    creacin de la cookie la ejecucin de

    nuestra pgina PHP generar un error.

    3.2 Borrar una Cookie

    Para borrar una cookie se utiliza el mismo

    sistema que para crear una nueva, pero

    no se le asocia ningn valor.

    De esta forma se elimina la cookie del

    cliente.

    3.3 Leer una Cookie

    Para acceder al contenido de una cookie,

    basta con utilizar el nombre de la variable.

    Tambin podemos acceder al valor de lacookie utilizando:$HTTP_COOKIE_VARS[nombre].

    O podemos utilizar su forma abreviada.

    El resultado de ejecutar los tres ejemplosanteriores es:

    print(HTTP_COOKIE_VARS: . $HTTP_COOKIE_VARS[alumno]);

    Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

  • 8/2/2019 Revista Hack X Crack 20

    13/68

    3.4 Limitar el alcance de las

    cookies

    Las cookies se pueden limitar por mediode los parmetros que utilizamos en su

    creacin, la limitacin de una cookie serealiza por tres mbitos:directorio de acceso: delimita el

    directorio de acceso a la cookie, solo enel directorio que le indiquemos podremostener acceso a la cookie. Se define en elparmetro ruta en la creacin de la cookie.fecha de caducidad: estable la fecha

    de caducidad de la cookie, se le debeindicar por medio de un nmero entero,utilizando las funciones mktime() o time().

    Se define en el parmetro caducidadenla creacin de la cookie.dominio de procedencia: slo puede

    accede a esa cookie el dominio indicadoen su creacin. Se define en el parmetrodominio en la creacin de la cookie.

    4 Enviar cabeceras HTTP

    Utilizaremos la funcin header() paraenviar cabeceras http. Su sintaxis es lasiguiente:

    header(Nombre Cabecera: valor cabecera);

    Al igual que la funcin setcookie se debeutilizar esta funcin al principio de lapgina, antes de escribir cualquier valoren el cliente.

    En la siguiente entrega haremos uso detodo lo aprendido aplicado y seguiremoscon los sockets.

    Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

  • 8/2/2019 Revista Hack X Crack 20

    14/68

    Pgina 14 PC PASO A PASO N 20

    1. INTRODUCCION

    Despus de haber estado hablando

    indirectamente sobre el protocolo TCP/IPdurante 10 meses en la serie RAW, al finvamos a entrar de lleno en la base detodo esto: la base sobre la que se apoytoda la serie RAW.

    Al hablar del protocolo TCP al fin vamosa comprender qu es lo que ocurrerealmente cuando hacemos un Telnet yla necesidad de establecer conexionesde este tipo.

    Comprenderemos tambin por qu seutiliza TCP como protocolo de transportepara la mayora de las aplicaciones, alcompararlo con UDP y comprobar queson muchas las ventajas.

    Con este artculo, entramos a fondo enconceptos nuevos, como son lasconexiones virtuales, el control de flujo,los flags, etc. Quiz no os queden deltodo claros los conceptos despus determinar de leerlo, pero no os preocupis,que est todo previsto.

    El curso continuar con una segundaentrega dedicada a TCP, en la cualaclararemos muchos de los conceptosque quedarn hoy en el aire, y veremosuna serie de ejemplos que conseguirn

    con la prctica lo que no se puedeconseguir con la mera teora.

    Adems, para hacerlo un poco msamena, la segunda entrega incluirtambin algunas tcnicas de hackingbasadas en el funcionamiento de TCP,que es lo que a muchos de vosotros msos interesa. ;-) Aprenderemos adems aconstruir las cabeceras tal y como son enrealidad, en binario. Pero lo msimportante es que podremos ver en detallecmo es el trf ico que circulaconstantemente entre nuestro ordenadory la red Internet.

    2. DIFERENCIAS ENTRE TCP YUDP

    Por si no lo habis hecho, es importanteque antes de continuar repasis los dosartculos anteriores del curso de TCP/IP(Introduccin, y UDP), ya que vamos aempezar comparando este nuevoprotocolo con el que ya conocamos, el

    protocolo UDP.

    2.1. Conexiones virtuales

    Volvemos a insistir una vez ms en queuna de las principales diferencias entreTCP y UDP es la existencia de conexionesvirtuales. Como ya vimos, el protocoloTCP se dice que es orientado a conexin

    CURSO DE TCP/IP: (3 ENTREGA)TCP (TRANSMISION CONTROL

    PROTOCOL) - 1 parte.- Empezaremos a estudiar las CABECERAS TCP

    - Veremos las diferencias entre TCP y UDP

    - Qu es eso de "protocolo orientado a la conexin"? ---> conexiones virtuales

  • 8/2/2019 Revista Hack X Crack 20

    15/68

    PC PASO A PASO N 20 Pgina 15

    (en realidad conexiones virtuales),al contrario que UDP (no orientado aconexin).

    Las implicaciones de esto son muchas,tal y como iremos viendo a lo largo delartculo.

    De momento quedmonos con la idea deconexin virtual.

    Por qu se habla de conexiones virtuales,y no de conexiones a secas? Paraencontrar una respuesta a esta preguntabasta con pensar un poco en la

    arquitectura de la red Internet (y decualquier red TCP/IP).

    Si Internet hubiese existido hace 50 aos,probablemente su arquitectura hubierasido muy diferente, igual que la redtelefnica de ahora es muy diferente ala que haba entonces. La red telefnicade aquellos aos dependa de una figurahumana bien conocida: la telefonista.

    Las telefonistas eran unas mujeres casib i n i cas que ac tuaban comointermediarias entre los distintos clientesde la red telefnica para que estospudieran comunicarse entre s. Cuandoun cliente deseaba hablar con otro, una

    te le fon is tat en a quees t ab l e ce runa conexinmanual entre

    las lneas dea m b o sc l i e n t e s ,conectandolos cab lescorrespon-dientes en unp a n e l d econexiones.

    Imaginemos cmo habra sido la Interneten aquellos aos. Un autentico ejrcitode internetistas trabajando 24 horas

    para dar servicio a todas las conexionesque estableciese cualquier cliente: cadavez que alguien desease leer su correoelectrnico, una internetista tendra queestablecer una conexin en el panel entreel cliente y su servidor de POP3, cada vezque alguien visitase una pgina web unainternetista tendra que establecer unaconexin entre el cliente y el servidor dela pgina web, etc., etc.

    Desde luego, esto habra sido una locurainviable, sin contar con el hecho de quela red sera muy lenta y muy insegura.

    Si tratsemos de mejorar esta ideasustituyendo a las internetistas humanaspor un medio mecnico automatizado queestableciese las conexiones medianterels seguiramos teniendo muchosproblemas, y uno de los ms preocupantessera el de la velocidad.

    Se mire por donde se mire, una red enla que haya que establecer nuevasconexiones cada vez que se desee utilizarun servicio siempre ser ms lenta queuna red en la que todo est conectadode antemano.

    Y precisamente esa es la topologa de lared Internet: todo est conectado deantemano. Nuestro PC siempre tiene unnico cable que nos conecta con Internet

    (el cable de red que va al router, o elcable que va al modem, o el cable etreoque nos une con nuestra estacinwireless). Y lo mismo ocurre con cualquiermquina conectada a Internet. Nuncahay que cambiar ningn cable de sitio,por muy diferentes que sean lasconexiones que queramos establecer.Tanto si vamos a enviar un correo a

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    16/68

    Pgina 16 PC PASO A PASO N 20

    nuestro mejor amigo, como si vamos aver una pgina web de Japn, lasconexiones fsicas son siempre las

    mismas.Esto hace que los protocolos de la redInternet tengan necesariamente que estarmuy bien pensados para que esto no delugar a un completo caos. Para evitarestas confusiones nace el concepto deconexin virtual, que busca las ventajasde las redes en las que las conexionesno estn establecidas de antemano, perosin toparse con sus desventajas.

    Si bien todo sigue conectado deantemano, las conexiones virtualesemulan el mecanismo por el cual, antesde comenzar una comunicacin entre dospuntos, es necesario poner a ambaspartes de acuerdo y establecer unaconexin entre ambas.

    En teora, las conexiones virtualespermiten, igual que una conexin real,que la comunicacin no sea escuchadapor nadie que no est conectado al cableque une ambos puntos, que terceraspersonas no puedan intervenir en lacomunicacin enviando datos que nosean de ninguna de las dos parteslegtimas, que nadie pueda hacerse pasarpor otro, etc., etc. Por supuesto, todoesto es en teora pero, como biensabemos, nada en este mundofunciona como en teora debera. ;-)

    Qu es lo que caracteriza una

    conexin?

    Las conexiones de las que hemos habladoson siempre conexiones entre dospuntos, y as son todas las conexionesen TCP. Aunque puedas estar en un chathablando con 100 personas a la vez, enrealidad toda esa comunicacin se realizaa travs de pares de conexiones.

    Para entenderlo, veamos el caso de unchat entre 3 personas. Podramos pensaren primer lugar en una solucin que fuese

    un nico cable con 3 conectores queconectase entre s a los 3 interlocutores.

    Pero, que ocurrira si quisiramos metera una persona ms en la conversacin?Tendramos que quitar el cable de 3conectores y cambiarlo por uno de 4?Sera mucho ms sencillo un sistema enel cual todo funcionase mediante cablesde slo dos conectores. Para que alguienentrase o saliese del chat, bastara conconectar o desconectar un slo cable,pero no habra que modificar toda la red,y el resto de usuarios del chat no se veran

    afectados por lo que hiciera uno solo.

    Para poder realizar este chat entre 3personas mediante cables de 2 conectoresse hace imprescindible la presencia de unintermediario que gestione todas lasconexiones de todos los usuarios. Esta esprecisamente la misin de un servidorde chat.

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    17/68

    PC PASO A PASO N 20 Pgina 17

    Como vemos en esta otra imagen, ahorahay 3 cables en lugar de uno slo, y cadacable conecta a un nico usuario con elservidor que gest iona el chat.

    Es importante comprender que esto quehemos dicho de los cables de slo dos

    conectores no se refiere a lasconexiones fsicas de Internet, si noa las conexiones virtuales que nos da elprotocolo TCP.

    De hecho, muchas redes TCP/IP tienenfsicamente conectadas todas susmquinas entre s, en lugar de realizarlas conexiones mediante cables punto apunto, pero insisto en que esto sloocurre con las conexiones fsicas, perono con las conexiones virtuales, que son

    siempre punto a punto.

    Por lo que hemos visto hasta ahora, es obvio que lo

    primero que caracteriza a una conexin son los dos

    extremos que conecta. En nuestro contexto, los

    extremos de la conexin se identifican mediante lasconocidas direcciones IP.

    Pero la identificacin de los extremos no es lo nico

    que caracteriza una conexin. Cada uno de los

    extremos podra tener varios conectores diferentes,

    as que no slo basta saber con quin conectas, si

    no tambin dnde. En nuestro contexto, cada uno

    de los conectores de un mismo extremo seran los

    diferentes servicios: HTTP, FTP, POP3, etc.

    Por tanto, al igual que ocurra con UDP, otro de los

    parmetros que caracterizan una conexin TCP son

    los puertos de conexin de ambos extremos.

    Si se tratase de conexiones fsicas, no hara falta

    mucho ms para ser caracterizadas. En cambio, al

    tratarse de conexiones virtuales, necesitamos algn

    mecanismo que identifique una conexin establecida.

    Y es aqu donde vemos la principal diferencia entre

    TCP y UDP.

    Los paquetes TCP contienen un campo en su cabecera

    que no contienen los paquetes UDP. Este campo

    adicional es el que permite identificar la conexin

    virtual a travs de la cual circula el paquete.

    La solucin ms obvia que podramos encontrar

    para implementar este identificador de conexin

    sera utilizar un nmero que identificase

    unvocamente la conexin. Pero esta solucin

    presentara varios problemas, el mayor de los cuales

    sera quiz la seguridad.

    Si una conexin se identifica permanentemente por

    un mismo nmero, es slo cuestin de tiempo que

    un atacante encuentre ese nmero por fuerza bruta

    y as, con slo spoofear su IP (utilizar algn

    mecanismo para enviar paquetes en nombre de una

    IP que no sea la suya), se pueda colar en la conexin

    ajena. Una solucin mucho mejor es utilizar un

    nmero que vaya cambiando con cada paquete,

    segn unas ciertas normas establecidas entre los

    dos extremos.

    Hablando claro...!

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

    Hablando claro, no importa como conectes fsicamente tu PC

    a otros PCs (hay mil maneras de hacerlo, unas son punto a

    punto y otras no). Lo importante es que TU PC (y cualquier

    otro PC del mundo), cuando utilice el protocolo TCP,

    establecer siempre conexiones virtuales punto a punto.

  • 8/2/2019 Revista Hack X Crack 20

    18/68

    Pgina 18 PC PASO A PASO N 20

    Esto en realidad no es tal y como lo pinto. Este

    nmero cambiante realmente existe, pero su principal

    finalidad no es la de identificar conexiones, si no

    ms bien la de mantener el estado de evolucin deuna conexin, y saber as en todo momento qu

    paquetes se pueden enviar y qu paquetes se pueden

    recibir a travs de esa conexin.

    Este nmero es el llamado nmero de secuencia,

    pero mejor ser que no nos precipitemos ms, que

    ya habr tiempo de ver todo esto en detalle.

    2.2. Fiabilidad en la comunicacin

    Como ya cont en el artculo sobre UDP, al contrarioque ste, el protocolo TCP tiene un mecanismo para

    asegurar que los datos llegan correctamente a su

    destino. Para conseguir esto, cada paquete TCP que

    llegue a un destino ha de ser respondido por ste

    mediante otro pequeo paquete que confirme la

    recepcin.

    Esto sera as en el caso ms sencillo,pero menos comn, que sera el de unacomunicacin unidireccional, donde slouna de las partes enviase datos a la otra.

    En la prctica, la mayora de los serviciosson bidireccionales, por lo que esnecesario intercalar los paquetestransmitidos con las confirmaciones delos paquetes recibidos.Esto podra dar lugar a un gran nmerode paquetes (el doble, exactamente), yaque a cada paquete de datos habra quesumar adems el correspondientepaquete de confirmacin.

    Una solucin mucho ms eficiente esenglobar en un slo paquete los datostransmitidos y la confirmacin de los datos

    recibidos.

    En esta figura vemos cmo las mquinasA y B intercambian paquetes a travs deuna misma conexin, actuando ambossimultneamente como transmisores yreceptores.

    En primer lugar, la mquina A enva elprimer paquete (Paquete 1 A). Una vezrecibido el paquete 1 A, la mquina Bdecide tambin empezar a enviar suspropios paquetes, por lo que enva unnico paquete a A en el que engloba laconfirmacin de que recibi el paquete 1A, as como su propio paquete 1 B.

    A esto responder la mquina A enviandoel siguiente paquete de los que deseatransmitir, pero englobando en el mismotambin la confirmacin de que recibicorrectamente el paquete 1 B.

    As continuara la comunicacin, hastaque la mquina A decidiese dejar detransmitir sus propios datos, por lo que

    su nica misin consistira ya slo enseguir confirmando la recepcin de lospaquetes que le enva B, como ocurre enla figura con el caso del paquete 2 B, alcual la mquina A responde slo con unaconfirmacin de recepcin, pero sinenglobar ms datos en el mismo paquete,ya que A no tiene ya nada ms que deseeenviar.

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    19/68

    PC PASO A PASO N 20 Pgina 19

    Qu ocurre si uno de los paquetesse pierde por el camino? Cada vez queuna mquina transmite un paquete TCP,

    sta no lo borra de su memoria, si noque lo deja almacenado an por untiempo, esperando que llegue laconfirmacin de su recepcin. Si stallega, se podr borrar el paquete de lamemoria, y olvidarse para siempre del. En cambio, si pasado un tiempoprudencial no ha llegado la confirmacinde su recepcin, se asumir que elpaquete no ha llegado a su destino, porlo que ste se retransmitir. As, elpaquete se conservar en la memoriatodo el tiempo que sea necesario,reenvindolo cada cierto tiempo, hastaque al fin llegue la confirmacin de queel paquete fue recibido.

    En el caso de que, debido a estosreenvos, un mismo paquete llegue msde una vez al mismo destino, no habrningn problema, ya que el diseo deTCP permite diferenciar perfectamenteun paquete de otro, por lo que al detectar

    la duplicacin simplemente se rechazarla copia.

    2.3. Orden en los datos

    Tal y como decamos tambin en elanterior artculo, TCP identifica cadapaquete con un nmero de secuenciaque permite ordenarlos correctamenteindependientemente de su orden dellegada al destino.

    En el caso de UDP, los paquetes se ibanprocesando segn iban llegando. Encambio, en TCP un paquete se puededividir en fragmentos que podrn llegaren cualquier orden, y los datos no seprocesarn hasta que se hayan recibidotodos los fragmentos y estos se hayanordenado segn el nmero de secuenciade cada paquete.

    2.4. Tratamiento de paquetesgrandes

    Esta capacidad de dividir los datos enfragmentos ordenados, combinada con elsistema de confirmacin de respuestasde TCP, convierte a ste protocolo en unprotocolo de transporte ideal para latransmisin segura de grandes cantidadesde datos.

    2.5. Control de flujo

    Aqu entramos ya en un nuevo concepto

    que habr que introducir, ya que es unode los conceptos bsicos del campo delas redes y telecomunicaciones.

    Hasta ahora hemos tratado las redes ylas mquinas como si fuesen perfectas,sin limitaciones. Pero sabemos muy bienque en la vida real esto no es as ya que,por ejemplo, el ancho de banda de unared es uno de los factores msdeterminantes de su efectividad.

    Hemos asumido que los paquetes se ibantransmitiendo a diestro y siniestro, y queestos iban a ser recibidos sin problemas.Bueno, no exactamente... Hemos dichoque s que poda haber problemas en larecepcin, pero realmente no hemoshablado de los problemas del ancho debanda.

    Si la nica solucin ante la congestin de

    la red fuese el mecanismo explicadoanteriormente para asegurarnos de quetodos los datos llegan al destino, elproblema no se solucionara si no que, alcontrario, sera cada vez mayor.

    Imaginemos la situacin. La mquina A,que transmite los paquetes, es demasiadorpida para lo que es capaz de procesar

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    20/68

    Pgina 20 PC PASO A PASO N 20

    la mquina B, que recibe los paquetes.Por tanto, la mquina A empieza a enviarpaquetes a toda velocidad y sin

    compasin, esperando las confirmacionesde la mquina B. Como B no da abasto,no es capaz de enviar las confirmacionesde recepcin a tiempo. Al no llegar lasconfirmaciones, A se pondr a reenviarlos paquetes anteriores, al mismo tiempoque contina enviando paquetes a diestroy siniestro, por lo que la congestin,sumando los paquetes nuevos y los viejos,ser muchsimo mayor.

    Si no se implementa algn mecanismopara evitar este caos, la situacin puedehacerse insostenible en poco tiempo. Unmecanismo que se encargue de ajustarel f lujo de la comunicacin esprecisamente lo que se conoce comocontrol de flujo.

    En el caso de TCP, disponemos de unsencillo mecanismo de control de flujo,que consiste en incluir en la cabecera de

    cada paquete un campo que indica alotro extremo de la comunicacin cmoestamos de congestionados. Esta medidade la congestin la llevamos a cabodiciendo cuntos bytes estamospreparados para recibir. Segn nosvayamos saturando, este nmero sercada vez menor, y el otro extremo de la

    comunicacin, a no ser que sea un mal-nacido (que los hay), tendr que actuaren consecuencia, relajndose un poco y

    dndonos tiempo a asimilar lo que ya nosha enviado.

    Ms adelante veremos en detalle cmose implementa el control de flujo en TCP.

    3. LO QUE S QUE TIENEN ENCOMN TCP Y UDP

    Como no todo va a ser diferencias, vamosa ver los puntos en comn entre ambosprotocolos de transporte que, en el fondo,son bastante parecidos.

    En primer lugar, TCP tambin se apoyasobre el protocolo IP y, en este caso, elnmero de protocolo asignado a TCPpara que la capa de red (la capa IP) puedaidentificar el protocolo de transporte, esel nmero 6.

    Como ya sabemos, la cabecera IPcontendr entre sus campos uno queidentifique el protocolo de transporte queest por encima de l.

    Todo esto que...!

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

    Todo esto que estamos explicando despus lo tocaremos

    en la realidad. Veremos los paquetes TCP y dnde est

    localizado cada concepto del que hablamos.

  • 8/2/2019 Revista Hack X Crack 20

    21/68

    PC PASO A PASO N 20 Pgina 21

    El punto en comn ms importante entre

    TCP y UDP es que el mecanismo de

    identificacin de servicios es el mismo:

    cada paquete, tanto en TCP como enUDP, lleva dos nmeros de puerto

    (origen, y destino), ambos comprendidos

    entre 0 y 65535 (16 bits).

    Los puertos de TCP funcionan

    exactamente igual que los de UDP, pero

    no tienen ninguna relacin entre s, es

    decir, existen 65536 puertos para TCP, y

    otros 65536 puertos diferentes para UDP.

    Si, por ejemplo, en un firewall cierras elpuerto 21 de TCP, no estars cerrando

    al mismo tiempo el puerto 21 de UDP,

    ya que son totalmente independientes.

    Otro punto en comn es que ambos

    protocolos incluyen una suma de

    comprobacin en cada paquete, que

    verifica la correccin de los datos incluidos

    en el mismo. La cabecera que se codifica

    en la suma de comprobacin de TCP esmuy similar a la que se utiliza en UDP.

    4. LA CABECERA TCP ENDETALLE

    Entramos ya en los detalles tcnicos del

    protocolo TCP. En este caso, el RFC que

    los especifica es el RFC 793. Desde la

    pgina de los RFC (http://www.rfc-

    editor.org) podemos bajar tanto versinen TXT (http://www.rfc-editor.org/cgi-

    bin/rfcdoctype.pl?loc=RFC&letsgo=793

    &type=ftp&file_format=txt), como versin

    en PDF (http://www.rfc-editor.org/cgi-

    bin/rfcdoctype.pl?loc=RFC&letsgo=793

    &type=ftp&file_format=pdf).

    Como vemos, el RFC tiene 91 pginas,por lo que es bastante ms denso que lamayora de los RFCs que hemos vistohasta ahora (tanto en la serie RAW comoen el curso de TCP/IP). An as, no esdemasiado duro de leer, sobre todo siprescindimos de algunas cosas pocoimportantes para la comprensin delprotocolo, como la especificacin de lasvariables del TCB, o toda la parte del finalrelativa al procesamiento de eventos. Encualquier caso, ya sabis que aqu tendrisun buen resumen de todo lo ms

    importante. ;-)

    Como ya somos expertos en protocolos,vamos a plantar aqu directamente lacabecera TCP. No pierdas de vista estaimagen, haremos referencia a ella a lolargo de todo el artculo.

    RFC 793 en espaol!

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

    RFC 793 en perfecto espaol!!! Como ya hemos comentadomuchas veces, tenemos traducidos muchos de los RFC al espaol

    en la Web www.rfc-es.org. Este es el trabajo de muchas personas

    que desinteresadamente estn colaborando en un proyecto

    realmente descomunal: traducir los ms de 3000 documentos, si

    controlas de Ingles y te animas, ya sabes :)

    El RFC 793 en castellano est en http://www.rfc-

    es.org/getfile.php?rfc=0793

  • 8/2/2019 Revista Hack X Crack 20

    22/68

    Pgina 22 PC PASO A PASO N 20

    Bueno, bueno, la cosa ya va siendo msseria, eh? ;-)Que nadie se asuste! Ya veris como

    en un momento comprendemos todo loque hay en esa imagen aparentementetan complicada.

    Vamos a ir viendo campo por campo todala cabecera, para luego entrar en detalleen el tamao de los campos a nivel debit (ya en el prximo artculo).

    4.1. Puerto de origen

    Este campo tiene el mismo significadoque en el caso de UDP. En TCP es deespecial importancia, porque es condicinnecesaria (aunque no suficiente) paraidentificar una conexin virtual.

    4.2. Puerto de destino

    Tambin tiene el mismo significado queen UDP, y tambin es condicin necesaria(aunque no suficiente) para identificar

    una conexin virtual.

    Es decir, si nos llega un paquete quecoincide en IP de origen, IP de destino,Puerto de origen, y nmero de secuencia,con los de una conexin virtual, pero nocoincide el puerto de destino, entoncesese paquete no se puede considerarperteneciente a esa conexin virtual. Lomismo ocurre si el que cambia es elpuerto de origen.

    4.3. Nmero de Secuencia

    Aqu empieza lo ms divertido, ya queeste campo es uno de los que ms nosdar que hablar. El nmero de secuenciaes un nmero bastante grande (32 bits)que tiene varias funciones.

    Por un lado, identifica unvocamentea cada paquete dentro de una conexin,y dentro de un margen de tiempo. Es

    este nmero el que nos permite detectarsi un paquete nos llega duplicado. Duranteun margen de tiempo (que depende delflujo de los datos y, por tanto, tambindel ancho de banda) tenemos la garantade que en una determinada conexinvirtual no habr dos paquetes diferentescon el mismo nmero de secuencia.

    Por ejemplo, en una conexin de 2Mbps,este margen de tiempo es de unas 4 horasy media, mientras que en una conexinde 100Mbps el margen es de 54 minutos.

    Por qu este margen de tiempo vara enfuncin del flujo de datos? Pues locomprenderemos en cuanto veamos ques exactamente el nmero de secuencia.

    Y es que el nmero de secuencia es muchoms que un mero identificador depaquetes. El valor del nmero desecuencia no es aleatorio, si no que tiene

    un significado muy concreto. El nmerode secuencia es el orden en bytes queocupan los datos contenidos en elpaquete, dentro de una sesin.

    Es decir, supongamos que el primerpaquete enviado una vez establecida unaconexin tiene un nmero de secuencia0, y el paquete contiene 200 bytes dedatos. El siguiente paquete que se enviasetendra que tener 200 como nmero de

    secuencia, ya que el primer paquetecontena los bytes del 0 al 199 y, portanto, el orden que ocupan los datos delsegundo paquete es el siguiente: 200.

    Por qu decamos entonces que elnmero de secuencia ident i f icaunvocamente un paquete dentro de unmargen de tiempo? Porque el nmero de

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    23/68

    PC PASO A PASO N 20 Pgina 23

    secuencia es siempre creciente, por loque un paquete posterior a otro siempretendr un nmero de secuencia mayor.

    Claro que... ser mayor en mdulo 32.Esto significa que, una vez que el nmerode secuencia valga 232 1, es decir, elmayor nmero que se puede representarcon 32 bits, el prximo nmero desecuencia utilizado ser 0, es decir, sedar la vuelta al marcador.

    Por supuesto, cunto se tarda en dar lavuelta al marcador depende directamentede cuntos datos se enven, y en cuantotiempo.

    En la imagen podemos ver reflejado esto.Como vemos, el primer nmero desecuencia es 0, y el primer paquetecontiene 200 bytes de datos. Por tanto,el segundo paquete tendr nmero desecuencia 200. Este paquete contiene12345 bytes de datos, por lo que elprximo paquete tendr como nmerode secuencia: 200 (nmero de secuenciaanterior) + 12345 = 15345.

    As contina la sesin, hasta que unpaquete tiene como nmero de secuencia232 1, y contiene 300 bytes de datos.En teora, el prximo nmero de secuenciatendra que ser 232 1 + 300 pero, comosolo contamos con 32 bits pararepresentar este nmero, tendremos quedar la vuelta al marcador, es decir,convertir el 232 en un 0, por lo que nos

    quedara: 0 1 + 300 = 299. Por tanto,299 sera el nmero de secuencia delprximo paquete.

    En realidad, el nmero de secuencia notiene por qu comenzar en cero. Elprincipal motivo es que si todas lasconexiones empezasen en 0, no se podranreutilizar las conexiones.

    Ya a estas alturas, habiendo visto todoslos campos relevantes, podemos afirmarque lo que identifica una conexin sonestos 5 parmetros: ip de origen, ip dedestino, puerto de origen, puerto dedestino, y nmero de secuencia.

    Imaginemos que, por ejemplo, nuestrosoftware de correo electrnico estconfigurado para comprobar si tenemosmensajes nuevos cada 30 segundos. Elprograma tendr que establecer unaconexin TCP/IP con el puerto 110 (puertode POP3) de un servidor POP3 cada 5segundos. En este caso, 4 de losparmetros que identifican la conexinpodran ser iguales: puerto de origen,puerto de destino, ip de origen, e ip dedestino.

    Digo que podran porque el puerto deorigen se podra cambiar de una conexina otra (el resto de parmetros no sepodran cambiar de ninguna manera),aunque esto en muchos casos no serposible o conveniente. Por tanto, el nicoparmetro con el que podemos jugar para

    poder establecer nuevas conexionessimilares sin que se confunda la nuevacon una vieja que ya se cerr, es elnmero de secuencia.

    Si cada vez que el programa de correose reconecta al servidor POP3 utilizamosel mismo nmero de secuencia paracomenzar la sesin (por ejemplo, 0), si

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    24/68

    Pgina 24 PC PASO A PASO N 20

    llegase un paquete muy retrasado delservidor de correo de una conexinanterior (de los 5 segundos anteriores),

    no habra forma de saber si este paqueteperteneca a la sesin anterior, o a lanueva sesin. Una forma sencilla de evitaresto es no utilizar siempre el mismonmero de secuencia para comenzar unasesin, si no ir utilizando nmeros desecuencia cada vez mayores.

    Veamos un ejemplo de esto a partir dela siguiente figura.

    En primer lugar, la mquina A abre unaconexin con la mquina B. Una vezabierta la conexin, A empieza atransmitir sus datos, empezando por unpaquete con nmero de secuenciaSeq = 0. B lo recibe y devuelve suconfirmacin de recepcin.

    A continuacin, A transmite un nuevopaquete, con nmero de secuencia 200(por tanto, el primer paquete tena quecontener 200 bytes de datos). Por algnazar del destino, este paquete va a tardar

    ms de lo normal en llegar a B. Como Aya ha enviado lo que quera, cierra laconexin, a pesar de que todava no ha

    recibido la confirmacin de que B recibiel paquete Seq = 200.

    Inmediatamente despus, A decideestablecer una nueva conexin con B paraenviarle otros datos. Comienza enviandoun primer paquete con Seq = 0, al cualresponde B con su confirmacin derecepcin. Para entonces, ya ha llegadoa B el paquete Seq = 200 de la anteriorconexin, por lo que construye su paquetede confirmacin. Pero la mala suerte seconfabula contra estas dos mquinas, y

    justo en ese instante A enva un nuevopaquete, que tiene tambin nmero desecuencia 200. Inmediatamente B envala confirmacin de recepcin del paqueteSeq = 200 de la anterior conexin.

    Qu ocurre a partir de aqu?

    1.- Desde el punto de vista de A, Bha recibido correctamente el ltimo

    paquete, por lo que continatransmitiendo nuevos paquetes,borrando de su memoria el paqueteSeq = 200, por lo que nunca loreenviar.

    2.- Desde el punto de vista de B,acaba de recibir un nuevo paqueteSeq = 200. Como B ya habarecibido un paquete Seq = 200,interpreta que ste paquete es unreenvo del anterior, por lo que lodesecha.

    Por tanto, ni B recoge el paqueteSeq = 200, ni A se entera de lo que hapasado. En realidad las cosas no sonexactamente como las pinto, pero yairemos viendo ms adelante cmo es todoesto realmente.

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    25/68

    PC PASO A PASO N 20 Pgina 25

    Por supuesto, el nmero de secuencia

    no sirve slo para detectar paquetes

    duplicados, o para diferenciar unas

    conexiones de otras, si no tambin parapoder ordenar los paquetes. Como el

    nmero de secuencia representa el orden

    exacto en bytes de los datos, es imposible

    confundirse a la hora de unir los datos

    en el orden correcto.

    4.4. Nmero de confirmacin

    Este campo es el que se utiliza para hacer

    las confirmaciones de recepcin de las

    que tanto hemos hablado. Su

    funcionamiento es muy similar al del

    nmero de secuencia, porque en realidad

    tambin representa un orden en bytes

    de los datos.

    Lo que se enva en el nmero de

    confirmacin es otro nmero de 32 bytes

    que indica cul es el prximo byte que

    estamos esperando rec ib ir .

    Si nuestro compaero en una conexin

    nos enva un paquete con nmero de

    secuencia 2000, y el paquete contiene

    350 bytes de datos, el prximo nmero

    de secuencia sera el 2350. Si queremos

    confirmar que hemos recibido el paquete

    con nmero de secuencia 2000,

    tendremos que enviar en nuestro paquetede respuesta un nmero de confirmacin

    que valga 2350, diciendo as: Ya puedes

    enviarme el paquete 2350. He recibido

    todo bien hasta aqu. Vamos a ver la

    misma figura que pusimos al hablar sobre

    el nmero de secuencia, pero esta vez

    incluyendo los nmeros de confirmacin.

    Este campo slo tiene significado si elpaquete tiene activo el flag ACK, peroeso ya lo veremos ms adelante.

    4.5. Comienzo de datos

    Este campo no era necesario en el casode UDP, ya que la cabecera UDP tiene untamao fijo de 8 bytes. En cambio, la

    cabecera TCP puede tener un tamaovariable, tal y como veremos msadelante, por lo que es necesario indicara partir de qu punto comienzan los datosy termina la cabecera.

    Este punto de comienzo no se expresaen bytes, como podramos esperar, si noen palabras de 32 bits. Si nos fijamosen la cabecera, veremos que estestructurada en filas, cada una de las

    cuales mide 32 bits. La primera filacontiene los puertos de origen y destino,la segunda el nmero de secuencia, latercera el nmero de confirmacin, etc.

    El valor ms habitual para este campo es5, que equivale a 20 bytes de cabecera,es decir, lo mnimo que puede ocupar lacabecera TCP.

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    26/68

    Pgina 26 PC PASO A PASO N 20

    4.6. Espacio reservado

    Despus del campo comienzo de datos,

    vemos que hay uno en el quesimplemente pone 0. Este es un espacioreservado de 4 bits, que hay que dejara cero, sin ms.

    4.7. FLAGS (URG, ACK, PSH,RST, SYN, FIN)

    Aqu tenemos tambin un asunto que vaa dar mucho que hablar. Los flags sonuna serie de indicadores de control, de

    un nico bit cada uno, con diferentesfunciones que detallo a continuacin.

    4.7.1. Flag URG (Urgent)

    Cuando este flag est activo (vale 1, enlugar de 0), estamos indicando que elpaquete contiene datos urgentes. Laespecificacin de TCP no detalla qu sedebe hacer exactamente ante unos datosurgentes, pero lo normal es atenderlos

    con mxima prioridad.

    Si, por ejemplo, estamos procesandodatos anteriores, y nos llega un paquetecon datos urgentes, normalmenteaplazaremos el procesamiento de losdatos anteriores para prestar toda nuestraatencin a los datos urgentes.

    Y para qu pueden servir los datosurgentes? No es habitual encontrarlos,

    pero un claro ejemplo es cuandodeseamos abortar alguna accin. Porejemplo, si alguna vez habis conectadopor Telnet con un sistema remoto (elpropio servicio de Telnet del puerto 23,no los experimentos raros que hacamosen la serie RAW ;-) sabris que con lacombinacin de teclas CONTROL- C sepuede abortar cualquier accin.

    Imaginemos que queremos ver elcontenido de un archivo remoto, porejemplo en Linux, y hacemos un cat del

    archivo:

    cat archivo.txt

    El caso es que, despus de hacer el cat,descubrimos que el archivo es muchoms largo de lo que esperbamos y, paracolmo, no nos interesa. PulsamosCONTROL-C y el listado del archivo seaborta sin necesidad de esperar a que elarchivo termine de mostrarse entero.

    El paquete que hemos enviado a lamquina remota conteniendo la orden deabortar el listado, tiene un flag URG

    activo.Si no existiese este mecanismo,probablemente la mquina remota seguiraenfrascada en su asunto inmediato, quees mostrar el listado del archivo, y nohabra hecho caso a nuestro CONTROL-C hasta que no hubiera terminado con losuyo.

    Para garantizar una mayor efectividad delflag URG hay que combinarlo con el flag

    PSH, que veremos ms adelante.

    4.7.2. Flag ACK (Acknowledge)

    Cuando este flag est activo (vale 1, enlugar de 0) significa que nuestro paquete,aparte de los datos propios que puedacontener, cont iene adems una

    Qu no sabis...!

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

    Qu no sabis lo que es cat? Pues tendris que repasar los

    artculos ya publicados sobre Linux de esta misma revista.

    ;-) y si no, consulta el google (www.google.com).

  • 8/2/2019 Revista Hack X Crack 20

    27/68

    PC PASO A PASO N 20 Pgina 27

    confirmacin de respuesta a lospaquetes que est enviando el otroextremo de la conexin.

    Por tanto, el campo nmero deconfirmacin no tiene significado a noser que est activo este flag.

    4.7.3. Flag PSH (Push)

    Cuando este flag est activo (vale 1, enlugar de 0) indicamos a nuestro propiosistema, y al sistema remoto con el queestamos conectados, que deben vaciar

    sus buffers de transmisin y recepcin...Creo que ha llegado el momento de hablarsobre los buffers de transmisin yrecepcin. :-m

    En todo sistema TCP tiene que haber dospequeas memorias, o buffers: una paratransmisin, y otra para recepcin. Estasmemorias son unas colas de paquetesen las que se van almacenando los

    paquetes que hay que procesar en esperadel momento adecuado.

    Por ejemplo, supongamos que unaaplicacin que corre en nuestro sistemadesea enviar un archivo, que ser partidoen 4 paquetes TCP. A pesar de quenuestra aplicacin lance la orden de enviarel archivo en un slo instante, nuestrosistema no podr enviar de golpe los 4paquetes. Por tanto, tendr que construir

    los paquetes, y luego ponerlos en unacola para que se vayan enviando uno trasotro.

    Si el sistema pudiera enviar los 4 paquetesa la vez no habra necesidad de tenerninguna cola, pero en la prctica, comoen cualquier cola, slo se puede pasarde uno en uno.

    En la imagen podemos ver cmo lospaquetes sin flag PSH se van encolandoen el buffer de transmisin. Cuando elsistema construye el ltimo paquete (elpaquete Seq = 300), ya puede comenzarel envo del archivo. Por tanto, en el ltimopaquete incluye el flag PSH.

    A partir del instante en que hemos metidoen el buffer el paquete con flag PSH, elsistema ir enviando uno tras otro lospaquetes a travs del cuello de botellaque supone el canal de salida. Se tratade un cuello de botella porque por l slopuede pasar un nico paquete en cadainstante, por lo que los paquetes tendrn

    que ir envindose de uno en uno segnel orden en que fueron ubicados en elbuffer de transmisin. Al tratarse de unacola, el primero en llegar ser el primeroen salir (lo que se llama una cola FIFO),por lo que primero saldr el paquete conSeq = 0.

    El ltimo paquete en salir ser el quetiene Seq = 300, que es precisamente elque lleva el flag PSH. En la siguienteimagen vemos todo esto desde el puntode vista del receptor.

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    28/68

    Pgina 28 PC PASO A PASO N 20

    Por el canal de entrada irn llegando lospaquetes uno tras otro. Se irnalmacenando en el buffer de recepcin,

    y no sern procesados hasta que llegueel ltimo paquete, que contiene el flagPSH. Como este paquete es el quecompleta el archivo de 400B, para cuandollegue, el sistema receptor ya podrprocesar los datos de los 4 paquetes yreconstruir el archivo original.

    Como decamos, el flag PSH debecombinarse con el flag URG cuando hayadatos urgentes. El flag URG ser elencargado de decir al receptor que hade atender los datos con mximaprioridad, y el flag PSH se asegurar deque el paquete no se retrase esperandoen los buffers.

    4.7.4. Flag RST (Reset)

    Cuando este flag est activo (vale 1, enlugar de 0), estamos indicando al otroextremo de la conexin que algo no anda

    bien, ya que los datos que nos han llegadono coinciden con nuestra conexin, porlo que se ha perdido la sincronizacinentre ambas partes.

    Ante cualquier campo incorrecto querecibamos (nmeros de secuenciainvlidos, o flags no esperados)tendremos que responder con un paquetecon este flag activo, para que el otroextremo se entere del problema, y secierre la conexin para re-sincronizarambas partes.

    Un uso tpico de este flag es cuandoestamos intentando conectar con unservidor, enviando varios paquetes paraestablecer la conexin, y al final uno deellos tiene xito. Si despus de esepaquete de conexin siguen llegando al

    servidor el resto de nuestros intentos deconexin, el servidor nos responder conRST a cada nuevo intento de conexin,

    para que nos olvidemos de esa conexiny nos centremos en la que ya tenemos.

    4.7.5. Flag SYN (Synchronization)

    Cuando este flag est activo (vale 1, enlugar de 0), estamos indicando al otroextremo que deseamos establecer unanueva conexin. Este flag se utilizanicamente al abrir una nueva conexin.

    Ms adelante veremos el mecanismoexacto por el que se establecen lasconexiones, as como algunas cuestionesde seguridad relacionadas con este flag.

    4.7.6. Flag FIN (Finish)

    Cuando este flag est activo (vale 1, enlugar de 0), indicamos al otro extremode la conexin de que, por lo que anosotros respecta, la conexin ya se

    puede cerrar.

    Normalmente, una vez que enviemosnuestro propio FIN, tendremos queesperar a que nuestro compaero nosenve el suyo. Una vez puestos los dosde acuerdo en que no hay ms que hablar,se puede cerrar la conexin pacficamente.

    Tanto RST como FIN se utilizan parafinalizar conexiones, pero la diferencia es

    que RST avisa de una situacin de error,mientras que FIN avisa de unaterminacin sin problemas.

    Ante una terminacin con RST,normalmente las aplicaciones avisarn alusuario, por ejemplo con una ventanaavisando que se ha perdido la conexin.

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    29/68

    PC PASO A PASO N 20 Pgina 29

    4.8. Ventana

    Este campo es el que se utiliza para llevar

    a cabo el control de flujo implementadoen TCP.

    Como ya dije, el control de flujo permiteevitar la congestin debida a la diferenciade velocidad (bien por capacidad deprocesamiento, o bien por ancho debanda) entre ambas partes de unaconexin.

    Una forma muy sencilla de conseguir esto

    es hacer que cada extremo de la conexinvaya indicando a cada momento cmode congestionado est. La mejor formade indicar esta medida de congestin esdecir cuntos bytes vamos a ser capacesde procesar en un momento dado.

    Por tanto, a cada paquete le acompaaun nmero de 16 bits, que es el nmerode bytes que estamos preparadospara recibir en el prximo paquete. Estosignifica que, como mximo, un paquetepodr contener 65536 bytes de datos,es decir, 64KB, ya que es el mximo quepodemos solicitar en cada momento.

    Normalmente, el tamao de la ventanaest relacionado con la cantidad deespacio libre que tenemos en el bufferde recepcin.

    Vamos a ver un ejemplo.

    En primer lugar, la mquina A enva unpaquete de 1000 Bytes, con nmero desecuencia 0.

    La mquina B lo recibe y procesacorrectamente, y enva su confirmacinde recepcin, indicando que la mquinaA puede continuar enviando a partir delbyte 1000 (Ack=1000). Adems, le indicaque est preparada para recibir otros1000 bytes ms. Si hacemos cuentas, enrealidad lo que est diciendo la mquinaB es que est preparada para recibir losbytes del 1000 al 1999.

    La mquina A contina transmitiendo, ylo hace esta vez con 1000 bytes ms dedatos, empezando, por supuesto, por elnmero de secuencia 1000.

    La mquina B tambin los recibe sinproblemas, pero se est empezando aagobiar un poco, por lo que avisa en suconfirmacin de que el prximo paqueteno podr ser tan grande y, como mucho,tendr que ser de 500 bytes nada ms.

    La mquina A, en cambio, no ha recibidoa tiempo la nueva ventana, y ha seguidoenviando los paquetes al ritmo que llevabaanteriormente. Por tanto, el prximopaquete (Seq=2000) contiene tambin1000 bytes de datos, a pesar de que lanueva ventana de B admite slo 500bytes.

    Justo despus de enviar este paquete

    demasiado grande, la mquina A recibeya el aviso de B de que se estcongestionando, por lo que decide esperara ver cmo se las apaa su compaero.

    Cuando B ha podido procesar unoscuantos datos, avisa a A de que puedeseguir enviando, aunque slo ha procesado500 bytes de los 1000 que le envi y,

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    30/68

    Pgina 30 PC PASO A PASO N 20

    adems, el prximo paquete tendr queser como mximo de 250 bytes.

    En respuesta, A enva un nuevo paquete,comenzando en el byte 2500, yconteniendo tan slo 250 bytes.

    Todo esto es muy bonito, A y B son muyamigos, y A le va enviando a B las cosaspoco a poco cuando ste se agobia. Peroesto en realidad no es una idea muybuena. Si A va haciendo caso a B segnste le vaya diciendo lo que puedemanejar, y B va avisando a A segn vayaliberando hueco en su buffer de recepcin,los paquetes que se transmitan irnsiendo cada vez ms pequeos.

    En el peor de los casos, podra llegar aser 0 la ventana de B, y en el instanteen que hiciese hueco para un mserobyte, avisar a A, por lo que A le enviaraun paquete con un nico byte de datos.Esto dara lugar a una transferencia muypoco efectiva de los datos, donde muchosde los paquetes seran de un tamaoridculo.

    Por tanto, es aconsejable no irajustndose literalmente al tamao dela ventana, si no dejar unos pequeosmrgenes. Por ejemplo, cuando se detecteque la ventana va decreciendo pormomentos, lo mejor es esperar un tiempopara dejar que la ventana vuelva arecuperar toda su capacidad, y continuarentonces la transmisin. Si fusemos con

    prisas, empendonos en enviar ms yms datos, la reduccin de tamao de laventana sera cada vez mayor, y latransferencia cada vez menos eficiente.

    En el caso de que la ventana llegue a sercero, la responsabilidad del receptor (elque se ha congestionado) es avisarcuando su ventana se recupere, con un

    mensaje (vaco si hace falta) cuya nicafinalidad sea precisamente avisar delcambio de la ventana. Por otra parte, la

    responsabilidad del emisor (el que hacongestionado al otro) es dejar de enviarms datos, y esperar un tiempo prudencialpara continuar la transmisin pasadosunos dos minutos, si es que el receptorno ha enviado una nueva ventana antes.

    4.9. Suma de comprobacin

    Al igual que en el caso de UDP, la sumade comprobacin se calcula mediante unaoperacin de aritmtica binaria (suma en

    complemento a uno de 16 bits) que serealiza sobre una cabecera especial quecontiene los datos ms relevantes.

    Cada vez que se recibe un paquete TCP,hay que realizar esta misma operacincon los datos recibidos, y comparar elnmero obtenido con el campo suma decomprobacin del paquete. Si ambosnmeros no son iguales, los datos sonincorrectos, y ser necesaria una

    retransmisin de los mismos. En ese caso,no enviaremos la confirmacin derecepcin pertinente, esperando a que elemisor decida retransmitir el paquete alver que no les respondemos.

    Aunque ya lo coment en el anteriorartculo, os recuerdo que tenis detalladala operacin de la suma de comprobacinen el RFC 1071, y que tenis un cdigode ejemplo en C en la siguiente URL:

    http://www.netfor2.com/tcpsum.htmEn este caso no tenis que realizar ningunamodificacin sobre el cdigo, ya que sirveprecisamente para calcular la suma decomprobacin de TCP.

    La cabecera que se forma para llevar acabo la suma de comprobacin es lasiguiente:

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    31/68

    PC PASO A PASO N 20 Pgina 31

    Como vemos, es igual que la de UDP,slo que en este caso el protocolo es el6, en lugar del 17.

    4.10. Puntero de urgencia

    Cuando hablamos sobre el flag URGdijimos que serva para indicar que elpaquete contiene datos urgentes.

    Pero, significa esto que los datos tienenque ir en un nico paquete para ellossolos? Esto podra ser poco eficiente, yaque los datos urgentes podran ser tanslo unos pocos bytes, y nos obligara aenviar paquetes casi vacos slo parapoder transmitir el dato urgente.

    Por ejemplo, el CONTROL-C del quehablbamos, es un comando muy breve,y sera un desperdicio enviar paquetesvacos que slo llevasen ese comando.Por tanto, TCP permite combinar enun mismo paquete datos urgentescon datos no urgentes.

    Para conseguir esto, el campo punterode urgencia nos indica el punto a partirdel cual terminan los datos urgentes.

    Si, por ejemplo, nuestro paquete contiene1000 bytes de datos, y el puntero deurgencia es 150, sabremos que los 150primeros bytes del paquete son urgentes,y los otros 850 son datos normales.Por supuesto, esto slo tendr sentido siel flag URG est activo. Si no es as, elcampo puntero de urgenciasimplemente ser ignorado.

    4.11. Opciones

    Llegamos al fin al ltimo campo de lacabecera TCP. Este campo es opcional, yes el responsable de que la cabecera TCPsea de tamao variable y, por tanto, dela necesidad del campo comienzo dedatos. En realidad, slo existe una opcindefinida por el estndar en el RFC de

    TCP, pero la cabecera se dise conprevisin de incluir otras opciones.

    La opcin definida se utiliza nicamenteal establecer una nueva conexin. Lo queindica este campo opcional es el mximotamao de los segmentos que estamosdispuestos a recibir. Un segmento es cadauna de las partes en las que se dividenlos datos, por lo que nuestro compaerode conexin no debe enviarnos nunca

    paquetes ms grandes de lo queindiquemos con esta opcin. En el casode que no usemos este campo opcional,nos podr enviar paquetes de cualquiertamao ajustndose, eso s, a nuestraventana de recepcin.

    Y qu relacin hay entonces entre laventana de recepcin y el tamao mximode segmento?

    Pues la ventana es un parmetro dinmico,que va variando segn la congestin quehay en cada momento, mientras que eltamao mximo de segmento es unaconstante para toda la sesin, que seestablece de antemano. Muchas veces,el tamao mximo de segmento sermenor que la ventana. Esto puede parecerabsurdo, pero no es as, ya que el tener

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    32/68

    Pgina 32 PC PASO A PASO N 20

    una ventana mayor que el tamaomximo de segmento indica que tenemosrecursos suficientes para recibir varios

    paquetes en poco tiempo.Por tanto, el tamao mximo desegmento no es til para realizar uncontrol de flujo, si no tan slo unarestriccin para el tamao mximo quepueden tener los paquetes.

    Pero vamos a ver cmo se indicaexactamente esta opcin. Como ya hemosvisto, existen dos casos: o que noindiquemos ninguna opcin, o queindiquemos el tamao mximo de

    segmento.

    En el primer caso, simplemente terminaren este punto la cabecera TCP, ycomenzarn a partir de aqu los datos.Por eso, cuando hablbamos del campocomienzo de datos dijimos que eltamao mnimo de la cabecera (que eseste caso) es de 20 bytes.

    En el segundo caso, en cambio, habrque rellenar el campo opciones de la

    cabecera. Y no slo eso, si no que ademshay que ajustarlo a un tamao de 32bits, que es lo que ocupa cada fila de lacabecera TCP (en realidad, se trata deltamao de la palabra, ya que la idea defilas es slo una abstraccin para verms fcilmente la estructura de lacabecera).

    La opcin que hemos mencionado, lanica definida en el RFC, encajaexactamente en 32 bits, por lo que no

    hay que hacer ningn ajuste. El formatoexacto de esta opcin lo veremos msadelante cuando veamos las cabeceras anivel de bits.

    En cambio, no slo existen las opcionesdefinidas en el RFC 793. Podemos veruna lista de opciones TCP mantenidas,para variar, por el IANA, en:http://www.iana.org/assignments/tcp-parameters

    Una opcin que nos podremos encontrarcon facilidad de las de esa lista, es laopc i n SACK , u t i l i zada pa raconfirmaciones selectivas (SelectiveACKnowledgment).Los detalles sobre esta opcin los tenisen el RFC 2018 (ftp://ftp.rfc-editor.org/in-notes/rfc2018.txt).

    Si las opciones no encajan en 32 bits,habr que completar la fila con ceros.

    Para separar las opciones entre s se utilizauna opcin especial sin ningn efecto(NOP = No OPeration) que ocupa unnico byte.

    Para terminar la lista de opciones existetambin otra opcin especial, de un nicobyte, que indica que no hay mas opcionesy, por tanto, una vez completada la palabrade 32 bits, vendrn a continuacin los

    datos del paquete.

    Todo esto lo veremos en ms detalleen el prximo artculo, en el cualempezaremos construyendo comoejercicio una cabecera TCP desde ceroa bajo nivel, es decir, en binario puroy duro. Espero que estis preparados!;-)

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

  • 8/2/2019 Revista Hack X Crack 20

    33/68

    Para terminar, os incluyo aqu la cabeceraTCP con los nombres originales, en ingls,por si completis este curso con alguna

    otra lectura, para que veis lacorrespondencia y no os liis.

    Autor: PyC (LCo)

    IMPORTANTE!

    CURSO TCP/IP (III) - TCP ( TRANSMISSION CONTROL PROTOCOL)

    IMPORTANTE:Ya habr tiempo de pasar a la practica, ahora es importante

    que empecemos a familiarizarnos con un montn de

    trminos y conceptos que seguramente (para la mayora)

    son completamente desconocidos.

    No te preocupes demasiado si muchas cosas te han quedado

    oscuras, ya empezars a verlas claras cuando relacionemos

    la teora con la practica y veas la utilidad real de cada

    concepto explicado aqu.

  • 8/2/2019 Revista Hack X Crack 20

    34/68

    Pgina 34 PC PASO A PASO N 20

    Bienvenidos un mes ms a la serie XboxLife. Este mes vamos a ver el Menu X,que nos permitir crear mens a nuestrogusto y as meter varios juegos en un

    mismo DVD.

    Pues manos a la obra, aqu tenis la listade lo que necesitamos:

    Xbox con ModChip instalado.

    Grabadora de DvD.

    MenuX

    Nero 6.019 o Superior

    Editor de fotos (es opcional).

    Todo menos el Men X se ha explicadoanteriormente, si no sabis de lo queestoy hablando pasaros por la Web ypedid los nmeros atrasados.

    El software Menu X puedes descargarlodesde aqu en formato RAR:

    http://www.megagames.com/console/

    cgi-bin/dl.cgi?id=xbox&file=cpxmenux!rar

    Descomprimimos el RAR o ZIP en una

    carpeta que puede llamarse Menu (que

    original que soy).

    Esto es lo que veremos:

    Nos metemos en la carpeta ISO yveremos esto:

    Tambin puedes...!

    Este men...!

    Xbox Life VIMenu X

    Por Alfonso Menkel- Descubriremos cmo realizar nuestros propios menus gracias a una versin hackeada

    de la version oficial.

    - Meteremos varios Juegos en un DVD

    Tambin puedes descargarlo en formato ZIP de la Web de

    la revista (www.hackxcrack.com).

    Este men es el mismo que viene en las demos de la revista

    oficial de Xbox. Fue hackeado y puesto a nuestro servicio.

    Gracias.

  • 8/2/2019 Revista Hack X Crack 20

    35/68

    PC PASO A PASO N 20 Pgina 35

    Borramos la carpeta xbmedia, ya queesta carpeta es la que contiene elWindows Media Placer (y no nos interesa).

    Aqu crearemos una carpeta por juego,solo como ejemplo yo crear 4 carpetasque corresponden a distintos emuladores:Nintendo, SuperNintendo, Nintendo64,PlayStation.

    Recordad que esto es solo un ejemplo,vosotros pondris tantas carpetas como

    juegos queris meter (siempre y cuandono superis los 4,4 GB de tamao total).

    Ahora lo que vamos a hacer, es modificarla apariencia del men, para ello nosvamos a la carpeta de MenuX/Media:

    Con un editor de fotos (por ejemplo AdobePhotoshop) podemos modificar todasestas imgenes a nuestro gusto. Aqu

    dejo la correspondencia de cada imagenen el men:

    --> Screen.Png = El fondo del men--> wait.png = La imagen que sale cuandoarrancas una aplicacin del DVD.--> Dn.png = Es una flecha que se coloca

    justo debajo del recuadro de la lista dejuegos, esta apunta hacia abajo.--> Up.png = Lo mismo que el anterior,pero dirigido hacia arriba.

    Todos los archivos tienen que llamarsedel mismo modo, con la misma extensin.

    Screen.png es el fondo del men constade dos partes fundamentales, la lista de

    juegos y la imagen previa:

    Si modificas el screen.png, ten cuidado yrespeta las dimensiones de estos cuadrados

    que te he marcado en rojo. En todo caso,puedes hacerlos mayores que los que vienen,pero nunca ms pequeos, ya que nopodremos modificar el tamao de estas celdas.

    Cuando tengamos todas las imgenes listas,nos fijamos en esta misma carpeta en elarchivo ambient.wma.

    Esta es la cancin que sonar durante laejecucin del men. Podemos cambiar el

    XBOX LIFE (VI) - MENU X - XBOX LIFE (VI) - MENU X - XBOX LIFE (VI) - MENU X - XBOX LIFE

  • 8/2/2019 Revista Hack X Crack 20

    36/68

    Pgina 36 PC PASO A PASO N 20

    archivo por otro con la misma extensin ylisto, el men ya tiene la pinta y la msicaque nos gusta.

    Ahora nos dirigimos a la carpeta sshot, dondeencontraremos la imagen previa del mediaplayer, es una imagen con extensin png ysus dimensiones son de 400 Pixeles de anchoy 300 de alto.

    La borramos y ponemos aqu una imagen conextensin png (de las mismas medidas) porcada juego que vayamos a poner en el DvD.Acordaros de los nombres, ya que ahoratendremos que decirle al men qu imagenva con cada juego.

    Copiamos los juegos a sus carpetascorrespondientes de la carpeta ISO.

    Nos vamos a la carpeta Men y veremos unarchivo llamado config.txt, lo editamos conun editor de texto plano (por ejemplo el Blocde Notas de Windows):

    Como podemos ver en la imagen, tememosesto:

    TITLE=Xbox Media PlayerINFO=divx/vcd/networkGFX=media.pngDIR=xbmedia

    Donde TITLE es el nombre del juego quesaldr en la lista de juegos.

    INFO es la breve descripcin del juego.

    GFX es la imagen previa del juego, la/las quehemos colocado en el directorio sshot.

    DIR es el directorio dentro de la carpeta ISOdonde se encuentra el juego.

    Entre juego y juego hay que dejar una lnea

    en blanco.

    As quedara el mo:

    TITLE=Nintendo.INFO=Emulador.GFX=nintendo.pngDIR=Nintendo

    TITLE=Super NintendoINFO=Emulador.GFX=Snintendo.png

    DIR=Super nintendoTITLE=Nintendo 64.INFO=EmuladorGFX=N64.pngDIR= Nintendo64

    TITLE=PlayStationINFO=EmuladorGFX=psx.pngDIR= PlayStation

    Guardamos los cambios.

    Arrancamos el archivo MenuX-xdi.bat y nosconfigurara el mensegn le hemos dicho.

    Ya esta, quemamos enun DvD el contenido dela carpeta ISO tal y comohe explicado en nmeros anteriores.

    El mes que viene veremos como crear CDs yDVDs autoinstalables.

    Salu2

    XBOX LIFE (VI) - MENU X - XBOX LIFE (VI) - MENU X - XBOX LIFE (VI) - MENU X - XBOX LIFE

    Si habis...!

    Si habis seguido los artculos anteriores publicados en la

    revista, podis pasarlo por la red al HD del la consola y

    as cercioraros que todo ha salido bien antes de grabar el

    DVD.

  • 8/2/2019 Revista Hack X Crack 20

    37/68

    PC PASO A PASO N 20 Pgina 37

    INTRODUCCIN

    En el artculo anterior aprendimos a instalarsnorte iniciamos nuestra primera incursinen el mundo de las reglas y directivas del

    pre-procesador... ahora nos toca conocerloms a fondo.

    En esta ocasin vamos a tener que realizaralguna que otra modificacin en la instalacinde snort, de hecho nos tocar en LINUXcompilar el cdigo fuente desnorte incluiralguna caracterstica que no se incluye en lospaquetes rpm, no te alarmes... todo estardetallado para que consigas el objetivo.

    Como recordatorio digamos quesnorttrabajaen varios modos, como esniffer, como

    capturador-grabador de paquetes o comoNIDS, lo que nos ocupa es conocer lascapacidades de snort en modo IDS ,concretamente en modo NIDS (NetworkIDS)

    En este (NIDS) modo podemos ejecutarsnorten dos modos:

    Modo logging, que grabar en disco todoslos paquetes que circulan por la red o haciao desde un host.

    Modo Alerta, en el cual comprobar siexisten reglas de comportamiento de lospaquetes y en su caso nos vuelca un informeo registro de aquellos paquetes queconcuerdan con las mismas, advirtindonosde las infracciones que se cometan.

    A su vez, el modo alerta dispone de algunasopciones que se pueden lanzar desde la lneade comandos de snort, estas son:

    Full, es el modo por defecto y alertar detodos los paquetes que provoquen una alertay volcar todo el contenido de los mismos

    Fast, como full pero slo registrar losmensajes de alerta, el timestamp (fecha/hora)

    ip origen e ip destinoSyslog, que enviar los sucesos a un servidorSyslog definido

    Unixsock o unsock, que enva las alertasa un servidor de dominio *NIX

    SMB, que enva las alertas mediantemensajes Winpopup (mensajes emergentes)

    None, en el que slo se emitirn logs, nadade alertas...

    Si queremos utilizar algn modo de alertascomo los que definimos anteriormente, laorden sera (observa la opcin A que esquien indica el modo de alerta):

    Hay algunas matizaciones con los modosSyslog y SMB, ms adelante las descubriremos,por ahora slo es necesario que recuerdesque se pueden usar y que existen.

    Si queremos usarsnortsin generar alertasbastara utilizar la sintaxis:snort de l /var/snort_logs/

    Recordemos como se iniciabasnort....

    snort de l directorio de logs c directorio y fichero del

    archivo de configuracin

    Ejemplo:snort de l /var/snort_logs/ -c /etc/snort/snort.conf

    snort de A fast l /var/snort_logs/ -c /etc/snort/snort.conf

    curso de seguridaden redes - ids (II)

    - Vamos a avanzar en el conocimiento del SNORT

    - Estudiaremos las reglas, contramedidas y MUCHO MAS

  • 8/2/2019 Revista Hack X Crack 20

    38/68

    Pgina 38 PC PASO A PASO N 20

    Para complicar ms la cosa, podemosformatear la salida de logs es decir, darleun aspecto para su posterior lectura entrelos modos de presentacin ms habituales

    estn:

    CSV (Comma Separated Values), es unmodo habitual para observar los registrosdesde una hoja de clculo o base de Datos

    Syslog, para personalizar la salida hacia elservidor Syslog

    Database, para escribir la salida a Bases deDatos tipo MySQL, ODBC, ORACLE, etc..

    Null, no crea archivos de logs pero s alertas

    Tcpdump o Windump, formato de salidapara aplicaciones tcpdumo o windump

    SnmpTrap, enviar registros SNMP

    Unified, Formato de salida binario que puedeser ledo por diversas aplicaciones, es elmtodo de salida ms rpido

    XML, pues lo imaginas.... formatos de salida

    en lenguaje XML

    Bueno, esto nos servir como introduccin

    para ms adelante, cuando nos toque abordar

    losplug-ins de salida... al igual que antes...

    con que recuerdes que no todo es texto y con

    el mismo formato es suficiente.

    Tras la introduccin... pasemos a lo que nos

    ocupa en este artculo: Las Reglas

    LAS REGLAS de las REGLAS....

    Ya nos hicimos a la idea de para qu puede

    servir el definir reglas en elIDS, las reglas

    son el alma en la deteccin de intrusos...

    aquellos paquetes que cumplan (o no cumplan)

    las reglas pasarn o no pasarn... mejor

    dicho... se registrarn o no se registrarn.

    Las reglas quesnortpuede aplicar al trficode red se basan en las cabeceras de lospaquetes y en el cuerpo o contenido de losmismos y en el control de flujo, por tanto

    podremos aplicar reglas de cabecera, reglasde contenido y reglas de control.

    LAS VARIABLES:

    Antes de meternos de lleno en las reglas,vamos a ver unas cuantas cosas. Para quesnortpueda comparar esas reglas con algoo desde alguna parte se utilizan variables,la sintaxis genrica de las variables es:

    var nombre_de_variable valor_de_variable

    Todas las variables se definen en el archivode configuracin (snort.conf) y se procesan

    de arriba abajo, y como es comprensible,deben estar definidas e inicializadas antes deusarse.

    Ejemplos:

    Si queremos asignar el contenido de otravariable a una nueva, usaremos:

    var nueva_variable $variable_anterior

    Esto es:

    var MI_DNS $DNS_SERVER

    var ESTA_ES_MIRED $INTERNAL_NET

    Estars pensando qu pasara en estos ltimos

    casos si las variables que actan como valores

    de las nuevas no estuvieran previamentedefinidas... un error... para ellosnortpuede

    utilizar el siguiente mtodo:

    Esto significa que si $RED_INTERNA no estdefinida previamente, se asignar el valor172.28.0.0/16 a la variable ESTA_ES_MIRED

    var DNS_SERVER 172.28.0.98

    var INTERNAL_NET 172.28.0.0/16

    var INTERNAL_NETS [172.28.0.0/16, 192.168.1.0/24, 10.0.0.0/8]

    var ESTA_ES_MIRED $(RED_INTERNA:172.28.0.0/16)

    Seguridad - IDS (II) - Seguridad - IDS (II) - Seguridad - IDS (II) - Seguridad - IDS (II) - Seguridad

  • 8/2/2019 Revista Hack X Crack 20

    39/68

    PC PASO A PASO N 20 Pgina 39

    Hasta se pueden lanzar mensajes de errorpara que avise de los mismos... por ejemplo:

    Echa un vistazo al archivosnort.confparaver las variables que usa... entre ellasencontrars estas con estos valores (oparecidos):

    Algunos valores especiales para la asignacinde variables son:

    any Cualquier valor

    ! Negacin, por ejemplo !80 es NO el 80,

    LAS REGLAS

    Tras definir las variables tendremos que decidirqu reglas vamos a incluir en el IDS y lasdirectivas delpre-procesadorque queramos...

    Normalmente las reglas a ser utilizadas sedeclaran mediante las lneas include y lasdirectivas delpre-procesadormediante laslneaspreporcessor:Ejemplo sacado del archivo de configuracinoriginal

    (snort.conf)RULE_PATH /etc/snort/rules.....

    preprocessor stream4_reassemble

    preprocessor stream4: disable_evasion_alerts

    ...

    include $RULE_PATH/local.rules

    include $RULE_PATH/bad-traffic.rules

    inc lude $RULE_PATH/exp lo i t . ru les

    Lgicamente el hecho de incluir una regla en

    el archivo de configuracin no lo es todo... lo

    importante es conocer qu tiene esa regla. En

    el archivo de configuracin simplemente se le

    dice asnortque deseamos utilizar tal o cual

    regla y ser en los archivos especificados

    donde t end remos que de f i n i r e l

    comportamiento de la regla.

    Lo mismo podramos aplicar al pre-procesador... en la siguiente seccin nosocuparemos de l, ahora toca reglas....

    Ya sabemos que snortvalida las reglas devarias formas, consulta las cabeceras de un

    paquete de datos, consulta el contenido deese paquete, controla el flujo de datos... otodas a la vez...

    volvemos con las analogas... las cabecerasseran el equivalente de las seas, remitente,etc. Del sobre de una carta o correo postal,mientras que las reglas de contenido abriranel sobre y buscaran dentro para leer lo quedice y actuar en consecuencia...

    Las reglas de Cabecera inspeccionan:

    Protocolos usados

    Puertos origen y/o destino

    Direcciones IP origen y/o destino

    Las reglas de Contenido inspeccionan:

    La totalidad o parte de la informacin queno es cabecera.

    Las reglas de Control de f lujoinspeccionan:

    La direccin del trfico (del cliente alservidor, del servidor al cliente)

    El nmero de paquetes transmitidos

    El tiempo de cada sesin

    Las contramedidas o reacciones

    ....

    var ESTA_ES_MIRED $(RED_INTERNA:? Vic_Thor, define RED_INTERNA)

    Seguridad - IDS (II) - Seguridad - IDS (II) - Seguridad - IDS (II) - Seguridad - IDS (II) - Seguridad

  • 8/2/2019 Revista Hack X Crack 20

    40/68

    Pgina 40 PC PASO A PASO N 20

    Las reglas se definen de una forma muysencilla:

    Accin Protocolo IP/red origen Puerto

    origen Direccin IP/red Destino Puertodestino Contenido control de flujo

    Vamos a detallarlo:

    Accin puede ser: pass, log, alert, dynamico activate

    Protocolo puede ser: ICMP, TCP, IP o UDP,hay otros pero fundamentalmente estos.

    Origen y/o Destino son: Direcciones IPindividuales o direcciones de red en notacin

    CIDRDireccin es decir si va hacia el origen o haciael destino

    Contenido es todo aquello que contiene elpaquete, es decir los datos de que trasportanlos protocolos.

    Control de Flujo: Tiempo transcurrido, nmerode paquetes, corte de la conexin...

    Vamos a ver un ejemplo de una regla tipo:_

    Accin: alert

    Protocolo: tcp

    IP/red or igen: 172.28.0 .0/16

    Puerto Origen: cualquiera

    Direccin: Desde el origen al destino

    IP/red destino: Cualquiera

    Puerto destino: 80

    Lo que nos quedara as:

    alert tcp 172.28.0.0/16 any -> any 80

    Esta regla generara una alerta al usar elprotocolo TCP cuyo origen del paquete seadesde la red 172.28.0.0/16 y desde cualquierpuerto hacia cualquier red cuyo destino seael puerto 80.

    En otras palabras, si cualquier PC de la red