viernes, 9 de mayo de 2014

Diccionario informático II

Volvemos a sacar una segunda entrega de los diccionarios, como la anterior vez, intentando darle su pequeño toque de humor (aunque posiblemente no consiga que hagan mucha gracia).

IDE: También conocidos como ATA. Es el anterior puerto de conexión de los periféricos internos de los ordenadores antes de que los Serial ATA se convirtieran en el estándar. Estos periféricos se caracterizaban por ser rectangulares, tener dos hileras de 40 pines cada una de ellas y el cable que permitía la conexión de los discos duros, lectores ópticos, etc... con la placa base recibía el nombre de "faja". Ocupaba bastante espacio en la caja del ordenador y era un poco infierno trabajar el interior de la misma cuando estas "fajas" estaban conectadas. Tiene otra acepción: Entorno o plataforma de desarrollo. Por ejemplo, Eclipse o NetBeans son dos IDEs muy famosos para el desarrollo de aplicaciones java.

IDS/IPSIntruder Detection System / Intruder Protection System. Una definición muy simple sería "antivirus que en vez de bichos analiza el comportamiento de la red". Es decir, que tiene una serie de firmas o patrones que analizan el tráfico de red y si se cumple la regla. Si tienes el detector, te avisará y tendrás que actuar en consecuencia. Si tienes el protector, cumplirá con las instrucciones indicadas cuando se produzca ese comportamiento.

Impersonalizar: La traducción literal (y real) sería "suplantar la identidad o hacerse pasar por alguien". Es lo que sucede cuando, por ejemplo, en un sistema Windows somos capaces de cambiar nuestro identificador de usuario por el otro de tal forma que tendríamos sus permisos: léase, para una elevación de privilegios. En el mundo real, sería, por ejemplo, prestarle el DNI a alguien para que se haga pasar por nosotros. O que el uso se haga porque nos lo hayan robado.

SIP: Muchas veces utilizado para responder simplemente . Raruno que se usen tres caracteres en vez de dos. Pero bueno. También es un protocolo de VoIP, que, ofrece, por ejemplo, FreePBX.

Sniffer: Normalmente es un programa que esnifará todo lo que se ponga a su alcance. Ya he hablado muchas veces sobre ellos. Como por ejemplo, whireshark.

Spoofear: Del verbo spoof. Sería falsificar en el sentido de "te hago creer que soy X pero realmente soy Y".  No confundir con Impersonalizar. Por poner varios ejemplos: las direcciones MAC, las direcciones IP...

VoIP: Voz sobre IP. Transmitir voz utilizando el protocolo IP. Un ejemplo de VoIP sería SIP.

De momento os dejo estas pocas. Seguro que más adelante se me ocurren más para una entrega más.

miércoles, 7 de mayo de 2014

Antivirus blanco

Hace tiempo... Mucho, mucho tiempo, leí el siguiente artículo en Una al día. En efecto, esto no es noticia. Pero a veces no se trata de dar noticias, ¿no? Porque muchas de las cosas que se cuentan ya las sabían públicamente otros hacía tiempo.


No voy a negarlo. Nunca había oído hablar de este antivirus: Bit9. Que según se puede leer en el post enlazado, está basado en listas blancas.

Las listas blancas están muy bien cuando se trata de casos en los que se tiene que tratar con pocas casuísticas. Pero, tal y como habremos visto en muchas ocasiones, gestionar una lista en la que queremos hacer que sólo funcionen un grupo grande de casos y que no se permita el resto (ya sea un antivirus como este, una lista de un firewall...) se hace muy, muy complicado de gestionar. ¿Cuántas veces se ha querido hacer algo al respecto y después se ha tumbado porque no hemos sido capaces de controlarlo?

De la información que nos dan se desprende que el sistema que utilizan para validar el software es que tiene que estar firmado. Ahora, voy a dejar caer varias preguntas, así, divagando un poco:

  • Si nos dedicamos el desarrollo este antivirus nos haría imposible trabajar, ya que necesitaríamos tener firmado nuestro software.... en medio del desarrollo. Es más: el IDE que utilicemos para el desarrollo también tendría que estarlo. 
  • A falta de probarlo, cabría pensar en que puede caer en nuestras manos algún programa que no esté en esa lista blanca. Por ejemplo: alguno que se haya solicitado a un proveedor (de esos para los que, seguro, muchos de nosotros trabajamos). Es un ejemplo, pero seguro que hay más: ¿Habría que enviarlo a la empresa para que lo firmen? Si son ellos quienes tienen que analizar los millones y millones de programas existentes, entonces...
  • Ah!! Esta se me olvidaba y no es menos importante. No pensemos sólo en ejecutables. Recordemos, por ejemplo, que alguna .dll nos falla... o no. Pero, tal y como WinSock nos mostró en las Navajas Negras 2013, el revisar un .exe no implica que sus complementos como las librerías .dll sean las que se encarguen de hacer "el mal".
Ciertamente son muchas cosas a tener en cuenta teniendo un antivirus de estos. Siempre se dice que no debería de instalarse dos antivirus en el mismo sistema:  ¿Se podrá aplicar este "lema" con este antivirus? Posiblemente sería un follón: ¿No? Mientras que uno te dice que tires, el otro te puede decir que no. Supongo que no sería ni recomendable probarlo. 

De todas formas, si alguno ha podido probar este antivirus y me puede dejar alguna nota en los comentarios sobre el mismo, sería de agradecer. 

miércoles, 30 de abril de 2014

Zink Security: Certificación CASI

Valga la redundancia, CASI: Certificación en Auditoría de Seguridad de la Información.

Desde Zink Security van a dar un curso que tiene muy, muy buena pinta relacionado con la seguridad en equipos y su auditoría.

Los maestros: Juanan y Pablo, de Flu-Project, Juan Luis García Rambla, Alejandro Martín e Ignacio Briones. He tenido el placer de aprender con todos ellos y os puedo asegurar que el que asista, también lo hará.

Esta formación constará de 6 módulos, 40 horas cada uno de ellos y un examen final. También tendrás la opción de hacer algún módulo por separado.

Para más información, y sobretodo, más oficial que la que aquí expongo, os dejo el enlace aquí abajo.

Por cierto: escrito desde el móvil.

http://www.flu-project.com/2014/04/apuntate-nuestra-certificacion-en.html

lunes, 28 de abril de 2014

CFP de NoConName 2014

Acabo de leer en Security By Default que está abierto el Call For Papers de No cON Name 2014.

Entre otras cosas se va a repetir el capture the flag del año pasado con algunas modificaciones.

En el artículo escrito por Lorenzo Martínez hay más información, que es la que acabo de leer. ¿Os veré por allí?

http://feedproxy.google.com/~r/SecurityByDefault/~3/QcinYPsN0Eo/abierto-el-call-for-papers-de-no-con.html

viernes, 25 de abril de 2014

FreePBX: Cambiar la shell de administración

Desde que instalé el sistema de mi PBX en la rasp llevo queriendo hacer un cambio que, si bien podía dejarlo tal cual, era una lata. Resulta que la consola de administración desde ssh para todos los usuarios mortales creados tiraban de la shell /bin/sh. En efecto: posiblemente a la hora de crearlo no lo pondría (bien) y me quedé con esa shell tan pesada. Y digo pesada porque todas las funcionalidades que nos da bash para poder utilizar el histórico con el teclado, utilizar la tecla tab para autocompletar, etc no tiraba. Por lo que me dispuse a buscar. 

Lo primero de todo saber que el sistema operativo es CentOS. Por lo que una búsqueda para poder hacer este cambio en esta ¿versión? de Linux es lo más adecuado. Y ahí nos encontramos con el comando chsh. Si bien en el ejemplo que he utilizado nos da la opción de hacer un listado de las shells disponibles, en mi caso no es posible. Aún así, el proceso es muy sencillo. Pero, antes, vamos a comprobar qué dicen nuestras variables de entorno:

Variables de entorno
Variables de entorno
Si bien seguro que es sencillo saber los valores de los nombres de usuario que he tapado, también. como podréis comprobar, he machacado las dos direcciones IP origen y destino.

Solicitaremos el cambio de shell al comando antes indicado, pasándole el parámetro -s y el valor deseado, en mi caso /bin/bash.

chsh -s /bin/bash

Tras lo cual nos pedirá la contraseña de nuestro usuario (el que estamos usando ahora mismo).

Cambiar la shell de sh a bash: chsh -s /bin/bash
Cambiar la shell de sh a bash: chsh -s /bin/bash

Ahora, cierra la sesión y vuelve a entrar. ¡¡Ya lo tienes!!
Usando la shell bash, después de cambiarla con chsh.
Usando la shell bash.
La verdad es que se me hace más cómo así.

lunes, 14 de abril de 2014

Solución Reto 01: esteganografía

Por fin me he podido poner a publicar la solución de mi primer reto [update]enalce[/update]. Lo reconozco, ha sido un fail como una casa. Entre que esperaba más participación y que me encontré con que las imágenes subidas me las habían manipulado a la hora de guardarlas, me vine abajo. Pero bueno, ya iba siendo hora de publicarlo. Más vale tarde que nunca.

Contábamos con dos imágenes:

Imagen 01

Imagen 02

La imagen 01 muestra unas matrioskas con un "bonito" fondo en blanco. En este fondo se puede distinguir que parece que hay algo raro en la esquina superior derecha. Si nos acercamos un poco más y, si no se distingue del todo bien, cambiamos el color de fondo, podremos ver que hay un mensaje:

Las matrioskas son la clave

Mirando fijamente estas muñecas rusas no se alcanza a ver ningún mensaje oculto con otro color. ¿Qué querrá decir con eso? ¿Qué tengo que hacer con la segunda imagen?¿Habrá algo oculto en ellas? 

Sé que en backtrack (sí, sigo usándolo) tienen herramientas como stegdetect y steghide.

Ejecutando:

stegdetect imagenMatrioskas.jpg

(o como la hayas guardado)

te devolverá

03-ficheroDestino.jpg : outguess(old)(*)

Lo que significa que no sólo tenía una mensaje oculto en su fondo, sino también en su interior.

Si quiero utilizar steghide me pedirá una contraseña. ¿Cómo voy a saber la contraseña? Ya que sabemos que "las matrioskas" son la clave: ¿Querrá decir eso que matrioskas es la siguiente posible solución?

steghide --extract -sf 03-ficheroDestino.jpg -p matrioskas -xf salidaSteghide.txt

No se ha quejado. Voy a ver el contenido de la salida:

cat salidaSteghide.txt

¡Bingo!

Para continuar con el reto, tendrás que buscar el programa Stereogramm-Decoder, tambien conocido como  StereoDecoder. Esta hecho/firmado por Carsten Neugauer. *

El asterisco lo acabo de poner: me acabo de dar cuenta de que eso de "está hecho/firmado" no es que sea la mejor expresión. Pero bueno, supongo que se entiende.

Por lo tanto, la segunda pista que había que sacar era esta. Aunque se hubiese sacado la primera y la que nos entregará la siguiente imagen, sin esta pista no hubiese dado por válido el resultado.

Por lo tanto, nos está pidiendo que usemos el programa StereoDecoder. Lo que nos permitirá no dejarnos los ojos buscando detrás del estereograma.

Por lo tanto, una vez nos descargamos el programa, lo vamos a configurar. En mi caso, le he puesto los siguientes valores. Realmente al final es un poco de ensayo y error:

StereoDecoder by Carsten Neugauer: search-dist = 100; blocksize = 6
StereoDecoder by Carsten Neugauer: search-dist = 100; blocksize = 6

Si esperamos un minuto o dos obtendremos:

Solución: Muchas gracias. Has encontrado el lugar donde estaba escondido el alijo.
Solución al estereograma
Por lo tanto, la tercera y última pista (o solución final) es:

Muchas gracias. Has encontrado el lugar donde estaba escondido el alijo.

Como habréis podido observar, este último programa lo he utilizado en Windows. Pero, si no me acuerdo mal, también probé a usarlo con wine y no me dio problemas. 

Ciertamente este reto no siento que me haya salido bien. Ha sido bastante desastre. Encontrarse con que las imágenes subidas no son lo que tenían que ser (actualizándolo en el mismo momento en el que lo alertaron) y el tiempo que he tardado en publicar el resultado. Está claro que he aprendido varias lecciones:

  • Tenes escrita la solución antes de publicar el reto. Así, sólo hará falta unos pocos clicks para publicarla y no tardar una eternidad.
  • Aunque el reto estará muy, muy probado antes de mostrarlo al público, tener muy presente que se pueden presentar cambios en los ficheros subidos, por lo que hay que revisar que las firmas o hashes de los mismos cuadran con lo esperado. 
 Así, por curiosidad: ¿Cuántos de vosotros lo intentásteis al menos? ¿Hasta dónde llegásteis? Seguro que tenéis más consejos para los próximos que monte. Como de costumbre, siempre que sean con buen tono, bienvenidos serán. 

miércoles, 9 de abril de 2014

Hashes en Java

Para algún que otro proyecto que me he ido montando, he tenido la necesidad de sacar el hash de alguno de los objectos con los que estaba trabajando. Como de costumbre, es ese tipo de cosas que aunque en algún momento determinado ya las has hecho, siempre se te olvida cómo volverlo a hacer. Y tienes que volver a buscar. En mi caso, se trataba, precisamente, de obtener el resultado de la aplicar una función de hash determinada y recuperar el valor correspondiente, utilizando java.

Ahora que quería recopilar las cosas que había estado haciendo, me he encontrado con que no localizo alguna de éstas, y además, que lo que tengo, no es exactamente como esperaba.

Para el tema de los hashes me estoy acordando de que tengo dos opciones.

Opción "nativa"

Para esta opción tenemos que utilizar MessageDigest. En el mismo momento de instanciarla habrá que indicarle el algoritmo que queremos utilizar. Si no existiese, nos lanzaría una excepción. Un ejemplo sería este:

 String valor = "123456";  
 try{
  String hashAux = "";
  MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
  messageDigest.reset();
  messageDigest.digest(valor.getBytes("UTF-8"));
  messageDigest.update(valor.getBytes());
  byte[] digestArray = messageDigest.digest();
   
  for(byte aux : digestArray) {
   int b = aux & 0xff;
   if (Integer.toHexString(b).length() == 1)
    hashAux += "0";
   hashAux += Integer.toHexString(b);
  }
  
  String result = new String(digestArray);
  System.out.println("hashAux: "+hashAux);
 }catch(Exception e){
  System.out.println("E: "+e);
 }

Como resultado obtendremos:



8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

y se puede verificar que es correcto al compararlo en un algún sitio por Internet.

Además, hay que tener en cuenta los distintos algoritmos que pueda permitir. Al menos no parece trivial encontrarlo. En alguno de los sitios donde he ido a buscar (porque, recuerdo, que hacía tiempo que no tenía que trabajar sobre esto, y lo de hardcodear los valores no me hacía ninguna gracia), he visto una lista parecida a esta:

  • MD2
  • MD5
  • SHA-256
  • SHA-384
  • SHA-512
  • SHA, SHA-1, SHA1
En la que voy a considerar los últimos elementos como que hacen el mismo algoritmo. ¡Ojo! Que según qué equipo podría fallar. 

Los resultados también podrían cambiar si estamos trabajando con codificaciones diferentes. En mi caso, he definido la que venía en el ejemplo. 

Opción "apache commons"

La otra opción es utilizar la librería de apache commons. Nos ofrecerá el método DigestUtils, el cual, al mismo tiempo, nada más instanciarlo tendremos que indicarle qué hash utilizar. 

 String hashAux2 = null;
 String hashAux3 = "";
 byte[] hashAux3byte = null;
 try{
  hashAux2 = DigestUtils.sha256Hex(valor); 
  hashAux3byte = DigestUtils.sha256(valor);
  for(byte aux : hashAux3byte) {
   int b = aux & 0xff;
   if (Integer.toHexString(b).length() == 1)
    hashAux3 += "0";
   hashAux3 += Integer.toHexString(b);
  }
     System.out.println("hashAux2: "+hashAux2);
     System.out.println("hashAux3: "+hashAux3);
     
 }catch(Exception e){
  System.out.println("Exception hash: "+e.getMessage());
 }

Como podréis comprobar, tenemos la opción de que nos pase directamente la cadena convertida en formato hexadecimal, y así no tendremos que hacer la chapuza de iterar sobre cada una de las posiciones del array que nos devuelva. Tambien DigestUtils nos ofrece directamente los algoritmos con los que nos permitirá trabajar.

A la hora de ejecutar este último ejemplo podremos ver que, en efecto, el resultado es el mismo que en el primero.

Esta última opción creo que es la mejor, aún dependiendo de una librería que se tenga que importar y que no venga directamente en la paquetería de java.

Espero que esto os sea de utilidad. Por mi parte, me vendrá muy bien tenerlo a mano para cuando se me vuelva a olvidar cómo lo hice.