Hace algún tiempo escribí algunos posts en los que hablaba sobre el uso de herramientas como Netcat, Socat y SSH para establecer conexiones seguras y no tan seguras con otras máquinas (aquí empieza: https://thehackerway.com/2011/08/03/herramientas-para-hacking-en-entornos-de-red-telnet-parte-i/ ). En esa serie de posts, se hablo sobre los beneficios de utilizar Netcat o Socat y como estas herramientas eran claramente superadas por el todo-poderoso protocolo SSH, sin embargo a día de hoy, aun son muchos los que suelen utilizar Netcat para establecer conexiones con hosts remotos y lo suelen utilizar para “jugar” con el establecimiento de puertas traseras, por este y otros motivos, Netcat es conocido por muchos la “Navaja suiza” de los hackers y administradores, ya que es versátil, facilidad de usar, fácil de instalar y la puedes llevar prácticamente a cualquier parte ya que es muy liviana, sin embargo tiene el mismo problema que tiene Telnet: Los paquetes no se cifran, lo que quiere decir todo lo que se transmita por el canal de comunicación establecido por Netcat, puede ser fácilmente capturado por cualquier sniffer. Ahora bien, la solución a esto, como se ha mencionado anteriormente, es utilizar un protocolo de comunicación seguro como lo es SSH, sin embargo, en esta ocasión quisiera hablar de otras herramientas que funcionan igual que Netcat (es decir, con las mismas opciones y demás) pero que además realiza el cifrado de los paquetes transmitidos en el canal de comunicación, algo que viene muy bien en muchos casos.

Cryptcat

Crytpcat no es una herramienta reciente ni mucho menos, se trata de una herramienta que ha sido escrita hace algunos años, pero que a pesar de que es un poco más segura que el clásico Netcat, suele ser poco utilizada o mencionada en otros sitios relacionados con la seguridad informática (en comparación con Netcat). En realidad Cryptcat es Netcat pero con cifrado twofish, el cual es un algoritmo de clave simétrica cuyo tamaño de bloque es de 128 bits y el tamaño de clave es de 256 bits (2 elevado a la 256 es el número de claves posibles). Al tratarse de un algoritmo de clave simétrica, estamos hablando de un algoritmo que utiliza la misma clave para cifrar y descifrar mensajes, que si bien actualmente es considerado bastante robusto, sufre del mismo inconveniente que todos los algoritmos de este tipo, que la clave debe de ser conocida tanto por el emisor y el receptor y muchas veces el intercambio de esta clave se lleva a cabo en entornos “no seguros”. Esta es uno de los motivos por los que ha surgido la criptografía de clave asimétrica.

Para instalar Cryptcat, es necesario descargarlo desde aquí: http://sourceforge.net/projects/cryptcat/ y compilar el código fuente. En el caso de Linux es bastante simple, solamente es cuestión de utilizar MAKE y poco más (tal como se ha enseñado varias veces para otras herramientas). Sin embargo hay que tener en cuenta un “pequeño” detalle y es que por defecto, el fichero MakeFile realiza la compilación de los ficheros fuentes con enlazado estático de dependencias, esto quiere decir que la compilación funcionará perfectamente, pero luego cuando sea necesario ejecutar el programa, las librerías deben de ser cargadas en el en el módulo de ejecución correspondiente (normalmente utilizando la utilidad ld en sistemas Linux) sin embargo esto hoy en día no tiene mucho sentido, así que es necesario cambiar la compilación estática por compilación dinámica, de esta forma los módulos necesarios se encontrarán tanto en el proceso de compilación como en la ejecución del programa.

El cambio en el fichero MakeFile es el siguiente:

linux:

make -e $(ALL) $(MFLAGS) XFLAGS=’-DLINUX’ STATIC=-dynamic \

XLIBS=’-lstdc++’

Ahora, solamente hace falta ejecutar el comando make linux y con esto será suficiente para generar el ejecutable de Cryptcat para Linux.

En el caso de Windows, puede ser un poco más complicado, ya que es necesario compilar los fuentes (lenguaje C) y generar el correspondiente ejecutable (EXE). Para ello, pueden utilizarse un compilador para windows como el Visual C++ Express (que es una de las pocas cosas buenas que tiene Microsoft “casi” gratis) o utilizando el “Make for Windows”.

Este ultimo método resulta ser uno de los más simples, ya que se trata de un proyecto que trata de permitir a los desarrolladores utilizar las utilidades de Make en entornos Windows, lo que desde luego facilita mucho las cosas a la hora de compilar y construir proyectos en entornos windows. (más información aquí: http://gnuwin32.sourceforge.net/install.html). En ambos casos, es necesario tener instalado Microsoft Visual C++ Express ya que es necesario tener un compilador de C++ para generar el ejecutable, los pasos a seguir en un sistema windows son los siguientes:

  1. Instalar Microsoft Visual C++ Express desde aquí (la versión 2010 esta bien): http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products
  2. Instalar GNUMake for windows, el ejecutable está aquí: http://sourceforge.net/projects/gnuwin32/?source=dlp
  3. Establecer las variables de entorno tanto para el CL.exe (compilador de C++) como para Make, tal como se enseña en la siguiente imagen (en la variable PATH, el valor completo es C:\Program Files\GnuWin32\bin;C:\Program Files\Microsoft Visual Studio 10.0\VC\bin)

cryptcat_var

  1. Ahora bien, para que el compilador funcione correctamente desde linea de comandos y no aparezca un mensaje de error indicando algo como “mspdb100.dll is missing” es necesario ejecutar lo siguiente desde linea de comandos:>»C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat» x86

    Esto configurará adecuadamente el compilador.

  2. Finalmente, si todo lo anterior ha sido correcto, es posible ejecutar el comando make sobre el directorio donde se ha descomprimido Cryptocat.

El resultado del procedimiento anterior, es el ejecutable de Cryptcat que también he subido en las siguientes rutas:

Versión de Cryptcat para Windows:  http://dfiles.eu/files/vhaxxyi31

Versión de Cryptcat para Linux: http://dfiles.eu/files/dbr5q5z3g

Uso de Cryptcat

Es posible utilizar Cryptcat del mismo modo que se utiliza NetCat (ver aquí: https://thehackerway.com/2011/08/05/herramientas-para-hacking-en-entornos-de-red-%e2%80%93-netcat%e2%80%93-parte-ii/) ya que cuenta con las mismas opciones por linea de comandos, recordar que Cryptcat es simplemente Netcat pero con cifrado de datos utilizando TwoFish. Ahora bien, para demostrar su uso, vamos a hacer un ejemplo sencillo, en primer lugar se va a establecer una Bind Shell en un sistema windows, la cual va a ser utilizada por un cliente en Linux, en el primer caso, utilizando Netcat y capturando los paquetes de datos transmitidos entre ambas máquinas con Wireshark. Posteriormente se realizará el mismo ejercicio pero utilizando Cryptcat.

  1. BindShell con Netcat y captura de datos.a. Desde la máquina windows se ejecuta el siguiente comando con el fin de establecer una Bind Shell en el sistema, la cual será utilizada posteriormente por el cliente Linux.

    nc -lvvp 4444 -e cmd.exe

    b. Antes de realizar la conexión con la máquina windows, iniciar wireshark y establecer el filtro correspondiente al host y puerto de la máquina remota, tal como se indica en la siguiente imagen:

    netcat_plain
    Tal como se puede apreciar en la imagen anterior, la conexión desde la máquina cliente también puede realizarse utilizando Netcat, Telnet, Socat, etc.

    c. Ahora, se puede hacer un “dump” de alguno de los paquetes capturados por Wireshark, se podrá apreciar que la información se transmite en texto plano. Tal como se enseña en la siguiente imagen:

netcat_plain2

Para ver toda la información que se enseña en la imagen anterior, basta con seleccionar uno de los paquetes capturados, click derecho y seleccionar la opción “Follow TCP Stream”. Ahora bien, como pude apreciarse, todo se encuentra en texto plano. Es aquí donde puede resultar muy util utilizar Cryptcat.

  1. BindShell con Cryptcat y captura de datos.a. Del mismo modo que se ha hecho unas lineas atrás, se crea una bindshell con cryptcat en la máquina windows utilizando el siguiente comando:

    cryptcat.exe -lvvp 9999 -e cmd.exe

    b. Al igual que con Netcat, es posible utilizar cryptcat para establecer una conexión a un puerto determinado. Así que del mismo modo que se hizo anteriormente, se inicia wireshark, se establece el filtro de paquetes para capturar solamente aquellos que correspondan con la máquina objetivo en el puerto 9999. Tal como se enseña en la siguiente imagen:

cryptcatwireshark

Finalmente, se puede observar que todo el trafico que genera dicha conexión utilizando Cryptcat se encuentra cifrado, (algo que no se consigue utilizando únicamente netcat) y en este caso, solamente se ha cambiado el comando “nc.exe/nc” por “cryptcat.exe/cryptcat” ya que los argumentos por linea de comandos son exactamente iguales. La siguiente imagen enseña lo que puede capturar wireshark siguiendo el flujo TCP (Follow TCP Stream)

cryptcatwireshark2

Se puede ver información completamente ilegible (cifrada) una “pequeña” diferencia con Netcat que puede convertirse en una “gran” diferencia dependiendo de para lo que lo estés usando.

Así que, merece la pena comenzar a utilizar esta herramienta en lugar del clásico Netcat.