19 junio 2009

Un vistazo a WarVox

En un artículo anterior, Alejandro realizó una pequeña revisión del estado del arte de las herramientas de wardialing.. en cierta forma como previo a este articulo, en el cual voy a realizar una pequeña introducción a WarVOX, una herramienta de wardialing novedosa que permite, mediante VoIP, realizar una identificación/clasificación de líneas de teléfono que expongan servicios de datos.

Así mismo, creo importante reseñar que dado el tipo de herramienta de que hablamos, a lo largo de articulo me centraré más en la faceta de “servicios de datos” de un wardialing.. pero no debe obviarse que en un buen wardialing, no se comprueban únicamente los servicios de datos, centralitas que permitan cursar llamadas, servicios de buzón de voz, o incluso la ingeniería social, son otras facetas que forman parte del wardialing y de las que quizás hablemos en el futuro.

El Problema de la VoIP.

Antes de empezar con WarVOX, creo pertinente una pequeña explicación de los problemas de la VoIP de cara al wardialing que justifique el por qué la VoIP no ha sido tradicionalmente una tecnología habitual en los proyectos de wardialing.

Como muchos sabréis, lo que la gente llama habitualmente “VoIP” es en realidad una amalgama de protocolos destinados a transmitir telefonía tradicional por medio de redes de datos (en particular de redes IP).

De cara a su funcionamiento, la práctica totalidad de los protocolos de VoIP existentes (h.323, SIP, IAX, SS7oIP, etc.) diferencian claramente la información de señalización, de la información “de voz” o sonido.

Se entiende por señalización, la información que intercambian los dos extremos de una comunicación VoIP para intercambiarse los diferentes eventos que se producen durante el inicio, mantenimiento y cierre de una llamada, es decir, “petición de nueva llamada de este número a este otro”, “el usuario ha marcado el digito #7 en su terminal”, “el extremo remoto está ocupado”, etc. todo eso son mensajes de señalización que ambos extremos intercambian para realizar la gestión de la llamada. De cara a la señalización cada estándar de VoIP tiene sus propios protocolos, tipos de mensajes, etc.

Por otro lado, además de la señalización, esta lo que realmente importa al usuario, el sonido.. o “la voz” como suele decirse tradicionalmente. Así pues, en VoIP, (al igual que en otros sistemas de telefonía digital tradicionales como ISDN), el sonido evidentemente viaja en forma digital codificado mediante algoritmo de compresión de sonido, (o codec).

Sin embargo, a diferencia de otros medios de telefonía digital, en VoIP, los códec que suelen emplearse tienen como objetivo principal reducir al máximo el ancho de banda necesario para transmitir una llamada, permitiendo así maximizar el número de llamadas concurrentes que se pueden realizar.

Por poner un ejemplo... en telefonía digital tradicional (lo que hacen las Telcos de toda la vida), un primario EuroISDN E-1 dispone de 30 canales de 64kb/s cada uno, lo cual permite la transmisión de 30 llamadas concurrentes. Sin embargo, el mismo primario puede ser configurado para la transmisión de datos mediante protocolo TCP/IP, en cuyo caso el primario ofrece un ancho de banda total de 2Mb/s. Sobre este canal de 2Mb/s el operador puede, utilizando VoIP cursar con facilidad más de 80 llamadas concurrentes… Está claro, que se maximiza el ROI de una línea.. ¿no?

Esta reducción tan drástica del ancho de banda necesario para transmitir el sonido, radica en que los codecs que se emplean en VoIP están diseñados para “simplificar, normalizar y limpiar” el sonido previamente a su compresión, mediante técnicas de filtrado de bajos, supresión o cancelación de eco, reducción de ruido, etc. En gran medida, son estos mecanismos de “normalización” los que permiten al códec reducir la cantidad de información a comprimir y así alcanzar su objetivo de reducir al máximo el ancho de banda necesario.

Dado que el sonido que han de transmitir es la voz de dos personas comunicándose, se da por sentado que no es necesario que se realice una compresión sin perdidas (“lossless compression”) del sonido, sino que más bien, se emplean algoritmos de compresión que ofrezcan cierta calidad, pero asumiendo que pueda perderse parte de la calidad original del sonido (“lossy compression”). Un ejemplo de estos _codecs_ empleados en VoIP, es GSM, el cual se emplea desde mucho antes en las redes de telefonía móvil, las cuales desde sus orígenes tienen que enfrentarse a lo limitado de la transferencia de información por medios inalámbricos.

Este funcionamiento “lossy” podemos verlo de forma similar en otros codces más habituales en la informática de consumo como son el “MPEG-1 Layer3” (MP3) o DivX realizan, solo que su diseño se especializa, en lugar de en sonido telefónico, en compresión de sonido de cierta calidad (mp3) o en compresión de video de alta resolución (DivX). Maravillas de la tecnología.. ;)

Sin embargo, el empleo de estos codecs tan eficientes, presenta un grave problema cuando se pretende realizar un wardialing. O de forma más generalista, presentan un grave problema cuando se pretenden transmitir datos como parte del sonido de una llamada VoIP, pues estos codecs son generalmente incompatibles con la forma en la cual un modem tradicional codifica la información para su transmisión mediante una línea RTB.

La transmisión de datos vía modem, se diseño para su funcionamiento en líneas analógicas RTB. En dichas líneas analógicas, la información se codifica en función a una serie de estándares (v.32, v.34, v.90, T.30, etc.) los cuales se basan en hacer un uso intensivo de las frecuencias sonoras disponibles (300~3100Hz), pero, por desgracia, este “uso intensivo” supera con creces las capacidades de retención de información que los _codecs_ de VoIP habituales ofrecen. Recordemos, que el propósito en la VoIP (de ahí la V) es la transmisión de Voz.. ;)

En definitiva, y después de este pequeño “rollo”, la idea se resume en lo siguiente: en la mayor parte de los casos, es imposible, o al menos inusable, la transmisión de datos de un “modem” por medio de VoIP. Así pues, dado que en un wardialing lo que se pretende es identificar y atacar servicios de datos como servidores de Acceso RAS, Servidores de Terminales, sistemas de control industrial, x.25, etc. tratar de emplear VoIP para conectar a estos sistemas seria un intento fútil..

Una nota más sobre VoIP y los Modems ;)

Como reseña adicional, para los que estén pensando “pero, si, si que se pueden transmitir datos en VoIP.. yo lo he hecho.. porque.. blah.. blah.. blah”.. Bueno, aquí viene el “disclamer” para todos vosotros.. ;)

Si, efectivamente, no es imposible transmitir datos en VoIP, ya que los mismos codecs que se emplean en líneas TDM/ISDN tradicionales para la transmisión de sonido (g.711u y g.711a) se pueden emplear en VoIP. Y si, con estos codecs, la información transmitida por un modem podrá alcanzar su destino sin perdidas..

Sin embargo, pese a esto, este es un escenario improbable, ya que estos codecs ofrecen ratios de compresión nulos en comparación a la telefonía digital tradicional, por lo tanto, los operadores de VoIP accesibles en internet no suelen tener disponibles dichos codecs (aunque algún operador despistado existe.. creedme.. ;) )

Así mismo, y para el escenario que nos ocupa, tratar de mantener muchas llamadas concurrentes a través de Internet empleando estos g.711 consumirá un ancho de banda considerable, además de introducir latencias muy superiores a las de los otros codecs, resultando una configuración poco práctica en la mayor parte de los escenarios.

La solución: Que es y que no es WarVOX

Sin embargo, WarVOX es una curiosa herramienta, cuyo objetivo es ayudar en una de las fases más largas de un proceso de wardialing..la Identificación de posibles objetivos

En un buen proyecto de wardialing, se le pide al cliente que informe de todos los números de todas las líneas de teléfono que tiene contratadas. Se pretende poder entregarle en retorno un inventario donde, no solo se le informe de posibles servicios vulnerables, sino además proveer al cliente de un inventario de todos los servicios de datos que expone su corporación por medio de líneas telefónicas… pensemos que una empresa de cierta envergadura suele disponer de muchísimas líneas de teléfono, en localizaciones dispersas y que además dada esta dispersión no todas están bajo el control directo de los departamentos de IT, Seguridad, etc.

Por este motivo, muchas veces, el servicio de wardialing brinda al cliente la oportunidad de saber a ciencia cierta si hay más líneas “exponiendo servicios” de las que él mismo tiene contempladas… Quién sabe, siempre puede haber algún “listillo” que coloca un modem por ahí para poder acceder al ordenador de la oficina desde casa..

Como paso previo en el wardialing, lo normal, es realizar una batería automatizada de llamadas a todos los números de teléfono a investigar para identificar en que líneas hay algún tipo de “servicio de datos” y cuáles son líneas de Voz, centralitas con operadora automática, etc., pero por desgracia, dada la ingente cantidad de números de teléfono que el cliente puede entregarnos, el proceso de identificación puede durar bastante, especialmente en función a la cantidad de líneas de teléfono y módems de que dispongamos, así como implicar unos costes en la factura telefónica importantes.

Este es el principal problema que WarVOX intenta solventar: permitir reducir el tiempo y costo necesario para realizar la identificación y clasificación de los números de teléfono a investigar.

¿Cómo? Sencillo, empleando las facilidades (y precios) que los operadores de telefonía a través de internet nos brindan mediante VoIP.

Con WarVOX, podemos introducir una lista (o una serie de rangos) a analizar, para que la herramienta llame a dichos números por medio de VoIP y nos proporcione una lista reducida de números “interesantes” sobre los cuales profundizar en un análisis más manual.

Gracias a su funcionamiento mediante VoIP, WarVOX nos permite reducir drásticamente los tiempos de análisis paralelizando las llamadas, pues al no necesitar líneas de teléfono, podemos hacer uso de toda la capacidad que el/los operadores en internet nos ofrecen..

Así mismo, dado que los operadores a través de internet ofrecen precios mucho más competitivos que los operadores tradicionales, podremos ahórranos una buena parte del dinero y/o realizar análisis más exhaustivos.

Como funciona WarVOX

Bueno, y si antes nos has dado la chapa con que si los codecs no permiten transmitir datos y no sé qué otras cosas aburridísimas.. ¿Cómo puede ser que WarVOX hace esto que nos estas contando?

Bien! Aclaremos este importante punto.. A diferencia de las herramientas de wardialing tradicional, WarVOX no “conecta” al otro extremo e interpreta los “datos” como seria habitual.. Por el contrario, WarVOX lo que hace es grabar durante un tiempo determinado el sonido que “genera el otro extremo” tras descolgar, para más tarde analizarlo mediante transformaciones de Fourier y otros análisis matemáticos en busca de indicios de que el sonido corresponde a un modem, fax u otro servicio de datos.

Así mismo, las grabaciones realizadas, así como las diferentes graficas de las transformaciones de Fourier de los análisis las tendremos disponibles para realizar análisis posteriores complementarios a los análisis automáticos que realiza la herramienta.

Mediante dicha técnica, WarVOX nos permite reducir rápidamente la cantidad de números de teléfono sobre los cuales centrar nuestra atención. Esto es.. números que ahora sí, utilizando un modem tradicional podemos “marcar” para investigar que se esconde tras la portadora remota.. ;)

Como usar WarVOX

Se trata de una herramienta Open Source, desarrollada en ruby por HD Moore (si, el de Metasploit), mediante el framework Ruby On Rails tan popular en proyectos OSS últimamente.

Así mismo, pese a que pueda funcionar en otros SO, lo más razonable es instalarla en Linux, para lo cual, deberéis descargarla de su página oficial (http://warvox.org/), en la cual también están disponibles las instrucciones de instalación para Ubuntu.

Desde el punto de vista de su manejo, la herramienta (una vez arrancada) se maneja vía web, bien conectando localmente, o si la arrancamos con la opción (--address 0.0.0.0) de forma remota. Como decía, el manejo es mediante HTTP gracias a un servidor embebido (el de mongrel de RoR) que escucha por defecto en el puerto 7777.



Así mismo, el software dispone de un fichero de configuración (/etc/warvox.conf) en el cual deberán configurarse las credenciales para poder acceder vía web.

Una vez dentro, deberemos configurar nuestro proveedor VoIP en el enlace “Providers” dispuesto a tal efecto. WarVOX soporta únicamente proveedores que ofrezcan servicios basados en IAX. Lo cierto es que en EEUU son bastantes los que dan dicho servicio, pero en el caso de operadores nacionales la lista es más corta.. Pero bueno, no desesperéis, si se disponen de conocimientos de de asterisk, es perfectamente posible configurar un servidor asterisk para que haga de intermediador entre AIX y SIP, nosotros lo hemos probado y funciona perfectamente..



Tras configurar el/los proveedores, podemos comenzar el “escaneo”.. pinchando en el enlace de “Jobs” podremos configurar un nuevo trabajo.. Ahí será necesario introducir los rangos/mascaras de números a marcar, o bien subirlos mediante un fichero.

Nótese (en rojo) que el software nos permite especificar el número de origen a utilizar en las llamadas.. Esto es algo que pocos proveedores de internet nos dejarán hacer, pero que en determinados escenarios puede ser muy útil al cliente para identificar las llamadas que hemos realizado nosotros y diferenciarlas de posibles ataques “reales”.



Tras introducir un “Job” WarVOX comenzará a realizar llamadas.. una vez terminado el trabajo, podremos observar los resultados desde el enlace “Results”





Una vez revisados los resultados de la ejecución del trabajo, pinchando en “View Analysis” podemos acceder al análisis detallado de la grabación realizada a cada destino. Así como podemos reproducir la grabación para valorar por nosotros mismos si al otro lado “hay portadora”.



Y como suele decirse.. “ya está”.. muy sencillito, verdad? Por supuesto, ahora es cuando comienza la fase en la que el “humano” aporta valor.. ya tenemos una lista de objetivos a los que “atacar” con nuestras artes oscuras, pues manos a la obra.. ;)

¿Qué mejoraríamos?

Como toda herramienta, WarVOX no es perfecta.. y si bien, en las pruebas que hemos realizado lo que ha hecho, lo ha hecho “bastante bien”, siempre existen cosas a mejorar y voy a permitirme apuntar algunas, por si alguien quiere “meterle mano” ;)

· Soporte de otros protocolos de VoIP.. ¿Alguien ha dicho SIP?

· Dada la a veces inestable forma de trabajar de los operadores de VoIP se echa en falta algo más de información de detalle indicando “porque una llamada no pudo cursarse”.

· De cara a evitar tener que hacer segundas batidas sobre todos los números, poder configurar un numero de reintentos de llamada cuando un número estaba ocupado, sería una buena ayuda.

· La instalación en entornos “no Ubuntu” es algo laboriosa.. Si, lo sé Ubuntu es la moda, los mas freaks de los mas freaks usan Ubuntu y los que no usan Ubuntu son lammah (o peor aún usan LFS).. pero en definitiva, instalarlo en una RedHat Enterprise 5.2 ha requerido tiempo extra debido a las variopintas dependencias que el software tiene..

· Finalmente, en la página de detalle del análisis de un trabajo, hemos notado que las gráficas de señal y espectro son cacheadas por el navegador (tanto FF como IE) y es necesario dar a F5 una o dos veces al cambiar de un análisis a otro.. Esto puede resultar muy confuso al principio.. si finalmente es un Bug en RoR o en WarVOX.. creo que será necesario reportarlo..

Como punto final.. y para que se vea que yo también pongo mi granito de arena.. el software “sox” (una de las dependencias de WarVOX) que viene de serie con RHEL 5.* era demasiado antiguo para WarVOX y producía un error debido a un que este invocaba “sox” pasando parámetros inválidos. Pues bien, dado que hablamos de una herramienta OSS, para arreglarlo decidí hacer un mínimo “patch” que permite mediante un parámetro de configuración funcionar WarVOX con la susodicha versión de “sox”.. y por lo tanto me sirvo anexarlo a continuación por si es de utilidad a alguien..

diff -Nru warvox-1.0.1-tmp/etc/warvox.conf warvox-1.0.1/etc/warvox.conf
--- warvox-1.0.1-tmp/etc/warvox.conf 2009-05-15 05:13:57.000000000 +0200
+++ warvox-1.0.1/etc/warvox.conf 2009-06-17 23:33:28.000000000 +0200
@@ -38,3 +38,5 @@
# Configure the dial blacklist location
#
blacklist: %BASE%/etc/blacklist.txt
+
+old_sox_version: true
diff -Nru warvox-1.0.1-tmp/lib/warvox/config.rb warvox-1.0.1/lib/warvox/config.rb
--- warvox-1.0.1-tmp/lib/warvox/config.rb 2009-05-15 05:13:56.000000000 +0200
+++ warvox-1.0.1/lib/warvox/config.rb 2009-06-17 23:41:48.000000000 +0200
@@ -39,6 +39,14 @@
File.expand_path(info['data_path'].gsub('%BASE%', WarVOX::Base))
end

+ def self.old_sox_version
+ info = YAML.load_file(WarVOX::Conf)
+ return false if not info
+ return false if not info['old_sox_version']
+ return true if info['old_sox_version'].to_s == "true"
+ false
+ end
+
def self.analysis_threads
info = YAML.load_file(WarVOX::Conf)
return 1 if not info
diff -Nru warvox-1.0.1-tmp/lib/warvox/jobs/analysis.rb warvox-1.0.1/lib/warvox/jobs/analysis.rb
--- warvox-1.0.1-tmp/lib/warvox/jobs/analysis.rb 2009-05-15 05:13:56.000000000 +0200
+++ warvox-1.0.1/lib/warvox/jobs/analysis.rb 2009-06-17 23:40:16.000000000 +0200
@@ -294,7 +294,9 @@
frefile.path

# Generate a MP3 audio file
- system("sox -s -2 -r 8000 -t raw -c 1 #{rawfile.path} #{bname}.wav")
+ sox_arg = WarVOX::Config.old_sox_version == true ? "-w" : "-2";
+ # print("XXX %s" % sox_arg)
+ system("sox -s %s -r 8000 -t raw -c 1 #{rawfile.path} #{bname}.wav" % sox_arg)
system("lame #{bname}.wav #{bname}.mp3 >/dev/null 2>&1")
File.unlink("#{bname}.wav")
File.unlink(rawfile.path)


Conclusión

Tras hacerle una pequeña batería de pruebas realizando llamadas a diferentes números, fijos “normales”, servidores RAS, servicios de control remoto vía GSM, etc. Lo cierto es que el índice de resultados que ha ofrecido la herramienta es bastante aceptable (cerca del 90%), las pocas pegas que podemos tener son mas en relación al diagnostico o a la instalación que al funcionamiento en sí.. que en general es, no solo fácil, sino práctico.

Ale, pues ya sabéis, después de este articulo interminable, ahora lo que toca es que todos “sus” pongáis a hacer wardialing a diestro y siniestro.. uh.. digo… no.. solo a donde tengáis permiso para hacerlo!!!

- Pablo Ruiz (pablo_@_netway_org)

12 comments :

Anónimo dijo...

Plas plas plas. ¡Mu bien!

Khan dijo...

Para ser puristas, un CODEC no es un "algoritmo de compresión de sonido", sino un Codificador/Decodificador (normalmente un conversor AD / DA). La comprésión de datos se hace mediante algoritmos, que están fuera del entorno de definición de CODEC.

Pablo Ruiz (Pci) dijo...
Este comentario ha sido eliminado por el autor.
Pablo Ruiz (Pci) dijo...

Bueno, se puede ser purista de muchas formas.. por ejemplo, hay quien podría decir que un AD/DA es mas bien un conversor analógico-digital que suele emplearse para muestrear una señal analogica en una equivalente digital (o viceversa), y que generalmente esto se realiza previamente o posteriormente al paso de dicha señal por un codec que no es mas que una implementación software de un algoritmo para realizar una codificación/decodificación especifica de dicha información..

Pero cuando el proposito es entenderse.. no hay porque ser tan "purista".. ¿o si?

Khan dijo...

Pablo, un CODEC puede ser tanto software como hardware... y engloba AD/DA.

Pablo Ruiz (Pci) dijo...

Si, es muy cierto que un codec puede implementarse en software o en hardware.. prácticamente todo lo que puede implementarse en software se puede implementar con mas o menos costo en hardware, o en sistemas mixtos hardware/software como los DSPs.. Hoy día las FPGAs dan para mucho ;)

En lo de que engloba AD/DA no estoy tan de acuerdo.. Existen muchos codec que realizan que se emplean habitualmente, como mp3 o divx, que únicamente trabajan con señales digitales.. Desde un punto de vista "purista", la codificación y de-codificación, son etapas independientes de la conversión analógico-digital, pese a que en muchos sistemas los veas como una sola "cosa".

Pablo Ruiz (Pci) dijo...

Adicionalmente, y como veo que el tema te interesa, Khan.

Me sirvo referirte a uno de los codec (lease algoritmo de codificación/decodificación) empleado habitualmente en VoIP, el G.726.

La descripción del mismo puedes encontrarla en http://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-G.726-199012-I!!PDF-E&type=items..

Leyendo dicho documento puedes observar como se trata de un algoritmo para la codificación/de-codificación de una señal _digital_ (en particular una señal PCM) en una señal, igualmente _digital_ ADPCM.

Como puedes observar, G.726 es un tipo de codificación.. Y no interviene para nada la parte de conversión analogico-digital.. (La cual puede evidentemente, ser realizada antes o despues de aplicar G.726).

Saludos.

Khan dijo...

De Wikipedia:

"An endec (encoder/decoder) is a similar yet different concept mainly used for hardware. In the mid 20th century, a "codec" was hardware that coded analog signals into Pulse-code modulation (PCM) and decoded them back. Late in the century the name came to be applied to a class of software for converting among digital signal formats, and including compander functions."

y el enlace, por supuesto:

http://en.wikipedia.org/wiki/Codec

Feliz fin de semana!!!

vierito5 dijo...

Un artículo genial, felicidades.

Un apunte, cuando dice "reducción de hecho" supongo que se refiere a "echo", eco en español.

Pablo Ruiz (Pci) dijo...

Si, efectivamente me refería a "eco" en castellano, pero presumo en ingles y el correcto ortográfico hizo de las suyas.

Sea como fuere lo estaba leyendo ahora y me he dado cuenta de que esta mal.. donde dice "reducción de eco" debería ser "supresión o cancelación de eco".

;)

Anónimo dijo...

Lo esperaba desde que avisaste en Ozone!
Justo a tiempo para jjugar esta noche, THX!

Saludos!

Anonymous dijo...

Lo esperaba desde que avisaste en Ozone!
Justo a tiempo para jjugar esta noche, THX!

Saludos!