lunes, 29 de julio de 2013

Windows: urlmon.dll no encontrado

Este finde he tenido mucho lío. Al menos, desde el viernes al medio día hasta el sábado por la tarde/noche. Mi recomendación, si es que has llegado aquí porque tienes este problema, es que te lo leas entero. Eso sí: después actúa bajo tu responsabilidad. Lo que me a mi me ha funcionado, podría ser nefasto para tí.

Os pongo en antecedentes. Me llamaron para solucionar un problema con un equipo headless, léase, sin monitor. Por lo que lo primero que quise hacer fue intentar acceder a él por red. Muy bien. Para resumir: toda una tarde/noche entera sólo para conseguir ese acceso. Que si el ping a veces funcionaba, otras veces no. Otras veces, el escritorio remoto se empezaba a cargar y después se caía... Vamos. Un desastre. Incluso tuve que hacer alguna llamada para ver si a alguien se le ocurría alguna cosa para poder solucionar ese problema. Es lo típico: te obcecas en una cosa, que al final, hace falta que otra persona te ayude a serenarte y ponerte orden. Una desesperación.

Muy bien. Ya teníamos acceso y, en esto, mientras que se está cargando esa pantalla remota, que nos sale el siguiente mensaje de error:

El programa no puede iniciarse porque falta urlmon.dll en el equipo.  Intente reinstalar el programa para corregir el problema
El programa no puede iniciarse porque falta urlmon.dll en el equipo.
 Intente reinstalar el programa para corregir el problema
Y esto se vuelve otro quebradero de cabeza. Además, compruebas que efectivamente, no se encuentra la librería en el disco. ¡Se ha perdido! Pero, como ya es muy, muy tarde, te vas y ya mañana será otro día. Aún así, ya en casita, ¿qué es lo primero que haces? Lo primero, es buscar el Google. La verdad, es que hay algo por ahí que te suena que podías utilizar, pero no te acuerdas muy bien de lo que era. Pero bueno. ¿Qué respuestas encuentras? Encuentras varias.

"Bájate la dll de este sitio, y después la pegas. Ya está".,  Otros, además de eso, te dicen: "una vez la tienes, tendrás que registrarla con regsvr32 urlmon.dll desde C:\Windows\System32\". Ya, al otro día, pruebas otras ideas menos peligrosas. Ejecutar desde el cmd:

sfc /scannow

Aunque te dice que ha encontrado cosas que ha tenido que reparar, y que hay algunas que no ha sido posible, haces caso omiso al los logs que te ofrece en C:\Windows\Logs\CBS\CBS.log. Más adelante explicaré algo al respecto.

También pruebas a hacer el 

chkdsk /r /f

que no resuelve nada. 

Y surgen varias ideas. A ver si hay algún parche que falte por poner que modifique esta dll por lo que se resolvería el problema a poner una nueva. Pero, surgió otro problema más:

Error windows update código: 8024000E
Error windows update código: 8024000E
Y te pones a buscar. Lo que encuentras es que te ofrecen una serie de fixit para solucionar ese problema. No voy a negar que ahora mismo no tengo acceso a dichos ficheros. Que, además, te permitían bajártelos para poderlos ejecutar desde otro ordenador (que ese era mi caso). Otras soluciones que daban era instalar un programa (que me bajé, pero no utilicé) también de Microsoft, que se llama algo así como Windows Update Readiness Tool. Según la explicación de Microsoft, esta herramienta resuelve los posibles problemas que produzcan que una actualización no se instale. Pues bueno: El fixit que cogí, se quedó parado a mitad sin reaccionar, por lo que opté por matarlo. Además, ya éramos dos los que estábamos al lío: yo presencial, y el otro amigo por teléfono. La siguiente idea: Poner un punto de restauración anterior. Por no tentar a la suerte: de hace dos días para atrás. La verdad: tardó muy poco, apenas 5 o 10 minutos (¡ojo! que si lo intentas, a tí te podría tardar mucho más). Pero, sin resultado.

Tras un buen descanso y viendo que esto no tiraba, decidí mirar el log CBS.log que he comentado unos párrafos más arriba. Me dio por buscar el fichero urlmon.dll y me encontré con la sorpresa de que, en efecto, se había detectado que faltaba y que no era capaz de restaurarlo:

Cannot repair member file [...] urlmon.dll
Cannot repair member file [...] urlmon.dll
Además, se puede ver que pone un texto que llama mucho la atención:

This component was referenced by [...] "Package_2_for_KB2846071" 

(se me cortó el knowledge base en la foto. No hace falta decir que le subrayado son los valores importantes que no aparecen. Por lo tanto, dices: ¿Y si busco esta actualización, me la bajo, la ejecuto, y así se pone ese fichero? Una vez más, te encuentras que con que el ejecutarla no surte el efecto deseado. Aún así, te das cuenta que esa actualización es muy, muy reciente. Aunque no era esta la página donde vi la fecha, en la que acabo de referenciar se puede ver que su fecha de publicación es el 10 de julio de 2013. Por lo tanto, si tenemos esta actualización instalada, y, dado que cada vez que se hace un update del sistema se crea un punto nuevo, podremos hacer un downgrade / rollback / ir a un punto anterior y probar suerte. Ya no hay nada que perder. 

Por lo tanto, desde Inicio, podremos buscar Restaurar sistema, lanzarlo con privilegios de administrador, y seguir las instrucciones, teniendo en cuenta que tendremos que seleccionar el checkbox para que nos muestre el resto de puntos creados:

Restaurar sistema
Restaurar sistema
Por favor, ten en cuenta que esta pantalla no es la que tenía en su momento. Además, tendrás muy mala suerte si resulta que no se han creado más puntos o éstos se han ido eliminando. 

Una vez ya tienes la fecha correcta, que tiene que ser anterior al día que se actualizó (por no poner esa fecha misma, aunque no debería de haber ningún problema), podrás comprobar que ya no se queja y que todo vuelve a funcionar. 

Así es cómo pude arreglarlo. Hay algún paso que a lo mejor lo hice antes y otro después: Se que entre la primera  vez que hice la restauración y la última hice los intentos de los fixits, vi que el internet explorer no se abría, encontré que alguna librería más que me decían que tenía que registrar para hacer la solución "a mano" no la encontraba... Pero bueno. Más o menos estas son las cosas con las que me fui pegando para arreglar esto. 

Ahora que todo vuelve a funcionar, ¿Qué te queda? ¿No tienes el sistema desactualizado? Claro que sí: Has puesto un punto anterior, por lo que tendrás que ir a al windows update, y reinstalar las actualizaciones.

Por desgracia, si esto no hubiera sido posible arreglarlo así, la siguiente opción hubiera sido la última: reinstalar. Bueno. A lo mejor hubiera sonado la flauta si se hubiera cogido la librería de una instalación del mismo tipo de Windows (del pro al pro,  de personal al personal...), arquitectura: (x86, x64), incluso, si apuramos, compilación. Teniendo la suerte de tener otro equipo tuyo con las mismas características, podría (y digo podría), funcionar. Pero, los visos de que eso suceda...

miércoles, 24 de julio de 2013

Roomba!! A mapear!

Recientemente me he comprado una Roomba. Ya que me acabo de independizar (más o menos: ¿se considera independizarse estar en la otra punta de la ciudad donde están los padres?) y para hacerla más sencilla, pues un aspirador automático no viene mal. Después de comprarla por eBay y esperar impacientemente una semana, me llegó. ¿Qué es eso de que no llegue el trasto a la media hora de haberlo comprado??

El modelo que me he comprado a sido el 770. Para resumir un poco las características: anda sólo (¿si no, qué gracia tiene?), permite definirle distintos horarios, un mando a distancia con 3 o 4 botones: adelante, izquierda, derecha, clean (es el que se usa para despertarla, para configurar opciones…). Un complemento que tiene es el que llaman virtual wall. Es un aparatito que va aparte que colocándolo correctamente y con las pilas lo suficientemente cargadas simula una pared. De tal forma que cuando la aspiradora detecte la señal, lo tome como si fuese una pared.

Una cosa curiosa es que trae un conector mini-din. Es un conector serie. Con el hardware y software adecuado, la podrías controlar con un ordenador, o, si vamos más allá, con un móvil. ¿Un móvil? Si. Si se le pone el adaptador bluetooth adecuado, podrías hacer bastante cosas muy curiosas.

Ahora, vamos a la historia que quería contar. Aquí empiezo a divagar. Se sabe que conectándose con bluetooth, además de poder manipular el cacharro, puedes hacer tests de cada uno de sus sensores. En realidad, esta marca en concreto, al menos hasta donde yo sé, no guardan un mapa del lugar por donde están pasando. Pero: ¿Qué impide eso que alguien se conecte y la manipule para hacer un mapeo del lugar? ¿No sería tan sencillo como forzar a que se desplace por el lugar en línea recta e ir marcando los obstáculos que va encontrando? ¿Y si fuéramos más allá? Pongamos que sí que guarda el mapeo del lugar: ¿Qué impediría localizar la zona donde está almacenando esos datos y que el formato sea fácilmente legible? Ya tendríamos el camino abierto “sin sorpresas”. Eso sí, el virutal wall nos puede jugar una mala pasada.

Me diréis: Pero: ¿esos cacharros no llevan contraseña? En realidad sí. Según he podido leer default o 1234. Son unas contraseñas muy, muy difíciles.

Pero. Como he dicho, son una serie de divagaciones que se me han ocurrido mientras que buscaba cosas para enchufarle la maquinita. Me gustaría que me diérais vuestra opinión.

lunes, 22 de julio de 2013

Ingeniería social en coderanch

A veces, cuando estás codificando algún programa, te encuentras con que tienes problemas en cómo puedes hacer alguna de las tareas necesarias. Por lo tanto, no queda otra opción que hacer una búsqueda y ver si alguien ha tenido la feliz idea y lo ha explicado o si ha tenido que ir en busca de la respuesta y la tenemos en algún foro.

En estas me encontré hace poco. Por lo que me dispuse a buscar la respuesta y en un foro bastante conocido (o, al menos, que me he encontrado muchas veces), me encontré con algo parecido a esto:

Foro en coderanch
Foro en coderanch
Si resulta que las respuestas que dan no son válidas para lo que necesitas y además te encuentras un "mensaje" que dice que "está de acuerdo, pero que tiene un enlace que le ha ahorrado mucho tiempo", ¿qué haces? Vas y lo visitas. Y, para colmo de los colmos, te encuentras con que no es lo que buscabas. Te acuerdas de la familia del que lo ha puesto hasta que lo miras fijamente y descubres que no es un mensaje. Es un $*#!= anuncio que te lo han colado. 

La verdad, es algo que tendría que haberme dado cuenta. Pero  bueno. Al menos se quedó en eso. No fuera a ser que me hubieran colado algo más. 

viernes, 19 de julio de 2013

Instalando sistemas operativos sin CD o DVD

Hace poco un amigo me dijo que iba a vender su portátil. Realmente un notebook. Un equipo sin unidad óptica. Vamos. Que no tiene ni CD, ni DVD ni...

Por supuesto, su idea era "formatearlo" con el famoso sistema del recovery que suelen traer todos los equipos hoy en día. A lo que yo le advertí de que tuviera cuidado. Eso no implica que no se puedan recuperar los datos que hubiera en el disco. Al menos, hasta donde puedo afirmar, eso es así.

Mi propuesta, un tanto descabellada para lo que necesitaba, era más o menos lo que sigue.

Primero, realizar una imagen de la partición que tiene el sistema operativo. No vaya a ser que la caguemos.

Después, arrancar el ordenador con una distribución Linux y aplicar algún tipo de borrado seguro. Por poner un ejemplo: hacer 3 pasadas con el dd de todo 0s, todo 1s, eleatorio... Pero mínimo, tres pasadas. Evidentemente no se lo expliqué así. Pero, claro. Sin tener unidad óptica... complicado. Y, para complicado, yo. Sería un wipe en toda regla.

Tercero: montar un ordenador un servidor pe para que el portátil pudiera arrancar el sistema a través de la red. Así, se podría hacer la tarea descrita.

¿Hay otra forma más sencilla? Sí. La hay. Y no se me ocurrió hasta unas horas (o días) después: Un usb con la imagen. Seguro que es algo mucho más sencillo que no montar otro ordenador, mirar cómo se configura para que haga de servidor...

Todo esto me hizo recordar que hace casi una década, cuando empecé en todo esto de la informática, había otro problema: no todas las BIOS tenían la posibilidad de arrancar las unidades de CD. Por eso, algunos discos traían una herramienta para que cargase en un diskette el programa que, una vez éste era leído al iniciar el sistema, lanzase el CD. Uno de los que vimos era el que traía SCO: la compatibilidad con el torito.

Voy a dejar caer una pregunta más: ¿qué otros métodos utilizaríais para llevar a cabo esta tarea? Además de desmontar el disco y meterlo en otro sistema. Esa tampoco me vale, ¿eh?

miércoles, 17 de julio de 2013

Utilizando gran lista de passwords

Cuando hace unos días os conté que me descargué el gran listado de contraseñas que reseñó Hackplayers, os decía que me el hecho de ejecutar

type nombreFixh.lst


dejaba terminaba a los pocos segundos de haberlo ejecutado, a pesar de tener casi 15GB de datos en texto puro... me estaba imaginando que podría ser algún tema relacionado con el sistema. Y, en efecto, ha sido ponerme a hacer un

cat nombreFixh.lst

y después no se cuantos mínutos, esto sigue tirando.

Además, si desde Windows quiero utilizar este listado con john the ripper,  éste no me deja. Pero, si lanzo desde backtrack

john --format=raw-md5 --wordlist=/rutaDeMiListado/nombreFich.txt /rutaDeHashes/hashes.ext

va como un tiro. Verás los resultados moverse a bastante velocidad. Eso sí, tardará un rato.

Es más. Si quiero, puedo intentar hacer lo siguiente. Que ya de paso, se me ha ocurrido: buscar alguna de mis contraseñas. ¿Cómo se puede hacer? Para el que ya lo sepa no será ningún misterio, para el que no lo sepa:

fgrep tuContraseña nombreFich.lst

donde tuContraseña será tu contraseña entera o, puede ser un trozo de la misma. Después, te podrás llevar una sopresa, buena o mala, según el resultado obtenido y el esperado. Eso sí, tardará bastante.

De todas formas, está siendo un poco decepcionante. Resulta no se han encontrado todas las contraseñas que se debían de haber encontrado y, al pasar algunas opciones distintas, muy, muy básicas, está encontrando bastantes más.

john --format=raw-md5 --single /rutaDeHashes/hashes.ext

 ó

john --format=raw-md5 --incremental=Alnum /rutaDeHashes/hashes.ext

La verdad, me ha decepcionado. Aún así, perece ser que hay otro fichero de estos, que cada x tiempo están actualizando, que también tiene este tipo de información. Se llama uniqpass. Aunque cueste 12€, posiblemente sí que merezca la pena pagarlos. Habría que pensarlo. Además, el pagar implica que tienes derecho a que te envíen un nuevo enlace de descarga por cada nueva actualización.

Yo, por mi parte, además de pensarme lo de invertir (¿o regalar?) esos 12€, me he quedado un poco chof con los resultados que he obtenido. Bueno. ¿Qué le vamos a hacer?

lunes, 15 de julio de 2013

Mis accesos directos, .lnk, no funcionan

Recientemente me han pasado un portátil para que lo revisase. Vamos, lo típico:
  • Mirar virus
  • Mirar toda la porquería instalada y quitar la máxima posible.
  • Ver si hay algún proceso sospechoso con el process explorer, de sysinternals.
Lo primero de todo, me encontré con que el monitor no funcionaba. Esa fue mi primera sorpresa. La pantalla en verde. Al menos, durante un buen rato. Después, se veía algo mejor que con el plus codificado ¿os acordáis cómo era eso? En este caso, algo se podía hacer. Aún así, decidí utilizar la mayoría del tiempo un monitor VGA.

 Después de esa desagradable sorpresa, empecé a mirar qué  podía hacer. Y, la verdad,no tenía ni idea de por dónde empezar.

Mi primera visión es que  habían instalado un montón de programas, algunos de esos para acelerar el funcionamiento del sistema. Otros, como algún antivirus nuevo, a punto de caducar. Y, aún así, sin saber por dónde tirar.

Una de las cosas que hice fue coger un DVD con cuatro herramientas, y lancé el process explorer. En ese momento, ves que hay un montón de cosas instaladas. Gestores de descargas del torrent, algunos programas que, aún habiéndose instalado de forma consciente te llevas las manos a la cabeza.

Además, ves que los accesos directos tienen todos la misma imágen. Y, para colmo de los colmos, se abre una cosa que parece que se llamaba... ¿power viewer? No se. Un nombre muy similar.

Por lo tanto, después de dar muchas vueltas a ver por dónde pillarlo, mi decisión fue la siguiente.

Primero: poner los programas que yo conocía para hacer limpieza del registro, antivirus nuevo, etc. Por supuesto, para instalar el antivirus, desinstalar el anterior, a punto de caducar. Para hacer la limpieza: CCleaner.

Segundo: hacer desinstalaciones varias. Como me permitieron quitar lo que estimase oportuno, fue desinstalando los otros programas que ya puesieron para hacer las tareas del ccleaner, pero que después del análisis pedían pasar por caja. Las desinstalaciones las fue alternando como pude desde varios sitios:
  1. El propio panel de control de Windows
  2. El ccleaner también tenía alguna herramienta para, o, al menos, para inhabilitar complementos de los navegadores.
  3. Una herramienta para desinstalación "en profundidad" (quita más porquería residual después de la desinslación) que se llama IOBitUninstaller.

Tercero: Buscar una solución para los accesos directos. Que todos los accesos directos apuntasen a una herramienta que parecía de imágenes, con Apple de por medio... Muy raro. Pero también si no se tiene cuidado con una instalación, y en un momento determinado se seleccionan todos los checks que te ofrecen, pueden pasar cosas como estas. Mi búsqueda en Google me dio dos resultados bastantes útiles:
  1. El primero, uno directo de Microsoft. Que no acababa de convencerme del todo. Tenía un noseque que no acababa de cuadrar con los datos que tenía en otro equipo de referencia.
  2. El segundo, fue el que hizo que todo funcionase de nuevo. Yo voy a contar más o menos lo que he hecho siguiendo estas instrucciones. Pero, como todo disclaimer se precie, mucho ojo que puedes quedarte sin sistema si lo haces mal. Yo no me responsabilizo de lo que pueda pasar.
 Lo primero de todo: buscar regedit, y lanzarlo con permisos de administrador.

Después, tienes que ir a la rama:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.lnk

ó

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.exe

Si bien yo no toqué la rama .exe.

Debajo de  .lnk, tiene que haber otras dos subclaves (o ramas) más:
  • OpenWithList
  • OpenWithProdigs 
Si hubiese algo más, tendrás que eliminarlo.

Eso no es todo: En cada una de ellas tendrá que haber, o no, unas claves. Por ejemplo, tanto en .lnk como en OpenWithList sólo deberá de haber una clave de tipo REG_RS, con valor no establecido y nombre predeterminado. Además de tener esta misma clave, OpenWithProdigs, tendrá otra más con nombre lnkfile, tipo de registro REG_NONE, y la columna dato con valor binario de longitud cero. La siguiente captura debería de ayudar bastante a entender a qué me refiero:

Regedit para los accesos directos / .lnk
Regedit para los accesos directos / .lnk
Cuando reinicies, tendrás todos los accesos directos funcionando otra vez. Sólo queda hacer una limpieza básica de todos los bichos que encuentre el nuevo antivirus y... Poco más se podrá hacer. Se ha dejado el sistema lo mejor posible. Si hubiese tenido forma de iniciar el equipo con un CD, algo muy complicado con la pantalla en ese estado, hubiese lanzado un antivirus desde el liveCD. Por supuesto, siempre se es consciente de que cuando dice "no he encontrado nada" no significa que no esté ahí.

Esto es un resumen de lo que fui haciendo. En algunos casos, yendo de un sitio a otro. De todas formas, me gustaría saber qué habríais hecho si os hubieseis encontrado en esta situación de que la pantalla no permitía hacer el trabajo lo mejor posible.

miércoles, 10 de julio de 2013

Contraseñas en tus aplicaciones web

Recientemente en Hackplayers publicaron un post en el que nos mostraban cómo un grupo llamado Crackstation había recopilado una lista de casi, casi 15GB y medio de contraseñas distitnas que se han ido filtrando a lo largo del tiempo. Ese fichero, que se puede descargar en un .zip de poco más de 4GB, está a disposición del público que lo desee en algún enlace a un .torrent, que se podrá encontrar en su página.

Yo, mi parte, me lo descargué, (ya contaré cómo, aunque no haya mucho secreto en ello), y, por desgracia, el ejecutar

type nombreFixh.lst

desde una consola cmd no acaba de dar buenos resultados. Como he dicho, ahí hay otra historia.

Ahora. Si se hace una pequeña navegación por el sitio, encontramos cosas bastantes curiosas. Entre otras, además de un listado de sitios que se sabe que guardan las contraseñas en texto claro. Mucho, mucho miedo tiene que dar ponerlas ahí. Otro listado, de los que sospecha que no es que pongan mucho esfuerzo en cómo guardan las contraseñas. Es un pequeño hall of shame.

Pero, eso no es todo. También da consejos sobre cómo almacenar contraseñas (y su aliño o salt) de una manera segura. He de decir que algunas las sabía, otras más o menos me sonaban y otras, no tenía ni idea.

Para recordar un poco qué es eso de saltear (aliñar) una contraseña se trata de pasarle un parámetro que permite que el hash utilizado devuelva un resultado distinto para la misma palabra utilizada de contraseña, dependiendo de ese aliño.

Ahora bien. Cuando se tratan de servicios en los que tenemos que guardar la contraseña, hay que tener mucho cuidado de cómo se hace. Si no se hace bien, tal y como sucedió con LinkedIn, la cosa se puede poner muy fea. Eso sí, mejor como estaban que no que las hubieran guardado en claro.

¿Y cómo guardamos o tratamos las contraseñas? Muy bien. Lo primero de todo, utilizar una función hash que sepamos que en ese instante no es vulnerable. Por ejemplo, se sabe que MD5 ya no es de fiar. Por lo que habría que descartarlo. Y, si no me acuerdo mal, SHA1 también tiene algo por ahí... Por supuesto, no crear un algoritmo propio.

Después, pensar en aplicar alguna forma de salteo.

Lo primero de todo: No reutilizar el aliño. Ya sea hardcodeado, o uno obtenido aleatoriamente (por ejemplo, en utilizando un rango determinado). Si dos usuarios ponen la misma contraseña, y el salt es el mismo, tendrán el mismo hash de contraseña. Un ataque a dicho listado, una vez obtenido, devolvería la misma contraseña. Tampoco serviría aplicar uno corto. Lo mejor: que el salt tenga la misma longitud que el hash.

Otro ejemplo que ponen como erroneo. En este caso... Yo hubiera dudado qué decir, la verdad. Incluso ellos reconocen que hay cierta controversia. Se trata del hasheo múltiple. Es decir, hashear el resultado de un hash. Por una parte, afirman que se tiende a pensar que complica un poco el crackeo de las contraseñas en lo que tiempo de cómputo se refiere. Y eso es algo que yo hubiera afirmado.  Sobretodo hacen incapie en que el factor diferenciador en lo que a tiempo se refiere es ínfimo. Además, y ahí está el tema que yo también me temía (y por lo que en ciertas situaciones no me hubiera gustado hacer ciertas cosas), es que si alguien ha conseguido acceso a la base de datos (o donde quiera que se encuentren las contraseñas almacenadas), es altamente probable que tenga acceso al código fuente que trata esas contraseñas. Sólo es cuestión de prepararse un script que las calcule utilizando el algoritmo necesario. Todo independientemente de que se tenga

md5(md5(pass)+md5(salt))

ó

md5(md5(md5(sha1(pass))+md5(salt1)))

Y no digamos si ya se tira de GPU.

La idea para crear un buen salteado es utilizar funciones Cryptographically Secure Pseudo-Random Number Generator (CSPRNG). Estas funciones, que dependerán del lenguaje de programación utilizado, creará una secuencia aleatoria que no será (en teoría) predecible. Después, sólo es cuestión de almacenar el hash y el salt en la base de datos para después, poder validar la posible contraseña introducida.

¿Qué más se puede hacer? Por lo que he entendido, se puede utilizar una técnica llamada key stretching. De lo que se trata es que la función realice los cálculos de una forma lenta. Al menos, es lo que he entendido: Lo suficientemente lenta para que un ataque de cracking sea inviable, pero lo suficientemente rápida como para que la validación sí que funcione.