Sunteți pe pagina 1din 66

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

P
P
A
A LOS IDENTIFICADORES
DE SESION
S
S LAS COOKIES

O
O P RO G R A M A N D O CO O K I E S ! ! !
P A S Oa
P A a
a
a
a
a
a
aa
a
a
a
a
a 3 SERVIDORES ON LINE PARA TUS PRACTICAS DE HACK

N M ERO 20
(2
PAR
TE)

SISTEMA DE DETECCION
DE INTRUSOS !!!
* DETECTANDO PUERTOS EXTRAOS
Y CONEXIONES SOSPECHOSAS
* REGLAS DE CABECERA
DE CONTENIDO Y DE CONTROL

* CONTRAMEDIDAS EN TIEMPO REAL


* STREAM 4
* RPC DECODE
* PORTSCAN Y PORTSCAN 2

MENU
MENUS A NUESTRO GUSTO
X
Y
COMO METER VARIOS
JUEGOS EN 1 DVD

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


00020

8 414090 202756

LOS MEJORES ARTCULOS GRATIS EN NUESTRA WEB


P C PASO A PA S O : I D S - L A SEGURIDAD CON M AYUSCU LA S !!!
P
A
S
O
P A S Oa
a
a
a
a
a
aa
a
a
a
a
a
a
aa
a
a

Director de la Publicacin
EDITORIAL: EDITOTRANS S.L. J. Sents
C.I.F: B43675701
PERE MARTELL N 20, 2 - 1 E-mail contacto
43001 TARRAGONA (ESPAA) director@hackxcrack.com
Director Editorial
I. SENTIS Diseo grfico:
E-mail contacto J. M. Velasco
director@editotrans.com
Ttulo de la publicacin
Los Cuadernos de HACK X CRACK. E-mail contacto:
Nombre Comercial de la publicacn grafico@hackxcrack.com
PC PASO A PASO
Web: www.hackxcrack.com
Direccin: PERE MARTELL N 20, 2 - 1. Redactores
43001 TARRAGONA (ESPAA) AZIMUT, ROTEADO, FASTIC, MORDEA, FAUSTO,
ENTROPIC, MEIDOR, HASHIMUIRA, BACKBONE,
ZORTEMIUS, AK22, DORKAN, KMORK, MAILA,
TITINA, SIMPSIM... ... ... ... ...
Quieres insertar publicidad en PC PASO A Contacto redactores
PASO? Tenemos la mejor relacin precio-difusin
del mercado editorial en Espaa. Contacta con
redactores@hackxcrack.com
nosotros!!!
Colaboradores
Sr. Ruben Sentis Mas de 130 personas: de Espaa, de Brasil, de
Tfno. directo: 652 495 607 Argentina, de Francia, de Alemania, de Japn y
Tfno. oficina: 877 023 356
E-mail: miguel@editotrans.com
algn Estadounidense.
E-mail contacto
colaboradores@hackxcrack.com
Imprime
I.G. PRINTONE S.A. Tel 91 808 50 15
3 STAFF
4 CURSO DE PHP: MANE JO DE SESIONES DISTRIBUCIN:
14 CURSO DE TCP/IP: TCP ( TRANSMISION CONTROL SGEL, Avda. Valdeparra 29 (Pol. Ind.)
PR O T OC OL. 28018 ALCOBENDAS (MADRID)
3 4 XB OX (VI): MENU X Tel 91 657 69 00 FAX 91 657 69 28
3 7 CURSO DE SEGURIDAD EN REDES - IDS (II) WEB: www.sgel.es

TELFONO DE ATENCIN AL CLIENTE: 977 22 45 80


Peticin 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 SPAIN
PERIOCIDAD MENSUAL
Deposito legal: B.26805-2002
Cdigo EAN: 8414090202756

PID E LO S NUMEROS ATRA SADO S EN - - > WWW.HACKXCRA C K .C OM


curso de PHP
APRENDE 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.

1. Introduccin de session La variable session.cookie_lifetime


especifica la duracin de la cookie en segundos,
La sesin va unida al usuario, se pueden crear que se manda al navegador. El valor 0 significa
variables a nivel de sesin que son accesibles "hasta que se cierra el navegador", y es el
desde cualquier pgina siempre que la sesin que se encuentra por defecto.
este activa.
Un ejemplo muy claro de esto es la banca
Una sesin se crea cuando un usuario accede electrnica. Si nos identificamos en nuestro
a una pgina web, a partir de ese momento banco on-line para consultar el saldo de
todos los accesos a las pginas de ese sito nuestra cuenta bancaria y nos vamos a tomar
web pueden seguirse a travs de la sesin un caf, seguramente, cuando volvamos el
creada. Cada sesin creada lleva asociado un banco no nos dejar realizar ms operaciones
identificador, que identificar esa sesin con hasta que nos volvamos a identificar en el
el usuario que provoc su creacin. sistema.

Adems, las variables definidas a nivel de Otro ejemplo de la utilizacin de las sesiones
sesin permanecen accesibles desde todas es el comercio electrnico, cuando compramos
las pginas php del site, durante toda la vamos almacenando productos en el carrito
sesin del usuario, por lo tanto son una de la compra y, aunque cambiemos de pgina
especie de variables globales que permanecen web, los productos siguen estando en el carrito.
activas mientras la sesin est activa. Esto es gracias a que la informacin relativa
a esos productos est almacenada en variables
Una sesin estar activa siempre que el de sesin.
usuario se comunique con el servidor web, Existen dos formas de mantener y continuar
cambie de una pgina web a otra, enve un una sesin mientras el usuario navega por las
formulario, etc. Cada sesin tiene un tiempo pginas web. En la primera de ellas es
mximo de inactividad permitida (lo normal mediante el uso de las cookies (datos
suele ser 20 minutos, pero se puede cambiar guardados en el cliente) y en la segunda, el
ese valor), si un usuario permanece sin identificador de la sesin se incluye en la URL
actividad durante un periodo de tiempo de la pgina como un parmetro ms. El
determinado o abandona el sitio Web, todas mdulo de gestin de sesiones que proporciona
sus variables e identificadores de sesin son PHP permite utilizar ambas formas.
borrados.
El mdulo de sesiones admite ambas formas.
Dentro del fichero php.ini, modificando el Las Cookies son la mejor opcin, pero como
valor de la variable session.cookie_lifetime no son fiables (los clientes no estn obligados
se modifica el tiempo de vida (o tiempo de a aceptarlas), no podemos confiar en ellas. El
inactividad) de la sesin. segundo mtodo incrusta el "session id"
directamente en las URLs.

Pgina 4 PC PASO A PASO N 20


Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

Las sesiones (y toda la informacin relativa <?php session start(); ?>


a ellas) en PHP se guardan ficheros que estn <HTML>
en un directorio. Este directorio est <HEAD>
especificado en la variable session.save_path <TITLE>Sesion Paso 2</TITLE>
dentro del apartado [Session] del fichero </HEAD>
php.ini. <BODY>
<TABLE BORDER="1">
Todas las variables y parmetros necesarios <TR>
para el correcto funcionamiento de las variables <TD>Nombre: <?= $ SESSION["nombre"]?></TD>
se encuentran en el fichero php.ini. </TR>
<TR>
Tanto para leer como para escribir variables <TD>Apellidos: <?= $ SESSION["apellidos"]?></TD>
de sesin utilizaremos el array asociativo </TR>
$HTTP SESSION VARS[var] o <TR>
$ SESSION[var] que es su versin abreviada. <TD>SesionId: <?= $ SESSION["sesionId"]?></TD>
</TR>
Vamos a ver el uso de las sesiones "plan </TABLE>
rpido" con un ejemplo ejemplo: </BODY>
</HTML>
1)- En primer lugar tenemos el cdigo de una
pgina PHP (llamemosla php7.php) que guarda Para que se almacenen las variables en la sesin primero
las variables nombre, apellidos y sessionId debemos ejecutar el cdigo de la primera pgina PHP
en la sesin. Ya sabes, como siempre copia (php7.php) y a continuacin ejecutaremos la segunda
el cdigo en el Block de Notas y guardalo con pgina. Si no siguiramos esta secuencia y ejecutsemos
el nombre php7.php directamente el cdigo de la segunda pgina, las variables
de la sesin no tendran ningn valor.
<?php session_start();?>
<HTML> El resultado que obtendremos ser el siguiente:
<HEAD>
<TITLE>Sesion Paso 1</TITLE>
</HEAD>
<BODY>
<?php
$nombre = "Maria";
$apellidos = "Lopez Fuentes";
$sesionId = session_id();
$_SESSION[nombre]=$nombre;
$_SESSION[apellidos]=$apellidos;
$_SESSION[sesionId]=$sesionId;
?> Visto el ejemplo vamos a ver el tema con ms detalle.
<a href="sessiones7.php">Siguiente</a>
</BODY> 2. Funciones
</HTML>
2.1 session_start
- En segundo lugar tenemos otra pgina
Esta funcin crea una nueva sesin o contina con la
(sessiones7.php) donde recogeremos el valor
sesin actual.
de dichas variables almacenadas en la sesin.
La sintaxis de la funcin es la siguiente:
Ya sabes, como siempre copia el cdigo en el
session_start();
Block de Notas y guardalo con el nombre
php7.php

PC PASO A PASO N 20 Pgina 5


Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

Todas las pginas PHP que utilicen


sesiones deben incluir esta funcin que
indica al intrprete PHP que recupere
toda la informacin relativa a las sesiones,
para posteriormente hacer uso de ella.

Esta funcin debe escribirse antes de que


se escriba cualquier carcter en el cliente,
incluso antes de las cabeceras HTML, si
no es as se producir un error. Para
evitar problemas es mejor colocar esta 2.4 session_module_name
funcin al principio de nuestra pgina
PHP. Devuelve el valor de la variable
session.save_handler situada en el
2.2 session_destroy fichero php.ini encargada de definir el tipo
de controlador utilizado para grabar y
Esta funcin elimina todos los datos recuperar el manejo de las sesiones que
asociados a una sesin. por defecto es files.
La sintaxis de la sesin es la siguiente:
session_destroy(); La sintaxis de la funcin es la siguiente:
session_module_name(handler);
Est funcin no borra la sesin ni la cookie
donde se encuentra almacenada, slo
El parmetro handler es opcional.
borra los datos asociados a la misma, es
decir, borra las variables que se
encuentran asociadas a una sesin. 2.5 session_save_path

2.3 session_name Permite conocer la ruta en la que se


guardan las sesiones si el valor de
Esta funcin devuelve el nombre de la session.save handler es files. En la
sesin utilizada en ese momento. Por mayora de los casos se trata de un
defecto, este valor es PHPSESSID y
directorio temporal.
esta definido dentro del fichero php.ini.
Si se desea especificar un nombre
Esta funcin recupera y modifica el valor
diferente a la sesin, ste se deber
de la variable session.save_path del
pasar como parmetro de la funcin.
fichero php.ini.

La sintaxis de la funcin es la siguiente:


Si session save path apunta a un
session_name(nombreSesion);
directorio con permiso de lectura por el
El parmetro nombreSesion es opcional. resto de usuarios, como /tmp (la opcin
por defecto), los dems usuarios del
<?php
servidor pueden conseguir robar las
print("Antes de cambiar el nombre a la session: " . session name() . "<br>");
session name("SESSION CURSO"); sesiones obtenindolas de la lista de
print("Despus de cambiar el nombre a la session: " . session name() . <br>"); archivos de ese directorio.
?>

Y el resultado obtenido al ejecutar el La sintaxis de la funcin es la siguiente:


cdigo anterior es: session_save_path(path);

Pgina 6 PC PASO A PASO N 20


Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

El parmetro path es opcional. funcin no es fijo y depender de las variables que


deseemos declarar.
<?php
print(session_save_path());
Para explicar el funcionamiento de la funcin
session_save_path(C:\EasyPHP\curso);
session_register() lo veremos en el siguiente ejemplo
print(session_save_path());
(sesion1):
?>

Y el resultado obtenido es: <?php session_start();?>


<HTML>
<HEAD>
<TITLE>Sesion Paso 1</TITLE>
</HEAD>
<BODY>
<?php
$nombre = "Maria";
$apellidos = "Lopez Fuentes";
$sesionId = session_id();
session_register("nombre", "apellidos", "sesionId");
2.6 session_id ?>
Esta funcin devuelve el identificador de
la sesin del usuario en el sitio Web, por <a href="sessiones5.php">Siguiente</a>
lo tanto es una de las funciones ms </BODY>
importantes en el manejo de la sesin. </HTML>

<?php Y recogemos los valores en la siguiente pgina


session_start(); (sesion2), que guardaremos como sessioones5.php:
print(Mi sesin: . session_id() .
<BR>); <?php session_start(); ?>
?> <HTML>
<HEAD>
Y el resultado obtenido es: <TITLE>Sesion Paso 2</TITLE>
</HEAD>
<BODY>
<TABLE BORDER=1>
<TR>
<TD>Nombre: <?= $GLOBALS[nombre]?></TD>
</TR>
<TR>
<TD>Apellidos: <?= $_SESSION[apellidos]?></TD>
</TR>
2.7 session_register <TR>
Esta funcin se encarga de registrar los <TD>SesionId: <?= $HTTP_SESSION_VARS[sesionId]?></TD>

parmetros que se le pasan a la funcin, </TR>


como variables a nivel de sesin. Por lo </TABLE>
tanto el nmero de argumentos de esta </BODY>
</HTML>

PC PASO A PASO N 20 Pgina 7


Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

Y el resultado obtenido es: la variable y la sesin. Los argumentos de esta funcin


son los nombres de las variables que queremos
liberar.

Si sustituimos el cdigo de sesion2 por el siguiente:

<?php
session_start();
session_unregister($nombre);
?>
<HTML>
<HEAD>
<TITLE>Sesion Paso 2</TITLE>
Los valores de las variables almacenadas </HEAD>
en la sesin se recogen utilizando <BODY>
$HTTP SESSION VARS[nombre variab <TABLE BORDER=1>
le] pero tambin se puede utilizar su <TR>
versin reducida $ SESSION, tal como <TD>Nombre: <?= $GLOBALS[nombre]?></TD>
podemos ver en el ejemplo anterior. </TR>
<TR>
Como podemos observar la recogida de <TD>Apellidos: <?= $_SESSION[apellidos]?></TD>
los valores de las variables tambin la </TR>
podemos realizar mediante el array <TR>
$GLOBALS que guarda todas las variables <TD>SesionId: <?= $HTTP_SESSION_VARS[sesionId]?></TD>

de mbito global. </TR>


</TABLE>
Si no se llamase la funcin session start() </BODY>
para continuar con la sesin, no se podran </HTML>
recuperar las variables globales.
Recuerda que debemos ejecutar antes el cdigo de
Si nuestro script usa session_register(), sesion1 y despus el de sesion2
no funcionar en entornos en donde la
directiva PHP session.register_globals de Obtendramos el siguiente resultado:
php.ini est deshabilitada. Actualmente
el uso de session.register() est
desfasado, por ello tanto para guardar
como para recoger las variables de la
sesin utilizaremos $ SESSION como
ya se ha visto anteriormente.

2.8 session_unregister

Esta funcin realiza el proceso contrario


de la funcin anterior (session register).
Se encarga de eliminar la relacin entre

Pgina 8 PC PASO A PASO N 20


Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

Para vaciar el valor de una variable de sesin tambin lo


<?php
podemos realizar como en cualquier otra variable utilizando
}?> </TD>
la funcin unset(nombre_variable) (Definida en el tema1)
</TR>
<TR> <TD>Apellidos:
2.9 session_is_registered
<?php
Esta funcin nos permite averiguar si una variable ya ha if (session_is_registered("apellidos")) {?>
sido registrada en la sesin. La funcin devolver true si REGISTRADA
la variable est registrada en la sesin y false en caso <?php
contrario. } else {?>
NO REGISTRADA
Al sustituir el cdigo de sesion2 por el siguiente cdigo: <?php
}?> </TD>
<?php </TR>
session_start(); </TABLE>
?> <?php
<HTML> session_unregister("apellidos");?>
<HEAD> <br>
<TITLE>Sesion Paso 2</TITLE> Despus de utilizar session_unregister:<br>
</HEAD> <TABLE BORDER="1">
<BODY> <TR> <TD>Variable Nombre:
<TABLE BORDER="1"> <?php if (session_is_registered("nombre")) {?>
<TR> REGISTRADA
<TD>Nombre: <?= $GLOBALS["nombre"]?></TD> <?php } else {?>
</TR> NO REGISTRADA
<TR> <TD>Apellidos: <?= $GLOBALS["apellidos"]?></TD> <?php
</TR> }?> </TD>
<TR> <TD>SesionId: <?= $GLOBALS["sesionId"]?></TD> </TR>
</TR> <TR> <TD>Apellidos:
</TABLE> <?php if (session_is_registered("apellidos")) {?>
<br> REGISTRADA
Antes de utilizar session_unregister:<br> <?php } else {?>
<TABLE BORDER="1"> NO REGISTRADA
<TR> <TD>Variable Nombre: <?php }?>
<?php </TD>
if (session_is_registered("nombre")) {?> </TR>
REGISTRADA </TABLE>
<?php </BODY>
} else {?> </HTML>
NO REGISTRADA
Recuerda que debemos ejecutar antes el cdigo
de sesion1 y despus el de sesion2

PC PASO A PASO N 20 Pgina 9


Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

Obtendremos el siguiente resultado: <?php session_start();


print(session_encode());
?>

3. Cookies

Uno de los problemas que nos


encontramos en Internet es no poder
identificar a los usuarios que visitan
nuestras pginas. Si un usuario abandona
nuestro site y a los cinco minutos vuelve,
el servidor no es capaz de saber si se
trata del mismo usuario o de otro
diferente. No nos vale controlar esto con
las sesiones, ya que si el usuario cerrase
su navegador o reiniciase su equipo,
estara en una sesin distinta y le
habramos perdido la pista. Otra manera
de mantener la sesin identificando al
navegante es utilizando las cookies.
Para comprobar si variable de sesin ha
sido inicializada, tambin lo podemos Para solucionar este problema utilizaremos
realizar como en cualquier otra variable las cookies, que son pequeos ficheros
utilizando la funcin de texto que el servidor deposita en el
isset(nombre_variable) (Definida en el cliente (es un espacio que reserva el
tema1) navegador) para que, si posteriormente
el mismo usuario accede al servidor, ste
2.10 session_decode es reconocido por el servidor al examinar
la cookie previamente depositada.
Recupera todos los datos de la sesin
que estn almacenados en una cadena El pequeo fichero de texto que forma
y que es pasada como argumento, dando una cookie se guarda de la siguiente
valores a las variables utilizadas en la forma:
sesin. nombre=valor
y, a pesar de que se trata de algo
La sintaxis de la funcin es la siguiente: inofensivo, estn rodeadas de una
session_encode(string datos); seguridad adicional:
un navegador web como Internet
Explorer o Netscape, tan slo puede
2.11 session_encode
alamacenar un nmero mximo de
300 cookies en total y no ms de 20
Codifica los datos que provienen de la
cookies por servidor.
sessin actual, en una variable de tipo
string.
Adems el tamao de una cookie est
limitado a 4kb. Si se alcanzase el lmite
La sintaxis de la funcin es la siguiente:
de 300 cookies, estas se iran eliminando
session_encode();
por antigedad.

Pgina 10 PC PASO A PASO N 20


Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

El uso de las cookies es muy habitual en Los parmetros caducidad y secure son nmeros enteros
las Webs en los que debe existir un y no podemos sustituirlos con una cadena de texto
seguimiento de las acciones del usuario. vaca, en su lugar debemos utilizar un cero (0).

Las cookies son parte de la cabecera


El parmetro caducidad es un entero de tiempo tpico
HTTP, por tanto debemos llamar la funcin
setcookie() (utilizada para crear cookies) de UNIX tal como lo devuelven las funciones time()
antes de que se produzca cualquier salida o mktime().
al navegador. Cualquier cookie del cliente,
automticamente se convertir en una El parmetro secure indica que la cookie se debe
variable PHP igual como ocurre con los transmitir nica y exclusivamente sobre una conexin
mtodos de datos GET y POST,
segura HTTPS.
dependiendo de las variables de
c o n f i g u ra c i n r e g i s t e r _ g l o b a l s y
variables_order. <?php
$usuario=valor;
En PHP 4.1.0 y posteriores, la matriz //Crea una cookie
auto-global $ COOKIE ser siempre setcookie(nombre, $usuario);
actualizada con cualquier cookie mandada //Crea una cookie que caducar en una hora
por el cliente.
setcookie(nombre, $usuario, time() + 3600);
//Crea una cookie que caducar el 31/12/2005
$HTTP COOKIE VARS tambin se
actualiza en versiones anteriores de PHP setcookie(nombre, $usuario, mktime(10,20,0,12,31,2004));
cuando la variable de configuracin ?>
track vars est activada. (Siempre est
activada a partir de PHP 4.0.3.) Si deseamos asignar mltiples valores a una cookie
simple, aade simplemente [] a el nombre de la cookie,
3.1 Crear una Cookie es decir, convertir a la cookie en un array de cookies.

Para trabajar con cookies, lo primero que


<?php
debemos hacer es crear una cookie y
para ello utilizaremos la funcin setcookie setcookie( "nombre[3]", "David" );
setcookie( "nombre[2]", "Sabina" );
La sintaxis de la funcin es la siguiente: setcookie( "nombre[1]", "Maria" );
if ( isset( $nombre ) ) {
int setcookie (string nombre, string while( list( $name, $value ) = each( $nombre ) ) {
valor, int caducidad, string ruta,
print("$name == $value<br>");
string dominio, int secure)
}
Todos los parmetros excepto nombre }
son opcionales. Tambin podemos ?>
sustituir cualquier parmetro por una
cadena de texto vaca ("") y saltar as Al ejecutar el cdigo anterior obtenemos el siguiente
ese parmetro. resultado:

PC PASO A PASO N 20 Pgina 11


Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

3.3 Leer una Cookie

Para acceder al contenido de una cookie,


basta con utilizar el nombre de la variable.

<?php
//Leemos el contenido de una cookie
print(\$alumno: . $ alumno);
?>

Tambin podemos acceder al valor de la


cookie utilizando:
$HTTP COOKIE VARS[nombre].

setcookie() define una cookie para ser


<?php
enviada con el resto de la informacin
//Leemos el contenido de una cookie
de la cabecera HTTP. print(HTTP_COOKIE_VARS: . $HTTP_COOKIE_VARS[alumno]);
?>
Las cookies deben enviarse antes de
mandar cualquier otra cabecera (esta es O podemos utilizar su forma abreviada.

una restriccin de las cookies, no de


<?php
PHP). Esto requiere que situemos las
//Leemos el contenido de una cookie
llamadas a esta funcin antes de cualquier print($_COOKIE: . $_COOKIE[alumno]);
etiqueta <html> o <head>. ?>

Si escribimos cualquier cosa antes de la El resultado de ejecutar los tres ejemplos


creacin de la cookie la ejecucin de anteriores es:
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.

<?php
//Borra una cookie
setcookie(nombre);
?>

De esta forma se elimina la cookie del


cliente.
Programacin PHP - Programacin PHP - Programacin PHP - Programacin PHP

3.4 Limitar el alcance de las 4 Enviar cabeceras HTTP


cookies
Utilizaremos la funcin header() para
Las cookies se pueden limitar por medio enviar cabeceras http. Su sintaxis es la
de los parmetros que utilizamos en su siguiente:
creacin, la limitacin de una cookie se header(Nombre Cabecera: valor cabecera);
realiza por tres mbitos:
directorio de acceso: delimita el <?php
directorio de acceso a la cookie, solo en //Redirige a una pgina automticamente
el directorio que le indiquemos podremos header(Location: index.php);
//No cachea la pgina que contiene esta funcin
tener acceso a la cookie. Se define en el
header(Cache-Control: no-cache, must-revalidate);
parmetro ruta en la creacin de la cookie.
//Tipo de documento que se enva al cliente
fecha de caducidad: estable la fecha
header(Content-Type: text/html);
de caducidad de la cookie, se le debe ?>
indicar por medio de un nmero entero,
Al igual que la funcin setcookie se debe
utilizando las funciones mktime() o time().
utilizar esta funcin al principio de la
Se define en el parmetro caducidad en
pgina, antes de escribir cualquier valor
la creacin de la cookie.
en el cliente.
dominio de procedencia: slo puede
accede a esa cookie el dominio indicado En la siguiente entrega haremos uso de
en su creacin. Se define en el parmetro todo lo aprendido aplicado y seguiremos
dominio en la creacin de la cookie. con los sockets.
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

1. INTRODUCCION con la prctica lo que no se puede


conseguir con la mera teora.
Despus de haber estado hablando
indirectamente sobre el protocolo TCP/IP Adems, para hacerlo un poco ms
durante 10 meses en la serie RAW, al fin amena, la segunda entrega incluir
vamos a entrar de lleno en la base de tambin algunas tcnicas de hacking
todo esto: la base sobre la que se apoy basadas en el funcionamiento de TCP,
toda la serie RAW. que es lo que a muchos de vosotros ms
os interesa. ;-) Aprenderemos adems a
Al hablar del protocolo TCP al fin vamos construir las cabeceras tal y como son en
a comprender qu es lo que ocurre realidad, en binario. Pero lo ms
realmente cuando hacemos un Telnet y importante es que podremos ver en detalle
la necesidad de establecer conexiones cmo es el trfico que circula
de este tipo. constantemente entre nuestro ordenador
y la red Internet.
Comprenderemos tambin por qu se
utiliza TCP como protocolo de transporte 2. DIFERENCIAS ENTRE TCP Y
para la mayora de las aplicaciones, al UDP
compararlo con UDP y comprobar que
son muchas las ventajas. Por si no lo habis hecho, es importante
que antes de continuar repasis los dos
Con este artculo, entramos a fondo en artculos anteriores del curso de TCP/IP
conceptos nuevos, como son las (Introduccin, y UDP), ya que vamos a
conexiones virtuales, el control de flujo, empezar comparando este nuevo
los flags, etc. Quiz no os queden del protocolo con el que ya conocamos, el
todo claros los conceptos despus de protocolo UDP.
terminar de leerlo, pero no os preocupis,
que est todo previsto.
2.1. Conexiones virtuales
El curso continuar con una segunda
Volvemos a insistir una vez ms en que
entrega dedicada a TCP, en la cual
una de las principales diferencias entre
aclararemos muchos de los conceptos
TCP y UDP es la existencia de conexiones
que quedarn hoy en el aire, y veremos
virtuales. Como ya vimos, el protocolo
una serie de ejemplos que conseguirn
TCP se dice que es orientado a conexin

Pgina 14 PC PASO A PASO N 20


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

(en realidad conexiones virtuales), Imaginemos cmo habra sido la Internet


al contrario que UDP (no orientado a en aquellos aos. Un autentico ejrcito
conexin). de internetistas trabajando 24 horas
para dar servicio a todas las conexiones
Las implicaciones de esto son muchas, que estableciese cualquier cliente: cada
tal y como iremos viendo a lo largo del vez que alguien desease leer su correo
artculo. electrnico, una internetista tendra que
establecer una conexin en el panel entre
De momento quedmonos con la idea de el cliente y su servidor de POP3, cada vez
conexin virtual. que alguien visitase una pgina web una
internetista tendra que establecer una
Por qu se habla de conexiones virtuales,
conexin entre el cliente y el servidor de
y no de conexiones a secas? Para
la pgina web, etc., etc.
encontrar una respuesta a esta pregunta
basta con pensar un poco en la
Desde luego, esto habra sido una locura
arquitectura de la red Internet (y de
inviable, sin contar con el hecho de que
cualquier red TCP/IP).
la red sera muy lenta y muy insegura.

Si Internet hubiese existido hace 50 aos,


Si tratsemos de mejorar esta idea
probablemente su arquitectura hubiera
sustituyendo a las internetistas humanas
sido muy diferente, igual que la red
por un medio mecnico automatizado que
telefnica de ahora es muy diferente a
estableciese las conexiones mediante
la que haba entonces. La red telefnica
rels seguiramos teniendo muchos
de aquellos aos dependa de una figura
problemas, y uno de los ms preocupantes
humana bien conocida: la telefonista.
sera el de la velocidad.

Las telefonistas eran unas mujeres casi


Se mire por donde se mire, una red en
binicas que actuaban como
la que haya que establecer nuevas
intermediarias entre los distintos clientes
conexiones cada vez que se desee utilizar
de la red telefnica para que estos
un servicio siempre ser ms lenta que
pudieran comunicarse entre s. Cuando
una red en la que todo est conectado
un cliente deseaba hablar con otro, una
de antemano.
telefonista
tena que
Y precisamente esa es la topologa de la
establecer
red Internet: todo est conectado de
una conexin
antemano. Nuestro PC siempre tiene un
manual entre
nico cable que nos conecta con Internet
las lneas de
(el cable de red que va al router, o el
a m b o s
cable que va al modem, o el cable etreo
clientes,
que nos une con nuestra estacin
conectando
wireless). Y lo mismo ocurre con cualquier
los cables
mquina conectada a Internet. Nunca
correspon-
hay que cambiar ningn cable de sitio,
dientes en un
por muy diferentes que sean las
panel de
conexiones que queramos establecer.
conexiones.
Tanto si vamos a enviar un correo a

PC PASO A PASO N 20 Pgina 15


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

nuestro mejor amigo, como si vamos a Para entenderlo, veamos el caso de un


ver una pgina web de Japn, las chat entre 3 personas. Podramos pensar
conexiones fsicas son siempre las en primer lugar en una solucin que fuese
mismas. un nico cable con 3 conectores que
conectase entre s a los 3 interlocutores.
Esto hace que los protocolos de la red
Internet tengan necesariamente que estar
muy bien pensados para que esto no de
lugar a un completo caos. Para evitar
estas confusiones nace el concepto de
conexin virtual, que busca las ventajas
de las redes en las que las conexiones
no estn establecidas de antemano, pero
sin toparse con sus desventajas.

Si bien todo sigue conectado de


antemano, las conexiones virtuales
emulan el mecanismo por el cual, antes
de comenzar una comunicacin entre dos
puntos, es necesario poner a ambas
partes de acuerdo y establecer una
conexin entre ambas.

En teora, las conexiones virtuales


permiten, igual que una conexin real,
que la comunicacin no sea escuchada
por nadie que no est conectado al cable
que une ambos puntos, que terceras Pero, que ocurrira si quisiramos meter
personas no puedan intervenir en la a una persona ms en la conversacin?
comunicacin enviando datos que no Tendramos que quitar el cable de 3
sean de ninguna de las dos partes conectores y cambiarlo por uno de 4?
legtimas, que nadie pueda hacerse pasar Sera mucho ms sencillo un sistema en
por otro, etc., etc. Por supuesto, todo el cual todo funcionase mediante cables
esto es en teora pero, como bien de slo dos conectores. Para que alguien
sabemos, nada en este mundo entrase o saliese del chat, bastara con
funciona como en teora debera. ;-) conectar o desconectar un slo cable,
pero no habra que modificar toda la red,
Qu es lo que caracteriza una y el resto de usuarios del chat no se veran
conexin? afectados por lo que hiciera uno solo.

Las conexiones de las que hemos hablado Para poder realizar este chat entre 3
son siempre conexiones entre dos personas mediante cables de 2 conectores
puntos, y as son todas las conexiones se hace imprescindible la presencia de un
en TCP. Aunque puedas estar en un chat intermediario que gestione todas las
hablando con 100 personas a la vez, en conexiones de todos los usuarios. Esta es
realidad toda esa comunicacin se realiza precisamente la misin de un servidor
a travs de pares de conexiones. de chat.

Pgina 16 PC PASO A PASO N 20


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

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 las
conocidas 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
Como vemos en esta otra imagen, ahora tratarse de conexiones virtuales, necesitamos algn
hay 3 cables en lugar de uno slo, y cada mecanismo que identifique una conexin establecida.
cable conecta a un nico usuario con el Y es aqu donde vemos la principal diferencia entre
servidor que gestiona el chat. TCP y UDP.

Es importante comprender que esto que


Los paquetes TCP contienen un campo en su cabecera
hemos dicho de los cables de slo dos
que no contienen los paquetes UDP. Este campo
conectores no se refiere a las
adicional es el que permite identificar la conexin
conexiones fsicas de Internet, si no
virtual a travs de la cual circula el paquete.
a las conexiones virtuales que nos da el
protocolo TCP.
La solucin ms obvia que podramos encontrar
De hecho, muchas redes TCP/IP tienen para implementar este identificador de conexin
fsicamente conectadas todas sus sera utilizar un nmero que identificase
mquinas entre s, en lugar de realizar unvocamente la conexin. Pero esta solucin
las conexiones mediante cables punto a presentara varios problemas, el mayor de los cuales
punto, pero insisto en que esto slo sera quiz la seguridad.
ocurre con las conexiones fsicas, pero
no con las conexiones virtuales, que son Si una conexin se identifica permanentemente por
siempre punto a punto. un mismo nmero, es slo cuestin de tiempo que
un atacante encuentre ese nmero por fuerza bruta
! Hablando claro... y as, con slo spoofear su IP (utilizar algn
mecanismo para enviar paquetes en nombre de una
Hablando claro, no importa como conectes fsicamente tu PC IP que no sea la suya), se pueda colar en la conexin
a otros PCs (hay mil maneras de hacerlo, unas son punto a ajena. Una solucin mucho mejor es utilizar un
punto y otras no). Lo importante es que TU PC (y cualquier nmero que vaya cambiando con cada paquete,
otro PC del mundo), cuando utilice el protocolo TCP,
segn unas ciertas normas establecidas entre los
establecer siempre conexiones virtuales punto a punto.
dos extremos.

PC PASO A PASO N 20 Pgina 17


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

Esto en realidad no es tal y como lo pinto. Este Una solucin mucho ms eficiente es
nmero cambiante realmente existe, pero su principal englobar en un slo paquete los datos
finalidad no es la de identificar conexiones, si no transmitidos y la confirmacin de los datos
ms bien la de mantener el estado de evolucin de recibidos.
una 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


En esta figura vemos cmo las mquinas
Como ya cont en el artculo sobre UDP, al contrario A y B intercambian paquetes a travs de
que ste, el protocolo TCP tiene un mecanismo para una misma conexin, actuando ambos
asegurar que los datos llegan correctamente a su simultneamente como transmisores y
destino. Para conseguir esto, cada paquete TCP que receptores.
llegue a un destino ha de ser respondido por ste
mediante otro pequeo paquete que confirme la En primer lugar, la mquina A enva el
recepcin. primer paquete (Paquete 1 A). Una vez
recibido el paquete 1 A, la mquina B
decide tambin empezar a enviar sus
propios paquetes, por lo que enva un
nico paquete a A en el que engloba la
confirmacin de que recibi el paquete 1
A, as como su propio paquete 1 B.

A esto responder la mquina A enviando


el siguiente paquete de los que desea
Esto sera as en el caso ms sencillo, transmitir, pero englobando en el mismo
pero menos comn, que sera el de una tambin la confirmacin de que recibi
comunicacin unidireccional, donde slo correctamente el paquete 1 B.
una de las partes enviase datos a la otra.
As continuara la comunicacin, hasta
En la prctica, la mayora de los servicios que la mquina A decidiese dejar de
son bidireccionales, por lo que es transmitir sus propios datos, por lo que
necesario intercalar los paquetes su nica misin consistira ya slo en
transmitidos con las confirmaciones de seguir confirmando la recepcin de los
los paquetes recibidos. paquetes que le enva B, como ocurre en
Esto podra dar lugar a un gran nmero la figura con el caso del paquete 2 B, al
de paquetes (el doble, exactamente), ya cual la mquina A responde slo con una
que a cada paquete de datos habra que confirmacin de recepcin, pero sin
sumar adems el correspondiente englobar ms datos en el mismo paquete,
paquete de confirmacin. ya que A no tiene ya nada ms que desee
enviar.

Pgina 18 PC PASO A PASO N 20


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

Qu ocurre si uno de los paquetes 2.4. Tratamiento de paquetes


se pierde por el camino? Cada vez que
grandes
una mquina transmite un paquete TCP,
sta no lo borra de su memoria, si no
Esta capacidad de dividir los datos en
que lo deja almacenado an por un
fragmentos ordenados, combinada con el
tiempo, esperando que llegue la
sistema de confirmacin de respuestas
confirmacin de su recepcin. Si sta
de TCP, convierte a ste protocolo en un
llega, se podr borrar el paquete de la
protocolo de transporte ideal para la
memoria, y olvidarse para siempre de
transmisin segura de grandes cantidades
l. En cambio, si pasado un tiempo
de datos.
prudencial no ha llegado la confirmacin
de su recepcin, se asumir que el
2.5. Control de flujo
paquete no ha llegado a su destino, por
lo que ste se retransmitir. As, el
Aqu entramos ya en un nuevo concepto
paquete se conservar en la memoria
que habr que introducir, ya que es uno
todo el tiempo que sea necesario,
de los conceptos bsicos del campo de
reenvindolo cada cierto tiempo, hasta
las redes y telecomunicaciones.
que al fin llegue la confirmacin de que
el paquete fue recibido.
Hasta ahora hemos tratado las redes y
En el caso de que, debido a estos las mquinas como si fuesen perfectas,
reenvos, un mismo paquete llegue ms sin limitaciones. Pero sabemos muy bien
de una vez al mismo destino, no habr que en la vida real esto no es as ya que,
ningn problema, ya que el diseo de por ejemplo, el ancho de banda de una
TCP permite diferenciar perfectamente red es uno de los factores ms
un paquete de otro, por lo que al detectar determinantes de su efectividad.
la duplicacin simplemente se rechazar
la copia. Hemos asumido que los paquetes se iban
transmitiendo a diestro y siniestro, y que
2.3. Orden en los datos estos iban a ser recibidos sin problemas.
Bueno, no exactamente... Hemos dicho
Tal y como decamos tambin en el
que s que poda haber problemas en la
anterior artculo, TCP identifica cada
recepcin, pero realmente no hemos
paquete con un nmero de secuencia
hablado de los problemas del ancho de
que permite ordenarlos correctamente
banda.
independientemente de su orden de
llegada al destino.
Si la nica solucin ante la congestin de
En el caso de UDP, los paquetes se iban la red fuese el mecanismo explicado
procesando segn iban llegando. En anteriormente para asegurarnos de que
cambio, en TCP un paquete se puede todos los datos llegan al destino, el
dividir en fragmentos que podrn llegar problema no se solucionara si no que, al
en cualquier orden, y los datos no se contrario, sera cada vez mayor.
procesarn hasta que se hayan recibido
todos los fragmentos y estos se hayan Imaginemos la situacin. La mquina A,
ordenado segn el nmero de secuencia que transmite los paquetes, es demasiado
de cada paquete. rpida para lo que es capaz de procesar

PC PASO A PASO N 20 Pgina 19


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

la mquina B, que recibe los paquetes. comunicacin, a no ser que sea un mal-
Por tanto, la mquina A empieza a enviar nacido (que los hay), tendr que actuar
paquetes a toda velocidad y sin en consecuencia, relajndose un poco y
compasin, esperando las confirmaciones dndonos tiempo a asimilar lo que ya nos
de la mquina B. Como B no da abasto, ha enviado.
no es capaz de enviar las confirmaciones
de recepcin a tiempo. Al no llegar las Ms adelante veremos en detalle cmo
confirmaciones, A se pondr a reenviar se implementa el control de flujo en TCP.
los paquetes anteriores, al mismo tiempo
que contina enviando paquetes a diestro
y siniestro, por lo que la congestin, ! Todo esto que...
sumando los paquetes nuevos y los viejos,
ser muchsimo mayor. Todo esto que estamos explicando despus lo tocaremos
en la realidad. Veremos los paquetes TCP y dnde est
localizado cada concepto del que hablamos.

3. LO QUE S QUE TIENEN EN


COMN TCP Y UDP

Como no todo va a ser diferencias, vamos


a ver los puntos en comn entre ambos
protocolos de transporte que, en el fondo,
son bastante parecidos.

En primer lugar, TCP tambin se apoya


Si no se implementa algn mecanismo sobre el protocolo IP y, en este caso, el
para evitar este caos, la situacin puede nmero de protocolo asignado a TCP
hacerse insostenible en poco tiempo. Un para que la capa de red (la capa IP) pueda
mecanismo que se encargue de ajustar identificar el protocolo de transporte, es
el flujo de la comunicacin es el nmero 6.
precisamente lo que se conoce como
control de flujo. Como ya sabemos, la cabecera IP
contendr entre sus campos uno que
En el caso de TCP, disponemos de un identifique el protocolo de transporte que
sencillo mecanismo de control de flujo, est por encima de l.
que consiste en incluir en la cabecera de
cada paquete un campo que indica al
otro extremo de la comunicacin cmo
estamos de congestionados. Esta medida
de la congestin la llevamos a cabo
diciendo cuntos bytes estamos
preparados para recibir. Segn nos
vayamos saturando, este nmero ser
cada vez menor, y el otro extremo de la

Pgina 20 PC PASO A PASO N 20


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

El punto en comn ms importante entre


TCP y UDP es que el mecanismo de ! RFC 793 en espaol
identificacin de servicios es el mismo:
cada paquete, tanto en TCP como en RFC 793 en perfecto espaol!!! Como ya hemos comentado
muchas veces, tenemos traducidos muchos de los RFC al espaol
UDP, lleva dos nmeros de puerto
en la Web www.rfc-es.org. Este es el trabajo de muchas personas
(origen, y destino), ambos comprendidos que desinteresadamente estn colaborando en un proyecto
entre 0 y 65535 (16 bits). realmente descomunal: traducir los ms de 3000 documentos, si
controlas de Ingles y te animas, ya sabes :)
Los puertos de TCP funcionan
El RFC 793 en castellano est en http://www.rfc-
exactamente igual que los de UDP, pero
es.org/getfile.php?rfc=0793
no tienen ninguna relacin entre s, es
decir, existen 65536 puertos para TCP, y
otros 65536 puertos diferentes para UDP. Como vemos, el RFC tiene 91 pginas,
por lo que es bastante ms denso que la
Si, por ejemplo, en un firewall cierras el
mayora de los RFCs que hemos visto
puerto 21 de TCP, no estars cerrando
hasta ahora (tanto en la serie RAW como
al mismo tiempo el puerto 21 de UDP,
en el curso de TCP/IP). An as, no es
ya que son totalmente independientes. demasiado duro de leer, sobre todo si
prescindimos de algunas cosas poco
Otro punto en comn es que ambos importantes para la comprensin del
protocolos incluyen una suma de protocolo, como la especificacin de las
comprobacin en cada paquete, que variables del TCB, o toda la parte del final
verifica la correccin de los datos incluidos relativa al procesamiento de eventos. En
cualquier caso, ya sabis que aqu tendris
en el mismo. La cabecera que se codifica
un buen resumen de todo lo ms
en la suma de comprobacin de TCP es
importante. ;-)
muy similar a la que se utiliza en UDP.
Como ya somos expertos en protocolos,
vamos a plantar aqu directamente la
4. LA CABECERA TCP EN
cabecera TCP. No pierdas de vista esta
DETALLE imagen, haremos referencia a ella a lo
largo de todo el artculo.
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 versin
en 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).

PC PASO A PASO N 20 Pgina 21


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

Bueno, bueno, la cosa ya va siendo ms Por un lado, identifica unvocamente


seria, eh? ;-) a cada paquete dentro de una conexin,
Que nadie se asuste! Ya veris como y dentro de un margen de tiempo. Es
en un momento comprendemos todo lo este nmero el que nos permite detectar
que hay en esa imagen aparentemente si un paquete nos llega duplicado. Durante
tan complicada. un margen de tiempo (que depende del
flujo de los datos y, por tanto, tambin
Vamos a ir viendo campo por campo toda del ancho de banda) tenemos la garanta
la cabecera, para luego entrar en detalle de que en una determinada conexin
en el tamao de los campos a nivel de virtual no habr dos paquetes diferentes
bit (ya en el prximo artculo). con el mismo nmero de secuencia.

4.1. Puerto de origen Por ejemplo, en una conexin de 2Mbps,


este margen de tiempo es de unas 4 horas
Este campo tiene el mismo significado y media, mientras que en una conexin
que en el caso de UDP. En TCP es de de 100Mbps el margen es de 54 minutos.
especial importancia, porque es condicin
necesaria (aunque no suficiente) para Por qu este margen de tiempo vara en
identificar una conexin virtual. funcin del flujo de datos? Pues lo
comprenderemos en cuanto veamos qu
es exactamente el nmero de secuencia.
4.2. Puerto de destino
Y es que el nmero de secuencia es mucho
Tambin tiene el mismo significado que
ms que un mero identificador de
en UDP, y tambin es condicin necesaria
paquetes. El valor del nmero de
(aunque no suficiente) para identificar
secuencia no es aleatorio, si no que tiene
una conexin virtual.
un significado muy concreto. El nmero
de secuencia es el orden en bytes que
Es decir, si nos llega un paquete que
ocupan los datos contenidos en el
coincide en IP de origen, IP de destino,
paquete, dentro de una sesin.
Puerto de origen, y nmero de secuencia,
con los de una conexin virtual, pero no
Es decir, supongamos que el primer
coincide el puerto de destino, entonces
paquete enviado una vez establecida una
ese paquete no se puede considerar
conexin tiene un nmero de secuencia
perteneciente a esa conexin virtual. Lo
0, y el paquete contiene 200 bytes de
mismo ocurre si el que cambia es el
datos. El siguiente paquete que se enviase
puerto de origen.
tendra que tener 200 como nmero de
secuencia, ya que el primer paquete
4.3. Nmero de Secuencia contena los bytes del 0 al 199 y, por
tanto, el orden que ocupan los datos del
Aqu empieza lo ms divertido, ya que segundo paquete es el siguiente: 200.
este campo es uno de los que ms nos
dar que hablar. El nmero de secuencia Por qu decamos entonces que el
es un nmero bastante grande (32 bits) nmero de secuencia identifica
que tiene varias funciones. unvocamente un paquete dentro de un
margen de tiempo? Porque el nmero de

Pgina 22 PC PASO A PASO N 20


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

secuencia es siempre creciente, por lo quedara: 0 1 + 300 = 299. Por tanto,


que un paquete posterior a otro siempre 299 sera el nmero de secuencia del
tendr un nmero de secuencia mayor. prximo paquete.
Claro que... ser mayor en mdulo 32.
Esto significa que, una vez que el nmero En realidad, el nmero de secuencia no
de secuencia valga 232 1, es decir, el tiene por qu comenzar en cero. El
mayor nmero que se puede representar principal motivo es que si todas las
con 32 bits, el prximo nmero de conexiones empezasen en 0, no se podran
secuencia utilizado ser 0, es decir, se reutilizar las conexiones.
dar la vuelta al marcador.
Ya a estas alturas, habiendo visto todos
Por supuesto, cunto se tarda en dar la los campos relevantes, podemos afirmar
vuelta al marcador depende directamente que lo que identifica una conexin son
de cuntos datos se enven, y en cuanto estos 5 parmetros: ip de origen, ip de
tiempo. destino, puerto de origen, puerto de
destino, y nmero de secuencia.

Imaginemos que, por ejemplo, nuestro


software de correo electrnico est
configurado para comprobar si tenemos
mensajes nuevos cada 30 segundos. El
programa tendr que establecer una
conexin TCP/IP con el puerto 110 (puerto
de POP3) de un servidor POP3 cada 5
segundos. En este caso, 4 de los
parmetros que identifican la conexin
En la imagen podemos ver reflejado esto. podran ser iguales: puerto de origen,
Como vemos, el primer nmero de puerto de destino, ip de origen, e ip de
secuencia es 0, y el primer paquete destino.
contiene 200 bytes de datos. Por tanto,
el segundo paquete tendr nmero de Digo que podran porque el puerto de
secuencia 200. Este paquete contiene origen se podra cambiar de una conexin
12345 bytes de datos, por lo que el a otra (el resto de parmetros no se
prximo paquete tendr como nmero podran cambiar de ninguna manera),
de secuencia: 200 (nmero de secuencia aunque esto en muchos casos no ser
anterior) + 12345 = 15345. posible o conveniente. Por tanto, el nico
parmetro con el que podemos jugar para
As contina la sesin, hasta que un poder establecer nuevas conexiones
paquete tiene como nmero de secuencia similares sin que se confunda la nueva
232 1, y contiene 300 bytes de datos. con una vieja que ya se cerr, es el
En teora, el prximo nmero de secuencia nmero de secuencia.
tendra que ser 232 1 + 300 pero, como
solo contamos con 32 bits para Si cada vez que el programa de correo
representar este nmero, tendremos que se reconecta al servidor POP3 utilizamos
dar la vuelta al marcador, es decir, el mismo nmero de secuencia para
convertir el 232 en un 0, por lo que nos comenzar la sesin (por ejemplo, 0), si

PC PASO A PASO N 20 Pgina 23


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

llegase un paquete muy retrasado del ms de lo normal en llegar a B. Como A


servidor de correo de una conexin ya ha enviado lo que quera, cierra la
anterior (de los 5 segundos anteriores), conexin, a pesar de que todava no ha
no habra forma de saber si este paquete recibido la confirmacin de que B recibi
perteneca a la sesin anterior, o a la el paquete Seq = 200.
nueva sesin. Una forma sencilla de evitar
esto es no utilizar siempre el mismo Inmediatamente despus, A decide
nmero de secuencia para comenzar una establecer una nueva conexin con B para
sesin, si no ir utilizando nmeros de enviarle otros datos. Comienza enviando
secuencia cada vez mayores. un primer paquete con Seq = 0, al cual
responde B con su confirmacin de
Veamos un ejemplo de esto a partir de recepcin. Para entonces, ya ha llegado
la siguiente figura. a B el paquete Seq = 200 de la anterior
conexin, por lo que construye su paquete
de confirmacin. Pero la mala suerte se
confabula contra estas dos mquinas, y
justo en ese instante A enva un nuevo
paquete, que tiene tambin nmero de
secuencia 200. Inmediatamente B enva
la confirmacin de recepcin del paquete
Seq = 200 de la anterior conexin.

Qu ocurre a partir de aqu?

1.- Desde el punto de vista de A, B


ha recibido correctamente el ltimo
paquete, por lo que contina
transmitiendo nuevos paquetes,
borrando de su memoria el paquete
Seq = 200, por lo que nunca lo
reenviar.

2.- Desde el punto de vista de B,


En primer lugar, la mquina A abre una acaba de recibir un nuevo paquete
conexin con la mquina B. Una vez Seq = 200. Como B ya haba
abierta la conexin, A empieza a recibido un paquete Seq = 200,
transmitir sus datos, empezando por un interpreta que ste paquete es un
paquete con nmero de secuencia reenvo del anterior, por lo que lo
Seq = 0. B lo recibe y devuelve su desecha.
confirmacin de recepcin.
Por tanto, ni B recoge el paquete
A continuacin, A transmite un nuevo Seq = 200, ni A se entera de lo que ha
paquete, con nmero de secuencia 200 pasado. En realidad las cosas no son
(por tanto, el primer paquete tena que exactamente como las pinto, pero ya
contener 200 bytes de datos). Por algn iremos viendo ms adelante cmo es todo
azar del destino, este paquete va a tardar esto realmente.

Pgina 24 PC PASO A PASO N 20


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

Por supuesto, el nmero de secuencia


no sirve slo para detectar paquetes
duplicados, o para diferenciar unas
conexiones de otras, si no tambin para
poder 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 Este campo slo tiene significado si el
nmero de secuencia, porque en realidad paquete tiene activo el flag ACK, pero
eso ya lo veremos ms adelante.
tambin representa un orden en bytes
de los datos.
4.5. Comienzo de datos

Lo que se enva en el nmero de Este campo no era necesario en el caso


confirmacin es otro nmero de 32 bytes de UDP, ya que la cabecera UDP tiene un
que indica cul es el prximo byte que tamao fijo de 8 bytes. En cambio, la
estamos esperando recibir. cabecera TCP puede tener un tamao
variable, tal y como veremos ms
adelante, por lo que es necesario indicar
Si nuestro compaero en una conexin
a partir de qu punto comienzan los datos
nos enva un paquete con nmero de
y termina la cabecera.
secuencia 2000, y el paquete contiene
350 bytes de datos, el prximo nmero Este punto de comienzo no se expresa
de secuencia sera el 2350. Si queremos en bytes, como podramos esperar, si no
confirmar que hemos recibido el paquete en palabras de 32 bits. Si nos fijamos
con nmero de secuencia 2000, en la cabecera, veremos que est
estructurada en filas, cada una de las
tendremos que enviar en nuestro paquete
cuales mide 32 bits. La primera fila
de respuesta un nmero de confirmacin
contiene los puertos de origen y destino,
que valga 2350, diciendo as: Ya puedes la segunda el nmero de secuencia, la
enviarme el paquete 2350. He recibido tercera el nmero de confirmacin, etc.
todo bien hasta aqu. Vamos a ver la
misma figura que pusimos al hablar sobre El valor ms habitual para este campo es
el nmero de secuencia, pero esta vez 5, que equivale a 20 bytes de cabecera,
incluyendo los nmeros de confirmacin. es decir, lo mnimo que puede ocupar la
cabecera TCP.

PC PASO A PASO N 20 Pgina 25


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

4.6. Espacio reservado Imaginemos que queremos ver el


contenido de un archivo remoto, por
Despus del campo comienzo de datos, ejemplo en Linux, y hacemos un cat del
ve m o s q u e h ay u n o e n e l q u e archivo:
simplemente pone 0. Este es un espacio
reservado de 4 bits, que hay que dejar cat archivo.txt
a cero, sin ms.

4.7. FLAGS (URG, ACK, PSH,


! Qu no sabis...
RST, SYN, FIN)
Qu no sabis lo que es cat? Pues tendris que repasar los
artculos ya publicados sobre Linux de esta misma revista.
Aqu tenemos tambin un asunto que va
;-) y si no, consulta el google (www.google.com).
a dar mucho que hablar. Los flags son
una serie de indicadores de control, de
un nico bit cada uno, con diferentes
El caso es que, despus de hacer el cat,
funciones que detallo a continuacin.
descubrimos que el archivo es mucho
ms largo de lo que esperbamos y, para
4.7.1. Flag URG (Urgent)
colmo, no nos interesa. Pulsamos
CONTROL-C y el listado del archivo se
Cuando este flag est activo (vale 1, en
aborta sin necesidad de esperar a que el
lugar de 0), estamos indicando que el
archivo termine de mostrarse entero.
paquete contiene datos urgentes. La
especificacin de TCP no detalla qu se
El paquete que hemos enviado a la
debe hacer exactamente ante unos datos
mquina remota conteniendo la orden de
urgentes, pero lo normal es atenderlos
abortar el listado, tiene un flag URG
con mxima prioridad.
activo.
Si no existiese este mecanismo,
Si, por ejemplo, estamos procesando
probablemente la mquina remota seguira
datos anteriores, y nos llega un paquete
enfrascada en su asunto inmediato, que
con datos urgentes, normalmente
es mostrar el listado del archivo, y no
aplazaremos el procesamiento de los
habra hecho caso a nuestro CONTROL-
datos anteriores para prestar toda nuestra
C hasta que no hubiera terminado con lo
atencin a los datos urgentes.
suyo.

Y para qu pueden servir los datos


Para garantizar una mayor efectividad del
urgentes? No es habitual encontrarlos,
flag URG hay que combinarlo con el flag
pero un claro ejemplo es cuando
PSH, que veremos ms adelante.
deseamos abortar alguna accin. Por
ejemplo, si alguna vez habis conectado
por Telnet con un sistema remoto (el
4.7.2. Flag ACK (Acknowledge)
propio servicio de Telnet del puerto 23,
no los experimentos raros que hacamos Cuando este flag est activo (vale 1, en
en la serie RAW ;-) sabris que con la lugar de 0) significa que nuestro paquete,
combinacin de teclas CONTROL- C se aparte de los datos propios que pueda
puede abortar cualquier accin. c o n t e n e r, c o n t i e n e a d e m s u n a

Pgina 26 PC PASO A PASO N 20


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

confirmacin de respuesta a los


paquetes que est enviando el otro
extremo de la conexin.

Por tanto, el campo nmero de


confirmacin no tiene significado a no
ser que est activo este flag.

4.7.3. Flag PSH (Push)

En la imagen podemos ver cmo los


Cuando este flag est activo (vale 1, en
paquetes sin flag PSH se van encolando
lugar de 0) indicamos a nuestro propio
en el buffer de transmisin. Cuando el
sistema, y al sistema remoto con el que
sistema construye el ltimo paquete (el
estamos conectados, que deben vaciar
paquete Seq = 300), ya puede comenzar
sus buffers de transmisin y recepcin... el envo del archivo. Por tanto, en el ltimo
Creo que ha llegado el momento de hablar paquete incluye el flag PSH.
sobre los buffers de transmisin y
recepcin. :-m A partir del instante en que hemos metido
en el buffer el paquete con flag PSH, el
sistema ir enviando uno tras otro los
En todo sistema TCP tiene que haber dos
paquetes a travs del cuello de botella
pequeas memorias, o buffers: una para
que supone el canal de salida. Se trata
transmisin, y otra para recepcin. Estas
de un cuello de botella porque por l slo
memorias son unas colas de paquetes
puede pasar un nico paquete en cada
en las que se van almacenando los instante, por lo que los paquetes tendrn
paquetes que hay que procesar en espera que ir envindose de uno en uno segn
del momento adecuado. el orden en que fueron ubicados en el
buffer de transmisin. Al tratarse de una
Por ejemplo, supongamos que una cola, el primero en llegar ser el primero
aplicacin que corre en nuestro sistema en salir (lo que se llama una cola FIFO),
desea enviar un archivo, que ser partido por lo que primero saldr el paquete con
en 4 paquetes TCP. A pesar de que Seq = 0.
nuestra aplicacin lance la orden de enviar
el archivo en un slo instante, nuestro El ltimo paquete en salir ser el que
sistema no podr enviar de golpe los 4 tiene Seq = 300, que es precisamente el
paquetes. Por tanto, tendr que construir que lleva el flag PSH. En la siguiente
los paquetes, y luego ponerlos en una imagen vemos todo esto desde el punto
cola para que se vayan enviando uno tras de vista del receptor.
otro.

Si el sistema pudiera enviar los 4 paquetes


a la vez no habra necesidad de tener
ninguna cola, pero en la prctica, como
en cualquier cola, slo se puede pasar
de uno en uno.

PC PASO A PASO N 20 Pgina 27


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

Por el canal de entrada irn llegando los servidor el resto de nuestros intentos de
paquetes uno tras otro. Se irn conexin, el servidor nos responder con
almacenando en el buffer de recepcin, RST a cada nuevo intento de conexin,
y no sern procesados hasta que llegue para que nos olvidemos de esa conexin
el ltimo paquete, que contiene el flag y nos centremos en la que ya tenemos.
PSH. Como este paquete es el que
completa el archivo de 400B, para cuando 4.7.5. Flag SYN (Synchronization)
llegue, el sistema receptor ya podr
procesar los datos de los 4 paquetes y Cuando este flag est activo (vale 1, en
reconstruir el archivo original. lugar de 0), estamos indicando al otro
extremo que deseamos establecer una
Como decamos, el flag PSH debe nueva conexin. Este flag se utiliza
combinarse con el flag URG cuando haya nicamente al abrir una nueva conexin.
datos urgentes. El flag URG ser el
encargado de decir al receptor que ha Ms adelante veremos el mecanismo
de atender los datos con mxima exacto por el que se establecen las
prioridad, y el flag PSH se asegurar de conexiones, as como algunas cuestiones
que el paquete no se retrase esperando de seguridad relacionadas con este flag.
en los buffers.
4.7.6. Flag FIN (Finish)
4.7.4. Flag RST (Reset)
Cuando este flag est activo (vale 1, en
Cuando este flag est activo (vale 1, en lugar de 0), indicamos al otro extremo
lugar de 0), estamos indicando al otro de la conexin de que, por lo que a
extremo de la conexin que algo no anda nosotros respecta, la conexin ya se
bien, ya que los datos que nos han llegado puede cerrar.
no coinciden con nuestra conexin, por
lo que se ha perdido la sincronizacin Normalmente, una vez que enviemos
entre ambas partes. nuestro propio FIN, tendremos que
esperar a que nuestro compaero nos
Ante cualquier campo incorrecto que enve el suyo. Una vez puestos los dos
recibamos (nmeros de secuencia de acuerdo en que no hay ms que hablar,
invlidos, o flags no esperados) se puede cerrar la conexin pacficamente.
tendremos que responder con un paquete
con este flag activo, para que el otro
Tanto RST como FIN se utilizan para
extremo se entere del problema, y se
finalizar conexiones, pero la diferencia es
cierre la conexin para re-sincronizar
que RST avisa de una situacin de error,
ambas partes.
mientras que FIN avisa de una
terminacin sin problemas.
Un uso tpico de este flag es cuando
estamos intentando conectar con un
servidor, enviando varios paquetes para Ante una terminacin con RST,
establecer la conexin, y al final uno de normalmente las aplicaciones avisarn al
ellos tiene xito. Si despus de ese usuario, por ejemplo con una ventana
paquete de conexin siguen llegando al avisando que se ha perdido la conexin.

Pgina 28 PC PASO A PASO N 20


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

4.8. Ventana En primer lugar, la mquina A enva un


paquete de 1000 Bytes, con nmero de
Este campo es el que se utiliza para llevar secuencia 0.
a cabo el control de flujo implementado
en TCP. La mquina B lo recibe y procesa
correctamente, y enva su confirmacin
Como ya dije, el control de flujo permite de recepcin, indicando que la mquina
evitar la congestin debida a la diferencia A puede continuar enviando a partir del
de velocidad (bien por capacidad de byte 1000 (Ack=1000). Adems, le indica
procesamiento, o bien por ancho de que est preparada para recibir otros
banda) entre ambas partes de una 1000 bytes ms. Si hacemos cuentas, en
conexin. realidad lo que est diciendo la mquina
B es que est preparada para recibir los
Una forma muy sencilla de conseguir esto bytes del 1000 al 1999.
es hacer que cada extremo de la conexin
vaya indicando a cada momento cmo La mquina A contina transmitiendo, y
de congestionado est. La mejor forma lo hace esta vez con 1000 bytes ms de
de indicar esta medida de congestin es datos, empezando, por supuesto, por el
decir cuntos bytes vamos a ser capaces nmero de secuencia 1000.
de procesar en un momento dado.
La mquina B tambin los recibe sin
Por tanto, a cada paquete le acompaa problemas, pero se est empezando a
un nmero de 16 bits, que es el nmero agobiar un poco, por lo que avisa en su
de bytes que estamos preparados confirmacin de que el prximo paquete
para recibir en el prximo paquete. Esto no podr ser tan grande y, como mucho,
significa que, como mximo, un paquete tendr que ser de 500 bytes nada ms.
podr contener 65536 bytes de datos,
es decir, 64KB, ya que es el mximo que La mquina A, en cambio, no ha recibido
podemos solicitar en cada momento. a tiempo la nueva ventana, y ha seguido
enviando los paquetes al ritmo que llevaba
Normalmente, el tamao de la ventana anteriormente. Por tanto, el prximo
est relacionado con la cantidad de paquete (Seq=2000) contiene tambin
espacio libre que tenemos en el buffer 1000 bytes de datos, a pesar de que la
de recepcin. nueva ventana de B admite slo 500
bytes.
Vamos a ver un ejemplo.
Justo despus de enviar este paquete
demasiado grande, la mquina A recibe
ya el aviso de B de que se est
congestionando, por lo que decide esperar
a ver cmo se las apaa su compaero.

Cuando B ha podido procesar unos


cuantos datos, avisa a A de que puede
seguir enviando, aunque slo ha procesado
500 bytes de los 1000 que le envi y,

PC PASO A PASO N 20 Pgina 29


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

adems, el prximo paquete tendr que mensaje (vaco si hace falta) cuya nica
ser como mximo de 250 bytes. finalidad sea precisamente avisar del
cambio de la ventana. Por otra parte, la
En respuesta, A enva un nuevo paquete, responsabilidad del emisor (el que ha
comenzando en el byte 2500, y congestionado al otro) es dejar de enviar
conteniendo tan slo 250 bytes. ms datos, y esperar un tiempo prudencial
para continuar la transmisin pasados
Todo esto es muy bonito, A y B son muy unos dos minutos, si es que el receptor
amigos, y A le va enviando a B las cosas no ha enviado una nueva ventana antes.
poco a poco cuando ste se agobia. Pero
esto en realidad no es una idea muy 4.9. Suma de comprobacin
buena. Si A va haciendo caso a B segn Al igual que en el caso de UDP, la suma
ste le vaya diciendo lo que puede de comprobacin se calcula mediante una
manejar, y B va avisando a A segn vaya operacin de aritmtica binaria (suma en
liberando hueco en su buffer de recepcin, complemento a uno de 16 bits) que se
los paquetes que se transmitan irn realiza sobre una cabecera especial que
siendo cada vez ms pequeos. contiene los datos ms relevantes.

En el peor de los casos, podra llegar a Cada vez que se recibe un paquete TCP,
ser 0 la ventana de B, y en el instante hay que realizar esta misma operacin
en que hiciese hueco para un msero con los datos recibidos, y comparar el
byte, avisar a A, por lo que A le enviara nmero obtenido con el campo suma de
un paquete con un nico byte de datos. comprobacin del paquete. Si ambos
Esto dara lugar a una transferencia muy nmeros no son iguales, los datos son
poco efectiva de los datos, donde muchos incorrectos, y ser necesaria una
de los paquetes seran de un tamao retransmisin de los mismos. En ese caso,
ridculo. no enviaremos la confirmacin de
recepcin pertinente, esperando a que el
Por tanto, es aconsejable no ir emisor decida retransmitir el paquete al
ajustndose literalmente al tamao de ver que no les respondemos.
la ventana, si no dejar unos pequeos
mrgenes. Por ejemplo, cuando se detecte Aunque ya lo coment en el anterior
que la ventana va decreciendo por artculo, os recuerdo que tenis detallada
momentos, lo mejor es esperar un tiempo la operacin de la suma de comprobacin
para dejar que la ventana vuelva a en el RFC 1071, y que tenis un cdigo
recuperar toda su capacidad, y continuar de ejemplo en C en la siguiente URL:
entonces la transmisin. Si fusemos con http://www.netfor2.com/tcpsum.htm
prisas, empendonos en enviar ms y
ms datos, la reduccin de tamao de la En este caso no tenis que realizar ninguna
ventana sera cada vez mayor, y la modificacin sobre el cdigo, ya que sirve
transferencia cada vez menos eficiente. precisamente para calcular la suma de
comprobacin de TCP.
En el caso de que la ventana llegue a ser
La cabecera que se forma para llevar a
cero, la responsabilidad del receptor (el
cabo la suma de comprobacin es la
que se ha congestionado) es avisar
siguiente:
cuando su ventana se recupere, con un

Pgina 30 PC PASO A PASO N 20


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

4.11. Opciones

Llegamos al fin al ltimo campo de la


Como vemos, es igual que la de UDP, cabecera TCP. Este campo es opcional, y
slo que en este caso el protocolo es el es el responsable de que la cabecera TCP
6, en lugar del 17. sea de tamao variable y, por tanto, de
la necesidad del campo comienzo de
4.10. Puntero de urgencia datos. En realidad, slo existe una opcin
definida por el estndar en el RFC de
Cuando hablamos sobre el flag URG
TCP, pero la cabecera se dise con
dijimos que serva para indicar que el
previsin de incluir otras opciones.
paquete contiene datos urgentes.

Pero, significa esto que los datos tienen La opcin definida se utiliza nicamente
que ir en un nico paquete para ellos al establecer una nueva conexin. Lo que
solos? Esto podra ser poco eficiente, ya indica este campo opcional es el mximo
que los datos urgentes podran ser tan tamao de los segmentos que estamos
slo unos pocos bytes, y nos obligara a dispuestos a recibir. Un segmento es cada
enviar paquetes casi vacos slo para una de las partes en las que se dividen
poder transmitir el dato urgente. los datos, por lo que nuestro compaero
de conexin no debe enviarnos nunca
Por ejemplo, el CONTROL-C del que paquetes ms grandes de lo que
hablbamos, es un comando muy breve, indiquemos con esta opcin. En el caso
y sera un desperdicio enviar paquetes de que no usemos este campo opcional,
vacos que slo llevasen ese comando. nos podr enviar paquetes de cualquier
Por tanto, TCP permite combinar en tamao ajustndose, eso s, a nuestra
un mismo paquete datos urgentes ventana de recepcin.
con datos no urgentes.
Y qu relacin hay entonces entre la
Para conseguir esto, el campo puntero
ventana de recepcin y el tamao mximo
de urgencia nos indica el punto a partir
de segmento?
del cual terminan los datos urgentes.

Si, por ejemplo, nuestro paquete contiene Pues la ventana es un parmetro dinmico,
1000 bytes de datos, y el puntero de que va variando segn la congestin que
urgencia es 150, sabremos que los 150 hay en cada momento, mientras que el
primeros bytes del paquete son urgentes, tamao mximo de segmento es una
y los otros 850 son datos normales. constante para toda la sesin, que se
Por supuesto, esto slo tendr sentido si establece de antemano. Muchas veces,
el flag URG est activo. Si no es as, el el tamao mximo de segmento ser
campo puntero de urgencia menor que la ventana. Esto puede parecer
simplemente ser ignorado. absurdo, pero no es as, ya que el tener

PC PASO A PASO N 20 Pgina 31


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

una ventana mayor que el tamao La opcin que hemos mencionado, la


mximo de segmento indica que tenemos nica definida en el RFC, encaja
recursos suficientes para recibir varios exactamente en 32 bits, por lo que no
paquetes en poco tiempo. hay que hacer ningn ajuste. El formato
exacto de esta opcin lo veremos ms
Por tanto, el tamao mximo de
adelante cuando veamos las cabeceras a
segmento no es til para realizar un
nivel de bits.
control de flujo, si no tan slo una
restriccin para el tamao mximo que
En cambio, no slo existen las opciones
pueden tener los paquetes.
definidas en el RFC 793. Podemos ver
Pero vamos a ver cmo se indica una lista de opciones TCP mantenidas,
exactamente esta opcin. Como ya hemos p a r a v a r i a r, p o r e l I A N A , e n :
visto, existen dos casos: o que no http://www.iana.org/assignments/tcp-
indiquemos ninguna opcin, o que parameters
indiquemos el tamao mximo de
segmento. Una opcin que nos podremos encontrar
En el primer caso, simplemente terminar con facilidad de las de esa lista, es la
en este punto la cabecera TCP, y opcin SACK, utilizada para
comenzarn a partir de aqu los datos. confirmaciones selectivas (Selective
Por eso, cuando hablbamos del campo ACKnowledgment).
comienzo de datos dijimos que el Los detalles sobre esta opcin los tenis
tamao mnimo de la cabecera (que es en el RFC 2018 (ftp://ftp.rfc-editor.org/in-
este caso) es de 20 bytes. 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 utiliza


una opcin especial sin ningn efecto
(NOP = No OPeration) que ocupa un
nico byte.

Para terminar la lista de opciones existe


tambin otra opcin especial, de un nico
byte, que indica que no hay mas opciones
En el segundo caso, en cambio, habr y, por tanto, una vez completada la palabra
que rellenar el campo opciones de la de 32 bits, vendrn a continuacin los
cabecera. Y no slo eso, si no que adems datos del paquete.
hay que ajustarlo a un tamao de 32
bits, que es lo que ocupa cada fila de la Todo esto lo veremos en ms detalle
cabecera TCP (en realidad, se trata del en el prximo artculo, en el cual
tamao de la palabra, ya que la idea de empezaremos construyendo como
filas es slo una abstraccin para ver ejercicio una cabecera TCP desde cero
ms fcilmente la estructura de la a bajo nivel, es decir, en binario puro
cabecera). y duro. Espero que estis preparados!
;-)

Pgina 32 PC PASO A PASO N 20


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

Para terminar, os incluyo aqu la cabecera


TCP con los nombres originales, en ingls, ! IMPORTANTE
por si completis este curso con alguna
otra lectura, para que veis la IMPORTANTE:
correspondencia y no os liis. 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.

Autor: PyC (LCo)


Xbox Life VI
Menu 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

Bienvenidos un mes ms a la serie Xbox


Life. Este mes vamos a ver el Menu X, ! Este men...
que nos permitir crear mens a nuestro
gusto y as meter varios juegos en un Este men es el mismo que viene en las demos de la revista
mismo DVD. oficial de Xbox. Fue hackeado y puesto a nuestro servicio.
Gracias.
Pues manos a la obra, aqu tenis la lista
de lo que necesitamos:
Descomprimimos el RAR o ZIP en una
carpeta que puede llamarse Menu (que
Xbox con ModChip instalado.
original que soy).
Grabadora de DvD.
MenuX
Esto es lo que veremos:
Nero 6.019 o Superior
Editor de fotos (es opcional).

Todo menos el Men X se ha explicado


anteriormente, si no sabis de lo que
estoy hablando pasaros por la Web y
pedid los nmeros atrasados.

El software Menu X puedes descargarlo


desde aqu en formato RAR:

http://www.megagames.com/console/
cgi-bin/dl.cgi?id=xbox&file=cpxmenux!rar

! Tambin puedes...

Tambin puedes descargarlo en formato ZIP de la Web de


la revista (www.hackxcrack.com). Nos metemos en la carpeta ISO y
veremos esto:

Pgina 34 PC PASO A PASO N 20


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

Con un editor de fotos (por ejemplo Adobe


Photoshop) podemos modificar todas
estas imgenes a nuestro gusto. Aqu
dejo la correspondencia de cada imagen
en el men:

--> Screen.Png = El fondo del men


--> wait.png = La imagen que sale cuando
arrancas una aplicacin del DVD.
--> Dn.png = Es una flecha que se coloca
justo debajo del recuadro de la lista de
juegos, esta apunta hacia abajo.
--> Up.png = Lo mismo que el anterior,
pero dirigido hacia arriba.

Todos los archivos tienen que llamarse


Borramos la carpeta xbmedia, ya que del mismo modo, con la misma extensin.
esta carpeta es la que contiene el
Windows Media Placer (y no nos interesa). Screen.png es el fondo del men consta
de dos partes fundamentales, la lista de
Aqu crearemos una carpeta por juego, juegos y la imagen previa:
solo como ejemplo yo crear 4 carpetas
que 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 cuando
no superis los 4,4 GB de tamao total).

Ahora lo que vamos a hacer, es modificar


la apariencia del men, para ello nos
vamos a la carpeta de MenuX/Media:

Si modificas el screen.png, ten cuidado y


respeta 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 no
podremos modificar el tamao de estas celdas.
Cuando tengamos todas las imgenes listas,
nos fijamos en esta misma carpeta en el
archivo ambient.wma.
Esta es la cancin que sonar durante la
ejecucin del men. Podemos cambiar el

PC PASO A PASO N 20 Pgina 35


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

archivo por otro con la misma extensin y DIR es el directorio dentro de la carpeta ISO
listo, el men ya tiene la pinta y la msica donde se encuentra el juego.
que nos gusta.
Entre juego y juego hay que dejar una lnea
Ahora nos dirigimos a la carpeta sshot, donde en blanco.
encontraremos la imagen previa del media
player, es una imagen con extensin png y As quedara el mo:
sus dimensiones son de 400 Pixeles de ancho
y 300 de alto. TITLE=Nintendo.
INFO=Emulador.
La borramos y ponemos aqu una imagen con GFX=nintendo.png
extensin png (de las mismas medidas) por DIR=Nintendo
cada juego que vayamos a poner en el DvD.
TITLE=Super Nintendo
Acordaros de los nombres, ya que ahora
INFO=Emulador.
tendremos que decirle al men qu imagen
GFX=Snintendo.png
va con cada juego. DIR=Super nintendo

Copiamos los juegos a sus carpetas TITLE=Nintendo 64.


correspondientes de la carpeta ISO. INFO=Emulador
GFX=N64.png
Nos vamos a la carpeta Men y veremos un DIR= Nintendo64
archivo llamado config.txt, lo editamos con
un editor de texto plano (por ejemplo el Bloc TITLE=PlayStation
de Notas de Windows): INFO=Emulador
GFX=psx.png
DIR= PlayStation

Guardamos los cambios.

Arrancamos el archivo
MenuX-xdi.bat y nos
configurara el men
segn le hemos dicho.

Ya esta, quemamos en
un DvD el contenido de
la carpeta ISO tal y como
he explicado en nmeros anteriores.

Como podemos ver en la imagen, tememos


esto: ! Si habis...
TITLE=Xbox Media Player
INFO=divx/vcd/network
GFX=media.png Si habis seguido los artculos anteriores publicados en la
DIR=xbmedia revista, podis pasarlo por la red al HD del la consola y
Donde TITLE es el nombre del juego que as cercioraros que todo ha salido bien antes de grabar el
saldr en la lista de juegos. DVD.
INFO es la breve descripcin del juego.
El mes que viene veremos como crear CDs y
GFX es la imagen previa del juego, la/las que
DVDs autoinstalables.
hemos colocado en el directorio sshot.
Salu2

Pgina 36 PC PASO A PASO N 20


curso de seguridad
en redes - ids (II)

- Vamos a avanzar en el conocimiento del SNORT


- Estudiaremos las reglas, contramedidas y MUCHO MAS

INTRODUCCIN Full, es el modo por defecto y alertar de


todos los paquetes que provoquen una alerta
En el artculo anterior aprendimos a instalar y volcar todo el contenido de los mismos
snort e iniciamos nuestra primera incursin Fast, como full pero slo registrar los
en el mundo de las reglas y directivas del mensajes de alerta, el timestamp (fecha/hora)
pre-procesador... ahora nos toca conocerlo ip origen e ip destino
ms a fondo. Syslog, que enviar los sucesos a un servidor
Syslog definido
En esta ocasin vamos a tener que realizar
Unixsock o unsock, que enva las alertas
alguna que otra modificacin en la instalacin
a un servidor de dominio *NIX
de snort, de hecho nos tocar en LINUX
compilar el cdigo fuente de snort e incluir SMB, que enva las alertas mediante
alguna caracterstica que no se incluye en los mensajes Winpopup (mensajes emergentes)
paquetes rpm, no te alarmes... todo estar None, en el que slo se emitirn logs, nada
detallado para que consigas el objetivo. de alertas...

Como recordatorio digamos que snort trabaja Recordemos como se iniciaba snort....
en varios modos, como esniffer, como
capturador-grabador de paquetes o como snort de l directorio de logs c directorio y fichero del
NIDS, lo que nos ocupa es conocer las
archivo de configuracin
capacidades de snort en modo IDS,
concretamente en modo NIDS (NetworkIDS)
Ejemplo:
En este (NIDS) modo podemos ejecutar snort snort de l /var/snort_logs/ -c /etc/snort/snort.conf
en dos modos:

Modo logging, que grabar en disco todos Si queremos utilizar algn modo de alertas
los paquetes que circulan por la red o hacia como los que definimos anteriormente, la
o desde un host. orden sera (observa la opcin A que es
quien indica el modo de alerta):
Modo Alerta, en el cual comprobar si
snort de A fast l /var/snort_logs/ -c /etc/snort/snort.conf
existen reglas de comportamiento de los
paquetes y en su caso nos vuelca un informe Hay algunas matizaciones con los modos
o registro de aquellos paquetes que Syslog y SMB, ms adelante las descubriremos,
concuerdan con las mismas, advirtindonos por ahora slo es necesario que recuerdes
de las infracciones que se cometan. que se pueden usar y que existen.

A su vez, el modo alerta dispone de algunas Si queremos usar snort sin generar alertas
opciones que se pueden lanzar desde la lnea bastara utilizar la sintaxis:
de comandos de snort, estas son: snort de l /var/snort_logs/

PC PASO A PASO N 20 Pgina 37


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

Para complicar ms la cosa, podemos Las reglas que snort puede aplicar al trfico
formatear la salida de logs es decir, darle de red se basan en las cabeceras de los
un aspecto para su posterior lectura entre paquetes y en el cuerpo o contenido de los
los modos de presentacin ms habituales mismos y en el control de flujo, por tanto
estn: podremos aplicar reglas de cabecera, reglas
de contenido y reglas de control.
CSV (Comma Separated Values), es un
modo habitual para observar los registros LAS VARIABLES:
desde una hoja de clculo o base de Datos
Antes de meternos de lleno en las reglas,
Syslog, para personalizar la salida hacia el vamos a ver unas cuantas cosas. Para que
servidor Syslog snort pueda comparar esas reglas con algo
o desde alguna parte se utilizan variables,
Database, para escribir la salida a Bases de la sintaxis genrica de las variables es:
Datos tipo MySQL, ODBC, ORACLE, etc.. var nombre de variable valor de variable

Null, no crea archivos de logs pero s alertas Todas las variables se definen en el archivo
de configuracin (snort.conf) y se procesan
Tcpdump o Windump, formato de salida de arriba abajo, y como es comprensible,
para aplicaciones tcpdumo o windump deben estar definidas e inicializadas antes de
usarse.
SnmpTrap, enviar registros SNMP
Ejemplos:

Unified, Formato de salida binario que puede var DNS SERVER 172.28.0.98
ser ledo por diversas aplicaciones, es el var INTERNAL NET 172.28.0.0/16
mtodo de salida ms rpido var INTERNAL NETS [172.28.0.0/16, 192.168.1.0/24, 10.0.0.0/8]

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


en lenguaje XML
Si queremos asignar el contenido de otra
variable a una nueva, usaremos:
Bueno, esto nos servir como introduccin
para ms adelante, cuando nos toque abordar var nueva_variable $variable_anterior
los plug-ins de salida... al igual que antes...
Esto es:
con que recuerdes que no todo es texto y con
el mismo formato es suficiente. var MI_DNS $DNS_SERVER
var ESTA_ES_MIRED $INTERNAL_NET
Tras la introduccin... pasemos a lo que nos
ocupa en este artculo: Las Reglas Estars pensando qu pasara en estos ltimos
casos si las variables que actan como valores
LAS REGLAS de las REGLAS.... de las nuevas no estuvieran previamente
definidas... un error... para ello snort puede
Ya nos hicimos a la idea de para qu puede utilizar el siguiente mtodo:
servir el definir reglas en el IDS, las reglas
var ESTA_ES_MIRED $(RED_INTERNA:172.28.0.0/16)
son el alma en la deteccin de intrusos...
aquellos paquetes que cumplan (o no cumplan) Esto significa que si $RED_INTERNA no est
las reglas pasarn o no pasarn... mejor definida previamente, se asignar el valor
dicho... se registrarn o no se registrarn. 172.28.0.0/16 a la variable ESTA_ES_MIRED

Pgina 38 PC PASO A PASO N 20


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

Hasta se pueden lanzar mensajes de error Lgicamente el hecho de incluir una regla en
para que avise de los mismos... por ejemplo: el archivo de configuracin no lo es todo... lo
var ESTA_ES_MIRED $(RED_INTERNA:? Vic_Thor, define RED_INTERNA) importante es conocer qu tiene esa regla. En
el archivo de configuracin simplemente se le
Echa un vistazo al archivo snort.conf para dice a snort que deseamos utilizar tal o cual
ver las variables que usa... entre ellas
regla y ser en los archivos especificados
encontrars estas con estos valores (o
donde tendremos que definir el
parecidos):
comportamiento de la regla.

Lo mismo podramos aplicar al pre-


procesador... en la siguiente seccin nos
ocuparemos de l, ahora toca reglas....

Ya sabemos que snort valida las reglas de


varias formas, consulta las cabeceras de un
paquete de datos, consulta el contenido de
ese paquete, controla el flujo de datos... o
todas a la vez...

volvemos con las analogas... las cabeceras


Algunos valores especiales para la asignacin
seran el equivalente de las seas, remitente,
de variables son:
etc. Del sobre de una carta o correo postal,
mientras que las reglas de contenido abriran
any Cualquier valor
el sobre y buscaran dentro para leer lo que
dice y actuar en consecuencia...
! Negacin, por ejemplo !80 es NO el 80,

Las reglas de Cabecera inspeccionan:

LAS REGLAS
Protocolos usados
Puertos origen y/o destino
Tras definir las variables tendremos que decidir
qu reglas vamos a incluir en el IDS y las Direcciones IP origen y/o destino
directivas del pre-procesador que queramos...
Las reglas de Contenido inspeccionan:
Normalmente las reglas a ser utilizadas se
declaran mediante las lneas include y las La totalidad o parte de la informacin que
directivas del pre-procesador mediante las no es cabecera.
lneas preporcessor:
Ejemplo sacado del archivo de configuracin Las reglas de Control de flujo
original inspeccionan:

(snort.conf)RULE PATH /etc/snort/rules La direccin del trfico (del cliente al


..... servidor, del servidor al cliente)
preprocessor stream4 reassemble
El nmero de paquetes transmitidos
preprocessor stream4: disable evasion alerts
El tiempo de cada sesin
...
include $RULE PATH/local.rules Las contramedidas o reacciones
include $RULE PATH/bad-traffic.rules ....
include $RULE PATH/exploit.rules

PC PASO A PASO N 20 Pgina 39


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

Las reglas se definen de una forma muy Como estars pensando, esa regla no es que
sencilla: sea precisamente efectiva, puesto que tendr
un trabajo enorme debido a que todas las
Accin Protocolo IP/red origen Puerto sesiones de navegacin de la red se volcarn
origen Direccin IP/red Destino Puerto en los logs y alertas.
destino Contenido control de flujo
Vamos a afinar un poquito ms... pongamos
Vamos a detallarlo:
que queremos alertar de slo aquellas
Accin puede ser: pass, log, alert, dynamic navegaciones hacia pginas de sexo....
o activate
Ahora todas las pginas visitadas en cuya
Protocolo puede ser: ICMP, TCP, IP o UDP, direccin web aparezca la palabra sexo sern
hay otros pero fundamentalmente estos. las registradas, las otras no...

Origen y/o Destino son: Direcciones IP alert tcp 172.28.0.0/16 any -> any 80 (content: sexo;)
individuales o direcciones de red en notacin
CIDR
Claro, que si el servidor pornogrfico no utiliza
Direccin es decir si va hacia el origen o hacia el puerto 80 tampoco saltara la alerta, la
el destino solucin ser fcil, no?

alert tcp 172.28.0.0/16 any -> any any (content: sexo;)


Contenido es todo aquello que contiene el
paquete, es decir los datos de que trasportan Ahora alertar de todos los accesos por TCP
los protocolos. en los que intervenga la palabra sexo,
independientemente del Puerto destino (any)
Control de Flujo: Tiempo transcurrido, nmero
de paquetes, corte de la conexin... Bueno, es slo un ejemplo para ir conociendo
algo ms de las reglas, realmente son bastante
Vamos a ver un ejemplo de una regla tipo:
ms complicadas y potentes, veamos TODO
Accin: alert acerca de las reglas... y empecemos por las
Protocolo: tcp ms sencillas... las reglas de Cabeceras.
IP/red origen: 172.28.0.0/16
Puerto Origen: cualquiera Reglas de Cabecera
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 el


protocolo TCP cuyo origen del paquete sea
desde la red 172.28.0.0/16 y desde cualquier Protocolos
puerto hacia cualquier red cuyo destino sea
el puerto 80. Sera mprobo detallar cada uno de ellos y
realizar una descripcin pormenorizada uno
En otras palabras, si cualquier PC de la red a uno, sirvan unas breves lneas para expresar
172.28.0.0/16 navega hacia cualquier servidor sus cometidos. Los protocolos que se pueden
web que utilice el puerto 80, ser logueado usar son:
y generar una alerta del mismo.

Pgina 40 PC PASO A PASO N 20


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

El nmero de red de una direccin IP identifica


la red a la cual se encuentra adherido un
dispositivo.

La parte de host de una direccin IP identifica


el dispositivo especfico de esta red.

Como las direcciones IP estn formadas por


cuatro octetos separados por puntos, se pueden
utilizar uno, dos o tres de estos octetos para
identificar el nmero de red.

De modo similar, se pueden utilizar hasta tres


de estos octetos para identificar la parte de
host de una direccin IP.
Direcciones IP y direcciones de
Debido a esta caracterstica, las direcciones
Red.
IP se suelen separar en clases:

Se usan para definir la IP origen y/o IP


destino... tambin puede ser una red o subred
completa.

Las direcciones de red en snort, se indican


en notacin CIDR (Classless InterDomain
Routing, Enrutamiento sin clase) esto es, que
en lugar de usar las mscaras de subred en
la notacin decimal punteada
(255.255.255.255) se usa el formato /xx
donde xx es un nmero que equivale a la
mascara de subred.

Figura 2.
Le pisaremos un poquito el terreno a nuestro Como muestra la figura anterior, disponemos
Componentes de una
compaero que est haciendo el curso de de tres Clases de Direcciones IP A-B-C, bueno
direccin IP
tambin existen D y E, pero de momento no
TCP/IP y brevemente repasemos cmo es
para nosotros.
una direccin IP :)
CLASE A
Componentes de una direccin IP
Una manera fcil de reconocer si un dispositivo
forma parte de una red Clase A es verificar el
primer octeto de su direccin IP, cuyo valor
debe estar entre 0 y 127. Con una excepcin,
todas aquellas direcciones que comiencen por
127.xxx.xxx.xxx, que son consideradas como
direcciones de loopback (el tema loopback
ya se explic en anteriores nmeros de la
revista).
Figura 1. En toda direccin IP existe una parte de
Componentes de una CLASE B
Red y una parte destinada para el host
direccin IP

Las direcciones IP (Ipv4) son de 32 bits, Las direcciones IP Clase B siempre tienen valores
que van del 128 al 191 en su primer octeto.
representadas en 4 grupos de 8 bits cada una

PC PASO A PASO N 20 Pgina 41


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

CLASE C La direccin IP de la red se encuentra


reservada. Nunca se usar como direccin
Las direcciones IP Clase C siempre tienen
para un dispositivo (ordenador, router,
valores que van del 192 al 223 en su primer
etc) conectado a ella.
octeto.

Qu es una Direccin de Red? Qu es una direccin Broadcast?


Definicin: Una Direccin de Red es una
Si un host (por ejemplo tu PC) desea
direccin IP especial que contiene ceros
comunicarse con todos los dispositivos de una
binarios en todos los bits del host.
red, sera prcticamente imposible escribir la
direccin IP para cada dispositivo (que trabajo
Cmo? Qu has dicho? Ein? ms desesperante, hay muuuuuuuuuchas
direcciones posibles).
Tranquilo, se ver mejor con un ejemplo: En
una red de Clase A, la IP 113.0.0.0 (por
ejemplo) est reservada, ningn host tendr Para esa tarea existe un mtodo abreviado:
esa IP, tu PC jams podr tener esa IP, NADIE Si queremos enviar datos a todos los host
puede tener esa IP. Esa IP es la llamada de la red, utilizaremos una direccin de
direccin IP de la red. broadcast. Un broadcast se produce cuando
una fuente enva datos a todos los dispositivos
Ejemplo de Direccin de red:
de una red, es muy similar al envo de correo
masivo.

Bueno, venga ponme un ejemplo de


direccin broadcast.
Fjate en lo que hemos dicho antes y fjate
en el ejemplo. Hemos hablado de una IP que El curso de TCP/IP va por otro lado, pero
contiene ceros binarios en todos los bits de bueno te lo explico plan rpido. Es lo mismo
host Fjate que en una red de Tipo A los que en el tema de las direcciones de red pero
host corresponden a los tres octetos finales con todos los bits puestos a 1, es decir, son
(24 bits) y la IP que hemos puesto de ejemplo direcciones tipo 113.255.255.255 o
cumple esa propiedad puesto que sus tres 135.221.255.255 (antes en lugar de 255
octetos finales son ceros :) tenamos ceros, y el 255 sale de poner todos
los bits a 1 ya tocamos las conversiones
binarias en otros nmeros de la revista).
113.0.0.0 es la direccin IP de la red que
contiene, por ejemplo, el host 113.1.2.3 (y
el 113.67.24.5 y el 113.4.5.6, etc). Otro
ejemplo de Direccin de Red de Clase A sera
! Y por si no...
la IP 87.0.0.0, que contendra el host
87.24.56.12 (y el 87.65.65.51, etc).
Y por si no te he cansado lo suficiente, para los ms curiosos
(para que investigues en el google, www.google.com) te diremos
Venga, ponme un ejemplo de Direccin de que los hosts en una red slo pueden comunicarse directamente
Red de Clase B venga, no es muy difcil: con dispositivos que tienen el mismo ID de red y que los
135.221.0.0 enrutadores de IP no propagan (reenvan) los paquetes de
difusin de red (broadcast).
Se est preparando un nmero especial para AGOSTO donde
se explicar MUY DETALLADAMENTE todo esto.

Pgina 42 PC PASO A PASO N 20


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

Redes, subredes y Mscaras de


red

Las redes IP son arquitecturas lgicas,


todas las mquinas que forman parte de una
red tienen algo en comn, su mismo
Identificador de Red.

Las IP de Red las asigna el administrador,


pueden cambiar y de hecho cambian con
frecuencia, basta con trasladar un equipo de
un sitio a otro para que pueda ser preciso
cambiar la direccin de red e incluso la
direccin de host.

Todo lo contrario ocurre con las direcciones


MAC, estas son permanentes y no suelen
cambiar a menos que cambie el Hardware
del host.

Veamos una tabla que ilustra el nmero de


redes que puede existir para cada clase.
Puertos Origen y Puertos Destino

Los puertos es otra de las cosas que deberas


tener claro, para lo que sirven y lo que son.

Un puerto TCP UDP es la ubicacin o


medio que se abre para enviar/recibir
mensajes usando los servicios TCP o UDP,
ese puerto es un nmero entre 0 y
65535.
Deberas leer este hilo del foro, en l
La IANA (Internet Assigned Numbers
moebius, explica magnficamente y con Authority) asigna nmeros de puertos
numerosos ejemplos Qu es eso de las conocidos a protocolos TCP UDP que
mscaras de subred?, No lo olvides, pueden ser usados y reserva del 0 al 1023
precisamente por que existe ese link yo no para este tipo de servicios.
voy a extenderme mucho en el subnetting,
adems, eso me hara pisar el magnfico Un ejemplo es el archiconocido puerto
curso de TCP/IP que se est impartiendo en 80, que se utiliza para navegar por
esta revista ;) Internet de Web en Web. Cuando en el
Internet Explorer pones www.google.com
http://www.hackxcrack.com/phpBB2/viewtopic.php?t=8597 se asume que lo que has querido decir
es www.google.com:80 (80 es el puerto,
Resumiendo, que para nuestro snort... el
prueba a ponerlo en tu navegador
formato para explicarle cuantos pcs forman www.google.com:80 y vers que funciona
una red o subred es as: perfectamente; pero no pongas otro
puerto o no funcionar :))

PC PASO A PASO N 20 Pgina 43


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

A grandes rasgos, los nmeros de puerto hacia otras redes pero slo de aquellas
tienen los siguientes intervalos asignados: comunicaciones que usen puertos por encima
del 1024, sera as:
Los nmeros inferiores a 255 se usan para
aplicaciones pblicas.
log tcp 172.28.0.0/16 any -> any 1024:65535
Los nmeros del 255 al 1023 son
asignados a empresas para aplicaciones o tambin:
comerciales.
log tcp 172.28.0.0/16 any -> any 1024:
Los nmeros superiores a 1023 no estn
regulados. es decir, el carcter dos puntos ( : ) podemos
usarlo como un separador de rangos, de forma
Convencionalmente usamos determinados que si aparece antes del nmero lo
nmeros de puerto asociados a ciertas interpretaremos como hasta y si aparece
aplicaciones o servicios, pero nada nos impide despus del nmero de puerto lo
alterar ese convenio siempre y cuando interpretaremos como desde, ejemplo:
cliente y servidor se pongan de acuerdo y se
dirijan las peticiones por los puertos 1025: desde el 1025
acordados. :1024 Hasta el 1024
1:1000 desde el uno al 1000
Entre los servicios y puertos ms comunes,
estn:
La palabra any significa cualquiera y recuerda
que podemos usar la exclamacin ( ! ) para
negar cualquier cosa, en este caso un puerto,
por ejemplo

log tcp 172.28.0.0/16 any -> any !80

Este caso deberamos leerlo como cualquier


Puerto que no sea el 80.

Direccin o Flujo de datos

En las alertas de snort se define la Direccin


de tres formas:

Bueno y un sin fin de ellos ms, seguro que -> Hacia el Destino
por Internet o por nuestros foros encontrars <- Desde el destino
ms informacin de cada uno de ellos, lo que <> Bidireccional, entre el origen y el destino
son y para qu se usan... adems, hasta los
hay propios de UDP, de TCP o para ambos...
vamos que tampoco hay que saberse la lista Es fcilmente comprensible, pongamos esta
de los 65000 y pico como si fuesen la lista regla:
de los Reyes Godos....
alert tcp 172.28.0.0/16 any -> any 80
Por otra parte y volviendo a las reglas de
snort, es posible explicar a nuestras reglas Alertar de los paquetes tcp que fluyan desde
si queremos utilizar ms de un puerto, imagina la red 172.28.0.0/16 hacia cualquier otra y
que quieres registrar el trfico de nuestra red con destino el puerto 80.

Pgina 44 PC PASO A PASO N 20


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

Observa que si un equipo de otra red entrase Es bastante potente... podemos vigilar y
en la nuestra aunque sea por el puerto 80, seguir los pasos de quien rompe las reglas
esos paquetes no se registraran, para ello que establecimos... de ese modo podemos
tendramos que haber usado <- monitorizar en tiempo real que demonios est
haciendo nuestro sospechoso
Pero claro, si ussemos esa notacin, no se
registraran los que nuestra red emite... o Si combinamos sabiamente todo lo que ya
sea, que si queremos todos, desde fuera o llevamos aprendido podemos empezar a
desde dentro, usaramos <> monitorizar el trfico de nuestra red a medida
incluyendo slo aquellas reglas que se
Antes de pasar a las reglas de contenido, necesiten.
veamos otra forma til de definir las reglas,
el uso de los mtodos Activate y Dynamic En el ejemplo anterior utilizamos algo nuevo
hasta ahora, msg: Texto, no le prestes
Empecemos con un ejemplo para verlo ms mayor importancia, simplemente ser un texto
claro.... descriptivo que se guardar junto con las
activate tcp any any -> any 80 (activates: 80; msg: OJO, Peticin Web;) alertas y registros, esa forma es parte de las
dynamic tcp any any -> any 80 (activated_by: 80; count: 25;) reglas de contenido que veremos a
continuacin, pero antes vamos a realizar un
Bien, lo primero es que cort la lnea antes par de prcticas para afianzar lo aprendido...
de dynamic... esto no es as, slo para
mejorar la visualizacin de la regla, Prctica 1. Detectar puertos
realmente ira todo seguidito Extraos y conexiones
sospechosas.
Lo que s es importante es que exista
correlacin entre el nmero que sigue a
Imaginemos que somos los administradores
activates: y el nmero que sigue a
de una red y queremos saber varias cosas:
activated_by

1) Qu IPs internas intentan acceder a


Utilic el nmero 80 pero no lo confundas
con el puerto del protocolo, no tiene nada servicios externos que no son aplicaciones
que ver, simplemente la regla dynamic se pblicas, es decir, aquellas mquinas que
lanza gracias a lo que diga activate y para intentan abrir conexiones con equipos remotos
establecer la relacin entre ellas, ambas que utilizan puertos superiores al 1024, emule,
debern utilizar un nmero de regla de
KaZa, e-donkey....
activacin.

La funcin de esta regla es: 2) Qu ips internas acceden a pginas webs


de contenido ertico o pornogrfico, bueno y
Se genera una alerta y registro con el mensaje ya puestos pginas de crackers, hackers y
OJO, Peticin Web cuando cualquier equipo esos mundos
de la red realiza una peticin TCP hacia
cualquier otra red por el puerto 80, hasta
3) Pongamos que nuestra poltica de red es
aqu es igual que siempre, la diferencia est
la de no permitir a los usuarios que utilicen
en que al incluir dynamic, adems de eso,
le pedimos a snort que contine registrando nuestros accesos para sus correos privados,
los siguientes 25 paquetes de esa misma es decir, queremos averiguar quienes acceden
conexin para observar lo que hace el cliente a servidores de correo tipo hotmail, yahoo,
que activ la alerta. wanadoo, etc...

PC PASO A PASO N 20 Pgina 45


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

Bueno, podramos seguir, con estos ejemplos Una vez abierto el editor gedit, escribimos
imagino que ya sabes por donde voy.... estas lneas para crear el nuevo archivo de
configuracin:
El seguimiento de esta prctica la haremos
con un snort corriendo en un equipo LiNUX,
por ltima vez te repito la diferencia en la
estructura de directorios entre ambos sistemas
operativos en cuanto a snort se refiere:

Advierto que los directorios y/o rutas mostradas


en la tabla anterior pueden cambiar
dependiendo de cmo lo decidimos en el
momento de la instalacin asumir que son Pantalla 2. Contenido
Y lo guardamos
estos u otros nuevos que nos crearemos para del archivo de
configuracin
el caso. As que al tajo Ahora accedemos al directorio donde estn
mi_snort.conf
las reglas y crearemos del mismo modo que
Primero definamos nuestro escenario y antes el archivo mis_reglas
recursos.

a.- Disponemos de una LAN con direccin de


Pantalla 3. Creacin
red 172.28.0.0/16 y varios equipos en ella
del archivo mis_reglas
b.- El IDS corre en una mquina LiNUX de
direccin IP 172.28.0.200/16
c.- Crearemos un nuevo archivo de
configuracin llamado mi_snort.conf y
lo guardaremos dentro de los directorios
mostrados en la tabla anterior.
d.- Crearemos 1 archivo con las reglas
particulares, lo llamaremos mis_reglas y
lo guardaremos en el directorio de reglas
como indica la tabla
e.- Las alertas, sucesos, logs, etc... los
guardaremos en el directorio /var/mis_logs, Pantalla 4. Contenido
No creo que haga falta comentar mucho ms
Pantalla 1. Crear un para ello habr que crearlo previamente. del archivo mis_reglas
estas reglas, con todo lo dicho hasta ahora y
nuevo archivo de
estos ejemplos repetitivos no deberas tener
configuracin llamado Accedemos al directorio snort para crear el ningn problema en ello...
mi_snort.conf nuevo archivo de configuracin:
Ahora cambiamos al directorio /var y
creamos el archivo mis_logs tal y como se
deca en el ltimo paso a realizar... no es la
nica forma, hay otras pero ya sabes... poco
a poco que no hemos hecho ms que empezar.

Pgina 46 PC PASO A PASO N 20


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

Reglas de contenido

Acabamos de mostrar un ejemplo en el uso


de las reglas de snort con una introduccin
a las reglas de contenido, veamos ahora ms
posibilidades de stas:
Pantalla 5. Creacin
del directorio donde se
Bien, ya lo tenemos todo, ahora slo hace
falta iniciar snort y darle los parmetros Contenido de los paquetes
guardarn los logs.
/var/mis_logs adecuados para que busque nuestro archivo (content: )
de configuracin y cargue las nuevas reglas....
Puede comprobar contenidos en formatos
Ascii (texto), binarios-hexadecimales o
ambos.

Uso: content: contenido a examinar dentro


del paquete
Pantalla 6. Ejecucion
Vamos a coger cualquier equipo de la red y Ejemplos:
de Snort desde la
linea de comandos violemos las reglas, todos los ejemplos
alert tcp any any -> any any (content: sexo;)
que vienen a continuacin los infringi el alert tcp any any -> any any (content: |0101 EFFF|;)
mismo equipo, el 172.28.0.50, que accedi alert tcp any any -> any any (content: |0101| /etc/password |EFFF|;)
por un puerto superior al 1024, busc
Explicaciones:
una pgina de sexo y accedi a su correo
personal a travs de webmail de wanadoo y Generan una alerta si el contenido coincide
luego se pas por los foros de HackXCrack con cualquiera de las expresiones que siguen
a la instruccin content:
Este sera el contenido del archivo alert en
/var/mis_logs Muchos ataques conocidos, virus, exploits,
rootkits, etc... son bien conocidos, incluyen
lo que se llama un payload o carga til del
paquete... con snort podemos definir esos
payloads en las reglas content: para que
generen alertas o logs cuando esto ocurre.

Profundidad (depth:)

Establece el nmero de bytes que sern


analizados dentro del contenido del paquete.
Pantalla 7. Contenido
del archivo alert en Recuerda que dentro del directorio Uso: depth: nmero de bytes
/var/mis_logs /var/mis_logs se crearn tambin otras
carpetas o directorios con los contenidos de Ejemplos:
los paquetes prohibidos tal y como vimos alert tcp any any -> any any (content: sexo; depth:100;)
en el artculo del mes pasado...
Explicaciones
Y otra cosa... si te ests preguntando si el
Con profundidad queremos definir la cantidad
propio snort es capaz de abortar esas
de bytes que examinar snort en una regla
acciones, la respuesta es SI... espera a ver
en busca del payload y/o contenido de los
cmo avanzamos y lo conseguirs paquetes, en el ejemplo expuesto examinar
implementar... registrar los paquetes y si lo los primeros 100 bytes del paquete buscando
deseas corta la comunicacin y ms.... la palabra sexo....

PC PASO A PASO N 20 Pgina 47


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

Es una opcin til puesto que snort no cualquier paquete, con uricontent se examinar
analizar en todo el contenido del paquete, nicamente el contenido de la direccin URL
slo en los bytes indicados, con lo que de una visita a un servidor web, con ello se
evitamos un trabajo en exceso. ahorra procesar todo el contenido del paquete
y buscar solamente en la direccin web escrita
Desplazamiento (offset:)
Uso: uriconent: contenido uri
Establece el nmero del byte a partir del cual
empezar a ser sern analizado el contenido Ejemplos:
del paquete. alert tcp any any -> any 80 (uricontent %255c;)

Uso: offset: nmero de bytes Explicaciones

Ejemplo: Analiza si el contenido de una sesin web, se


escribi la secuencia %255c como parte de la
alert tcp any any -> any any (content: sexo; depth:100; offset: 8)
direccin web.
Explicaciones
Mensaje de alerta(msg: )
Comenzar el anlisis a partir del byte nmero
8 en lugar desde el principio (byte cero) que Escribe un mensaje dentro del archivo alert
sera la opcin por defecto... No es una opcin que generar la alerta
muy usada.
Uso: msg: Texto a mostrar
Ignorar maysculas/minsculas.
(nocase;) Ejemplos:

Si no se utiliza la opcin nocase, snort alert tcp any any -> any 23 (content: login failed; session
analizar exactamente el contenido de la printable;nocase; msg:ATENCION Intento de acceso por TELNET;)
opcin content:, lo que se llama case Explicaciones
sensitive, si deseamos ignorar la diferencia
entre maysculas y minsculas usaremos Escribe ATENCIN intento de acceso por
nocase. TELENET como cabecera de en el archivo de
alertas generado.
Uso: nocase;
Aunque existen otras opciones en el contenido
Ejemplos: de las reglas, stas que hemos comentado
alert tcp any any -> any any (content: sexo; nocase;) son las ms usadas, puedes revisar el resto
en:
Explicaciones
http://www.snort.org/docs/snort manual/node14.html
Alertar de contenidos en los que sexo, Sexo,
SEXO, sExO, etc.. estn presentes, si bien, No todas las opciones que se pueden aplicar
a partir de la versin 2.1 de snort, ya se toma a las reglas son de cabecera de paquetes o
como opcin por defecto. de contenido de los mismos, hay ms... hay
unas cuantas que son muy interesantes (otras
Contenido URI: uricontent: menos) que se pueden utilizar tras la deteccin
(Post-detection) o para controlar el flujo de
Anteriormente vimos que con la opcin los paquetes (flow)
content, se examinaba el contenido de

Pgina 48 PC PASO A PASO N 20


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

REGLAS DE CONTROL Explicaciones

Sesin (session: ) Se activar la alerta cuando el paquete


provenga del servidor telnet
Permite registrar en texto claro los datos
que transmite el protocolo y los vuelca por Es una opcin muy utilizada, sobre todo para
pantalla con el formato de salida elegido. registrar diferentes ataques del tipo D.o.S. en
los que las sesiones no terminan de
Uso: session: printable session: all establecerse por completo.

Ejemplos: Registrar (logto: )


alert tcp any any -> any 23 (content: login failed; session printable;nocase;)
logto le dice a Snort que registre todos los
Explicaciones paquetes que accionen esta regla y que vuelque
su contenido a un fichero de registro de salida.
Parecido a content pero para protocolos y Esto es especialmente prctico para combinar
puertos especificados, el ejemplo anterior datos de actividades en escaneo de puertos,
generar una alerta y un archivo llamado exploraciones de cgi, etc. Esta opcin no
SESSION:puerto_origen-23 que guardar trabaja cuando Snort est en modo de
el resultado de una sesin telnet fallida... registro binario.

Control del flujo (flow ) Uso: logto: Ruta/archivo.extensin

Establece la direccin de los paquetes, por Ejemplos:


ejemplo si van desde el cliente al servidor,
alert tcp any any -> any 23 (content: login failed; session
desde el servidor al cliente, hacia el servidor,
printable;nocase; logto:/var/mis logs/autenticacion telnet;)
etc...
Explicaciones
Uso: flow: opcin de control
Guardar un registro en el archivo
Disponemos de varios controles en el sentido autenticacion_telnet dentro del directorio
del trfico: /var/mis_logs, es alternativo al parmetro
l en la inicializacin de snort, gracias a esta
opcin podemos separar unas alertas de
otras o seleccionar archivos especficos por
su especial relevancia.

Etiquetas (tag: )

Tag permite registrar un nmero de paquetes


adicionales si una alerta se dispara.

Uso: tag: host/session , cantidad,


paquetes/segundos, origen/destino

Ejemplos: Ejemplos:

alert tcp any any -> any 23 (content: login failed; alert tcp any any -> any 23 (tag:host,10, packets;)
session printable;nocase; flow:from_server;) alert tcp any any -> any 23 (tag:host,20, seconds;)

PC PASO A PASO N 20 Pgina 49


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

Explicaciones Ejemplos:

alert icmp any any > any any (resp:icmp_host; msg: Entrada de un Ping;)
Registrar 10 paquetes (primera sintaxis) o
durante 20 segundos (segunda sintaxis) el Explicaciones
trfico telnet que se establezca entre servidor
y cliente. Esta alerta generar un registro cuando
cualquier equipo de la red intente enviar un
CONTRAMEDIDAS Y ACCIONES
ping a cualquier destino, cancelar las
respuestas del ping y enviar un resultado al
El grupo de opciones que se detallan a
origen del tipo Host inalcanzable, vamos que
continuacin permitirn tomar a snort una
prohibimos los pings y registramos sus
determinacin acerca de lo que debe hacer
intentos...
con la conexin que dispar la alarma.

Estas opciones se encuadran dentro de las Hay que tener en cuanto algo importante...
llamadas Flex Resp respuestas flexibles y si usamos este tipo de reglas indebidamente
para que puedan ser utilizadas debemos podremos causar una negacin de servicios
realizar previamente algunas modificaciones (DoS) en la red o bucles entre las sesiones
en el paquete snort, concretamente ser que se establezcan entre cliente y servidor,
preciso instalar un juego de libreras salas con cautela.
llamadas libnet y compilar de nuevo el
cdigo fuente de snort con opciones que OPCIONES ESPECFICAS PARA
no estn previamente contempladas. PROTOCOLOS
Antes de explicarte como se hace eso, veamos
sus caractersticas: En conjuncin con cualquiera de las reglas
explicadas anteriormente, podemos utilizar
otras que van en consonancia con el protocolo
Respuestas en tiempo real (resp:
definido en la alerta...
sesp: y react:)
Son muchas y variadas, algunas bastante
Estas opciones permiten entre otras cosas tiles y otras menos usadas, si dispones de
desconectar la sesin o enviar mensajes ICMP unos conocimientos medios de TCP/IP las
al cliente. entenders a la perfeccin, en caso contrario
te crearn muchas dudas, para resolverlas....
Uso: ya sabes:

Cualquiera de las opciones reseadas (resp,


sesp, react) pueden reaccionar de estos 1) Sigue el curso de TCP/IP que est
modos: publicando la revista desde el nmero 17

2) Psate por los foros de hackxcrack para


resolver tus dudas

3) Repasa el Taller de TCP/IP que celebramos


en los foros...

En la pgina oficial de snort puedes encontrar


sus sintaxis y usos,
http://www.snort.org/docs/snort manual/node15.html

Pgina 50 PC PASO A PASO N 20


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

Las opciones especficas para protocolos se Opciones de Identificacin. SID


basan en las opciones, cabeceras y
formatos de los mensajes TCP, ICMP e
Se trata de un mtodo para catalogar, distinguir
IP
e identificar una regla especfica.

Podemos controlar y analizar: Bit de no


fragmentacin, Tipo de servicio, Source Uso: sid: nmero
routing, Tamao de la ventana TCP,
peticiones eco-reply, Flags TCP (ACK, Dnde el nmero puede ser:
PSH, RST, FIN, SYN...) , solicitudes
timestamp, tiempo de vida (TTL), Menor a 100, Reservados
nmeros de secuencia y asentimiento de
los paquetes... lo dicho, es necesario un De 100 a un milln, Utilizados por las
p r o f u n d o c o n o c i m i e n t o d e T C P / I P, distribuciones de reglas de snort

En los foros de hackxcrack Mayor a un milln: Reglas personales o de


(www.hackxcrack.com) colgar unos libre distribucin
documentos para que las puedas entender y
aplicar, precisaran de toda una revista como Ejemplos:
esta para poder explicarlas medianamente
bien. alert tcp any any -> any 23 (tag:host,10, packets;sid:1200555;)

Como muestra pongamos unos cuantos Nmero de Revisin (rev: )


ejemplos:
Versin de la regla, ya sabes... cuando se
alert ip any any -> any any (ttl:>25;)
modifica una regla original o bien haya
alert tcp $EXTERNAL_NET any -> $ROUTER any (msg:Router Cisco; tos:!0;)
alert tcp any any -> any any (msg: Sesin establecida;flags:A;) cambiado la sintaxis del motor de reglas,
alert tcp any any -> any any (msg: Sesin cerrada;flags:FR;) podemos incluir la revisin a la que pertenece.
alert icmp any any -> any any (msg: respuesta de un PING; itype:8)
alert icmp any any -> any any (msg: Peticin de un PING; itype:0)
Uso: rev: versin

CLASIFICACION, REVISION y Ejemplos:


REFERENCIAS.
alert tcp any any -> any 23 (tag:host,10, packets;rev:2)

Las opciones que forman parte de la Riesgo o Prioridad (priority: )


construccin de reglas que figuran a
continuacin nos permitirn documentar, Identifica el nivel de riesgo o prioridad en la
establecer prioridades, clasificar las que debe tratarse una regla
intrusiones, etc.

Uso: priority: valor


Una tarea importante a la hora de configurar
un IDS es disponer de una buena
Ejemplos:
documentacin de las vulnerabilidades,
bugs, exploits, etc. Si bien no son del todo
alert tcp any any -> any 23 (tag:host,10, packets;priority:1;)
indispensables, s son tiles para disponer de
ms informacin de las intrusiones y/o conocer
donde recurrir para averiguar ms datos.

PC PASO A PASO N 20 Pgina 51


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

Clasificacin (classtype: ) Uso: reference: Sistema, valor

La clasificacin permite catalogar y agrupar Ejemplos:


cada regla segn el tipo de ataque recibido
alert tcp any any > any 12345 (reference: CVE, CAN 2002 101;
y se corresponden con la prioridad descrita
reference:URL, www.securityfocus.com/bid/10456.html; msg:
anteriormente. Troyano;)

Uso: classtype: nombre de clasificacin A continuacin te pongo unos ejemplos de


reglas sacados directamente de los archivos
Ejemplos: de reglas definidos por la distribucin oficial
alert tcp any any -> any 23 (tag:host,10, packets;priority de snort, cono todas las explicaciones que
3;classtype:protocol-command-decode;) hemos dado a cada apartado no deberas tener
Explicaciones ningn problema en analizarlas y en
comprender lo que hacen:
Las categoras y prioridades son muchas, te
pondr las ms comunes:
Ejemplo de alerta para troyano subseven

alert tcp $EXTERNAL NET 27374 > $HOME NET any


(msg:"BACKDOOR subseven 22"; flow:to server,established;
content:"|0d0a5b52504c5d3030320d0a|"; reference:arachnids,485;
reference:url,www.hackfix.org/subseven/; classtype:misc activity;
sid:103; rev:5;)

Ejemplo de alerta para negacin de servicios


en routers cisco

alert tcp $EXTERNAL NET any > $HTTP SERVERS 80 (msg:"DOS


Cisco attempt"; flow:to server,established; content:"|13|"; dsize:1;
classtype:web application attack; sid:1545; rev:5;)

Ejemplo de alerta para explotar el bug de


Unicode en servidores web IIS

alert tcp $EXTERNAL NET any > $HTTP SERVERS $HTTP PORTS
( m s g : " W E B I I S u n i c o d e d i r e c t o r y t rave r s a l a t t e m p t " ;
flow:to server,established; content:"/..%c0%af../"; nocase;
classtype:web application attack; reference:cve,CVE 2000 0884;
sid:981; rev:6;)

El orden de las opciones dentro de las alertas


no es importante, por convenio se suelen usar
las referencias externas, clasificacin y
revisiones al final, pero no es relevante.

Muchas de estas opciones son usadas por los


plug-ins de salida y otras deben ser declaradas
como directivas del pre-procesador para que
Referencias Externas (reference: ) puedan ser incluidas dentro de las reglas.

Esta opcin puede ser usada por los plugins En el prximo apartado veremos las directivas
de salida para documentar apropiadamente del pre-procesador, entonces lo comprenders
la alerta generada y enlazar con webs externas mejor, pero antes vamos a realizar alguna
del tipo bugtraq, securityfocus, etc... p r c t i c a . . . q u e ya va s i e n d o h o ra .

Pgina 52 PC PASO A PASO N 20


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

Prctica 2. Preparar snort para el uso Paso 2) Instalar las libreras


de Contramedidas en Tiempo Real necesarias
Hemos hablado de las reglas junto con
FlexResp y si recuerdas dije que esta Ya sabemos que para que snort pueda
posibilidad no viene por defecto, para ejecutarse se precisan las libreras libpcap,
habilitar esta opcin (y otras) sern precisas pero si adems queremos utilizar otras
varias acciones: funciones como las respuestas flexibles,
necesitamos disponer de las libreras libnet
Instalar snort desde el cdigo fuente, no
desde un RPM ni desde los binarios RPM
Para ello, primero las bajamos:
Habilitar las opciones que deseemos
implementar va ./configure http://www.packetfactory.net/libnet/
Instalar las libreras necesarias dist/deprecated/libnet-1.0.2a.tar.gz

Paso 1) Descargar el cdigo fuente de snort Existe otra versin mas actual, la 1.1.x
pero al menos yo no consegu que funcionase
Lo primero descargar las fuentes de snort
correctamente, recientemente ha aparecido
desde la pgina oficial:
otra versin ms moderna de snort y puede
http://www.snort.org/dl/snort-2.1.1.tar.gz que s sean operativa con ella, pero no vamos
a empezar ahora actualizando snort... lo dejo
Una vez descargado el cdigo fuente, lo para ti si quieres probar esa ltima revisin
guardamos en un directorio y descomprimimos
que es la 2.1.2
el tarball en el directorio que queramos, en
el ejemplo que se sigue el archivo descargado
de snort.org se guard en /root/Taller snort/temp Las libreras libnet tambin las guardamos
y los archivos descomprimidos en en el mismo directorio que antes, para no
/root/Taller snort/temp/snort-2.1.1 tener desperdigadas todas las utilidades. Si
te fijas en la pantalla que puse anteriormente,
Para descomprimirlo podemos usar la orden
el conjunto de libreras libnet estn
tar (como vimos en el primer artculo) y si
estamos usando Xwindow, bastar con hacer /root/Taller_snort/Libnet-1.0.2a
doble-clic en el archivo snort-2-1.1.tar.gz y
Pantalla 8. extraerlo en la carpeta que queramos. Y las descomprimimos igual que antes,
Descomprimir las
por ejemplo en la carpeta libnet que cuelga
fuentes de snort en los
En la siguiente pantalla se muestran los pasos de /root/Taller_snort/temp, como ilustra
directorios indicados
anteriores: la pantalla anterior.

Paso 3) Instalar las libreras


libnet

Esto es sencillo, accedemos al directorio donde


est situado el resultado de la descompresin
y ejecutamos ./configure desde la lnea de
comandos de un Terminal.

Luego creamos los makefiles con la orden


make

Y por ltimo instalamos los makefiles con


make install, vamos lo de siempre... te lo
pongo todo seguidito...

PC PASO A PASO N 20 Pgina 53


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

cd /root/Taller_snort/temp/libnet ./configure --with-libpq-includes=DIR,


./configure indica el directorio de includes para soporte
make de Base de datos PostgreSql
make install
./configure --with-libpq-libraries=DIR,
Indica el directorio donde estn las libreras
Paso 4) Instalar snort desde las necesarias para Postgres
fuentes...
./configure --with-libpcap-includes=DIR,
Como antes primero accedemos al directorio necesario para especificar el directorio en
donde descomprimimos el archivo tarball, donde estn alojadas los includes de las
que si recuerdas era libreras libpcap, esto no es del todo preciso,
/root/Taller snort/temp/snort/snort-2.1.1 slo si el script no es capaz de encontrar las
libreras o si las tenemos guardadas en
Ahora ejecutamos el script ./configure directorios diferentes al de por defecto.
pero.... hay que indicarle alguna opcin si
queremos que todo vaya bien.... entre las ./configure --with-libpcap-libraries, idem
opciones que podemos ejecutar estn: del anterior pero para las libreras

./configure --enable-smbalerts, si Bien, nuestra lnea de rdenes ser:


deseamos usar posteriormente la posibilidad
de mandar alertas a equipos Windows cd /root/Taller_snort/temp/snort-2.1.1
./configure enable smb alerts enable flexresp with mysql
mediante los mensajes emergentes
make
(WinPopup)
make install

./configure --enable-flexresp,
Observa que no se indic el directorio de
precisamente esta es la opcin que
instalacin del Gestor de Bases de Datos
buscbamos, esto habilitar la posibilidad de
MySQL, los parmetros citados anteriormente
incluir en nuestras reglas las
slo necesitan especificar el directorio si el
contramedidas en tiempo real
script ./configure no encuentra el programa.

./configure --with-mysql=DIR, soporte


Ni que decir tiene que MySQL debe estar
para MySQL, imprescindible si deseamos
instalado en nuestra mquina y que debemos
utilizar plug-ins de salida del tipo ACID o
contar con el compilador gcc para que esto
cualquier registro de alertas en una BBDD
se pueda hacer, pero esas dos cosas estn
MySQL
prcticamente en todas las distribuciones de
LiNUX, si no es el caso, ya sabes... paquetes
./configure --with-odbc=DIR, idem de lo
y visitar la web de www.mysql.com para
anterior, pero para Bases de datos ODBC
descargar el gestor de Base de Datos.

./configure --with-postgresql=DIR, ms
Para esta prctica no necesitamos smb ni
de lo mismo pero para Gestores PostGreSQL
mysql, eso ser para el prximo artculo...
pero as ya llevamos camino adelantado.
./configure --with-oracle=DIR, lo mismo
para ORACLE
Llegados a este punto deberamos tener snort
preparado.... podemos probarlo para ver si
./configure --with-openssl=DIR, Soporte
todo es correcto, por ejemplo:
para SSL, se usa con plug-ins XML

Pgina 54 PC PASO A PASO N 20


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

snort T c/etc/snort/snort.conf.old

La opcin T (Test) comprueba que todo se


pueda ejecutar convenientemente y que las
reglas se pueden incluir, recuerda que si has
seguido TODOS los pasos desde el primer
artculo, el archivo de configuracin original
lo renombramos a snort.conf.old, si no es Pantalla 10. Archivo
as prueba con el tuyo propio o indica la ruta de configuracin para
y archivo de configuracin que uses tras la Observa que lo nico que vara de los ejemplos Windows
opcin c para LiNUX es la variable RULE_PATH.

Los logs en C:\snort\logs y Las reglas en


el directorio C:\snort\rules

Pantalla 11.
Directorios de snort
Pantalla 9. Verificacin
Te estars preguntando... Y qu fue de para Windows
de la instalacin de
nuestro querido Windows?
snort con opciones
especiales
Pues nada... Si instalaste la versin de snort Por tanto la orden sera:

para Windows, todo esto no es necesario


(dejando a un lado que no es posible). Lo
que quiero decir es que si deseamos
Pantalla 12. Ejecucin
implementar las opciones de contramedidas Prctica 3 El escenario de una
de snort para
en tiempo real dentro de las reglas de snort, red cualquiera.... Windows desde la
con la versin Windows ya se instalan lnea de comandos.
Al igual que en la prctica N 1, pongamos
las libreras necesarias, etc..., algo bueno
un escenario probable y unas polticas para
debera tener, no? snort.

Vamos que lo nico que deberamos tener en 1) Los directivos de la empresa tienen
equipos con IPs: 172.28.0.50 y
cuenta es que la estructura de directorios no
172.28.0.99, nuestra intencin es que todo
es la misma que en LiNUX, siempre digo que aquel que intente hacer un ping a estos
no lo repetir ms... y siempre caigo en los equipos reciba un mensaje del tipo Host
mismo... repito por penltima vez, pero Inalcanzable pero ellos SI DEBEN poder
hacer ping a los dems.
ms breve...

2) Prevenir que ningn cliente de la red


El archivo de configuracin en C:\snort\etc y acceda a internet si se detecta la palabra
modificamos el contenido, as: sex en la direccin Web.

PC PASO A PASO N 20 Pgina 55


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

Lo guardamos en el directorio /etc/snort


3) Disponemos de una red de laboratorio con el nombre mi_empresa.conf
(de pruebas) y queremos que esos equipos
slo puedan comunicarse entre ellos y IMPORTANTE: NO dejes espacios entre IP
que bajo ningn concepto puedan acceder a e IP despus de las comas en la declaracin
recursos externos o internos en nuestra misma de las variables JEFES y RED_PRUEBAS o
red, sabiendo que estos equipos de laboratorio no funcionar....
son 172.28.0.10, 172.28.0.11 y
172.28.0.12 Paso 2) Creamos las reglas en el
archivo mi_empresa.rules
4) El router de la empresa que brinda
conectividad a otras redes es la IP 172.28.0.1
alert icmp any any -> $JEFES any
y se puede administrar va telnet por el
(resp:icmp_host;itype:8;msg: Ping a los
puerto 23 y/o http por el puerto 8080,
JEFES denegado;)
queremos que SOLO el administrador de
la red pueda pasar llegar al mismo y que
alert tcp any any -> $RED_EXTERNA 80
se disparen las alarmas si el login falla, el
(resp:rst_all; content: sex; msg: Webs
admin. Es uno de los JEFES con IP
de SEXO no permitidas;nocase;)
172.28.0.50
....
alert tcp $RED_PRUEBAS any ->
....
!$RED_PRUEBAS any (resp:rst_all; msg:
Equipo de Laboratorio fuera de RED
El ejemplo se basa en un IDS corriendo en
PERMITIDA;)
LiNUX, recuerda los cambios necesarios para
Windows en la estructura de directorios y
alert udp $RED_PRUEBAS any ->
variable RULE_PATH
!$RED_PRUEBAS any (resp:rst_all; msg:
Equipo de Laboratorio fuera de RED
El archivo de configuracin a crear ser
PERMITIDA;)
mi_empresa.conf
El archivo con estas reglas especficas ser:
alert icmp $RED_PRUEBAS any ->
mi_empresa.rules
!$RED_PRUEBAS any (resp:rst_all; msg:
El directorio de logs ser:
Equipo de Laboratorio fuera de RED
/var/logsmi_empresa
PERMITIDA;)

Paso 1) Crear un nuevo archivo alert tcp !$EQUIPO_ADMIN any ->


de configuracin $ROUTER 8080 (resp:rst_all; msg: Login
al Router por HTTP no permitido;)
var RED EMPRESA 172.28.0.0/16
var SERVIDOR WEB 172.28.0.24 alert tcp !$EQUIPO_ADMIN any ->
$ROUTER 23 (resp:rst_all; msg: Login
var JEFES [172.28.0.50,172.28.0.99]
al Router por TELNET no permitido;)
var ROUTER 172.28.0.1
var RED PRUEBAS [172.28.0.10,172.28.0.11,172.28.0.12]
alert tcp $EQUIPO_ADMIN any ->
var EQUIPO ADMIN 172.28.0.50
$ROUTER 23 (content: login failed;
var RED EXTERNA any
session: printable; nocase;)
var RULE PATH /etc/snort/rules
include $RULE PATH/mi empresa.rules

Pgina 56 PC PASO A PASO N 20


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

Paso 3) Crear el directorio de


Alguna aclaracin es necesaria... logs dentro de /var

En la primera regla, es NECESARIA la mkdir /var/logsmi_empresa


opcin itype:8, por qu? Pues veamos,
cuando se realiza un ping (peticin eco) se Paso 4) Ejecutamos snort desde la lnea
recibe un pong (eco-reply). Si no ponemos de comandos as:
iptype:8, se registrarn los eco-reply que los
propios equipos de los jefes realizan (falso snort de A: fast l /var/logsmi_empresa c
/etc/snort/mi_empresa.conf
positivo), es decir, los jefes no podrn hacer
ping ni tampoco a ellos puesto que las ips Y como ya hemos visto en otras ocasiones se
de los jefes tambin pertenecen a la red de registrarn las acciones expuestas en el
la empresa, o tampoco podran hacerse ping escenario de la prctica.
entre ellos.

Sin embargo en la regla icmp que niega los


! IMPORTANTE
pings desde la RED_PRUEBAS hacia cualquier
destino que NO SEA (!) la RED_PRUEBAS IMPORTANTE: Haz pruebas, revisa los logs, las alertas, etc...
no es preciso, porque precisamente lo que Ahh!! La gente de Windows... En equipos Windows el archivo
queremos es negar TODO. contenedor de las alertas no se llama alert, se llama alert.ids (una
pequea variacin, pero que habr que tenerla MUY en cuenta
Si observas la declaracin de reglas, ms cuando usemos plugins de salida)
concretamente en la que filtra y deniega
el acceso a pginas de sexo... en content
puse sex y no sexo... esto trae alguna Tampoco hemos usado todas las opciones
ancdota... imagina que un usuario de la red entre otras cosas porque para alguna de ellas
abre google y busca Canciones Camilo Sexto... es necesario configurar el pre-procesador...
jeje, como imagino estars pensando, cortar cosa que no hemos aprendido...
la comunicacin y registrar un alerta....
(Camilo Sexto) es decir, todo aquello que NO TODAVA, eso es lo que tenemos por
tenga sex ser baneado, claro que quien delante AHORA MISMO
demonios buscar esas canciones... perdn
a los amantes del Sr. Sexto... EL PREPROCESADOR

Observa tambin que las reglas en que A estas alturas ya sabemos lo que es y para
aparece !$EQUIPO_ADMIN, con esto nos lo que sirve el pre-procesador, tratemos de
aseguramos que sean TODOS excepto el explicar un poquito ms sus caractersticas y
admin..... sus componentes.

Cuando un paquete se mueve por la red y


Bueno hay muchas formas de aplicarlas y snort lo captura, antes de aplicar las reglas
construirlas, seguro que se te ocurren ms pasa por el pre-procesador y, en su caso, se
y con otras variantes, de eso se trata... de ir aplican las directivas especificadas en el mismo.
personalizando el archivo de configuracin
segn las necesidades de cada uno... El pre-procesador est concebido como
un conjunto de plug-ins (que se pueden o
Lo guardamos dentro del directorio no incluir) para analizar el trfico de datos en
/etc/snort/rules con el nombre propuesto: la red, estos plug-ins se declaran en el
mi_empresa.rules archivo de configuracin de snort.

PC PASO A PASO N 20 Pgina 57


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

Entre las directivas del pre-procesador o plug- Es como cuando llamas al novio o a la novia
ins ms comunes tenemos: por telfono...

Reconstruccin o reensamblaje de paquetes: 1) Marcas el nmero y suena la llamada en


Stream4 y frag2 el telfono destino (SYN)

2) El destino descuelga (acepta la llamada)


Decodificacin de protocolos: Telnet, http,
Diga? Quin es? (SYN+ACK)
RPC, etc..
3) Hola cario.... soy yo.... (ACK)
Exploracin de puertos: portscan y
portscan2
Es algo ms complicado que eso... realmente
Experimentales: arpspoof, asn1, intervienen otros actores en la pelcula...
shellcodes los nmeros de secuencia y asentimiento, en
el nmero 14 de la revista tienes un artculo
Adems, alguno de estos pre-procesadores sobre hijacking que explica ms
son necesarios cuando se utilizan plug-ins de detenidamente el proceso en la negociacin
salida, pero como vimos hasta ahora, snort
del protocolo TCP, si no dispones del mismo
puede ejecutarse sin necesidad de ellos.
lo puedes descargar de aqu:

Prepocesador stream4
http://www.forohxc.com/hijacking/articulo1
Se basa en dos conceptos: TCP 4/hijacking.pdf
statefulness y Session reassembly
(Reconstruccin de conexiones completas o La razn por la que TCP negocia las conexiones
incompletas del protocolo TCP y reensamblado es precisamente porque:
de la sesin).
TCP es un protocolo orientado a conexin
Para entender Statefulness es necesario (si no se completa el mecanismo del saludo
hablar un poquito del protocolo TCP, ms
de tres vas no se establece una comunicacin
concretamente de cmo se establecen las
efectiva).
conexiones TCP, el saludo de tres vas y
las seales TCP o flags: Detecta errores si los paquetes se pierden
(se realiza un seguimiento de cada transmisin
TCP y el Saludo de tres vas y si uno de los extremos no recibe o recibe
mal, se pide de nuevo el paquete con nmero
de secuencia perdido).
Cuando dos equipos se comunican mediante
Se abren puertos en el lado del cliente y
TCP, ocurre algo as:
del servidor para mantener viva la
1) Sincronizacin (SYN) que enva el emisor comunicacin.
al receptor Se termina de forma educada (seal FIN)
o por las bravas (seal RST).
2) Respuesta SYN-ACK, que enva el
receptor al emisor
Adems, tanto el cliente como el servidor no
3) Envo ACK del emisor al receptor se comunican byte por byte o paquete por
paquete, negocian un tamao y cantidad de
De esta forma emisor y receptor se "ponen datos de antemano, a esto se llama Ventana
de acuerdo" para el envo y recepcin del TCP (TCP Window) que no es otra cosa que
mensajes, se envan los socket la cantidad mxima de informacin que
correspondientes, los nmeros de puerto, la
secuencia....

Pgina 58 PC PASO A PASO N 20


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

un extremo puede absorber o enviar sin Configurando stream4


que haya recibido del otro lado una seal
ACK. En el archivo de configuracin debemos incluir
lo siguiente:
En condiciones normales esta es una buena
tcnica, ordenada, metdica y correcta... pero prepocessor stream4
cuando vienen los chicos malos TCP puede
convertirse en un problema. Ya? Pues s con eso sera suficiente... sin
embargo podemos realizar un ajuste fino si
Podemos usar TCP para escanear puertos y incluimos algunas opciones caractersticas del
servicios a la escucha de servidores, para preprocesador
falsear una comunicacin, para secuestrarla,
para causar una negacin de servicios, para Componentes y parmetros de
enviar paquetes mal formados y provocar
configuracin de stream4
respuestas errneas de los servidores... vamos
que en un mundo inseguro como es la red,
detect_scans: por defecto est desactivado
no podemos dejar el trabajo a TCP en lo que
y como puedes ir suponiendo advertir o no
se refiere a seguridad y privacidad.
de los intentos de exploracin de puertos, para
ello utiliza y examina las seales ACK, FIN,
Y no bastar un simple firewall, porque si
RST, SYN, PSH, URG, etc... del protocolo
necesitamos ofrecer un servicio de cara a las
TCP.
redes externas (como puede ser un servicio
web, una tienda electrnica, correo, etc...)
preprocessor stream4: detect_scans
nuestro firewall no debe bloquear esos puertos
o servicios, si lo hacemos as no podremos
detect_state_problems: Por defecto
ofrecernos como servidores de nada.
desactivado, detecta abusos en la negociacin
del protocolo TCP, como tamaos de ventana
El pre-procesador stream4 de snort est
excesivamente pequeos o grandes,
pensado y construido para analizar el trfico alteraciones en el nmero de secuencia y
TCP y evitar acciones poco habituales, como asentimiento, etc. Al activar esta directiva
pueden ser exploracin de puertos o redes podemos encontrarnos con falsos positivos,
completas, negociaciones anmalas del cada sistema operativo tiene su propia
protocolo, seales o flags mal intencionadas, idiosincrasia en la arquitectura de la Pila TCP/IP
evitar la fuga de paquetes y otras directivas y puede ocurrir que salten alertas en
que nos permitirn optimizar snort en el comunicaciones que no deberan ser objeto
consumo de recursos (RAM), conexiones de sospecha.
pendientes, lmites en la conexin y
preprocessor stream4: detect state problems
desconexin, etc...

disable_evasion_alerts: Tambin est


Permite hacer un seguimiento de mltiples
desactivado por defecto, esta directiva
sesiones... hasta 65536 simultneas y ser
permite reconstruir los paquetes y chequear
de obligado uso si en nuestras reglas los intentos de falsificacin de los mismos o
incluimos opciones de control de flujo, los intentos de sobrescribir los datos de uno
monitoreo de paquetes, tiempos de ya recibido, esto es una tcnica muy habitual
conexin, etc. Dicho de otro modo, si en los ataques DoS, sin embargo, en una
queremos utilizar reglas de control de flujo comunicacin normal, tambin ocurren este
que vimos antes deberemos incluir las tipo de circunstancias, los paquetes se pierden
directivas del pre-procesador stream4. por mltiples motivos y la comunicacin se

PC PASO A PASO N 20 Pgina 59


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

reinicia o cambian los nmeros de secuencia noinspect, por defecto desactivada... faltara
por lo que en ocasiones tambin pueden mas... esto desactiva la inspeccin de paquetes
producirse falsos positivos si esos casos se
producen con demasiada frecuencia. Lo mejor preprocessor stream4: noinspect
es no incluirla, recuerda que disable es
desactivar, de tal modo que snort estar al timeout: Por defecto a 30 segundos, es el
loro si se producen malas artes en nuestra tiempo en el que stream4 dejar de atender
red... claro que siempre se puede incluir para una conexin si no hay actividad en la misma...
vigilar a quien se cree mas listo...
empezamos a entender ahora lo que es un preprocessor stream4: timeout 25
honeypot... un seuelo, un equipo
aparentemente indefenso.... memcap: es el nmero mximo de memoria
expresada en bytes que utilizar stream4 para
preprocessor stream4: disable evasion alerts reensamblar los paquetes, por defecto unos
8 megas, es conveniente asignar ms si nos
ttl_limit, este parmetro marcar el tiempo lo podemos permitir, revisa los procesos que
mximo tolerado entre el envo y recepcin corren en tu mquina para saber la RAM que
de paquetes dentro de una misma sesin. te queda disponible y ajustar mejor este
Habitualmente el nmero de routers, saltos, parmetro.
etc entre el origen y el destino es el mismo
que entre el destino y el origen (por donde preprocessor stream4: memcap 65000000
voy, vengo) pero tampoco tiene por qu ser
as, y de eso se ocupa este parmetro. stream4_reassemble: es un plugin especfico
para la reconstruccin de los paquetes TCP
Si el nmero de saltos de vuelta en el paquete por puertos, puede tener varias opciones:
es excesivo con respecto al nmero de saltos clientonly, serveronly, both, noalertsy
que sufri en la ida... algo pasa.... a lo peor ports. Y reconstruir el trfico por los puertos
alguien secuestr la conexin o hizo que indicados (ports lista de puertos...) atendiendo
nuestros datos se enrutaran de forma no a la conexin establecida por el servidor, el
convencional hacia un destino intermedio.... cliente o ambos (clientonly, serveronly,
Es difcil indicar un nmero mgico, depender both) y generando alertas o no generndolas
de los protocolos de enrutamiento que usen (noalerts)
nuestras redes y a las que nos conectamos,
pero como orientacin, no debera existir una preprocessor stream4_reassemble both
diferencia de ms de 10 saltos, es decir, si ports 21 23 25 53 80 138 139 445

en la ida hacia el destino saltamos por 6


Ni que decir tiene que estas directivas pueden
routers, a la vuelta hacia el origen no se
incluirse en una sola o varias lneas, Ejemplo:
debera de sobrepasar de 16.
preprocessor stream4: ttl_limit 10
preprocessor stream4: ttl_limit 10 preprocessor stream4: detect_scans,
detect_state_problems, keepstats
keepstats: almacena estadsticas por cada
sesin por cada mquina o en formato binario Fragmentacin de paquetes.
(machine o binary) para que puedan ser Preprocesador frag2
usados por los plugins de salida apropiados.
En el artculo anterior ya hablamos de ello, la
fragmentacin es necesaria pero como todo
preprocessor stream4: keepstats binary
hay que controlarlo y un excesivo nmero de

Pgina 60 PC PASO A PASO N 20


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

paquetes muy fragmentados pueden tirar Prepocesadores para la


abajo al sistema ms pintado.... Son ataques decodificacin de protocolos
muy comunes en la negacin de servicios y
pretenden mantener tan ocupado al sistema Despus de lo que nos ha llovido, esto no
que termina por bloquearse... amn de tiene mayor misterio
algunos ataques mas sibilinos que sobrescriben
unos fragmentos con otros y pueden provocar Decodificacin TELNET
un desbordamiento de memoria y terminar
por entregarnos una shell del sistema (o en preprocessor telnet_decode: 23 25 80
algunos casos matando al servidor).
Pues eso, decodifica el protocolo telnet que
pueda ser susceptible de utilizarse por la lista
Por ello y para ello existe frag2, pero no te
de puertos que le sigue
fes... no vaya a ser que te maten el IDS

Decodificacin y opciones http


Configurando frag2
http_inspect es un decodificador genrico
Al igual que stream4, las directivas de frag2 para el protocolo HTTP, analiza cabeceras,
deben indicarse en el archivo de configuracin: tanto por parte del cliente (el navegador)
como por parte del servidor (El servidor web)
preprocessor frag2: timeout 60 memcap 6000000
Hay dos secciones o reas a configurar: Global
Algunas de las opciones disponibles son para el entorno global de los servidores Web
bastante similares a stream4, pero aplicadas y Server para definir directivas especficas
de un servidor web en concreto.
a la fragmentacin de paquetes en lugar de
a la reconstruccin y fluido de los mismos,
solo me extender en aquellas nuevas o en
Configuracin Global de
sus variaciones: http_inspect

timeout, por defecto 30 segundos y con el Determina el funcionamiento global (de ah


su nombre) de las funciones del pre-procesador
mismo objetivo que en stream4
para cualquier servidor web y acepta las
siguientes opciones:
memcap, por defecto a 4 megabytes

preprocessor http_inspect: global \


ttl limit, idem de stream4 iis_unicode_map <map_filename>\
codemap <integer> \
min ttl, es el tiempo mnimo necesario para [detect_anomalous_servers]\
permitir que frag2 reconstruya los fragmentos [proxy_alert]
y previene a frag2 de aquellos paquetes que
no pudieron llegar a su destino. global: es de obligatorio uso y slo debe
existir una definicin global en el archivo de
detect state problems, aplicado a la configuracin
fragmentacin... los problemas pueden ser
iis_unicode_map <map_file>: Tambin
demasiados fragmentos, desplazamientos u
es de uso obligatorio o podemos obtener u
offset aleatorios y extraos, sobre-escritura
error, debemos indicar un archivo que apunta
de paquetes.
la codificacin en formato unicode de los

PC PASO A PASO N 20 Pgina 61


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

caracteres para los diferentes idiomas, el Ports: se indicarn entre llaves el puerto o
archivo por defecto es unicode.map, este puertos por los que escucha el servidor web
archivo lo encontrars en el directorio /etc
de la instalacin de snort, es un archivo de Ejemplos:
texto que puedes modificar
La siguiente directiva especifica un servidor
codemap <integer> hace referencia al juego por defecto (ya sea apache o IIS) que escucha
de caracteres usado por unicode, por ejemplo por los puertos 80, 8080 y 8000
si buscas dentro del archivo unicode.map,
preprocessor http_inspect_server: default profile all ports {80 8080 8000}
encontrars que el nmero 1252 corresponde
al juego de caracteres ANSI - Latin I La siguiente directiva es la misma pero para
el servidor web instalado en la direccin IP
Dentro de la carpeta /contrib, hay un fuente 172.28.0.99 configurado por le puerto 80
en C que se llama ms_unicode_generator.c
que te permitir crear tus propios archivos y preprocessor http_inspect_server: server 172.28.0.99 profile all ports {80}

juegos de caracteres, aunque para nosotros


utilizar el 1252 es el ms conveniente. Adems podemos incluirle algunas opciones,
e n t r e l a s m s s i g n i f i c a t i va s e s t n :
detect_anomalous_servers: habilita la
flow_depth <valor>
inspeccin del trfico HTTP sobre puertos no
asignados a dicho protocolo, es decir, que Indica el nmero de bytes que inspeccionar
alertar si se usa http por puertos que no snort como payload, o sea, los bytes que se
estn designados como el puerto en el que analizarn dentro del protocolo http, los
escucha el servidor web, normalmente el 80. mejores valores estan entre 150 y 300, valores
muy grandes pueden afectar al rendimiento
Ten cuidado al usar esta directiva y no la uses de snort perjudicialmente.
si no se defini un servidor web por defecto
o causar un gran impacto en el trabajo de u_encode <yes|no>
snort.
Se utiliza para traducir o codificar determinados
proxy_alert: habilita alertas globales en el caracteres ASCII en formato hexadecimal, en
uso de proxys web, es decir, en combinacin 32 bits que es lo que maneja unicode en
lugar de los 8 bits que usa ASCII, bueeeenoooo,
con otra directiva dentro de la seccin server
son 7 pero para no extenderme en ello.....
(allow_proxy_use) recibirs alertas de los
usuarios que no utilicen la configuracin del
Imagino que ya conoces los problemas que la
proxy web predeterminada y podrs obtener traduccin de unicode report a los IIS de
registros de aquellos usuarios de la red que Microsoft... y es alucinante, pero sigue
salen por proxys webs que no estn definidos causando estragos, en routers CISCO (lider
por el administrador. de comunicaciones en Internet) continan los
problemas de acceso por unicode...
Ejemplo de uso:
preprocessor http_inspect: global iis_unicode_map unicode.map 1252
iis_unicode <yes|no>

Configuracin server Si por ejemplo ponemos en formato unicode


%af%90 esto mismo se puede representar
Server: que podr ser default o una direccin por %uAF90, no ,lo sabas? Pues agrrate
IP si tienes un IIS como servidor web... puede
seguir siendo vulnerable a unicode si le
Profile: podemos especificar si son todos
mandamos una url en ese formato....
(all) o uno especfico (iis apache)

Pgina 62 PC PASO A PASO N 20


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

double_decode <yes|no> no_pipeline_req non_strict


allow_proxy_use oversize_dir_length
Seguimos con la saga... esto es la doble <valor mayor a cero> inspect_uri_only
decodificacin, de ello se ha hablado y se
sigue hablando... imprescindible si tienes Ejemplos
un IIS en la red... y otros... no te creas que
es el nico, aunque lo tengas parcheado... preprocessor http_inspect_server: server
usa esta opcin. 172.28.0.99 ports { 80 } flow_depth 0
double_decode yes
multi_slash <yes|no>
preprocessor http_inspect_server: server
Esta opcin normaliza el uso de mltiples default ports { 80 } flow_depth 300
barras en la direccin web, es decir, apache_whitespace yes directory no
direcciones del tipo ////////direweb se iis_backslash no u_encode yes
normalizar a /direweb double_decode yes iis_unicode yes
iis_delimiter yes multi_slash no
iis_backslash <yes|no>
preprocessor http_inspect_server: server
Esto le indica que traduzca las barras \ default profile all ports { 80 8080 }
por barras /, muchos ataques y
vulnerabilidades de correo, web, etc... se Configurando rpc_decode
producen por el uso no uniforme de las
barras en las direcciones web. Seguro que ms de una vez oste hablar del
protocolo RPC, ltimamente se puso de moda
directory <yes|no> con el famoso virus blaster y los equipos
Windows, pero no es exclusivo de Windows,
Parecida a la anterior, normaliza el acceso RPC es un protocolo usado en casi todas las
t ra n s v e r s a l a d i r e c t o r i o s d e l t i p o : redes, lo usan servicios como NFS, hasta DHCP
y muchos otros servicios de red.
/foo/fake\_dir/../bar se normaliza por:
RPC no es un protocolo normal, no es un
/foo/bar
protocolo de transporte de datos, se sita en
la capa de sesin del modelo OSI, utiliza
o tambin,
tanto UDP como TCP y bsicamente se
utiliza para permitir un mecanismo de
/foo/./bar queda como: /foo/bar
abstraccin en el que un host llama a
un programa que est corriendo en otro
apache_whitespace <yes|no>
host.

Elimina los espacios sobrantes o ajusta a RPC tambin utiliza puertos, pero a diferencia
un espacio la decodificacin del protocolo. de protocolos como telnet o ftp, un servicio
RPC basado en un servidor RPC puede
Puedes encontrar otras opciones de inters lanzarse sobre puertos no reservados, esto
aqu: es lo que se llama rpcbind o portmapper.

http://www.snort.org/docs/snort manual/n LiNUX utiliza puertos TCP y UDP 111, mientras


ode17.html que Windows usa el 135 y otros sistemas
operativos pueden utilizar el servicio RPC por
Entre ellas: iis_delimiter <yes|no> puertos diferentes, snort comprueba RPC
chunk_length <valor mayor a cero> entre los puertos 111 y 32771 mediante

PC PASO A PASO N 20 Pgina 63


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

el plug-in rpc_decode que sern indicados Ejemplo:


en la lista de puertos al definir la directiva.
Prepocessor portscan: 172.28.0.0/16 5
Las opciones ms comunes en rpc_decode
30 /var/log/escaner.log
son:

alert_fragments, por defecto desactivado Esta orden crear un registro en el archivo


y alertar si se producen excesivos fragmentos escaner.log si en la red 172.28.0.0 /16
dentro de los registros que maneja el servicio. cuando se detecten ms de 5 puertos
escaneados en 30 segundos.
no_alert_mltiple_request, RPC se basa
en sesiones, normalmente esas sesiones son Otra forma de portscan es:
de dos o tres vas con ms de una peticin
por paquete, esta opcin no alertar si se Preprocessor portscan-ignorehosts:
produce una negociacin del protocolo si en 172.28.0.50/16 172.28.0.200/16
un paquete se incluye una nica peticin,

Que excluir los escaneos efectuados a las


no_alert_large_fragments, mejor no
mquinas que se incluyen en la lista de hosts
u s a r l o, p u e s t o q u e m u c h o s d e l o s
desbordamientos de buffer y overflows se
Los escaneos que detecta portscan son:
producen mediante esta tcnica.
no_alert_incomplete, como los anteriores,
tambin est desactivado por defecto, y como FULL, cuando se establece una conexin
es de suponer tambin es causa de mltiples completa en el saludo de tres vas de TCP
vulnerabilidades. NULL, cuando todos los flags TCP estn
desactivados
Ejemplo: FIN, cuando slo se activa el flag FIN
SYN-FIN, Flags SYN y FUN activadas
preprocessor rpc_decode: 111 135 32771 XMAS, FIN, SYN, URG y PSH estn activadas

Configurando portscan y Son varios los nmeros de la revista donde


portscan2 se explicaron estos diferentes modos de
escaneo, busca las revistas que ya se han
No creo que sea necesario decir lo que es publicado y hablan de nmap (revista 13)
una exploracin de puertos ni para lo que se
utiliza... bueno por si no lo sabes, es como Las opciones que podemos usar con portscan2
ir llamando a las puertas de una casa para son:
haber si hay alguien dentro.. es decir, un
escaneo de puertos pretende conocer los target max, por defecto a 1000, que es el
servicios que ofrece un host remoto. nmero mximo de objetivos y seguimientos
que guardar portscan2 para analizar
Portscan2 es un plug-in experimental, bueno
ya no tanto, de hecho est pensado para
sustituir a su hermano pequeo portscan. scanners_max, tambin 1000 por defecto,
es el mximo nmero de IPs que registrar.
Ambos son muy fciles de usar y entender,
target limit, por defecto 5,
Para usar portscan basta con: la red, n
puertos, el tiempo de deteccin y un port_limit, por defecto a 20,
fichero

Pgina 64 PC PASO A PASO N 20


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

timeout, por defecto a 60 segundos, alert_odd_protocols, por defecto


desactivado, y se generarn alertas cuando
log, por defecto al es el archivo /scan.log, se reciban paquetes que no figuren en la
directiva anterior (allowed_ip_protocols)
Ejemplos:
Ejemplo

preprocessor portscan2: target_max


preprocessor conversation:
1000, scanners_max 1000, port_limit 20
max_conversation 15000, timeout 300,
allowed_ip_protocols 1 6 17,
Y tambin sirve la exclusin de host como alert_odd_protocols
antes:

Configurar el preprocesador
preprocessor portscan2-ignorehosts:
arpspoof
172.28.0.50/16 172.28.0.200/16

Detecta las falsificaciones de MAC en el


Para terminar vamos a describir otros tres
protocolo ARP evitando as ataques del tipo
pre-procesadores en experimentacin pero
MiTM como los que se ensearon en el
bastante potentes... son: conversartion,
nmero 11 de esta revista, el artculo de
arpspoof y fnord
moebius sobre intrusin en redes locales y
dsniff.
Configurar el pre-procesador
conversation Las comunicaciones en una LAN se basan en
un direccionamiento fsico (direcciones
Registra las conversaciones entre dos host MAC) y cada equipo de la red guarda una
que usan protocolos no orientados a conexin
tabla que relaciona la direccin MAC con
como UDP, las opciones son:
la direccin IP que le corresponde a los con
que se comunica. (tabla arp)
timeout, por defecto 120 segundos, pasado
ese tiempo de inactividad se liberan los
Cuando una mquina no conoce la MAC de
recursos y deja de prestar atencin a las
otra, lanza una peticin broadcast a toda la
conversaciones
red preguntando cmo se llama la MAC de
la direccin IP con la que quiero hablar
max_conversations, por defecto 65535, y
y en condiciones normales, el equipo que tiene
es el mximo nmero de conversaciones
la IP que se busca responde informando de
simultneas que puede espiar al mismo
su MAC, se actualizan las tablas arp y se
tiempo
procede a la comunicacin. En esto se basa
el protocolo ARP.
allowed_ip_protocols, por defecto todos
(all) y permite especificar qu protocolos IP
Pero cuando un usuario malicioso de la red
sern monitorizados (TCP, UDP, ICMP, etc...)
falsifica la MAC y se hace pasar por el
cada uno de estos protocolos tiene asociado
verdadero poseedor de ella, puede interceptar
un nmero de protocolo tal y como describen las comunicaciones entre un equipo y otro, si
los RFCs correspondientes, lo ms usuales adems le aade la posibilidad de reenviar los
son: datos al verdadero destino una vez que hayan
pasado por la mquina maliciosa, tenemos un
TCP = 6, UDP =17, ICMP =1, se puede usar bonito escenario llamado Hombre en medio
la forma 6 17 1 para los tres a la vez. o mono en medio

PC PASO A PASO N 20 Pgina 65


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

Es decir, los ataques MiTM se basan en fnord es un preprocesador que busca y


interceptar las comunicaciones entre dos host detecta shellcodes polifrmicas, una
metindose por medio, falsificando la MAC shellcode tiene el objetivo de
(envenenamiento ARP) y reenviando los proporcionar a un atacante una shell del
paquetes una vez escuchados con lo que el sistema mediante desbordamientos de
trfico legtimo entre un host y otro se vulnera memoria u overflows y es uno de los
y pueden capturarse contraseas de red, ataques ms devastadores y peligrosos
correo y otra informacin sensible de la red. que puedes sufrir, si tiene xito, reportar
una lnea de comandos al atacante, o sea,
Para evitar o al menos detectar esos como si estuviese sentado en t silla,
comportamientos, podemos incluir el utilizando t teclado y viendo t monitor....
preprocesador arpspoof, de tal modo que
si alguien envenena la red mediante ARP Aunque todava est en desarrollo, es
saltarn las alertas... y de paso le fastidiamos posible usar YA fnord, para ello:
la tcnica descrita por moebius en su artculo
ya publicado :P preprocessor fnord

El uso de la directiva es muy simple: Por este mes hemos terminado... hemos
avanzado MUCHO, nos queda los MAS
preprocessor arpspoof_detect_host: JUGOSO, pero tendrs que esperar al
172.28.0.50 00.05.1c.08.ae.7c prximo nmero.... para entonces
preprocessor arpspoof_detect_host: configuraremos un Sistema de deteccin
172.28.0.25 01.00.c9.af.cd.92 de Intrusos con registro de alertas en una
Es decir, relacionar las direcciones IP con Base de Datos y Servicios Web para ver
las verdaderas direcciones MAC de cada los resultados a todo color, con formatos
equipo que queramos proteger, si alguien
de salida ms legibles y cmodos de
en la red intenta utilizar estas direcciones IP
interpretar y no tan crudos como los
o MACs y no se corresponden con la lista
mostrada, se disparar una alerta.
informes que hemos obtenido en este
artculo.
Puedes ver la MAC asignada a un equipo si
envas un ping a su direccin ip y luego
Aprenderemos a configurar samba para
consultas la tabla arp mediante la orden
comunicarnos con clientes Windows y
arp a
Service For Unix para comunicarnos con
clientes LiNUX, enviaremos las alertas
ping 172.28.0.1
por mensajera interna, por mail, hacia
arp a
una Base de Datos, seremos capaces de
utilizar servidores syslog, y tambin
Y si quieres ver tu propia mac, puedes hacerlo
utilizar otras herramientas para mantener
con:
las reglas a punto, vamos todo un elenco
de posibilidades para estar informado de
ipconfig/all (en windows)
TODO lo que pasa por nuestra red.
ifconfig (en Linux)
Y tambin... cmo no... intentaremos
Configurar el pre-procesador saltarnos a snort.... o al menos haremos
toda clase de pruebas de comportamiento
fnord
(stress-test) para ver si nuestras reglas
y directivas son apropiadas y tenemos
Una forma que snort identifica los ataques
desconocidos es buscando shellcodes y
todo, todito, todo bien configurado.
secuencias NOP.

Pgina 66 PC PASO A PASO N 20

S-ar putea să vă placă și