Categorías
Hacking Networking Services - Software

Preservando el Anonimato y Extendiendo su Uso – Estructura de I2P – Parte XXX

Actualmente, ninguna de las soluciones que se han desarrollado proveen de un anonimato a prueba de fallos y completamente fiable al 100% esto es algo que se ha demostrado en innumerables ocasiones en soluciones tan utilizadas y difundidas como es el caso de TOR, la cual debido a su funcionamiento y estructura ha sufrido de múltiples ataques por parte de gobiernos y entidades privadas cuya finalidad ha sido censurar y/o “bloquear” a los usuarios que utilizan dicha red. En el caso de I2P ocurre lo mismo, aunque como ya se ha indicado anteriormente, la arquitectura de I2P es diferente de la arquitectura de TOR en el sentido de que I2P no tiene uno o varios puntos de acceso centralizados como TOR, sino que en su lugar se trata de una red completamente descentralizada donde cada usuario es en si mismo, un punto de acceso para otros usuarios que utilizan I2P para realizar conexiones a otros puntos de la red de forma segura. Lo que desde luego, soluciona algunos problemas, pero trae otros.

El objetivo de esta entrada no es generar un análisis comparativo entre I2P y TOR (este se realizará en su momento) la intensión de este post es comprender la estructura de I2P, opciones y ficheros de configuración que hacen parte del funcionamiento de una instancia. En este orden de ideas, la palabra “anonimato” en el mundo virtual significa realmente, que tan difícil es para alguien encontrar información sensible sobre otra persona, así de simple. Es por esta razón que los objetivos principales de proyectos como I2P son precisamente dificultar a cualquier atacante obtener información sensible como datos personales o localización de otros usuarios.

Ahora bien, la finalidad de cualquier hacker con un sistema (ya sea para defender, atacar o ambos), es conocer a fondo los aspectos funcionales y técnicos de dicho sistema, ya sea que se trate de una herramienta hecha por el mismo o por otros, el conocimiento es realmente el factor diferencial entre un hacker y un script-kiddie/lammer. Por este motivo, es el momento oportuno de conocer como mínimo, como esta estructurado I2P para saber cuales son sus directorios y ficheros más importantes así como su significado, de este modo se establecen las bases para realizar operaciones automatizadas sobre estos, tal como se verá en esta entrada.

ESTRUCTURA DE DIRECTORIOS DE UNA INSTANCIA I2P

Como se ha indicado con anterioridad, cuando se instala I2P, se cuenta con dos opciones, la primera es indicar que se desea instalar un sistema portable, en tales casos es posible indicar de forma explicita donde se deben ubicar todos los ficheros y directorios que utilizará el servicio de I2P, pudiendo ser esta ubicación, cual espacio en el disco duro o en un dispositivo de almacenamiento extraíble, la otra opción es simplemente permitir que el programa de instalación decida donde almacenar todos los directorios y ficheros, esta ubicación típicamente es ~/.i2p (asumiendo que se trata de un sistema Linux)

Independiente del mecanismo utilizado, siempre se crean los siguientes directorios y ficheros que serán utilizados para el correcto funcionamiento de I2P.

/addressbook: Directorio donde se ubican todos los registros y la configuración del sistema de nombrado local de la instancia I2P, este directorio y sus ficheros correspondientes son utilizados por aplicaciones tales como SusiDNS para administrar el sistema de nombrado y cada uno de los Destinations almacenados en I2P. Los ficheros de configuración más interesantes en este directorio están relacionados con la configuración de SusiDNS, en concreto son config y subscriptions. En el fichero config se determinan las propiedades de configuración básicas para que I2P pueda funcionar correctamente, tales como el túnel proxy a utilizar (por defecto 127.0.0.1:4444) y las rutas cada uno de los AddressBook locales de la instancia. En el fichero subscriptions se indican aquellos dominios *.i2p que son “confiables” para el nodo y que permiten resolver de forma dinámica diferentes sitios en la red I2P, el valor que tiene por defecto es http://www.i2p2.i2p/hosts.txt

/eepsite: En este directorio se almacena el EEPSITE por defecto para la instancia de I2P. Contiene los ficheros necesarios para la ejecución de un sitio web sencillo con una configuración básica del servidor Jetty, cuyo fichero de configuración (jetty.xml) se encuentra ubicado en el directorio raíz. En este directorio se encuentran los directorios logs, docroot, cgi-bin y webapps. En el caso del directorio logs se almacenan cada uno de los ficheros de logs que va generando el servidor web, en el directorio docroot se almacena el contenido estático del sitio web (páginas HTML, imágenes, CSS, etc), en el directorio cgi-bin se almacenan recursos ejecutables cgi, el directorio webapps es utilizado para el almacenamiento de contenido dinámico (JSP, Servlets, etc.)

/i2psnark: Este directorio contiene los elementos que se han descargado utilizando la aplicación I2PSnark, que como se recordará, se trata de un cliente para realizar descargas de torrents utilizando la red I2P.

/keyBackup: En este directorio se almacenan el par de claves publica/privada para el cifrado de los paquetes que proceden de la instancia I2P, así como el par de claves privada/publica para la firma de los paquetes de esta misma instancia. Estos ficheros son sumamente importantes y bajo ningún concepto deben ser expuestos a nadie.

/logs: Directorio encargado de almacenar todos los ficheros de logs generados por la instancia I2P.

/netDb: Este directorio contiene todos y cada uno de los ficheros “routerInfo” descargados desde el servicio de NetDB distribuido, estos ficheros contienen información detallada de cada uno de los routers que componen los túneles que utiliza la instancia de I2P. El nombre de cada uno de estos ficheros esta compuesto por el texto “routerInfo”+Firma identificativa del router cifrada + “=.dat”

/peerProfiles: Este directorio contiene información extra sobre cada uno de los routers empleados para componer los túneles creados en la instancia de I2P, estos ficheros tienen una directa relación con los ficheros almacenados en el directorio /netDb dado que por cada fichero “routerInfo” existente en dicho directorio, existe un fichero “profile” en este directorio. El nombre de cada uno de estos ficheros esta compuesto por el texto “profile”+Firma identificativa del router cifrada + “=.txt.gz” Cada uno de estos ficheros contiene información relacionada con el historial del túnel, promedios sobre los tiempos de las respuestas, etc. Toda esta información se va recolectando en la medida de que la instancia de I2P se integra con la red.

/plugins: Contiene todos los plugins que se han instalado en la instancia en ejecución de I2P, cada plugin instalado en este directorio, es a su vez un subdirectorio con el nombre del plugin instalado, por este motivo es normal ver directorios tales como i2pbote, i2phex, pebble, etc. Evidentemente cada uno de estos directorios contiene ficheros de configuración y recursos necesarios para la correcta ejecución del plugin.

blocklist.txt: Este fichero contiene información sobre los routers que deben marcarse como “no deseados” para que no sean tenidos en cuenta por I2P para la creación de nuevo túneles. Este fichero solamente es tomado en cuenta cuando se arranca la instancia de I2P, en el caso de que se desee bloquear a un router de forma manual después de haber iniciado I2P, es necesario hacerlo desde aquí: http://127.0.0.1:7657/configpeer.jsp

clients.config: Este fichero es importante, ya que contiene toda la configuración de los clientes que se ejecutan en la capa de aplicación de la instancia local de I2P y su modificación altera de forma automática la forma en la que se comportan aplicaciones tales como la consola administrativa de I2P entre otras. Por ejemplo, cuando se inicia I2P, normalmente se lanza de forma automática la consola web del router en el navegador por defecto del usuario, este comportamiento es posible cambiarlo aquí, simplemente estableciendo la propiedad clientApp.4.startOnLoad a false. Del mismo modo es posible controlar con este fichero, información relacionada con los EEPSITES y túneles de aplicación en I2PTunnel.

hosts.txt: Este fichero contiene información relacionada con los routers que se encuentran registrados en la instancia local de I2P, se trata de un fichero que contiene EEPSITES con dominio *.i2p y su correspondiente Destination en Base64. Gracias a este fichero es posible acceder desde la red interna de I2P a sitios tales como eepsites.i2p o postman.i2p. Por esta razón se trata de un fichero importante que posteriormente puede ser utilizado por un atacante para escanear los EEPSITES que se encuentran almacenados aquí. Cada entrada de este fichero contiene algo como esto:

eepsites.i2p=DHoGpNRACpcGnhB1l14ZRQFjnQtNvItX7~bZylgVaD2DnaYpqB7GoBcf5gJmjhXYRi3-UlOnrkEtQB4fICotgM0XLG8LHyNQVkj6rAnGSWBwX3zZaTWr~K6Up80AMDa8nN3D04coXQiL8Jn4~pcN2-7pxIL-Ox-J3aB8f3KthVxcuR27h1fJGR~BFqf~4ZdC7rGItokOb0qocU4gMNI-HWgmhUv-ucFc9m~Jh-BvM2nd~KGs7EQMtRxLgVJcj7G0j9chyN37l7mB5X~vYIueORENcKgo3OTjTAE9oHiVSZz7v11VVH3OynUp65QdtVXLCrqsqr4nJoFnApUcX5uYY4h~24dthZfHv1TjzWOuy1DFJH5mmT81HGQhtQI8g52CbnRgm4ItKQNq8AYPkJI2habi4ibUqBnmYk6g0p9mx1MsmpMmbQP6jemiZPpcVhAEjqJO-IyPyy0pDvg6O4fIgmstwdQS~qq~Sts20BWikhsXifQL87wnXtiN9e-PluyNAAAA

Como puede apreciarse, cada dominio I2P se encuentra mapeado con su correspondiente Destination en Base64 para que posteriormente pueda ser consultado desde cualquier navegador web utilizando el proxy de I2P.

i2ptunnel.config: Tal como su nombre lo indica, contiene la configuración de I2PTunnel para determinar el comportamiento de cada uno de los túneles cliente y servidor registrados en la aplicación, normalmente no es necesario editar este fichero manualmente ya que la aplicación web se encarga de hacerlo de forma automática cada vez que se realiza un cambio sobre cualquiera de los túneles registrados en I2PTunnel.

plugins.config: Configuración de cada uno de los plugins instalados en el sistema, normalmente es un fichero que no tiene mucha información, solamente se suelen indicar si un plugin determinado debe arrancar junto con I2P o no.

router.config: Contiene la configuración interna del router, almacenando valores tales como la versión I2P, el idioma por defecto, país donde se ejecuta el router, la dirección IP de la máquina (normalmente la IP publica que utiliza para salir a internet) si soporta autenticación y SSL, entre otros valores interesantes.

webapps.config: Del mismo modo que el fichero de configuración de plugins, este fichero contiene información “superficial” de las aplicaciones que se encuentran instaladas en la instancia de I2P, tales como I2PTunnel, SusiDNS, I2PSnark, SusiMail, etc. Normalmente solo se suele indicar si la aplicación en cuestión debe o no arrancar junto con I2P.

systray.config: Este fichero contiene el comando que se ejecutará para invocar el navegador web que abrirá la consola administrativa justo al momento en el que la instancia de I2P se inicia.

Por Daniel Echeverri

Formador e investigador en temas relacionados con la seguridad informática y hacking. Es el autor del blog thehackerway.com el cual ha sido el ganador del European Cybersecurity Blogger Awards 2021 en la categoría de “Best Technical Content“.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *