Switzerland (Suiza en inglés) hace el honor al país neutral por antonomasia, y simula el funcionamiento de un programa de intercambio de archivos P2P para analizar los cambios que sufren los paquetes de datos al pasar entre las redes de los ISPs. Por si no estan al tanto les recordamos que suciea lanzo una ley que permite a un organismo estatal espiar todas las conexiones de la red. Leer mas en Ley FRA
COMCAST, y el bloqueo del tráfico P2P siguen dando mucho de qué hablar, y es por ello que un grupo de desarrolladores, tiene en fase Alpha, es decir muy poco estable y susceptible a errores, un programa que han llamado Switzerland. El objetivo del mismo es verificar si nuestro ISP intercepta los paquetes y los modifica. ADSL Net lo ha probado, y por cierto hemos sudado para encontrar una plataforma donde hacerlo funcionar, pero lo tenemos y os lo contamos.
Lo primero que necesitamos es la versión actual de Switzerland. Lo podemos descargar desde la página oficial que de momento se encuentra en SourceForge.
Descargar Switzerland
Lo segundo y lo más importante quizás es, ¿ qué necesitamos para hacerlo funcionar ?
Nosotros hemos optado por Linux, dado que la herramienta ha sido desarrollado y orientada principalmente a funcionar bajo linux y en esta fase tan prealpha la cosa resulta compleja para hacerla funcionar en Windows si no se hacen modificaciones.
La versión viene lista para funcionar en Python 2.5, y la última release estable disponible de Python es la 2.5.2. Por ese lado no encontraremos problemas, pero nosotros sí lo hemos encontrado intentándo hacerlo funcionar debido a que hay problemas con el tamaño de la ventana TCP de los paquetes cuando los interfaces son Ethernet Gigabit.
Tempfile: /tmp/tmpWYvNNa
Initialized sniff on eth0
pcap_datalink: 1
ERROR: Cannot handle a packet of size 2814
(Check for Large Segment Offloading on gigabit Ethernet cards, and avoid loopback devices)
Esto nos ha obligado a utilizar versiones antiguas de sistemas operativos, descartando los servidores más potentes con el software más actualizado, dado que disponen de tarjetas Ethernet Gigabit.
Nos hemos ido entonces a Fedora Core 5, en unas máquinas de pruebas donde los interfaces activados eran Ethernet 100 Mbps. Sin embargo la versión de Python disponible en este caso era la 2.4.
Si la versión de Python era inferior a la 2.4 a la hora de ejecutar la instalación obteníamos lo siguiente:
[root@spider switzerland-0.0.5]# python setup.py install
Traceback (most recent call last):
File “setup.py”, line 7, in ?
import platform
ImportError: No module named platform
Hemos intentado realizar la compilación e instalación por tanto con Python 2.4, y esta ha funcionado así que lo que hemos hecho posteriormente ha sido editar de forma manual los scripts switzerland-client y switzerland-server para que buscase la variable de entorno python 2.4 en vez de python 2.5 y la cosa ha funcionado.
[root@dev1 switzerland-0.0.5]# vi switzerland-client
#!/usr/bin/env python2.4
try:
from switzerland.client import Alice
except ImportError:
import sys
sys.path.append(”/usr/local/lib/python2.5/site-packages/”)
sys.path.append(”/usr/lib/python2.5/site-packages/”)
sys.path.append(”.”)
from switzerland.client import Alice
Alice.main()
Todo bien hasta aquí pero en qué consiste Switzerland y cómo funciona. Básicamente el objetivo de la aplicación es funcionar con dos partes, una cliente y otra servidor. La parte servidor recoge los paquetes enviados por los clientes y pone al interfaz de red del sistema en modo escucha, para interceptar el tráfico del mismo. Cuando se detectan paquetes Peer To Peer, se analiza el emisor y se comprueba si el paquete que se originó ha sido modificado a su recepción en el servidor, indicando que en el trayecto intermedio, es decir la propia infraestructura del ISP, se ha alterado su contenido, pudiendo provocar, cortes, desconexiones, o filtrados del tráfico.
Para esta versión Alpha los desarrolladores han puesto un servidor en una dirección que se indica en el fichero de instalación, de tal forma que si no se dispone de un servidor o de suficientes máquinas como para montarlo, se pueda realizar la prueba contra él.
A nosotros el servidor no nos ha funcionado y hemos optado por realizar la instalación del servidor en una máquina Linux con Fedora Core 5 y python 2.4 y el cliente en otra máquina Linux con Fedora Core 5 y python 2.4, ambas con interfaces de Red Ethernet de 100 Mbps.
Otro de los problemas que hemos determinado, es que Switzerland intenta controlar la organización de los paquetes Peer to Peer mediante el control del tiempo, vía servicio NTP. El servicio NTP es aquel que nos permite mantener sincronizado nuestro reloj del sistema mediante el acceso a un servidor que le ofrece a nuestro sistema la hora. Sin embargo parece que las versiones antiguas contra las que Switzerland debe comprobar si nuestro sistema está actualizado o no, no funcionan del todo muy bien, así que mediante la opción del parámetro -u 0 desactivamos la utilización de NTP en el control de los paquetes.
La ejecución de nuestro cliente produce por tanto lo siguiente en la línea de comandos de nuestro CLIENTE Switzerland en Linux:
[root@dev1 switzerland-0.0.5]# ./switzerland-client -s 10.43.99.4 -u 0
No scapy… that’s okay, we don’t really need it
——————————————————————————–
Welcome to Switzerland. This is a Version Zero alpha release. It’s sure to
break at some point. If/when that happens, please let us know by email
(switzerland-devel@eff.org), IRC (#switzerland on irc.oftc.net) or bug report
( https://sourceforge.net/tracker/?func=browse&group_id=233013&atid=1088569 )
——————————————————————————–
interface is now eth0
Logging events to /var/log/switzerland-client.log
Looking for ntpd…
ntpdc: read: Connection refused
ntpdc is present but ntpd does not appear to be alive: (”[]”)
but allow_uncertain_time is set so we’re defaulting the clock error to 0.000000
Connecting to 10.43.99.4:7778
Private IP: ‘10.43.99.20? ; Public IP: ‘10.43.99.20?
The psyco package is unavailable…
Listening for traffic with peers
Y a continuación podemos ver los datos en el servidor:
[root@moo2 switzerland-0.0.5]# ./switzerland-server
psyco not available — the server will be more efficient if psyco is installed
SwitzMas: Server listening for connections on port 7778…
got a connection from 10.43.99.20 44797
SwitzMas: peers: {’10.43.99.20?: {44797: <SwitzerlandLink(Thread-2, initial daemon)>}}
SwitzMas: Initialising server thread
Switz-2s: attempting handshake with (’10.43.99.20?, 44797)
Switz-2s: completed handshake with (’10.43.99.20?, 44797)
Switz-2s: Sending [’public-ip’, 0, ‘10.43.99.20?]
Switz-2s: Sending [’new-members’, 0, []]
SwitzMas: Joining circle, notifying 0 others
(’10.43.99.20?, 44797) is running on (’Linux’, ‘2.6.11-1.1369_FC4smp’, ‘i686?, (2, 4, 1, ‘final’, 0))
Switz-2s: Received ack for 0
CURRENT FLOW TABLE: okay drop mod/frg pend t/rx prot
CURRENT FLOW TABLE: okay drop mod/frg pend t/rx prot
CURRENT FLOW TABLE: okay drop mod/frg pend t/rx prot
Durante la ejecución, el servidor va notificando la producción de eventos en las conexiones Peer To Peer y determina si en la actual tabla de flujo de datos se producen eventos inexperados.
Todo esto además queda registrado en los logs que Switzerland crea. Que por cierto hay que tener en cuenta que es necesario de forma manual crear el directorio para alojar los logs y darle permisos de escritura, o bien ignorarlos con el parámetro: -P- para que no se creen.
[root@file1 switzerland-0.0.5]# mkdir /var/log/switzerland-pcaps
[root@file1 switzerland-0.0.5]# chmod 777 /var/log/switzerland-pcaps
Switzerland está aún como decíamos en una fase Alpha de desarrollo, por lo tanto aún le queda bastante, pero el concepto de análisis y auditoría es sencillo, así que desde ADSL Net no descartamos la posibilidad de desarrollar un piloto gráfico que se incluya en ANT en próximas releases.
Os mantendremos informados.
Por cierto!!!, nuestras infraestructura de pruebas, no se ha visto afectada, y para la prueba se han utilizado hasta 4 operadores. Telefónica, Colt, Vodafone 3G y British Telecom
Via www.adslnet.es