martes, 27 de enero de 2009

Jugando con fuego: rootkits

El blog del Maligno es una fuente inagotable de sabiduria y mala leche (pero con onda).
Hace unos días pasaba por ahi, y me topé con estas im-pre-sio-nantes conferencias de Mark Russinovich, que los amigos de M$ nos regalan a cambio de que instalemos su Silverlight.

Como ultimamente estoy pro M$ y estaba usando la beta del seven, no tuve ningun reparo moral en instalarlo y pasarme una hora y cuarto mirando la charla "Advanced Malware Cleaning", en la que Mark repasa los métodos de detección y remoción de malware, enfocandose principalmente en el uso de las herramientas de sysinternals, ProcessExplorer y Autoruns. A los que trabajen de ésto, les recomiendo verla. Es en inglés, pero les aseguro que mi nivel no es muy bueno, y Mark habla claro y lento, así que es difícil perderse algo. Como ayuda, les dejo un pdf con la presentación que Russinovich usaba de guia.

Lo que más me interesó de la charla fue la parte en la que habla acerca de los rootkits. Estos son programas diseñados para esconderse a si mismos, y esconder tambien otros programas que pueden ser maliciosos o no, de modo que sean indetectables para cualquier programa que intente verlos a traves de las llamadas al sistema (APIs). En resumen, una cagada para el técnico (lease yo), que puede pasarse horas mirando el ProcessExplorer, el Hijackthis, el Autoruns, el regedit o cualquier otro programa que no esté diseñado específicamente para verlos, sin sospechar que la máquina sigue infectada.

Pasada la introducción, pasamos a la diversión.

Me suscribí a www.rootkit.com, y dediqué un rato a "infectar" una máquina con pruebas de concepto, para ver cómo se ven.

Materiales:

Maquina (1)
PIII con winchiquito, usada desde la cuenta administrador (una bomba de tiempo). No es de lo más estable (se cuelga sin infectarla), pero es lo mejor que tengo para pruebas.

Rootkit (2)
HideToolz: herramienta que nos presenta una interfaz desde la que podemos ocultar procesos. No corre junto con Hacker Defender (cuelga la maquina), por lo que no lo incluyo en los análisis. para el que quiera probarlo, es bastante inocuo (igual no me hago responsable etc.)
HackerDefender: Más completo, nos permite ocultar procesos, claves del registro, archivos y más. Además puede setearse para iniciar un proceso oculto.

AntiRootkits (4)
RootkitRevealer (RKR): La herramienta de sysinternals es bastante buena detectando el problema pero no nos permite solucionarlo desde el programa. En la presentacion Mark usa un depurador en modo kernel (una herramienta que le permite "tocar" los parametros del kernel en vivo, en este caso softice) para sacar el rootkit . Véanlo. Es demasiado para mi.
Gmer: un limpiador mas amigable, con acceso a procesos ocultos (y la posibilidad de matarlos), servicios ( y cómo deshabilitarlos), vista del registro y claves ocultas e incluso archivos que no se ven en el explorador.
Rootkit Unhooker (RU): Un programita "Quick and dirty" que nos muestra facil y rápidamente si hay un bicho en nuestro sistema. También mata procesos e intenta borrar drivers y servicios malos.
System Virginity Verfier (SVV): uno de los juguetes de Joanna Rutkowska. Es una utilidad de linea de comandos que nos permite chequear rápidamente si el sistema está comprometido, e incluso tratar de repararlo. Y nada más. No nos dá mucha info, pero es muy util.

Y ahora a los bifes... Digo, a las capturas.

1) SVV nos dice que esta todo OK.


2) RU también


3) Corremos HackerDefender. Le decimos que se oculte, saque de nuestra vista todos los archivos y carpetas que lleven "hxdef*" y corra el bloc de notas pero "in the backround". Nos hace caso. Acá no hay captura: no hay nada que ver ahora!

4) SVV no está tan contento...

5) RU nos muestra el problema


6) GMER nos avisa ni bien entramos, y nos deja ver los procesos, servicios y archivos ocultos.

7) El escaneo completo del sistema, tanto con RKR como con GMER o RU, nos lleva a una bonita BSOD, asi que no hay cap.

8) Tratamos de limpiar. Gmer nos deja matar el proceso, con lo que recuperamos la vista de los archivos ocultos. También nos permite deshabilitar el servicio asociado. Con esto nuestro rootkit pasa a ser como cualquier otro virus, porque quedan a la vista los procesos, servicios, archivos y drivers que este se encargaba de ocultar. Borramos todo lo que parezca sospechoso (puede que haya que reiniciar para borrar los servicios malvados despues de deshabilitarlos).

9) Para terminar la limpieza, le pedimos ayuda a Joanna:


10) Reiniciamos y volvemos a chequear: Gmer muestra un par de entradas sospechosas (probablemente ya estuvieran ahi antes), pero ningun proceso oculto, ni driver o servicio fuera de lugar, y ninguna referencia a HackerDefender. RU no encuentra problemas, RKR no sé, porque el escaneo tarda mucho (si quieren una reseña profesional vayan a otro lado) y SVV vuelve al nivel 1 (good).

Y hasta acá llegamos con la prueba. Quien quiera repetirla y tenga algo para agregar, que no sea tímido. Para eso estamos.

FAQ

Q: Los reportes del final significan que el sistema quedó limpio?
A: No. Sólo quieren decir que está más limpio que antes. Lo fundamental de los rootkits es su habilidad para esconderse, y siempre se buscan nuevas técnicas para hacerlo. De todos modos, si uno no quiere volverse paranoico, un par de reportes limpios son buenas noticias. Y si no, siempre queda reinstalar.
Q: Por qué no hay capturas de la limpieza?
A: Porque el objetivo del post es mostrarles cómo se ven las infecciones de rootkits en general con las herramientas que probé. La limpieza es opcional (siempre queda reinstalar).
Q: Se te ocurre una pregunta mejor para terminar?
A: No. Chau.

domingo, 25 de enero de 2009

Grub4dos desde Dos, boot.ini y Vista/Seven Bootloader

Una de las obsesiones que tengo como técnico pasa por el tema de las herramientas. Los que sean asiduos del blog sabrán que soy fanático de las cosas que me simplifican el trabajo: si puedo bootear el hirens sin tener que llevar un cd encima, mejor. Si en el mismo pendrive puedo poner un par de distros de linux que me permitan testear el hardware, o acceder a inetrnet para buscar soluciones, mejor. Si puedo reparar una máquina a la que no le arranca el sistema operativo sin reinstalar, mucho mejor.

Por eso es que me interesan tanto los bootloaders: son meta-herramientas; aplicaciones que nos permiten iniciar otras, que son las que nos resuelven el problema. No hay nada más frustrante para el técnico que una máquina que no arranca.

Hace unos dias, cuando me compré la notebook, decidí hacerle caso al amigo Reirok, y me puse a aprender a usar Grub4Dos. Este es un proyecto derivado de Grub, con algunas funciones extra: En general, nos permite iniciar casi todo lo que arranque: puede "encadenarse" para correr dos (cargando io.sys), xp (cargando ntldr) o vista (cargando bootmgr), y por suspuesto puede emular diskettes desde una imágen, y cargar cualquier linux que se precie de tal. Consulten el wiki si quieren saber más (recomendado para frikis como yo).

Una ventaja importante que tiene este proyecto a mi modo de ver es que cuenta con muchas formas de iniciarlo. Reseño aquí las que usé hasta ahora:

Desde DOS

Esta es una buena forma de correr Grub desde un diskette de rescate o un pendrive que arranque, por ejemplo, el hirens. Basta con descomprimir el grub4dos en una carpeta (\grub , digamos), cortar el arranque con f5 y ejecutarlo desde la linea de comandos:

c:\grub\grub.exe


Desde el boot.ini de Xp

Esta opcion tuve que usarla en la notebook: instalé Windows Fundamentals, y el bootmanager se comió el inicio de DOS. Además tuve problemas para instalarlo en el MBR y en el disco con wingrub (creo que es porque hay una particion de diagnóstico que tiene su propio cargador), por lo que terminé agregándolo así: Copié grldr y menu.lst a la raiz del c: y edité el boot.ini agregando la linea

c:\grldr="Grub4dos"

Desde ahí, editando el menu.lst, pude probar todas las distros que listo en el post sobre la Notebook (menos slitaz, que se resistió y terminé grabando el cd), descomprimiendolas a distintas carpetas en C:. También tengo un par de diskettes de arranque con utilidades.

Desde El bootmanager de Vista/Seven

Hasta acá, además de mis impresiones, este post no agrega nada al wiki de grub4dos. Pero para este paso se me complicó un poco, por lo que quiero detallar el howto con los pasos extra que hicieron que funcione.

El bootmanager de Vista reemplaza el ya viejo boot.ini, sumando algo de complejidad al proceso de edición. Principalmente , el problema es que los archivos de configuracion no son de texto, sino binarios, y contienen código ejecutable; por lo que se necesita de una utilidad especial para editarlos: bcdedit

Explicito un poco los pasos a seguir para agregar grub:

1) Copiamos los archivos grldr, grldr.mbr y menu.lst a la raiz de alguno de los discos (preferentemente el de inicio)

2) Abrimos una consola en modo administrador (boton derecho sobre la entrada del menú). De otro modo el comando no tendrá acceso a los archivos que hay que modificar

3)Creamos una nueva entrada de tipo bootsector
bcdedit /create /d "GRUB4DOS" /application bootsector

el comando nos da una salida:
The entry {0eb98131-e9b4-11dd-85d4-d5d709602c29} was successfully created.

Entonces marcamos el {id} (boton derecho sobre la consola -> marcar. Al presionar enter la parte marcada se copia al portapapeles) y lo pegamos en el notepad. Lo necesitamos para seguir.

4) Ahora le indicamos al bootloader la particion desde la cual vamos a iniciar
bcdedit /set {0eb98131-e9b4-11dd-85d4-d5d709602c29} device partition=c:
The operation completed successfully.

Por supuesto, el {id} lo pegamos. Yo como soy perezoso escribo la linea en el notepad y la pego entera.

5) Y le indicamos el nombre del bootsector a cargar
bcdedit /set {0eb98131-e9b4-11dd-85d4-d5d709602c29} path \grldr.mbr
The operation completed successfully.

Al final, le decimos que queremos que la opcion quede al final de la lista:

bcdedit /displayorder {0eb98131-e9b4-11dd-85d4-d5d709602c29} /addlast
The operation completed successfully.

Así queda la entrada si la consultamos con bcdedit a secas
Real-mode Boot Sector
---------------------
identifier {0eb98131-e9b4-11dd-85d4-d5d709602c29}
device partition=C:
path \grldr.mbr
description prueba

C:\Windows\system32>


Al reiniciar, tendremos la nueva opcion para elegir, y si todo va bien, tendremos grub funcando.

En caso de error, puede que quieran borrar la entrada del menú recien creada. Para esto podemos pedir la lista con bcdedit, copiar el id de la entrada a borrar e ingresar:
bcdedit /delete {0eb98131-e9b4-11dd-85d4-d5d709602c29}

y listo.

El archivo menu.lst que viene por defecto es una buena muestra de lo que se puede hacer con este juguete. Por lo pronto, a mi me sirve para iniciar el mandriva que el boot del windows seven se cargó junto con el viejo grub.

Disfruten!

Actualizacion: Reirok se dio (bien) por aludido, y nos completa el wiki oficial con este otro, que es mas completo y hace de esta una guia completamente inútil. Gracias!

jueves, 22 de enero de 2009

Manías del técnico: el rescate.

Hace unos días mi amigo el Falcon me contaba de su nuevo juguete. Se había encontrado (tirado en la calle) un cpu, que resultó ser un 486DX2 con 16 Mb de ram y 2Gb de disco.
Me contó que lo estaba restaurando porque le parecía que era la máquina ideal para hacer programacion remota de centrales de alarma; que el modem ISA de 16 Kbps (no winmodem) que tenía era de una de las marcas soportadas por cierto tipo de centralitas, que el win95 arrancaba mucho más rápido que su XP (cierto) y que podía tener la máquina en su switch KVM lista ante cualquier cosa.

Aunque a decir verdad lo de la programación remota es un proyecto igualmente remoto, para el que Falcon ya reservó una notebook (celeron 400) que le dieron en parte de pago, y ese 486 este seguramente destinado a volver a las calles en unos meses.
Por supuesto, yo no le digo a mi amigo que su juguete es una piedra inútil. En parte porque es posible que, de puro cabeza dura, termine dándole algún uso real; y en parte porque yo también me veo en sus manías.

Ahora mismo tengo guardados un par de pentium, mothers de pentium2 y otras porquerías, que tuvieron como objetivo imaginario ser routers con algun disco de linux como el coyote, pero que fueron descartadas cuando la diferencia entre un switch y un router bajó de los 15 dólares.
Y claro que me gustaría ponerle a alguna de esas máquinas la plaquita ISA del scanner de mano Genius BYN, si pudiera encontrar una excusa para hacerlo. Y claro que estaría bárbaro restaurarlas y donarlas a alguna institución "que necesite una máquina para office y nada más", sólo para aprovechar que todavía funcionan.

Por supuesto, cualquiera que reciba una máquina de esas se daría la cara contra la dura realidad al querer conectarla a internet, poner un juego, abrir un documento reciente o cualquier otra cosa que supere su capacidad, comprobando que efectivamente el equipo es inusable para casi todo.

Entonces... ¿Por qué los seguimos guardando?

Creo que lo que sucede es que nosotros le dimos uso a esos equipos en su tiempo. Aprendimos a arreglarlos y mantenerlos, y los aprovechamos lo máximo que nos permitía el conocimiento que teníamos.
Sucede que cuando teníamos la commodore mirábamos con deseo las PC 286 (XT), y cuando tuvimos la 486 quisimos el celeron.
Sucede que en ocasiones gastamos nuestros ahorros para comprar eso que ahora es basura.
Sucede que alguien que pasó horas frente a un 486 jugando al Doom, haciendo ritmos con un tracker, probando programas o programando, no puede ver un equipo viejo como basura.

El pentium que tenía cuando tuve kiosco me dió horas de música, excel y rounds de Half Life en red con amigos. ¿Cómo lo voy a sacar a la calle?
Antes se lo doy al Falcon, que seguro le encuentra algún uso.

PD: Si alguien se atreve a recordarme que hace un mes compré una compaq armada 1500, y osa llamarla "piedra inútil", "vejestorio" o similar; le aviso que lo expulso del blog!

sábado, 3 de enero de 2009

Distro se busca II: El geek solo bien se lame

Hace unos días me regale mi flamante Netbook: una Compaq Armada 1500c. La mini notebook en cuestión es en realidad una notebook que carga diez años o más, un celeron 266, una pantalla de 12', 96Mb de ram y un disco de 4Gb. Tiene un solo puerto usb (atrás, como recuerda Guillermo), pero en cambio tiene diskettera, y puerto paralelo. Además me costó 250 pesos.



La idea es usarla como maquina para internet, y quizas instalar algun compilador pascal para los trabajos de la facultad. Y por supuesto, uno o varios linux para jugar.

También me compré (regalo de reyes, diría) un adaptador usb-wifi TP-LINK WN321G, y un hub usb de 4 puertos para poder conectar también el pendrive.

Después de jugar unos días, y viendo que no puedo componer una frase decente, les dejo un pequeño resumen de las distribuciones probadas:


Spectra (Maligno Dixit)


1) Le instalé Windows Fundamentals for Legacy Pc : La verdad es que me cayó bastante bien: Es un XP SP2 recortado al mínimo, como el Winchiquito pero oficial y en inglés. Lo instalé en una particion de 1Gb, y está ocupando algo mas de 700Mb de espacio. Funciona bien en internet, por supuesto que sin antivirus ni nada. Sólo el Opera@usb 9 ,el Winamp 2.8 y aplicaciones portatiles desde el pen.


Linux: estuve buscando una distro chica, con buen soporte en los foros, que me deje configurar la conexion wifi sin problemas y de ser posible el sonido (el chipset es un ES18xx, y el plug `n pray lo reconoce indefectiblemente mal). Creo que pedi demasiado. Acá las pruebas:


2) *** Small Linux - Not (DSL-N): Es rápido, y tiene un panel de control de lo mas completo. Nunca pude hacer funcionar el adaptador usb ni el sonido.Estoy bajando DSL4 para ver si va mejor.

3) Slitaz: Es una distro medianamente desconociida pero muy buena. Pesa unos 50Mb, y viene con escritorio LXDE, firefox y varias cosas más. Si hubiera funcionado el adaptador usb me hubiera quedado con esta. Una lástima.

4) Austrumi: otra joya en 50Mb. Un escritorio bonito, transparencias y otro dialogo de configuración wifi que no pude manejar.

5) Nimblex 2007: Kde llega a arrancar, pero no puede encontrar el adaptador de red. los otros escritorios andan mejor, pero no hay como llegar a las utilidades de configuración.

6) Mint, Elive 0.5 y 1.0, DreamLinux, Goblinx, Mandriva 2008, Geexbox: no llegan al escritorio. MDK minicd, MCN Live bootean pero el asistente de configuracion de red cuelga la máquina, Vector Linux Lite y Beatrix tampoco reconocen el adaptador.PCLOS mini no lo probe, pero no tengo muchas esperanzas puestas ahí.

7) Y por fin, Puppy 4.1.2 reconoce la interfaz y conecta sin pasar por la linea de comandos. Tengo una versión instalada en una particion de 300Mb (sin swap), trabajando con 22Mb libres de ram, y con algo de prueba y error mas esta guia conseguí hacer andar el sonido.

Puppy es una distribución MUY completa, y el asistente de configuración de red es de lo mejor que vi en linux. Además tiene soporte para unidades de red windows (samba), el navegador seamonkey (derivado del Mozilla original), gxine, abiword, gparted y muchas mas aplicaciones y wizards. Y los foros son excelentes. Una joya, como quien dice.

Ahora les toca trabajar a ustedes. Por si ya los mareé, repito las specs de la máquina:
  • Celeron 266,
  • 96Mb de ram,
  • 4Gb de disco (mas o menos 1.5 Gb disponibles dejando la particion fat y la ntfs),
  • adaptador usb wifi.

Si conocen alguna distro que no esté listada y les parezca adecuada, los espero en los comments.