Sunteți pe pagina 1din 14

Práctica 1​:​ Seguridad en Redes

Tema:​ Sniffing and Spoofing


Santiago Guaillas​1​. Andres Gonzáles​2

1. Introducción
Las redes actuales se basan en normas que se remontan a los tiempos de cuando se creó Internet.
La evolución de las tecnologías y la aparición de nuevos medios abren nuevas brechas adicionales a
vulnerabilidades o fallos de seguridad.

Los fallos de red afectan tanto al usuario particular como a las grandes empresas, y entre una de las
principales amenazas en una es paquetes en nuestra red sean rastreados o suplantados (sniffing y
spoong).

El objetivo de este laboratorio es doble: aprender a usar las herramientas y comprender las
tecnologías. Para el segundo objeto, se escribirán programas simples de rastreo y suplantación, y
con lo que se obtendrá una comprensión profunda de los aspectos técnicos de estos programas.

2. Lab Task Set 1: Using Tools to Sniff and Spoof Packets


Para los primeros literales se usará la paquetería Scapy, la cual deberá ser previamente instalada, y
con la que se podrá hacer snnifing. Como primer punto se realiza la ejecución de un pequeño script
que se muestra a continuación realizado en Python utilizando las librerías de Scapy:

# mycode

from scapy.all import *


a = IP()

a.show()

Después de ejecutar este código mediante la terminal de Ubuntu, usando el comando:


python3 mycode.py

Se obtiene el siguiente resultado:


Figura 1. Rastreo de paquetes mediante la librería Scapy

2.1 Task 1.1: Snifng Packets


Task 1.1A.

Para este punto se pide, ejecutar el script descrito continuación el cual, es una
implementación de un filtro de rastreo en Python utilizando Scapy, en esta ocasión se
observa que se desea filtrar solamente paquetes ICMP, de la red:

# snnifer
from scapy.all import *
def print_pkt(pkt):
pkt.show()
pkt = sniff(filter=’icmp’,prn=print_pkt)

Antes de ejecutar el script, se debe tener en cuenta la generación de paquetes ICMP, en


este caso se realizó un ping simple a una url. El resultado que se muestra en la figura 2,
concuerda con lo esperado, ya que describe un paquete ICMP capturado:
Figura 2. Filtrado de paquetes ICMP mediante la librería Scapy

Para ejecutar el script se usa la misma sintaxis que el literal anterior. En la figura 2 se
muestra la captura de paquetes ICMP, generando tráfico mediante un ping a la página de
YouTube.

Para el caso de ejecutar en el modo (sin root), la terminal bloquea la acción ya que este tipo
de procesos como rastrear paquetes necesita los permisos de administrador del equipo tal
como muestra la figura:

Figura 3. Filtrado de paquetes ICMP sin permisos de root.

Task 1.1B

Para este punto, se pide hacer 3 filtros mediante la sintaxis BFP:

- Capture solo el paquete ICMP.


- Capture cualquier paquete TCP que provenga de una IP en particular y con un
puerto de destino número 23.
- Los paquetes de captura provienen o van a una subred en particular. Puede elegir
cualquier subred, como 128.230.0.0/16; no debe elegir la subred a la que está
conectada su máquina virtual.

Se toma en cuenta que el primer filtro, ya se probó en la sección anterior, entonces para el
segundo filtro se tiene el siguiente código:
from scapy.all import*
def print_pkt(pkt):
pkt.show()
pkt = sniff(filter = "tcp and port 23 and host 10.0.2.4" prn =
print_pkt)

Figura 4. Filtrado de paquetes TCP, con parámetro de IP.

Como se muestra en la figura 4, se realizó un enlace telnet, entre la máquina virtual base y
un clon, con esto se genera tráfico TCP entre estos nodos, y algunos paquetes son
capturados por el filtro. Cabe recalcar que el protocolo TELNET, usa el puerto 23.

Para el siguiente filtro se hizo el mismo procedimiento para la prueba, pero en esta ocasión
se tomó en cuenta la subred generada virtualmente por la misma máquina, entonces el
código se expone como sigue:
from scapy.all import*
def print_pkt(pkt):
pkt.show()
pkt = sniff(filter="dst net 192.168.0/24",prn=print_pkt)
Figura 5. Filtrado de paquetes, en una subred.

Como se observa, el filtro funciona correctamente, tomando en cuenta que la IP del


ordenador de pruebas según el SO de Windows es 192.168.56.1, asumiendo trabajar en
una subred virtual, en donde se realiza un ping a la IP del SO de Windows el cual es
192.168.0.110.

2.2 Task 1.2: Spoong ICMP Packets


La herramienta Scapy permite establecer los campos de paquetes IP a valores arbitrarios,
es decir en este punto se puede falsicar paquetes IP con una dirección IP de origen
arbitrario. Vamos a falsicar paquetes de solicitud de ICMP, y enviarlos a otra máquina
virtual en la misma red. Vamos a utilizar Wireshark para observar si nuestra solicitud será
aceptada por el receptor. Si se acepta, un paquete de respuesta será enviado a la dirección
IP falsicadas. El código y su resultado se muestra en la siguiente figura:
Figura 6. Impresión de paquete suplantado.

Para comprobar su funcionamiento se ejecutó el script en cuestión y se obtuvieron


resultados correctos, tales como se muestran en la figura 6, para esto se agregó que se
impriman los paquetes que son reemplazados.

Para verificar esto también se usó la herramienta Wireshark, en donde se muestra que el
receptor aceptó la solicitud y se envió un echo().

Figura 7. Verificación de una suplantación de paquetes.


2.3 Task 1.3: Traceroute
Para esta parte se realizó un ping modificando el campo ttl del paquete y se verifica con
Wireshark que dicho paquete es modificado y enviado. El código a implementar se muestra
como sigue:
a = IP( )
a . dst = ‘8.8.8.8’
a . t t l = 3
b = ICMP( )
send ( a/b)

En la Fig. 8 se observa, la información sobre el paquete acotado en saltos, en el cual


informa que se envía la solicitud pero no llega al destino debido a que el número de saltos ttl
no alcanza llegar al ip-destino 8.8.8.8.

Figura 8. Verificación de una suplantación de paquetes.

2.4 Task 1.4: Sniffing and-then Spoofing


Aquí se unieron las funcionalidades desarrolladas anteriormente, primero se rastrea un
paquete y después se extraen sus datos de origen para suplantar el mismo con un paquete
falso de respuesta. El código desarrollado es:
# spoof icmp packets
from scapy.all import *
def print_pkt(pkt):
a = IP()
pkt.show()
print ('solicitante',pkt[IP].src) #ip victima
a.dst = pkt[IP].src
b = ICMP()
p = a/b #paquete para suplantar identidad
send(p) # se contesta a la victima
print('Escuchando.........\n')
pkt = sniff(filter="icmp and host 192.168.0.1", prn=print_pkt)
#ip del router donde llegan los packetes de la victima

Como se puede observar se extrae la ip del solicitante y se responde al mismo suplantando


la identidad del destino.
-3.1 Task 2.1: Writing Packet Sniffing Program
Aquí se usó un código en C provisto por la guía para capturar paquetes mediante la librería
pcap. Al ejecutarse el código se avisa al usuario del paquete capturado, a continuación se
muestra el código a y adicionalmente en la Fig. 9 se indica el resultado de su ejecución.
#include <pcap.h>
#include <stdio.h>
/* This function will be invoked by pcap for each captured packet.
We can process each packet inside the function.
*/
void got_packet(u_char *args, const struct pcap_pkthdr *header,
const u_char *packet)
{
printf("Got a packet\n");
}
int main()
{
pcap_t *handle;
char errbuf[PCAP_ERRBUF_SIZE];
struct bpf_program fp;
char filter_exp[] = "ip proto icmp";
bpf_u_int32 net;
// Step 1: Open live pcap session on NIC with name eth3
// Students needs to change "eth3" to the name
// found on their own machines (using ifconfig).
handle = pcap_open_live("eth3", BUFSIZ, 1, 1000, errbuf);
// Step 2: Compile filter_exp into BPF psuedo-code
pcap_compile(handle, &fp, filter_exp, 0, net);

Figura 9. Ejecución de un rastreador mediante C

Task 2.1A: Understanding How a Sniffer Works


Question 1.- Utilice sus propias palabras para describir la secuencia de las llamadas a
la biblioteca que son esenciales para programas sniffer.
Question 2.- ¿Por qué necesita el privilegio root para ejecutar un programa sniffer?
¿Dónde falla el programa si se ejecuta sin el privilegio de root?

En el caso de pcap se necesita acceso de bajo nivel a la interfaz de red, debido a las
implicaciones de seguridad (captura de tráfico de red, generación de paquetes de red
arbitrarios, etc.), dicho acceso está limitado solo a usuarios privilegiados. Entonces al
momento de pedir acceso a la interfaz de red del sistema, el mismo niega el acceso y la
ejecución falla.

Question 3.- Encienda y apague el modo promiscuo en su programa sniffer. ¿Puede


demostrar la diferencia cuando este modo está activado y desactivado? Describe
cómo puedes demostrar esto?

Task 2.1B: Writing Filters


Primero se realizó aplicaron filtros para capturar paquetes ICMP entre dos hosts
específicos, se usó los filtros de la librería pcap, la ejecución del código desarrollado se
indica en la Fig.10

Figura 10. Ejecución de un rastreador mediante C

Para lograr este filtro se aplicó la siguiente sintaxis: “ip proto ICMP and host 192.168.0.114
and 192.168.0.115”.

El segundo programa captura paquetes TCP dentro de un rango de puertos del 10-100.
Para lograr esto se usa una PC clon para dirigir paquetes a estos puertos y se usa un filtro
diferente. La ejecución del código se indica en la Fig. 11
Figura 11. Rastreado TCP, parámetro de puertos

Task 2.1c: Sniffing Passwords


Para este punto usamos el siguiente código modicando el inicial, teniendo en cuenta que
se tratará de capturar en este caso todo lo que se transmita en la comunicación,
entendiendo a su vez entradas por teclado:
Una vez ejecutado usamos telnet de una VM hacia la otra aquí ingresamos el login el cual
es seed y la contraseña dees, las figuras 12 y 13 muestra a continuación el proceso y el
resultado respectivamente:

Figura 12. Sesión Telnet

Figura 13. Sesión Telnet

Como se observa en la figura 13, se capturan paquetes, provenientes del login a telnet de
una VM, cada paquete contiene una cabecera y el mensaje, que en este caso consta de
una entrada por teclado, contemplando la contraseña de logeo a telnet.
3.2 Task 2.2: Spoofing
Se revisó el programa proporcionado por la guía para suplantar paquetes a través de la
alteración de las cabeceras. Se usa la librería pcap en C entre un host y un servidor de
internet.

Task 2.2A: Write a spoofing program


Se configuró el código proporcionado por la guía para poder enviar paquetes a hosts
específicos, modificando los headers para suplantar la información. La ejecución del
programa indica las ips origen y destino en la Fig. 14 y en la Fig 15 se muestra el paquete
capturado por wireshark.

Figura 14. Información de la fuente - destino

Figura 15. Estado de Echo del paquete

Task 2.2B: Spoof an ICMP Echo Request.


Para este apartado se tiene en cuenta el script que se mostró en la figura 6, que realiza la
misma función, y a la figura 7 en la cual se muestra el estado echo en el paquete
suplantado.

Question 4. ¿Puede establecer el campo de longitud del paquete IP en un valor


arbitrario, independientemente del tamaño del paquete ?
Al enviar un paquete más grande que su tamaño real, los datos adicionales en la carga
útil son una parte de ceros. Eso es lo que en teoría debería ver en un paquete
capturado de este tipo al inspeccionar por ejemplo con Wireshark
•​Pregunta 5. Usando la programación de socket sin formato, ¿tiene que calcular la
suma de verificación para el encabezado IP?

No, ya que este proceso es llevado automáticamente por el sistema .

• Pregunta 6. ¿Por qué necesita el privilegio de root para ejecutar los programas que utilizan
sockets sin formato? Dónde ¿El programa falla si se ejecuta sin el privilegio de root?

3. Conclusiones
Con respecto al Snnifing, cualquier software orientado a realizar este tipo de proceso será
capaz de escuchar un tramo de la red, capturando los paquetes que están fluyendo por ese
tramo. Pero estos software no solo recogerán paquetes destinados a una sola tarjeta de
red, como en este caso, si no es posible capturar paquetes de varias tarjetas de red que
estén en su área local, pudiendo conseguir información crucial de usuarios conectados a
esos nodos.

En el caso concreto de la suplantación de IP, esta consistirá básicamente en sustituir la


dirección IP origen de un paquete TCP/IP por otra dirección IP a la cual se desea suplantar.
Puede ser usado para cualquier protocolo dentro de TCP/IP como ICMP, UDP o TCP.

Las respuestas del host que reciba los paquetes alterados irán dirigidas a la IP falsificada.
También hay que tener en cuenta que los enrutadores actuales no admiten el envío de
paquetes con IP origen no perteneciente a una de las redes que administra (los paquetes
suplantados no sobrepasarán el enrutador).

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