viernes, 7 de mayo de 2010

Error al desinstalar el dispositivo. Puede que sea necesario para iniciar el equipo

A cuantos les paso que quieren desinstalar un dispositivo y les manda ese mensaje casi sin sentido.
Para los ansiosos, antes de que me odien mientras leen mi relato, abajo, en color rojo esta la solucion, je!
Claro, el dispositivo esta en conflicto, no funciona, no sirve, incluso se puede deshabilitar, pero windows no deja desinstalarlo.
El problema es que ese dispositivo en conflicto hace que algo no este funcionando.
Lo mas desconcertante es que uno navega y navega por la red sin obtener una sola respuesta certera. Es comun leer en los foros la palabra resuelto o solved. Ja! y como lo resuelven? formating...andaaaaaaaaaaaaaa!!!!!

Voy a contar como lo resolvi yo en el caso particualar de varios dispositivos de red virtuales imposibles de quitar.
Eso provocaba el siguiente comportamiento:
Si la configuracion de la red estaba en automatico, todo funcionaba bien, pero si le asignaba una direccion ip manualmente, dejaba de funcionar luego de reiniciar.
Habia que ejecutar
netsh int ip reset resetlog.txt
y luego reinciar. Ahi tomaba una ip del DHCP y funcionaba bien. Si en ese momento le asignaba una ip, seguia funcionando bien, pero luego de reiniciar, la red estaba dañada. Al ejecutar, por ejemplo:
ipconfig
no mostraba nada.

LA SOLUCION
(para el caso de un dispositivo de red)
En la configuracion de la red bastó quitar el servicio "programador de paquetes QOS" para que se resolviera todo. No solamente se reparo la red, sino que desaparecieron los dispositivos zombies.
Quitar ese servicio resolvio mi problema. En otros casos habra que quitar otro servicio o protocolo. El unico que sí debe quedar siempre es tcp/ip, el cual puede repararse con el comando netsh indicado mas arriba.
Si es necesario quitar el servicio "Compartir archivos e impresoras" o "Clientes para redes", pero es necesario para el funcionamiento del equipo, no dudo que una vez resuelto el problema, al volver a instalarlo, todo quedara bien.

Si estas leyendo esto y tu problema no es la placa de red, no desesperes. Lo que yo haria, tratandose del sonido, es entrar al panel de control, Dispositivos de sonido, y comenzaria a intentar quitar configuraciones extra. Cosas como "usar solo dispositivos predeterminados", etc.

viernes, 6 de noviembre de 2009

Compartir recursos sin contraseña en Windows Vista o Seven

No vi en la red nada que me convenciera para resolver el tema de compartir recursos en Windows Vista o Seven sin que este requiera contraseña.
Lo interesante es que la gente de ms facilitó bastante esta tarea para usuarios hogareños. En versiones como XP ó 2K, lo correcto es editar la politicas (gpedit.msc), pero es muy cierto que navegar por esa maraña intrincada de configuraciones se hace pesado hasta para un tecnico.
Obviamente en vista o seven tambien es valido el uso de gpedit.msc pero aqui voy a exponer la forma facil que presenta MS:

Paso 1: Configurar las politicas

Eso se hace en Panel de control, Redes e internet, Centro de redes y recursos compartidos, Cambiar configuracion de uso compartido avanzado.
Hago notar que hay que hacer clic en el titulo del menu y no en los subtitulos, aunque seguramente por algun subtitulo lleguemos al mismo lugar y tambien se llega hasta aqui de diferentes maneras, como, por ejemplo, con un clic con el boton derecho del mouse sobre el icono de red en la barra de tareas.
Una vez ahi, desplegar el perfil actual para activar los siguientes items:
1 Activar el uso compartido de archivos e impresoras
2 Desactivar el uso compartido con proteccion con contraseña

Obviamente, al finalizar, hacer clic en "Guardar cambios"

Paso 2: Configurar un recurso compartido (en este caso una carpeta)

Para eso creamos una carpeta, digamos que c:\Publico y luego clic derecho sobre la carpeta, propiedades, compartir, nuevamente clic en compartir.
Ahi agregamos el usuario "todos" simplemente escribiendo en el cuadro de texto, clic en agregar y luego solo falta modificar el nivel de permiso para "todos", yo puse "Lectura y escritura"

Listo, eso deja la carpeta "Publico" a merced de cualquier usuario de la red, incluso de un intruso, asi que a tener cuidado al implementar esta configuracion tan util como peligrosa.

miércoles, 7 de octubre de 2009

Ejemplo de diagnostico de una red

Encontrarse con una red compleja puede dejarlo a uno sin saber por donde empezar.
Este es un ejemplo real:
La red esta compuesta por:
1) Tres switches en cascada Nortel Baystack 450 con un total de 72 puertos ethernet todos ocupados
2) El tercer switch esta en cascada mediante conexion por fibra optica
3) En la red hay innumerables switches parasitos conectados por terceros en su afan de hacer funcionar camaras ip, puntos de acceso (wifi), otras pc sin acceso a puestos de red "reales"
4) Enlaces wifi de gran alcance para interconectar dos sucursales, lo que aumenta notablemente el numero de terminales y en consecuencia nodos generadores de errores.
5) La cantidad de pc, casi todas con windows xp, es tal, que la presencia de un solo virus podria provocar fallos inesperados o inexplicables.

Se presento el siguiente problema:
Luego de la instalacion de un software de gestion que utiliza conexion odbc con servidor sql, ocurrio que la operacion que en algunos terminales tardaba uno o dos segundos, en otros tardaba 20 segundos.

La primer sospecha es el rendimiento del terminal, con factores como procesador, memoria, malware, etc. Pero se determino que no era ese el problema, incluso algunas pc en las que el sistema funcionaba lento, contaban con procesadores mas potentes y mayor cantidad de memoria que aquellos en los que el sistema funcionaba bien.
Por otro lado, en cualquiera de los terminales, tanto los "buenos" como los "malos", cualquier otro sofware, sea local o de red, funcionaba bien.

El siguiente en la lista de sospechosos es el propio software que, en definitiva, es el que comenzó con los problemas. Asi que se invita a los programadores a tratar de encontrar la causa.
Mi sospecha era que en aquellas pc malas, una version erronea de mdac, o la falta de algun parche podria se el causante.
Luego de varias pruebas en las que se utilizaron herramientas de sql server para hacer consultas sql remotas se llegó a la conclusion de que el problema esta centrado en la red.

Un experimento importante para descartar un mal funcionamiento del puerto del switch, incluso del cableado, fue probar que una pc mala seguia siendo mala aun cuando se la conectaba a la red utilizando el puesto en el que funcionaba una pc buena. (eso fue facil, simplemente el patchcord de una pc cercana era sufifientemente largo como para pedirlo prestado por un par de minutos)

Aislar la red

Se conectaron en red mediante un switch generico unicamente tres pc, el servidor sql, una pc "buena" y una pc "mala".
El resultado fue que todo funcionaba perfecto, la pc buena seguia funcionando igual y la pc mala mejoró tanto que incluso funcionaba mas rapido que la "buena".

El paso anterior ayudo a aislar el problema, ya se sabia que no estaba centrado en el software de gestion, si no en la red.

En este punto fui abandonado a mi suerte, los programadores dijeron: cambia el swich y problema resuelto.
Pero hacer una inversion de unos U$S 7000.00 requiere de cierto estudio.
Pensé: si al aislar de ese modo la red las cosas funcionan bien, podria ser que las pc malas tengan una vulnerabilidad afectada por otras pc de la red infectadas con algun virus.

¿Cómo resolver ese problema, o al menos como sacarme esa duda sin morir enredado en una maraña de cables utp?
Facil: instalé Wireshark en una pc mala y comencé a analizar el trafico que le llegaba. Simplemente se desactivan todos los programas que utilizan la red, como antivirus, actualizaciones automaticas, se detiene todo programa que utilice la red.
Luego se inicia wireshark y se espera a que "piquen" los primeros paquetes tcp.
En este caso, el flujo de informacion fue tal (y no era broadcast) que de inmediato tuve un diagnostico:
La pc tiene alguna vulnerabilidad que esta intentando ser atacada por algunas pc (infectadas) de la red las cuales pude identificar.
A veces una pc no infectada no esta libre de ser afectada por los virus. El virus confiker es un ejemplo claro ya que, anque no infecte, al intentar infectar, al bombardear constantemente a una pc vulnerable, la deja "tonta".

Una herramienta para detectar vulnerabilidades de este tipo (Gracias José Perez, socio!!)
es nmap. Este programa, en la version 5.0 tiene parametros para analizar si una pc esta comprometida al ataque de confiker o un clon.
Nmap es una herramienta de escaneo de redes para linux pero tambien puede ser instalada en windows.
El comando para analizar esa vulnerabilidad y otras es:

nmap -p445 --script=smb-check-vulns --script-args=unsafe=1 192.168.1.2

En donde 192.168.1.2 es un ejemplo de la direcion ip de una pc a analizar.

Todo muy bonito, pero el comando en cuestion me informaba que en la pc mala todo estaba bien.
Asi que opté por instalar todo cuanto pudiera en lo referente a actualizaciones de seguridad de windows xp. Despues de las actualizaciones, wireshark dejo de mostrar el enorme trafico. Todo estaba calmo.

Solo restaba probar el programa, que para mi sorpresa seguia igual de lento!!.

Siempre con el experimento de aislar la red en mente, y ahora ya mirando de reojo al switch, probé de cambiar la placa de red en la pc mala. El resultado fue que eso resolvio el problema!
Entre el switch y la placa de red hay algo que ralentiza las comunicaciones y en especial se ve afectada la comunicacion con el servidor sql.

Alentado por el buen resultado, se me ocurrio otro experimento: conecté una pc "mala" a un switch generico y este a su vez al Nortel. Eso tambien resolvio el problema. En palabras simples, el switch generico hace de interprete para que el nortel entienda a algunas placas de red.

Hizo falta un experimento mas para darme cuenta del verdadero problema, fue obvio cuando lo descubri y pensé: ¿Como no se me habia ocurrido esto antes???
Otra pc de la red presentaba el mismo problema por lo que me dedique a cambiarle la placa de red y mi segunda sorpresa en esta travesia fue que no logré mejoria al cambiar la placa.
Ahi el problema salto al instante: la placa no negocia bien el tipo de conexion.
Muchos de los que leyeron hasta aqui ya lo habran pensado ni bien inicie el relato y sí, esta bien, tienen razon. Me hubiese ahorrado mucho trabajo si hubiese forzado full duplex a maxima velocidad en la placa de red.

sábado, 15 de agosto de 2009

Reparar el registro de windows luego del ataque de un virus

Luego del ataque de un virus suele ocurrir que este modifica el registro de modo tal que no es posible realizar tareas administrativas.
A continuacion copio el contenido de los archivos reg que deben importarse al registro de windows para corregir esos problemas.
Simplemente se debe copiar el contenido situado entre los asteriscos (sin incluirlos) y pegarlo en un archivo, el cual debe llevar la extension reg.
Luego, para importarlo es tan simple como hacerle doble clic y aceptar.
Si el doble clic no sirve, tal vez sirva ejecutar regedit y luego importar las claves indicando el archivo reg en cuestion, desde Archivo, Importar.
Sobre este ultimo metodo, podria ocurrir, y es lo mas probable, que al intentar ejecutar regedit.exe, este no se ejecute debido a que no funcionan los archivos ejecutables. En ese caso sirve hacer una copia:
copy regedit.exe regedit.com
Luego hay que ejecutar regedit.com en lugar de regedit.exe
Todo lo que no pueda hacerse en modo normal debe intentarse en modo seguro. Tambien, a veces, sirve cambiar de usuario para intentar hacer cosas que desde el usuario infectado no puede hacerse.

Restaurar politicas 1:
*********************************************************************************************************

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoActiveDesktopChanges"=hex:00,00,00,00
"NoActiveDesktop"=dword:00000000
"NoSaveSettings"=dword:00000000
"ClassicShell"=dword:00000000
"NoThemesTab"=dword:00000000

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"NoDispAppearancePage"=dword:00000000
"NoColorChoice"=dword:00000000
"NoSizeChoice"=dword:00000000
"NoDispBackgroundPage"=dword:00000000
"NoDispScrSavPage"=dword:00000000
"NoDispCPL"=dword:00000000
"NoVisualStyleChoice"=dword:00000000
"NoDispSettingsPage"=dword:00000000
"NoDispScrSavPage"=dword:00000000
"NoVisualStyleChoice"=dword:00000000
"NoSizeChoice"=dword:00000000
"SetVisualStyle"=-

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop]
"NoChangingWallPaper"=dword:00000000

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager]
"ThemeActive"="1"
"DllName"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,72,00,65,00,73,00,6f,00,75,00,72,00,63,00,65,00,73,00,5c,\
00,54,00,68,00,65,00,6d,00,65,00,73,00,5c,00,6c,00,75,00,6e,00,61,00,5c,00,\
6c,00,75,00,6e,00,61,00,2e,00,6d,00,73,00,73,00,74,00,79,00,6c,00,65,00,73,\
00,00,00

********************************************************************************************************

Restaurar politicas 2
********************************************************************************************************
REGEDIT4

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableRegistryTools"=-

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableRegistryTools"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=-

********************************************************************************************************


Ejecutables:
********************************************************************************************************
REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableRegistryTools"=-

[HKEY_CLASSES_ROOT\batfile\shell\open\command]
@="\"%1\" %*"

[HKEY_CLASSES_ROOT\comfile\shell\open\command]
@="\"%1\" %*"

[HKEY_CLASSES_ROOT\exefile\shell\open\command]
@="\"%1\" %*"

[HKEY_CLASSES_ROOT\htafile\Shell\Open\Command]
@="MSHTA.EXE \"%1\" %*"

[HKEY_CLASSES_ROOT\piffile\shell\open\command]
@="\"%1\" %*"

[HKEY_CLASSES_ROOT\regfile\shell\open\command]
@="regedit.exe \"%1\""

[HKEY_CLASSES_ROOT\scrfile\shell\open\command]
@="\"%1\" /S"

[HKEY_CLASSES_ROOT\scrfile\shell\config\command]
@="\"%1\" %*"

[HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\batfile\shell\open\command]
@="\"%1\" %*"

[HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\comfile\shell\open\command]
@="\"%1\" %*"

[HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\exefile\shell\open\command]
@="\"%1\" %*"

[HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\htafile\Shell\Open\Command]
@="MSHTA.EXE \"%1\" %*"

[HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\piffile\shell\open\command]
@="\"%1\" %*"

[HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\regfile\shell\open\command]
@="regedit.exe \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\scrfile\shell\open\command]
@="\"%1\" %*"

******************************************************************************************************

Restaurar ver archivos ocultos
*****************************************************************************************************************************
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"CheckedValue"=dword:1

*****************************************************************************************************************************


Restaurar ejecucion archivos bat
*****************************************************************************************************************************
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.bat]
@="batfile"

[HKEY_CLASSES_ROOT\.bat\PersistentHandler]
@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"


*****************************************************************************************************************************



Restaurar Sistema no se puede activar

Para resolver eso iniciamos el programa gpedit.msc (inicio, ejecutar, gpedit.msc, aceptar)
Navegamos por las siguientes ramas:
Configuracion del equipo
Plantillas administrativas
Sistema
Restaurar sistema
Una vez que lleguemos aqui hacemos los siguientes cambios:
Desactivar restaurar sistema = "No configurada"
Desactivar configuracion = "No configurada"

Nota importante: si esas opciones ya estan en "No configurada", entonces cambiar el valor a "Habilitada", aplicar los cambios y luego volver a "No configurada". Eso resuelve el problema








domingo, 19 de julio de 2009

Aumentar la seguridad de windows con runas mmc

Resulta que windows tenia caracteristicas muy similares a linux en cuanto a seguridad y pocos conocen o, al menos, utilizan un comando equivalente a sudo de linux.
Ese comando es "runas" y habilita para ejecutar programas como administrador cuando el usuario no tiene permisos administrativos. Obviamente hay que conocer la contraseña del administrador.
Eso permite crear un entorno seguro con permisos limitados, incluso para el mismo administrador del sistema y cuando es necesario realizar tareas administrativas, como la instalacion de un programa, ejecutar esa tarea utilizando runas.
Existe otro comando, que simplifica mucho el acceso a las tareas administrativas. Ese comando es mmc y basicamente es una consola configurable que hace de contenedor de distintas aplicaciones administrativas.
El comando se ejecutaria de la siguiente manera:
runas /user:administrador mmc

Luego, para agregar complementos a la consola:
Archivo, agregar o quitar complemento, clic en agregar, seleccionar el complemento necesario y aceptar todo.

Lo extraño de todo esto es que esa capacidad de windows esta presente desde windows 98!!
Bueno, dejemos de lado windows 98, con una seguridad muy pobre, pero en windows xp, los comandos de los que hablo son de muchisima utilidad y si MS hubiera hecho mas incapie en su uso, hoy los usuarios estarian acostumbrados y no me cabe duda de que seria un sistema mas seguro.
Creo que linux le gana a windows en seguridad nada mas que porque es mucho mas dificil en linux iniciar sesion grafica como administrador, si no imposible (casi). Entonces, aquellos usuarios que solo saben hacer doble clic como automatas y aceptan todo sin leer, se ven beneficiados por ese "paternalismo".
Windows, en cambio, deja al libre albedrio esa eleccion y, por comodidad e ignorancia, todo mundo es administrador de su pc. Luego instalan Spy Bot Search and Destroy y cuando el programa los interroga sobre permitir tal o cual cambio critico al sistema, responden que sí a pesar de que por defecto, el programa propone NO.

jueves, 11 de junio de 2009

Scripts con netsh para distintas configuraciones de red

Vi por la red distintos comandos netsh para modificar la ip, la puerta de enlace, los DNS, etc.
Sin embargo es posible que con solo recordar dos comandos podamos hacer scripts que modifiquen cualquier parametro modificable con netsh.
Lo primero que hay que hacer es configurar la red a nuestro gusto. Luego ejecutamos el siguiente comando:

netsh -c interface dump > red1.conf

Podemos tener las configuraciones que querramos, red2.conf, etc.
Cuando necesitemos utilizar una configuracion ejecutamos:

netsh -f red1.conf

Lamentablemente aun no encontre cómo resguardar la configuracion de ICS (Conexion compartida a internet)

Ejemplo de tunneling ssh: cliente pop3 seguro

Pop3 es un protocolo inseguro. Esto es: la transferencia de datos, comenzando por el usuario y contraseña, hasta la ultima palabra del contenido del mensaje, son todos enviados en texto plano, con lo que un intruso podria interceptar la informacion sin problemas.
Una solucion es utilizar otro protocolo, otra solucion es utilizar Tunneling ssh, lo cual implica pocos cambios en el cliente y el servidor.
No me voy a explayar en el concepto de tunneling, eso esta muy bien explicado en wikipedia. Me voy a remitir a un ejemplo y luego a explicar el funcionamiento.
Voy a suponer que el servicio sshd esta instalado en el servidor que corre tambien el servicio pop3.
En un terminal linux ejecutamos el siguiente comando:


ssh -f -L 10110:localhost:110 usuario@mailserver.com sleep 60

Eso deja a ssh "escuchando" localmente en el puerto 10110. Todas las consultas al puerto 10110 seran captadas por ssh y luego enviadas al servidor mailserver.com al puerto 110 (pop3)

El parametro fundamental es -L y le indica a ssh que implemente el tunneling. El parametro -f pone a ssh en segundo plano liberando la consola, y el parametro sleep 60 indica a ssh que espere 60 segundos antes de finalizar.
El tiempo de espera en el que ssh permanece escuchando puede verificarse con:
ps -e | grep ssh
.

El formato usuario@mailserver.com es una forma de indicar el usuario y servidor en donde se encuentra tanto el servicio pop3 como el sshd. Usuario es un usuario de sistema aceptado por ssh, no confundir con el usuario de correo, aunque podria ser el mismo.
Podria indicarse tambien asi:

ssh -f -L 10110:localhost:110 mailserver.com -l usuario sleep 60

A partir de ese momento ssh estara escuchando por 60 segundos hasta que se inicie una sesion pop3. Una vez iniciada esa sesion, el contador continua pero ssh sigue activo hasta que se cierre la conexion con el servidor de correo.
La forma de iniciar una sesion pop3 podria ser la siguiente:

telnet localhost 10110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
Trying 127.
user usuariodecorreo
+OK Password required.
pass contraseña
+OK logged in.
quit
+OK Bye-bye.

O sea que se inicia una sesion conectando a un servidor local en el puerto 10110.
El puerto 10110 es arbitrario, podria ser 42300, incluso el mismo 110. Solo hay que tener cuidado de no "pisar" puertos ya utilizados. Si quisieramos utilizar el puerto 110, tendriamos antes que detener el servicio pop local, si lo hubiera. Otro concepto importante es que, a menos que seamos root, no es posible utilizar, por ejemplo, el puerto 800 pues solo esta permitido a root utilizar puertos menores que 1025.
Es interesante notar que en este ejemplo estan en juego tres puertos: el 10110 que escucha localmente, el 110 que es el puerto encapsulado por ssh y el puerto 22 (el propio ssh) que es el puerto que transportará (enmascarando) las consultas pop.

Un experimento interesante si tenemos acceso al servidor, es controlar el trafico mediante el comando tcpdump.
Si nos conectamos via telnet desde el cliente 192.168.1.126 podemos verificar que efectivamente el texto es plano sin el tunneling y esta encriptado cuando utilizamos tunneling.
Este experimento tambien deja ver que el unico puerto que podria ver un firewall es el correspondiente a ssh. De donde se desprende otro uso que podria darse a la tecnica de tunneling.
El comando en el servidor seria:

tcpdump -A host 192.168.1.126

Ahora que ya conocemos el funcionamiento, podriamos ensayar las caracteristicas de tunneling que trae incorporadas putty para windows y configurar Outlook Express para hacer de pop3 un cliente mas seguro.

Un paso mas
Decia mas arriba que el parametro -L 10110:localhost:110 deja escuchando a ssh localmente en el puerto 10110. Pero qué pasaria si quisiera conectarme remotamente a ese servidor que escucha en el puerto 10110? La respuesta es que la solicitud seria rechazada ya que solo escucha localmente. Para que acepte tambien consultas externas hay que inidicarselo con un parametro opcional y aqui es conveniente hacer un man ssh.
El comando que deja a ssh escuchando en el puerto 10110 accesible desde una red local es, suponiendo que la ip de la pc en cuestion es 192.168.1.126:

ssh -f -L 192.168.1.126:10110:localhost:110 mailserver.com sleep 60