Archivo

Archivo de Autor

20 sitios en la web profunda de TOR que te podrían interesar

enero 27, 2015 4 comentarios

La web profunda de TOR es un entorno que se encuentra en constante cambio y los servicios ocultos que consultamos un día, al otro día pueden dejar de funcionar por muchos motivos, ya que no hay que olvidar que la mayoría son mantenidos por voluntarios en la red y no son servidores dedicados. Por este motivo, algunos de los sitios en la web profunda que he compartido hace algunos meses ya no se encuentran activos, de todos modos te invito a que los visites, aquí, aquí y aquí.

A continuación, expongo un listado de 20 servicios ocultos (HTTP) en la web profunda de TOR que probablemente serán de tu interés.

1. Onion Soup

Enlaces en la web profunda relacionados con bases de datos de direcciones “.onion”, buscadores de servicios ocultos, redes sociales en la web profunda, entre otros recursos interesantes.

Dirección: http://soupksx6vqh3ydda.onion/links.shtml

2. HackForum

Un foro sobre hacking que a diferencia de los foros tradicionales que solemos encontrar por Internet, contiene hilos y manuales muy interesantes sobre anonimato, malware, desarrollo de “bichos”, entre otras cosas.

Dirección: http://a2emrmdsprmm6t7i.onion/

3. Galaxy2

Galaxy fue una red social que gano mucha popularidad en la red de TOR, pero dicho servicio ha dejado de estar disponible hace algunos meses y debido a ello, ha salido “Galaxy2”, una red social que pretende sustituir a Galaxy.

Dirección: http://w363zoq3ylux5rf5.onion/

4. Wikileaks

Se trata de un “mirror” en la deep web del famoso WikiLeaks, con todos los documentos e información filtrada en los últimos años.

Dirección: http://zbnnr7qzaxlk5tms.onion/

5. GlobaLeaks

Por medio de esta plataforma cualquiera puede reportar/filtrar información sobre acciones indebidas, como las violaciones a los derechos fundamentales que comenten los gobiernos de algunos países contra sus ciudadanos. Se encuentra diseñada para proteger a toda costa la identidad de la persona que reporta dichos abusos y utiliza la plataforma “GlobaLeaks” (https://globaleaks.org).

Dirección: http://ak2uqfavwgmjrvtu.onion/#/

6. A Beginner Friendly Comprehensive Guide to Installing and Using a Safer Anonymous Operating System.

Se trata de una guía muy recomendable sobre la instalación y uso de un sistema operativo (Debian, por supuesto) con las herramientas y utilidades necesarias para que permita a sus usuarios un nivel adecuado de anonimato y seguridad.

Dirección: http://yuxv6qujajqvmypv.onion/index.php?title=Main_Page

7. BB Compendium

Se trata de un sitio en el que encontraras manuales de todo tipo, no solamente relacionados con la informática, sino también sobre medicina, uso aplicado de la química, manuales sobre entrenamiento militar, entre otras cosas.

Dirección: http://nope7beergoa64ih.onion/

8. Is online that hidden service?

A veces una instancia de TOR puede estar mal configurada y el acceso a la web profunda es tan lento, que la conexión a un sitio web se corta antes de que el servicio conteste a las peticiones. Para estar completamente seguros de que un sitio oculto en la red de TOR se encuentra caído, existe este servicio, el cual despejará cualquier tipo de duda al respecto.

Dirección: http://ol56t3xahrpk2b62.onion/

9. WTF is my IP?

Si no estas seguro si tienes correctamente configurado tu navegador para conectarte a la web profunda de forma segura, una buena forma consiste en consultar el servicio “checktor” de TOR (https://check.torproject.org/). Sin embargo, si quieres conocer más detalles sobre las cabeceras HTTP y fugas de información del navegador, este servicio puede ser muy útil.

Dirección: http://ofkztxcohimx34la.onion/

10. Ping sec

Muchos de vosotros leéis este blog porque os gusta la seguridad informática (o eso espero) y precisamente por ese motivo incluyo en este listado el blog “Ping Sec”. Creo que hay pocos blogs tan interesantes como este. Fijaros en la sección de malware: OSMDB ( Open Source Malware Data Base ).

Dirección: http://pmryw2y4t3u46uts.onion/

11. Sinbox

Se trata de un sistema de email que no utiliza javascript ni almacena cookies en el navegador, además toda la información entre remitente y destinatario viaja cifrada.

Dirección: http://sinbox4irsyaauzo.onion/

12. Directorio TOR en español

Servicio oculto en castellano con varias direcciones onion separadas por categorías.

Dirección: http://cjxbupyxay3ibikr.onion/

13. ZeroBin

Se trata de un PasteBin “con esteroides” en el que los mensajes se pueden cifrar, marcar el tiempo de caducidad, destruir después de ser leído y puede ser expuesto de forma pública en forma de discusión como si se tratará de un foro o privado para aquellos usuarios autorizados.

Dirección: http://zerobinqmdqd236y.onion/

14. TorFind

Se trata de un buscador muy interesante ya que no solamente busca direcciones onion en la web profunda de TOR, sino que también busca eepsites en I2P. Lleva activo varios años y la calidad de las búsquedas es bastante buena.

Dirección: http://ndj6p3asftxboa7j.onion/

15. Yacy

Aquí tenemos otro buscador para la web profunda de TOR, pero que además, permite aplicar varios filtros relacionados con el tipo de servicio (HTTP, FTP, SMB), extensión de documentos, etc. Los filtros permitidos son muy similares a los que se pueden aplicar en buscadores como Google o Shodan.

Dirección: http://yacy2tp5a2dhywmx.onion

16. Information and Anti-Forensics

Se trata de un sitio que examina cada una de las etapas relacionadas con el ataque a un sistema informático y las medidas defensivas que se pueden aplicar. Además, explica algunas medidas que sirven para proteger la privacidad y el anonimato de los usuarios.

Dirección: http://xzu2i6kiyhysfn4s.onion/index.html

17. TheChess

Si te gusta el ajedrez, como a mi, es un sitio que seguro te encantará, ya que podrás medirte con otros jugadores y entrar en competiciones. Suelo entrar a menudo en este sitio y si quieres, podemos echarnos una partida, solamente necesitas registrarte. :-)

Dirección: http://theches3nacocgsc.onion/

18. TorStatus

Permite ver el estado de la red de TOR en todo momento. Enseña los repetidores que se encuentran activos y sus detalles de configuración más importantes, como por ejemplo el nombre del router, país, ancho de banda aportado, puerto de “Onion Routing”, puerto de directorio, sistema operativo, etc.

Dirección: http://jlve2y45zacpbz6s.onion/

19. Strategic Intelligence Network

Se trata de un servicio que se encarga de analizar los últimos acontecimientos en todos los países del mundo y determinar una escala que recibe el nombre de “SecCon” o “Security Conditions”. Dicha escala determina el nivel de amenaza de un país y si es seguro estar en él, ya sea como turista o como residente. Se trata de un servicio que se actualiza constantemente, dependiendo evidentemente de la información que se publica en los principales medios de comunicación. Otra característica interesante, es que cada “SecCon” tiene un color distinto dependiendo del riesgo que corren las personas que se encuentran allí y cuando se selecciona un país del mapa, enseña una reseña breve de la información que se ha utilizado para asumir el nivel de “SecCon” correspondiente y algunas medidas que deben tomar si deseas viajar allí.

Dirección: http://4iahqcjrtmxwofr6.onion

20. Yet another Tor Directory.

¿20 enlaces te resultan pocos? a mi también, pero no te preocupes, este servicio contiene un listado de más de 4000 direcciones onion en la web profunda de TOR con todo tipo de contenidos (algunos son ilegales, así que estar atentos por donde os metéis). Además se actualiza constantemente, ya que se encarga de recorrer y registrar servicios ocultos en la deep web.

Dirección: http://bdpuqvsqmphctrcs.onion/

Un saludo y Happy Hack!
Adastra.

Instalación de un proxy TOR2WEB para acceder a servicios ocultos desde Internet

enero 22, 2015 Deja un comentario

Seguramente muchos de los que leéis este blog y os interesan temas relacionados con el anonimato, TOR y cosas similares, conocéis el proyecto “TOR2WEB”, pero para los que no, basta con decir que es una plataforma creada por el equipo de TOR que permite que los servicios ocultos que se publican internamente en la web profunda de TOR se encuentren disponibles desde Internet sin necesidad de que el cliente tenga que arrancar una instancia de TOR en su máquina. Esto quiere decir que cualquier usuario corriente en internet, utilizando cualquier navegador web, podrá acceder a un servicio oculto muy fácilmente.

TOR2WEB está diseñado para funcionar como un proxy reverso, que solamente se encarga de enrutar todas las peticiones entrantes desde la “clear web” a la “deep web” de TOR, con lo cual los servicios ocultos siguen siendo ocultos, incluso para un proxy TOR2WEB. No obstante, el cliente que visita dichos contenidos no lo es, a menos claro, que utilice TOR para acceder a dicho proxy algo que que no tiene mucho sentido, ya que al utilizar TOR ya se tiene acceso a la web profunda de TOR y realmente no seria necesario utilizar TOR2WEB.

“tor2web.org” está conformado por voluntarios en todo el mundo que configuran y exponen un servicio de TOR2WEB para que cualquier usuario en Internet pueda utilizarlo. Dado que se trata de un proxy, no almacena los contenidos de los sitios ocultos, simplemente se encarga de enrutar las peticiones entre la web profunda de TOR y la “web clara”.

Acceder a un servicio oculto en la web profunda de TOR es simple, solamente hace falta sustituir la cadena “.onion” de la dirección del servicio oculto por “.tor2web.org”.

Por ejemplo, si la dirección onion de un servicio oculto es la siguiente: “ajio7mfsscpvgd23.onion” la dirección que se debe utilizar para acceder a dicho servicio utilizando TOR2WEB es: “ajio7mfsscpvgd23.tor2web.org”.

Lo primero que verá el usuario cuando navega hacia dicho sitio es una nota legal que indica que TOR2WEB es solamente un servicio de proxy que tira de la web profunda de TOR y que los contenidos que el usuario visualizará son responsabilidad del creador del servicio oculto al que se intenta acceder. Si el usuario está de acuerdo con los términos expuestos por el proxy, puede continuar y acceder a los contenidos del servicio oculto. La siguiente imagen enseña enseña dicha advertencia.

tor2web1

 

Por otro lado, la plataforma también almacena unas estadísticas básicas sobre el número de accesos que ha tenido el servicio oculto el día anterior, por cuestiones de privacidad y para no generar registros sobre el uso de un servicio oculto, solamente se pueden ver las estadísticas del día anterior y no se almacena nada sobre los datos de otros días. Para acceder a dicha información basta con entrar a la uri “/antanistaticmap/stats/yesterday”. Por ejemplo: “ajio7mfsscpvgd23.tor2web.org/antanistaticmap/stats/yesterday”.
Como se ha mencionado anteriormente, TOR2WEB es un servicio que se encuentra soportado por varios voluntarios en Internet, los cuales configuran una instancia del proxy de TOR2WEB con un dominio propio o con el dominio de TOR2WEB.

Aunque el procedimiento de instalación de un nodo de TOR2WEB es una tarea que se encuentra documentada y bastante bien explicada en la documentación oficial del proyecto, en este artículo explicaré en detalle cómo se puede instalar, configurar y arrancar un nodo de TOR2WEB.

Instalación y configuración de un nodo de TOR2WEB

Antes que nada, el proyecto se encuentra alojado en la siguiente URL: https://github.com/globaleaks/Tor2web-3.0 y se recomienda navegar un poco por cada una de las secciones de la documentación para tener una idea más global del funcionamiento de Tor2Web. En primer lugar es necesario instalar el proyecto y dado que se encuentra pensado principalmente para plataformas basadas en Debian, el mecanismo de instalación consiste adicionar un repositorio a la lista del sistema y posteriormente ejecutar el comando “apt-get” o “aptitute”. Existe un script de instalación que se encarga de realizar todas estas tareas de forma automática y que se recomienda utilizar.

>wget https://raw.githubusercontent.com/globaleaks/Tor2web-3.0/master/scripts/install.sh

>chmod +x install.sh

>./install.sh

Cuando se ejecuta el script pide permisos de administrador para instalar el programa utilizando “apt-get”. Después de realizar la instalación, automáticamente se crea el directorio “/home/tor2web/certs” que es donde se deberán crear los certificados y las claves para el proxy.
Se deben ejecutar los siguientes comandos dentro de dicho directorio.

>openssl genrsa -out tor2web-key.pem 4096

>openssl req -new -key tor2web-key.pem -out tor2web-csr.pem

>openssl x509 -req -days 365 -in tor2web-csr.pem -signkey tor2web-key.pem -out tor2web-intermediate.pem

>openssl dhparam -out tor2web-dh.pem 2048

 

Con los pasos anteriores se encuentra casi terminada la instalación, sin embargo antes de poder arrancar el servicio, es necesario crear un fichero de configuración en “/etc/tor2web.conf”. Dicho fichero no existe por defecto, pero después de instalar Tor2Web, se crea automáticamente un fichero de configuración que sirve de ejemplo en “/etc/tor2web.conf.example”. Las propiedades de configuración que incluye el fichero permiten activar o desactivar varias características interesantes de TOR2WEB, sin embargo, las siguientes son las mínimas que se deben de incluir en el fichero de configuración antes de iniciar el servicio.

nodename: Identificador único del servicio. Es bastante útil para identificar las trazas que se envían a los administradores de TOR2WEB.

datadir: Directorio donde se encuentran los ficheros necesarios para el correcto funcionamiento del programa, incluyendo los certificados creados anteriormente.

processes y requests_per_process: Propiedades que permiten ejecutar el programa utilizando multiproceso. El valor recomendado para la propiedad “processes” es el número de cores del sistema +1.

basehost: Se trata del dominio base donde se ejecutará el proxy. TOR2WEB se puede desplegar en un dominio independiente al de tor2web y en tal caso, es necesario especificar dicho dominio en esta propiedad.

listen_port_http y listen_port_https: Puertos HTTP y HTTPS que serán utilizados por el proxy. Evidentemente los valores por defecto son 80 y 443 respectivamente.

sockshost y socksport: Son probablemente las propiedades más importantes, ya que permiten definir el host y el puerto en el que se encuentra en ejecución un proxy SOCKS de TOR. Es evidente la importancia de dichos valores, ya que TOR2WEB utilizará dicho proxy SOCKS para conectarse con la web profunda de TOR y devolver al usuario final los contenidos del servicio oculto que ha solicitado. En este sentido, para lanzar un nodo de TOR2WEB, es necesario tener una instancia de TOR levantada.

ssl_key, ssl_cert y ssl_dh: Se trata de propiedades que permiten especificar la ruta completa de los certificados y la clave privada que se han creado anteriormente para el servicio.

Con las propiedades anteriores se puede comenzar a utilizar TOR2WEB, sin embargo existen otras propiedades que habilitan características especiales del programa, por ejemplo la posibilidad de bloquear servicios ocultos con contenidos inapropiados, bloquear crawlers, sobre-escribir el fichero “robots.txt” y otras cosas que intentan “alejar” el contenido de servicios ocultos de buscadores como google.

Para conocer en mayor detalle todas las opciones de configuración disponibles, se recomienda revisar la documentación en la siguiente sección. https://github.com/globaleaks/Tor2web-3.0/wiki/Configuration-Guide
Para iniciar un nodo de TOR2WEB con la configuración mínima, se puede utilizar el siguiente fichero

[main]
nodename = AdastraTORY
datadir = /home/tor2web
processes = 5
requests_per_process = 100000
listen_port_http = 80
listen_port_https = 443
basehost = tor2web.org
sockshost = 127.0.0.1
socksport = 9150
ssl_key = /home/tor2web/certs/tor2web-key.pem
ssl_cert = /home/tor2web/certs/tor2web-intermediate.pem
ssl_dh = /home/tor2web/certs/tor2web-dh.pem
cipher_list = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES128-SHA:DES-CBC3-SHA
ssl_tofu_cache_size = 100

 

Con el fichero anterior ubicado en “/etc/tor2web.conf” ahora es posible iniciar el servicio como cualquier otro del sistema

>sudo /etc/init.d/tor2web start
Enabling Tor2web Apparmor Sandboxing
* Starting Tor2web tor2web…
* Starting tor daemon… [ OK ]
>

Con los pasos anteriores, ahora ya contamos con una instancia en ejecución de TOR2WEB en local y disponible para desplegar en algún servidor en Internet.

Saludos y Happy Hack!
Adastra.

Los 48 mejores artículos del 2014 en TheHackerWay (THW)

diciembre 30, 2014 2 comentarios

Un año más que está a punto de terminar y continuo redactando entradas en este sitio, con la única finalidad de mantener un registro de las cosas que me gusta investigar y poder compartir mis estudios con todo el mundo. Este año ha sido especialmente interesante, ya que he tenido la posibilidad de presentar el proyecto Tortazo, con el cual he ganado el primer reto de jóvenes profesionales de ISACA. He redactado mi primer libro sobre “Python para Pentesters” con la editorial 0xWORD y he tenido el honor de conocer a gente realmente buena en el campo de la seguridad informática. Tengo muchas expectativas sobre los posibles proyectos que saldrán para el año que viene y espero que sea tan productivo como lo ha sido el 2014.
Por otro lado, el trafico de este blog se ha duplicado con respecto al año 2013, recibiendo un promedio de 2.500 visitas diarias y con más de de 1.000 personas inscritas. No está nada mal y es posible gracias a todos y cada uno de vosotros. :-D

Todo esto no solamente me motiva para seguir escribiendo, sino para seguir investigando en mayor profundidad todos los temas que se crucen por el camino y que despierten mi interés. Espero que el año que viene sea igual o mejor que este, por mi parte pondré todo mi empeño e intentaré mejorar la calidad técnica del blog y redactar algún que otro libro más.

En esta entrada, además de desearos una feliz navidad y un prospero año 2015, también quería dejaros algunos de los artículos más interesantes que se han publicado en este sitio en el 2014. Se encuentran ordenados por orden cronológico e incluyo la fecha de publicación, una breve descripción y el enlace de la entrada. Aquí van:

Nombre       Descripción Enlace Fecha
Explotación de Software Parte 2 -Modos de operación del procesador e Instrucciones en Assembly Conceptos básicos sobre las arquitecturas y modos de operación del procesador, así como las principales instrucciones disponibles en ensamblador Enlace 13/02/2014
Hacking con Python Parte 3 – DNSPython para consultar servidores DNS Uso de la librería DNSPython para realizar consultas a servidores DNS. Enlace 18/02/2014
Explotación de Software Parte 4 – Programacion en Assembly bajo Linux Explicación sobre el uso de las principales instrucciones disponibles en ensamblador bajo sistemas Linux Enlace 27/02/2014
10 sitios en la deep web de TOR que podrían interesarte – Parte 1 de 3 10 Sitios interesantes en la web profunda de TOR. Parte 1 Enlace 03/03/2014
10 Sitios en la deep web que podrían interesarte – Parte 2 de 3 10 Sitios interesantes en la web profunda de TOR. Parte 2 Enlace 10/03/2014
Hacking con Python Parte 6 – ARP Poisoning, MITM y DNSSpoofing con Scapy Explicación sobre cómo realizar un ataque de ARP Poisoning y DNS Spoofing utilizando Python. Enlace 11/03/2014
10 Sitios en la deep web que podrían interesarte – Parte 3 de 3 10 Sitios interesantes en la web profunda de TOR. Parte 3 Enlace 17/03/2014
Hacking con Python Parte 7 – Manipulación de peticiones HTTP Uso de librerías como urllib, urllib2, requests y httplib para realizar peticiones HTTP. Enlace 18/03/2014
Hacking con Python Parte 8 – Web Scraping con BeautifulSoup Uso de la librería BeautifulSoup para parseo y extracción de documentos HTML y XML Enlace 25/03/2014
Hacking con Python Parte 9 – Web Crawling con Scrapy Uso del framework “Scrapy” para la creación de rutinas de crawling contra sitios web. Enlace 01/04/2014
Explotación de Software Parte 9 – Funcionamiento de la Stack Explicación sobre la estructura de la stack de un programa. Enlace 03/04/2014
Hacking con Python Parte 11 – Desarrollo de un Crawler Desarrollo de un crawler básico utilizando Python. Enlace 15/04/2014
Tortazo: Desarrollo de un framework de auditoría para la deep web de TOR. Explicación de la primera versión del proyecto Tortazo Enlace 25/04/2014
Hacking con Python Parte 13 – Mecanismos de autenticación en protocolo HTTP Mecanismos básicos de autenticación sobre el protocolo HTTP. Enlace 29/04/2014
Hacking con Python Parte 14 – Utilizando NMAP desde Python Uso de python-nmap para realizar escaneos en segmentos de red con Nmap desde scripts en python. Enlace 06/05/1984
Hacking con Python Parte 15 – Utilizando Shodan desde Python Utilizando la API de Shodan para encontrar servicios y dispositivos en internet. Enlace 13/05/1984
21 Blogs sobre seguridad informática que deberías conocer, en castellano. Blogs en castellano sobre seguridad informática. Enlace 21/05/1984
Hacking con Python Parte 17 – FuzzDB y PyWebFuzz Uso del proyecto FuzzDB con PyWebFuzz Enlace 27/05/2014
Explotación de Software Parte 18- Introducción y Conceptos Básicos sobre Fuzzing Conceptos básicos sobre las principales técnicas de fuzzing para el descubrimiento de vulnerabilidades. Enlace 05/06/2014
Explotación de Software Parte 19 – Fuzzing con Spike Introducción a Fuzzing con SPIKE. Enlace 12/06/2014
Hacking con Python Parte 20 – Controlando servidores SSH con Paramiko Utilizando Paramiko para gestionar conexiones y ejecutar comandos contra máquinas remotas por medio de un servidor SSH. Enlace 17/06/2014
Explotación de Software Parte 20 – Fuzzing con Sulley Framework Fuzzing utilizando la API y herramientas disponibles en Sulley Framework. Enlace 19/06/2014
Explotación de Software Parte 21 – Instalación de Sulley Framework Procedimiento utilizado para instalar Sulley Framework, paso a paso. Enlace 26/06/2014
Hacking con Python Parte 23 – Controlando instancias de TOR con Stem Utilizando la API de Stem para acceder a repetidores locales de TOR Enlace 08/07/2014
Explotación de Software Parte 23 – Desarrollo de Exploits basados en la Stack Ejemplo simple sobre explotación de programas vulnerables sobre-escribiendo directamente el register EIP. Enlace 10/07/2014
Hacking con Python Parte 24 – Consulta de descriptores de TOR con Stem Conceptos básicos sobre los descriptores de TOR utilizando la API de STEM. Enlace 15/07/2014
Explotación de Software Parte 24 – Salto y Ejecución de Shellcodes Explicación sobre algunos métodos disponibles para realizar saltos a una dirección de mémoria donde reside un shellcode. También se explica el uso básico de memdump y msfpescan. Enlace 17/07/2014
Hacking con Python Parte 26 – Introducción a Twisted Conceptos básicos sobre la librería Twisted. Enlace 29/07/2014
Explotación de Software Parte 26 – Uso de Plugins en WinDBG para agilizar el desarrollo de exploits Uso de los comandos básicos en WinDBG y las extensiones Byakugan y Exploitable Enlace 31/07/2014
Explotación de Software Parte 27 – Uso de Mona en Inmunity Debugger para agilizar el desarrollo de exploits Uso de las opciones básicas de Mona.py desde Immunity Debugger. Enlace 07/08/2014
Hacking con Python Parte 29 – Scripting en Inmmunity Debugger – PyCommands Scripting con Immunity Debugger utilizando su API en Python.En este vídeo solamente en explican los conceptos principales para la creación de PyCommands. Enlace 19/08/2014
Explotación de Software Parte 29 – Identificando Bad Characters en Shellcodes Uso de mona.py para la generación de un array con todos los posibles caracteres que se pueden incluir en un shellcode.Posteriormente, se identifican y remueven todos aquellos caracteres que alteren el array. Enlace 21/08/2014
Hacking con Python Parte 31 – Examinando programas y librerías con pefile y pydasm Usando PEFile y PyDASM para inspeccionar y desensamblar ficheros en formato Portable Executable (PE) en sistemas windows. Enlace 02/09/2014
Explotación de Software Parte 31 – Desarrollo de Shellcodes en Linux – Execve Local Shell Primer vídeo en el que se hace un énfasis especial en el desarrollo de shellcodes bajo sistemas Linux. Se enseña un ejemplo en el que es posible generar una shell local. Enlace 04/09/2014
Hacking con Python Parte 32 – Uso de Fabric sobre servicios SSH Uso de la librería Fabric para administrar paralelamente múltiples servidores SSH. Puede ser útil para crear una botnet sobre servidores SSH vulnerables o con contraseñas débiles. Enlace 09/09/2014
Explotación de Software Parte 32 – Desarrollo de Shellcodes en Linux – Bind Shell Desarrollo de una BindShell en un sistema Linux. Se enseña el uso de la systemcall “socketcall” con las funciones “socket”, “bind”, “listen” y “accept”. Enlace 11/09/2014
Explotación de Software Parte 33 – Desarrollo de Shellcodes en Linux – Reverse Shell Desarrollo de una ReverseShell en un sistema Linux. Se enseña el uso de la systemcall “socketcall” con las funciones “socket” y “connect”. Enlace 18/09/2014
Tortazo v1.1 ya está disponible! Explicación sobre las funcionalidades incluidas en la versión 1.1 de Tortazo Enlace 19/09/2014
Hoy vengo a hablar de mi libro. Python para Pentesters. Publicación del libro “Python para Pentesters” Enlace 22/09/2014
Explotación de Software Parte 34 – Desarrollo de Shellcodes en Linux – Egghunters Explicación sobre el funcionamiento y uso de los EggHunters bajo plataformas Linux Enlace 02/10/2014
Vulnerabilidades comunes en HTML5 – Configuraciones inseguras con CORS – Parte 1 Vulnerabilidades en aplicaciones con HTML5 Parte 1 Enlace 08/10/2014
Servicios REST en Nessus y pynessus-rest Librería Pynessus-rest para acceso a los servicios REST de Nessus. Enlace 14/10/2014
Vulnerabilidades comunes en HTML5 – Localstorage y vulnerabilidades en WebSQL – Parte 2 Vulnerabilidades en aplicaciones con HTML5 Parte 2 Enlace 29/10/2014
Vulnerabilidades comunes en HTML5 – Conociendo el funcionamiento de los WebSockets – Parte 3 Vulnerabilidades en aplicaciones con HTML5 Parte 3 Enlace 11/11/2014
Inyección de Malware en programas Java con acceso nativo utilizando JNA Inyección de Malware utilizando programas Java con JNA Enlace 13/11/2014
Crea tu propia red privada de TOR – Emulación de TOR con Chutney Emulación de la red TOR en un segmento de red local con Chutney Enlace 20/11/2014
Registro y análisis de emociones con Wefeelfine – Ingeniería social automatizada Conociendo la plataforma wefeelfine Enlace 09/12/2014
7 ideas de desarrollo de software enfocadas a la seguridad informática para el 2015 Algunas ideas para el desarrollo de software para el 2015 Enlace 16/12/2014

Saludos y Feliz Navidad!

Adastra.

7 ideas de desarrollo de software enfocadas a la seguridad informática para el 2015

diciembre 16, 2014 2 comentarios

Cada semana suelo dedicar un rato en pensar en qué cosas me gustaría trabajar, qué herramientas me gustaría desarrollar y qué quiero estudiar en mi tiempo libre, así como también las cosas quiero evitar a toda costa en mi vida profesional. Lo considero un ejercicio muy entretenido y que me ayuda a mejorar mi creatividad y a lo mejor, algún día pueda tirar de algunas de ellas para dedicarme a tiempo completo. “Sueños” aparte, cuando alguien quiere escribir una herramienta enfocada a la seguridad, antes de pensar en el lenguaje de programación o requisitos técnicos/funcionales específicos, es necesario preguntarse, dos cosas: “por qué” y “para qué”. El “por qué” es importante, ya que permite definir objetivos claros sobre lo que queremos hacer, una serie de funciones que pretenden cubrir una necesidad, automatizar alguna tarea concreta o simplemente por aprendizaje/diversión. Luego, hay que pensar en el “para qué” y definir si realmente es algo que le va a servir a la comunidad. Hay que tener en cuenta que es posible que existan otras herramientas que ya hacen lo mismo que quieres hacer con la tuya y no tiene sentido reinventar la rueda. Por ejemplo, ¿Quieres desarrollar un servidor web? bueno… ya existen algunos cuantos muy buenos y si consideras que puedes hacer algo interesante que no hacen servidores como Apache o NGINX, cabe preguntarse, ¿No sería mejor hacer un plugin o un modulo con esa funcionalidad concreta para alguno de esos servidores?.
¿Quieres hacer un escáner de puertos? bueno… si crees que lo puedes hacer mejor que  Nmap, Hping3, Queso y un largo, larguísimo etcétera de herramientas que sirven para lo mismo, adelante!.

Para que tu proyecto tenga éxito, tiene que ser novedoso, cubrir una necesidad concreta y que tenga tu “sello personal”. De esta forma ganaras visibilidad y la gente podrá ver lo que has hecho. A continuación, te dejo un listado de 7 ideas de proyectos que a lo mejor te pueden interesar y si quieres puedes poner en marcha en cualquier momento.

  1. Desarrollo de un RAT.

Un RAT  es una herramienta que permite la administración remota de un ordenador y normalmente cuenta con una serie de funciones que permiten, literalmente, hacer de todo en el ordenador donde se encuentra instalado el programa. Es un tipo de herramienta que suele ser utilizada por equipos de mantenimiento para la resolución de incidencias concretas, sin embargo, también es una herramienta muy común cuando se habla de cibercrimen y de APTs. Existen muchas herramientas con estas características y probablemente una de las más conocidas es “TeamViewer”, pero también han sonado otras como PoisonIvy o DarkComet en temas relacionados con campañas de APTs de alto nivel.
El beneficio que conseguirás creando una herramienta con estas características, es la cantidad de conocimientos técnicos que adquirirás, ya que incluye muchas funciones, tales como la posibilidad de ejecutar comandos en una consola, subir/descargar ficheros, controlar cualquier dispositivo conectado al ordenador, etc.

  1. Plataforma portable de servicios ocultos en redes anónimas como TOR o I2P.

Si tienes servicios ocultos en TOR o I2P, en la mayoría de casos los ejecutarás desde tu ordenador y punto, pero si para ti es realmente importante el anonimato y te conectas desde varios ordenadores lo más probable es que te interese montar y eliminar tus servicios ocultos de forma automática o si lo haces desde una máquina virtual del estilo de TAILS, lo que tengas en dicha máquina virtual será eliminado después de que termines tu trabajo.

Una aplicación interesante puede consistir en el levantamiento automático de una instancia de TOR y de una serie de servicios ocultos del tipo HTTP, SSH, SMB, etc.

Si por ejemplo, eres un periodista que trabaja en zonas en conflicto y que utilizas constantemente TOR desde el ordenador que te pille mejor para compartir privadamente tus reportajes, una plataforma con estas características puede venir muy bien, ya que se encargará de la configuración de los servicios ocultos y de levantar los servidores por ti, en un instante lo tienes todo montado y funcionando.

  1. Desarrollo de un spider con funciones para análisis de metadatos.

Existen muchas librerías y herramientas para iniciar procesos de crawling y scrapping en aplicaciones web, sin embargo, algo que siempre echo en falta, es la capacidad de descargar documentos, imágenes y cualquier otro recurso de una aplicación web y almacenar dicha información de forma “inteligente” basándome en los metadatos de dichos documentos. Evidentemente, el proceso de crawling funcionará igual que como lo hacen muchas de las herramientas y frameworks que existen en el mercado, pero además, descargarás contenidos como imágenes y documentos basándote únicamente en una serie de patrones predefinidos. Esto te permite descargar solamente el contenido que te interesa (independiente de cuál sea tu interés :-) )

  1. Asistente y simulador de reglas para Snort.

Snort es uno de los NIDS más potentes que conozco, además de que se trata de un proyecto Open Source, que desde luego son los que más me gustan. Sin embargo, crear reglas robustas y que permitan detectar ataques y amenazas en el segmento de red no es una tarea para nada trivial, de hecho, conocer todas las directivas que se pueden utilizar en una regla de Snort y su comportamiento es de las cosas más complicadas a las que se puede enfrentar un administrador de redes que desea mantener su entorno seguro. Que yo sepa, el desarrollo de este tipo de reglas se hace manualmente, no conozco herramientas que permitan facilitar su creación y mucho menos que permitan simular su  comportamiento ante diferentes tipos de ataque. Una buena idea que puede resultar interesante a más de uno es justamente desarrollar un asistente que permita crear reglas de Snort de forma interactiva y que una vez creadas, tenga la opción de levantar Snort y simular su comportamiento llevando a cabo diferentes tipos de ataques predefinidos en la simulación, como por ejemplo ataques DoS, escaneos, patrones de shellcodes, etc. Creo que puede ser un proyecto muy interesante que aportaría un valor enorme a los administradores de red que diariamente se tienen que pegar con Snort.

  1. Plataforma de honeypots para múltiples servicios

Un honeypot es un sistema que se encarga de levantar un servicio determinado que intenta simular un sistema vulnerable, pero sin ser realmente un servicio utilizado y mucho menos, con recursos sensibles. Uno de los más conocidos es “Kippo”, un honeypot de un servidor SSH completo, en el que se puede incluso definir un sistema de archivos y un usuario y contraseña predecibles, todo esto con el fin de atraer atacantes. La idea consiste en levantar múltiples honeypots para diferentes tipos de servicios, tales como SSH, FTP, SMB, HTTP, etc. Además, utilizar un firewall como NetFilter/IPTables para filtrar todo el trafico entrante por puertos como el 21, 22, 80, 139, 443, 8080, etc. Al puerto en el que se encuentre en ejecución el honeypot correspondiente. Del mismo modo que ocurre con “Kippo”, si un atacante entra en el sistema utilizando las credenciales intencionalmente predecibles, la plataforma de honeypot puede ejecutar un “contra-ataque” contra el atacante. Se trata de una idea que puede ser interesante para temas relacionados con la ciberdefensa y la seguridad ofensiva. Existen proyectos similares a éste, como por ejemplo MHN (http://threatstream.github.io/mhn/) sin embargo, solamente se limitan al registro de ataques y no en ejecutar el siguiente paso correspondiente al “contra-ataque”, que puede consistir simplemente en recolectar información sobre el atacante, detectar vulnerabilidades y posteriormente realizar las tareas correspondientes a la explotación y post-explotación.

  1. Plugins para Tortazo!

Para aquellos que se encuentran interesados en la red de TOR, a lo mejor les resulte útil aprender a escribir plugins para Tortazo. No se trata de una herramienta simple, no es fácil de instalar por la cantidad de dependencias necesarias, tienes que tener ciertos conocimientos para poder sacarle el máximo provecho y todo esto es así de forma premeditada ya que la filosofía de Tortazo es “anti-script kiddies”. Nunca ha sido mi intención crear una herramienta como Metasploit, en la que la gente lanza módulos y exploits contra otros sistemas y no se enteran de qué es lo que realmente están haciendo esas utilidades ni mucho menos, comprenden el funcionamiento de los exploits que se ejecutan. Ese tipo de herramientas, aunque son extremadamente útiles y ahorran mucho tiempo, suelen fomentar la pereza entre novatos y personas con escasos conocimientos en seguridad, aquellos que quieren las cosas rápido y fácil, sin dedicar el tiempo suficiente en aprender cómo funcionan las herramientas que utilizan.
Si te interesa TOR y Tortazo, puedes escribir plugins que se conecten a la web profunda de TOR utilizando una sencilla API incluida en Tortazo, la cual tiene funciones para realizar conexiones a diversos tipos de servicios ocultos (SSH, SMB, FTP, HTTP, etc.) así como también realizar actividades de recolección de información sobre los repetidores que conforman la red de TOR.

  1. Mapeo de redes inalámbricas a nivel metropolitano.

Para aquellos que conocéis WiGLE, probablemente ya sepáis de qué va esta idea, para los que no, basta con comentar que se trata de una base de datos enorme con información sobre redes inalámbricas a nivel mundial. En la ciudad en la que vivo actualmente (Madrid) hay redes inalámbricas a cualquier sitio al que te dirijas, muchas tienen vulnerabilidades fáciles de explotar y otras se encuentran abiertas (en muchas ocasiones de forma deliberada para atacar a los clientes que se conectan). WiGLE tiene mucha información de redes en USA, pero en el caso de España, no veo tantos registros, por este motivo una buena idea puede ser intentar hacer lo mismo que hace WiGLE pero con un enfoque distinto, además de identificar y registrar redes inalámbricas en una base de datos, almacenar también su localización aproximada, intentar auditarlas intentando ejecutar los vectores de ataque más comunes (hirte, coffe latte, fragmentación, etc.) y determinar cuáles son vulnerables. Un programa de estas características puede funcionar bastante bien si el atacante se encuentra en constante movimiento, por ejemplo, si se desplaza en transporte público y deja al programa recibiendo “Beacon Frames” de los puntos de acceso cercanos y además, realizar las pruebas de penetración típicas contra este tipo de redes. Se trata de una actividad que en la mayoría de países puede ser considerada ilegal en el caso de que se acceda sin permisos a dichas redes, con  lo cual lo mejor es limitar el ataque únicamente al reconocimiento de vulnerabilidades y su posterior registro y aunque no soy partidario, ni me gusta la gente que se dedica a usar herramientas como “aircrack-ng” para fastidiar a otros, creo que es un proyecto del que se puede aprender bastante sobre el funcionamiento de las redes inalámbricas y sobre cómo crear programas de auditoría contra dichos entornos de red.

Son simplemente ideas que se me han ido ocurriendo y que a lo mejor, te pueden resultar interesantes como proyecto a implementar el año que viene. En fin, otra idea de proyecto puede ser, como propósito general, aprender a programar mejor, dedicar tiempo y enfocar esfuerzos en adquirir esos conocimientos que son tan importantes y que os van a servir para crear cosas novedosas que seguro nos van a sorprender a todos!

Un Saludo y Happy Hack!
Adastra.

Registro y análisis de emociones con Wefeelfine – Ingeniería social automatizada

diciembre 9, 2014 3 comentarios

El campo de la psicología y todo lo relacionado con los fenómenos socio-culturales siempre me han parecido muy interesantes en los que creo que hay mucho por hacer, especialmente desde el punto de vista de la informática, ya que estamos hablando de un campo del conocimiento que aun no ha alcanzado el grado madurez que tienen otros campos del conocimiento humano. No obstante, existen muchos documentos y herramientas que permiten comprender mejor la naturaleza de las emociones humanas y la forma en la que pueden afectar el comportamiento de una persona. La ingeniería social es una de dichas herramientas y se basa en una serie de principios generales que son transculturales y que suelen aplicar a un porcentaje de la población bastante alto, sin embargo su enfoque, como seguramente ya lo sabes, consiste principalmente en detectar las vulnerabilidades que pueda tener una persona en varios niveles, así como también para la detección del engaño. Los ingenieros sociales suelen conocer bastante bien los principales rasgos psicológicos y culturales de las personas con las que tratan, tal es su conocimiento sobre el comportamiento y la psique humana que son capaces de “cambiar” su modo de hablar, de expresarse y de transmitir ideas a las personas con las que se comunican con el fin de generar un sentimiento de confianza y conexión a su interlocutor. Se trata de una habilidad que en muchas ocasiones es innata en una persona, es simplemente su forma de ser y suelen generar un ambiente amigable y jovial allí donde vayan. Muchas personas son así por naturaleza, inmediatamente nos generan sentimientos agradables y nos sentimos más relajados y dispuestos a transmitir información. Los mejores ingenieros sociales son aquellos no fuerzan las cosas y que con una habilidad asombrosa controlan el flujo de los acontecimientos y las conversaciones, dando lugar a situaciones que les resultan favorables y muy ventajosas. Si bien suelen ser habilidades que son innatas en la mayoría de ingenieros sociales, no significa que no puedan ser desarrolladas comprendiendo cada uno los puntos vitales del Social Engineering Framework, solamente hace falta practica y mucha paciencia, pero al hablar de practica, no me refiero a utilizar SET desde casa y crear el típico Applet malicioso, me refiero a hablar con la gente que te rodea y tratar de conocer su “mindset” o conjunto de habilidades, características y rasgos psicológicos.

Ahora bien, como resulta evidente, las emociones juegan un papel central cuando hablamos de relaciones humanas. Lo que sentimos por otras personas impactan directamente en nuestro comportamiento y además, con el tremendo auge de las redes sociales, parece ser que hoy en día todo el mundo se siente mucho más a gusto expresando lo que piensan o sienten en Facebook, Twitter o otro cualquier sitio en Internet como blogs o foros que hablando personalmente con la gente. Es algo que siempre me ha parecido de lo más curioso y desde hace varios años, aprovechando la abrumadora cantidad de frases cargadas con diferentes tipos de sentimientos de personas que escriben en Internet, se ha creado un proyecto que desde mi punto de vista es uno de los mejores proyectos informáticos relacionados con el estudio y categorización de las emociones humanas, se trata de wefeelfine.org

Wefeelfine es una plataforma muy completa que se encarga de analizar blogs, foros, redes sociales con perfiles públicos y otros tipos de espacios personales en los que las personas transmiten sus ideas y se expresan, se trata de una herramienta de exploración de emociones a escala global. Además de recolectar información, su plataforma puede ser consultada en cualquier momento y admite varios tipos de filtros relacionados con el genero de las personas, edad, ciudad, o incluso una serie de emociones muy concretas, tal como se puede apreciar en las siguientes imágenes.

feeling1

Nube de sentimientos recolectados por wefeelfine.org

feeling2

Aplicando los filtros: Sentimiento=tense, Genero=Femenino, Edad=Entre 30 y 39 años, Condiciones climáticas=Todas, País=España, Fechas=Todas

Por otro lado, cuenta con varias vistas que permiten visualizar la información de la forma en la que resulte más cómoda para el usuario, tal como se indica en el apartado “movements”: http://wefeelfine.org/movements.html

Personalmente, la característica que me parece más interesante de la plataforma son los servicios REST que se encuentran definidos para que cualquier desarrollador pueda consultarlos. La API para poder invocar a dichos servicios de forma correcta se encuentra definida en el siguiente enlace: http://www.wefeelfine.org/api.html y no requiere ningún tipo de autenticación y/o autorización, son servicios abiertos que cualquiera puede utilizar en un momento dado.

Tal como se aprecia en la siguiente imagen, es posible utilizar un navegador web para invocar a cualquiera de los servicios disponibles e inspeccionar la respuesta para ver los datos que ha devuelto.

feeling3

Invocación a la API de wefeelfine desde un navegador web

Ahora bien, lo más común es crear rutinas que invoquen a dichos servicios para automatizar el proceso de consulta y en ese sentido, es posible utilizar cualquier lenguaje de programación ya que solamente es necesario realizar una petición HTTP y parsear la respuesta. El siguiente script es un buen ejemplo del uso de Python para consultar y parsear algunos de los servicios disponibles en la API de wefeelfine.

import requests 
from bs4 import BeautifulSoup 
def search(api, text): 
    response = requests.get(api) 
    soup = BeautifulSoup(response.content, 'lxml') 
    feelings = soup.feelings.find_all("feeling") 
    print text 
    for feeling in feelings: 
        if feeling.has_key("feeling"): 
            print "[*] Sentimiento: %s " %(feeling['feeling']) 
        if feeling.has_key("sentence"): 
            print "[*] Sentencia: %s " %(feeling['sentence'])                
        if feeling.has_key("postdate"): 
            print "[*] Fecha: %s " %(feeling['postdate'])                
        if feeling.has_key("posturl"): 
            print "[*] URL Origen: %s " %(feeling['posturl'])                
        print "\n" 
search("http://api.wefeelfine.org:8080/ShowFeelings?display=xml&returnfields=imageid,feeling,sentence,posttime,postdate,posturl,gender,born,country,state,city,lat,lon,conditions&limit=10","[*] Consultando los ultimos 10 sentimientos registrados") 


search("http://api.wefeelfine.org:8080/ShowFeelings?display=xml&returnfields=imageid,feeling,sentence,posttime,postdate,posturl,gender,born,country,state,city,lat,lon,conditions&feeling=sad&city=madrid&limit=10&gender=female", "[*] Consultando los ultimos 10 sentimientos registrados de personas con genero 'femenino' que se sienten 'felices'") 

La función “search” es la que se encarga de utilizar la librería “requests” para ejecutar una petición HTTP contra el servicio REST indicado y parsear la respuesta utilizando la librería BeautifulSoup, la cual se encuentra en formato XML.

Es un script muy simple y que refleja la cantidad de información que se puede extraer de la plataforma. Aunque muchos de los sentimientos registrados se encuentran en ingles, los sentimientos expresados en castellano en blogs, redes sociales y cualquier otro sitio web en Internet, quedan prácticamente excluidos de la plataforma, ¿Acaso os estoy dando ideas para un próximo proyecto? ;-).
Es una plataforma muy interesante y el estudio realizado por los investigadores que han montado la plataforma es simplemente brillante y para aquellas personas a las que nos interesan los temas relacionados con la informática, el hacking y las ciencias humanas como la filosofía y la psicología, puede resultar muy entretenido. Os recomiendo su lectura: http://wefeelfine.org/wefeelfine.pdf

Un Saludo y Happy Hack!

Creando sitios ocultos en TOR de forma programática con TxTorCon

diciembre 4, 2014 1 comentario

Anteriormente he hablado sobre el uso de Stem para controlar instancias de TOR, una potente librería que no solamente se aprovecha del protocolo de control de TOR para la administración remota de una instancia en ejecución, sino que también cuenta con algunas utilidades para arrancar una nueva instancia con configuración personalizada, descargar y parsear los descriptores emitidos por las autoridades de directorio, entre muchas otras funcionalidades útiles. Es una librería que se explota bastante bien en Tortazo, una de las herramientas que he escrito para realizar pruebas de penetración contra repetidores de salida y servicios ocultos en la red de TOR.
Aunque Stem es una librería muy potente, existen otras alternativas que cuentan con las mismas capacidades y en esta ocasión, voy a hablar sobre TXTORCON.

¿Por qué TxTorCon? Porqué se trata de una implementación del protocolo de control de TOR basada en Twisted y a diferencia de Stem, TxTorCon es una implementación asíncrona. Una librería como TxTorCon permitirá crear programas reactivos que se encargarán de ejecutar acciones sobre una o varias instancias de TOR ante una lista de eventos predefinidos.

En esta entrada se verá cómo se puede utilizar TxTorCon para crear servicios ocultos en TOR de forma programática y aunque lo que se verá a continuación también se puede hacer con Stem, se trata de un ejercicio practico muy interesante que servirá para conocer los elementos básicos y la “metodología” que se debe seguir cuando se programa con esta librería.

Antes de continuar, se recomienda al lector tener claros los conceptos básicos sobre la configuración de una instancia de TOR y conocer bastante bien las propiedades admitidas en el fichero “torrc”, aunque crear un servicio oculto no es una tarea compleja ya que solamente es necesario definir la opción de configuración “HiddenService” en el fichero de configuración “torrc” tantas veces como servicios ocultos se desee crear, lo que si que puede ser complicado es mantener el servicio oculto correctamente securizado, pero eso es un tema del que se hablará en un próximo artículo.

En primer lugar, es importante conocer el uso de la clase “txtorcon.TorConfig” ya que en dicha clase es donde definen todos los elementos de configuración de una instancia de TOR y dicho elemento puede ser utilizado para levantar la instancia de forma programática utilizando TxTorCon.

import txtorcon
config = txtorcon.TorConfig()
config.SOCKSPort = 9051
config.ORPort = 4443
…..
config.save()

La clase “txtorcon.TorConfig” maneja un diccionario interno con las propiedades que se pueden definir en un fichero de configuración de TOR, con lo cual el programador debe definir cada propiedad como un atributo de instancia.

Ahora bien, para definir uno o varios servicios ocultos, es necesario crear un listado de instancias de la clase “txtorcon.HiddenService”. Dicho listado se almacenará en la variable “HiddenServices” de la instancia de “txtorcon.TorConfig” creada previamente.
La siguiente función servirá para definir los detalles de configuración básicos para iniciar una instancia de TOR con un servicio oculto.

import txtorcon
import functools
import tempfile
import os
from twisted.internet import reactor 

def createTemporal():
    tempDir = tempfile.mkdtemp(prefix='torhiddenservice')
    reactor.addSystemEventTrigger('before', 'shutdown',
functools.partial(txtorcon.util.delete_file_or_tree, tempDir))
    return tempDir 

def configuration(hiddenserviceDir, serviceInterface,
servicePort=8080, hiddenservicePort=80):
    if hiddenserviceDir is None:
        print "[+] HiddenServiceDir not specified... Generating
a temporal file."
        hiddenserviceDir = createTemporal()
    if os.path.exists(hiddenserviceDir) == False:
        print "[+] The HiddenServiceDir specified does not
exists... Generating a temporal file."
        hiddenserviceDir = createTemporal()
    config = txtorcon.TorConfig()
    config.SOCKSPort = 9051
    config.ORPort = 4443
    config.HiddenServices = [txtorcon.HiddenService(config,
hiddenserviceDir, ["%s %s:%s" %(str(hiddenservicePort),
serviceInterface, str(servicePort))] )]
    config.save()
    return config 

configuration('/home/adastra/Escritorio/django-hiddenservice',
'127.0.0.1')

La función “configuration” se encarga de recibir como argumento todos los elementos necesarios para establecer un servicio oculto en la configuración definida en el objeto “txtorcon.TorConfig” y posteriormente dicho objeto es retornado. Por otro lado, la función “createTemporal” es invocada internamente por la función “configuration” con el fin de devolver un directorio temporal para el servicio oculto en el caso de que el directorio indicado por parámetro sea invalido.

Ahora que la configuración se encuentra preparada, el siguiente paso consiste en utilizarla para iniciar la instancia de TOR en cuestión.

import txtorcon
import functools
import tempfile
import os
from twisted.internet import reactor 

def createTemporal():
    tempDir = tempfile.mkdtemp(prefix='torhiddenservice')
    reactor.addSystemEventTrigger('before', 'shutdown',
functools.partial(txtorcon.util.delete_file_or_tree, tempDir))
    return tempDir 

def configuration(hiddenserviceDir, serviceInterface,
servicePort=8080, hiddenservicePort=80):
    if hiddenserviceDir is None:
        print "[+] HiddenServiceDir not specified... Generating a temporal file."
        hiddenserviceDir = createTemporal()
    if os.path.exists(hiddenserviceDir) == False:
        print "[+] The HiddenServiceDir specified does not exists... Generating a temporal file."
        hiddenserviceDir = createTemporal()
    config = txtorcon.TorConfig()
    config.SOCKSPort = 9051
    config.ORPort = 4443
    config.HiddenServices = [txtorcon.HiddenService(config,hiddenserviceDir, ["%s %s:%s" %(str(hiddenservicePort),serviceInterface, str(servicePort))] )]
    config.save()
    return config 

def updates(prog, tag, summary):
    print "%d%%: %s" % (prog, summary) 

def setup_complete(config, proto):
    print "TOR Instance started!" 

def setup_failed(arg):
    print "SETUP FAILED", arg
    reactor.stop() 

def startTor(config):
    d = txtorcon.launch_tor(config, reactor,progress_updates=updates)
    d.addCallback(functools.partial(setup_complete, config))
    d.addErrback(setup_failed)
    reactor.run()
torrc = configuration('/home/adastra/Escritorio/hidden_service_django','127.0.0.1')
startTor(torrc)

En esta nueva versión del script se ha incorporado la función “startTor”, la cual se encarga de utilizar la configuración retornada por la función “configuration” para iniciar TOR. Como se puede apreciar, dicha función emplea la utilidad “txtorcon.launch_tor” enviando como argumentos, la configuración de TOR, el reactor de Twisted y una función de callback para procesar cada uno de los eventos producidos durante proceso de inicio. Finalmente, se adicionan dos funciones más en el caso de que el proceso de arranque haya ido bien o en el caso de fallo.

Después de ejecutar el script anterior, se podrá ver por consola algo muy similar a lo que se enseña en la siguiente imagen.

txtorcon1

El script puede parecer complejo pero tal como se ha explicado anteriormente, si se conoce el funcionamiento de Twisted y las funcionalidades básicas de TxTorCon, no resulta tan complicado de comprender.
Hasta este punto se asume que en la máquina local se encuentra un servicio levantado y esperando conexiones, más concretamente en el puerto “8080”. Evidentemente, dado el escenario anterior es necesario levantar un servidor web con Tomcat, una aplicación con Django o cualquier otro servicio en dicho puerto, pero dadas las características de Twisted, también es posible crear un servidor web simple directamente desde el script y de esta forma, se contará con una herramienta completamente funcional que puede levantar un servicio oculto sin depender de ningún programa externo (excepto el propio ejecutable de TOR).

import txtorcon
import functools
import tempfile
import os
from twisted.web import static, resource, server
from twisted.internet import reactor
from twisted.internet.endpoints import TCP4ServerEndpoint 

def createTemporal():
    tempDir = tempfile.mkdtemp(prefix='torhiddenservice')
    reactor.addSystemEventTrigger('before', 'shutdown',
functools.partial(txtorcon.util.delete_file_or_tree, tempDir))
    return tempDir 

def configuration(hiddenserviceDir, serviceInterface,
servicePort=8080, hiddenservicePort=80):
    if hiddenserviceDir is None:
        print "[+] HiddenServiceDir not specified... Generating a temporal file."
        hiddenserviceDir = createTemporal()
    if os.path.exists(hiddenserviceDir) == False:
        print "[+] The HiddenServiceDir specified does not exists... Generating a temporal file."
        hiddenserviceDir = createTemporal()
    config = txtorcon.TorConfig()
    config.SOCKSPort = 9051
    config.ORPort = 4443
    config.HiddenServices = [txtorcon.HiddenService(config,hiddenserviceDir, ["%s %s:%s" %(str(hiddenservicePort),serviceInterface, str(servicePort))] )]
    config.save()
    return config 

def updates(prog, tag, summary):
    print "%d%%: %s" % (prog, summary) 

def setup_complete(config, proto):
    print "TOR Instance started!" 

def setup_failed(arg):
    print "SETUP FAILED", arg
    reactor.stop() 

def startTor(config):
    #Starting a simple web site.
    root = static.File('/opt/WebSite')
    site = server.Site(root)
    hs_endpoint = TCP4ServerEndpoint(reactor, 8080,interface='127.0.0.1')
    hs_endpoint.listen(site)
    d = txtorcon.launch_tor(config, reactor,progress_updates=updates)
    d.addCallback(functools.partial(setup_complete, config))
    d.addErrback(setup_failed)
    reactor.run() 

torrc =configuration('/home/adastra/Escritorio/django-hiddenservice','127.0.0.1')
startTor(torrc)

El programa anterior solamente añade los elementos necesarios para declarar un servidor web cuyo directorio raíz es “/opt/WebSite”. Dicho servidor web se levantará en el puerto 8080 en la interfaz de red local, tal como se ha definido en la configuración del servicio oculto. Con todo esto, después de que la instancia de TOR se levante y se creen los ficheros correspondientes al dominio “onion” y a las claves del servicio, cualquier cliente que intente ingresar por dicha la dirección onion del servicio oculto, podrá ver los contenidos del servidor web que se ha iniciado utilizando Twisted. La siguiente imagen enseña algo muy similar a lo que el usuario final verá en su navegador.

txtorcon2

Como se puede apreciar, al acceder a la dirección onion del servicio oculto, se pueden visualizar los contenidos del directorio “/opt/WebSite”, que es el directorio que se ha indicado como raíz del servidor web.

Aunque aquí se ha enseñado como crear un servicio web en la red de TOR, también es posible crear cualquier otro tipo de servicio siguiendo exactamente la misma dinámica que se ha explicado aquí, como por ejemplo por un servidor SSH/SFTP con Paramiko, un servidor FTP o incluso un servidor SMB. Tienes a tu disposición muchas alternativas a la hora de automatizar la creación de servicios ocultos en la web profunda de TOR.

Un Saludo y Happy Hack!

Cookies persistentes para tracear la navegación de un usuario con EverCookie

diciembre 2, 2014 2 comentarios

Las cookies son un elemento de lo más común en las aplicaciones web actuales y seguramente el lector sabe perfectamente cómo funcionan, sin embargo, para aquellos que no lo saben, basta con comentar que las cookies son ficheros temporales que se almacenan en el navegador del cliente y permiten simplificar el proceso de identificación y posterior comunicación con una aplicación web. Dado que HTTP es un protocolo sin estado, el uso de las cookies es realmente útil para conservar información que se ha intercambiado previamente entre cliente y servidor. Prácticamente todos los sitios web en Internet hacen uso de las cookies, sin embargo, la información que se almacena en ellas puede ser utilizada para identificar y perfilar a un usuario. Con las cookies se puede identificar la navegación de un usuario por un sitio web y de esta forma, tracear las páginas que visita, conociendo sus intereses y otras características. Esto no es necesariamente algo negativo, de hecho, puede ser muy beneficioso para el usuario ya que de esta forma el sitio web puede conocer sus preferencias y actuar en consecuencia para ofrecerle los contenidos que más le puedan interesar. Por ejemplo, en el caso de una tienda online de ropa, se pueden utilizar las cookies para saber si el usuario ha ingresado previamente en el sitio web y si ese es el caso, presentar ofertas o productos personalizados dependiendo de las páginas que ha visitado. No obstante, cuando dicha información es compartida con otros sitios web ajenos, es cuando muy posiblemente se está violando la privacidad del usuario, en el caso de que no haya dado su consentimiento expreso de compartir con otros sitios web las páginas que ha visitado, la información que ha podido ingresar, etc. Esto es común en sitios web dedicados a la publicidad y el marketing, los cuales utilizan la información compartida por otros sitios web para perfilar gustos, afinidades y tendencias de los usuarios, así como identificarles.
Ahora bien, las cookies son elementos que se pueden eliminar muy fácilmente del navegador y en la mayoría de casos no representarán ningún problema, sin embargo, las cookies persistentes, a diferencia de las cookies tradicionales, utilizan múltiples espacios de almacenamiento en el cliente y de esta forma, resulta muy complicado eliminar toda la información que almacena una cookie de estas características del navegador. Para que el lector se haga una idea, una cookie persistente puede almacenar información en el espacio estándar de cookies, en el espacio de “websql” del navegador, en el espacio de almacenamiento local, global y de sesión, en cookies flash (objetos locales compartidos), en la cache del navegador, entre otros. Cuando el usuario elimina dichas cookies desde uno o varios de estos espacios, pero no de todos, el sitio web que ha implementado la cookie persistente es capaz de detectar que se ha intentado eliminar la información de la cookie de uno o varios de dichos espacios de almacenamiento y se encarga de reestablecer los valores, revirtiendo la acción de borrado realizada por el usuario. Es decir, el usuario tiene que eliminar la información de la cookie de todos los sitios donde se ha guardado y si le falta al menos uno por limpiar, dichos valores volverán a ser replicados en todas las zonas de almacenamiento utilizadas por la cookie persistente.

Las cookies persistentes representan una forma muy agresiva de tracear la navegación de un usuario y una de las más conocidas es la que ha desarrollado el investigador Samy Kamkar (también conocido por el desarrollo del virus “Samy”) la cual recibe el nombre de “evercookie”.

Uso de Evercookie

Se trata de una API que cuenta con varios elementos que desde el punto de vista técnico resultan muy interesantes, pero que desde una perspectiva practica, se relacionan más con campañas de marketing agresivas y con el perfilado de los usuarios, actividades que suelen ser consideradas ilegales en algunos países. Esta herramienta cuenta con una API en Javascript que permite crear cookies persistentes que a la fecha de redactar este artículo, se incluyen en las siguientes zonas del navegador del cliente.

– Cookies HTTP estándar.

– Objetos compartidos locales (Cookies Flash).

– Almacenamiento en Silverlight

– Almacenamiento de cookies en formato RGB usando la etiqueta “canvas” de HMTL5

– Múltiples ubicaciones de almacenamiento definidas en la especificación de HTML5 (Almacenamiento local, global, sesion, WebSQL con SQLite y WebSQL con IndexedDB).

– Almacenamiento persistente en JNLP PersistenceService.

Para utilizar esta librería se debe descargar desde el repositorio de GitHub ubicado en la siguiente ruta: https://github.com/samyk/evercookie y posteriormente, se puede comenzar a utilizar la API de Javascript que permite crear páginas web que insertan una cookie de evercookie en los clientes que acceden a dichas páginas.

En esta entrada voy a explicar cómo utilizar esta librería para crear cookies persistentes y vamos a ver algunas de las zonas en las que se almacenan las cookies que se van creando.

Después de descargar o clonar el proyecto desde el repositorio de GitHub, se debe crear un fichero HTML que será incluido en un servidor web como Apache.
En este caso concreto, con el objetivo de probar el funcionamiento de Evercookie, se ha creado un directorio llamado “test” en el directorio “htdocs” de un servidor web Apache y en dicho directorio se han incluido los siguientes recursos, los cuales son los que se han obtenido del proyecto de Evercookie.

evercookie1

El contenido inicial de la página “index.html” es el que se indica a continuación y como se puede apreciar, no solamente incluye el script “js/evercookie.js”, sino que también se hace uso de la API para crear y almacenar cookies persistentes.


<html> 

<head> 

    <script type="text/javascript"
src="js/swfobject-2.2.min.js"></script> 

    <script type="text/javascript"
src="js/evercookie.js"></script> 

    <script> 
    var ec = new evercookie({ 
    	baseurl: '/test', 
    	asseturi: '/assets', 
    	phpuri: '/php' 
    }); 
  ec.set("user", "adastra"); 
  ec.get("user", function(value) { alert("Cookie value is " + value) }); 
  function getCookie(best_candidate, all_candidates) 
  { 
    for (var item in all_candidates) 
      document.write("Storage mechanism " + item + 
        " returned " + all_candidates[item] + "
votes<br>"); 
    } 
    ec.get("user", getCookie); 
    </script> 
</head> 
<body> 
<h1>evercookie!</h1> 
</body> 
</html>

Lo primero que hace es crear un objeto del tipo “evercookie” indicando la URI del sitio web y la ubicación de los recursos necesarios para crear la cookie. Posteriormente, las funciones “set” y “get” permiten crear y recuperar un cookie respectivamente. Como se puede apreciar, la función “get” permite definir una función de callback que tratará el valor de una cookie que se ha guardado previamente con un identificador determinado.

Aunque el código puede parecer simple, en el momento de probar la librería he experimentado algunos problemas relacionados con la adición de capas en el árbol DOM de la página, ya que al parecer, cuando Evercookie se ejecuta sobre el navegador Chrome, Evercookie intenta añadir elementos al cuerpo de la página antes de que el árbol DOM se encuentre correctamente creado, lo cual da como resultado errores similares a los que se pueden ver en la siguiente imagen.

evercookie2

La solución a este problema pasa simplemente por realizar una verificación previa del árbol DOM antes de intentar insertar elementos en cualquier tag. Por ejemplo, en la linea 956 del fichero “js/evercookie.js” veremos el siguiente fragmento de código:

      if (append) { 
        document.body.appendChild(el); 
      }

Dado que en este punto el valor de “document.body” es “null”, la invocación a la función “appendChild” es invalida y produce un error. Es necesario realizar una validación previa antes de invocar a la función “appendChild”, algo tan simple como lo que se enseña a continuación será suficiente.

      if (append) { 
        if(document.body != null){
          document.body.appendChild(el); 
        }
      }

Después de corregir todos los errores que van saliendo y que están relacionados con el mismo problema que se ha explicado anteriormente, se puede apreciar como la cookie se crea en diferentes secciones del navegador.

evercookie3

Evercookie en el “Session Storage” del navegador

evercookie4

Evercookie en el “Local Storage” del navegador

evercookie5

Evercookie en la base de datos SQLite del navegador

Aunque se intente eliminar las cookies utilizando el procedimiento habitual de limpiar cache, formularios guardados, cookies, etc. Evercookie vuelve a crearse automáticamente en cada una de las zonas de almacenamiento indicadas anteriormente, convirtiéndola en un elemento difícil de remover del navegador web. Difícil, pero no imposible.
En un próximo articulo se hablará en detalle sobre las ubicaciones en las que se almacena evercookie y cómo eliminar una cookie persistente creada previamente. Por otro lado, también se hablará de implementaciones de evercookie en NodeJS y Django.

Un Saludo y Happy Hack!

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.289 seguidores

A %d blogueros les gusta esto: