Mostrando entradas con la etiqueta Redes. Mostrar todas las entradas
Mostrando entradas con la etiqueta Redes. Mostrar todas las entradas

domingo, 4 de octubre de 2015

Bandit Level 20 → Level 21



Los datos de conexión para este nivel son:

- Host: bandit.labs.overthewire.org
- User: bandit20
- Pass: GbKksEFF4yrVs6il55v6gwY5aVje5f0j



La descripción es la siguiente:


Básicamente, nos está indicando que disponemos de un binario, con bit suid habilitado para el user bandit21. 



Al ejecutarlo sin ningún parámetro actual, nos indica que hará una conexión TCP a un puerto dado sobre localhost y que si éste recibe el password del level 20 de la otra conexión, el password del level 21 será mostrado.

El siguiente diagrama clarifica un poco todo esto:


Por tanto, hay que:
  1. Iniciar una nueva conexión SSH.
  2. Levantar un daemond que permanezca en modo 'listenign' y que al recibir una conexión, envíe el password del level 20:



Como se puede ver, netcat es la herramienta perfecta para hacer esto.

Levantado el daemon, tan solo queda volver a ejecutar suconnect argumentándole el puerto para poder resolver el level:




Con el fin de clarificar un poco todo, he editado el título de las terminales como:
  • CLIENT: Para el terminal que ejecuta suconnect.
  • SERVER: Para el terminal que ejecuta el daemond.


Esto es todo por ahora. Hasta la próxima entrada!

sábado, 19 de septiembre de 2015

Bandit Level 18 → Level 19



Los datos de conexión para este nivel son:

- Host: bandit.labs.overthewire.org
- User: bandit18
- Pass: kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd


Este nuevo level introduce algo distinto a los anteriores. Si retomamos parte del texto del nivel anterior, vemos que nos avisa de algo:

NOTE: if you have solved this level and see ‘Byebye!’ when trying to log into bandit18, this is related to the next level, bandit19

De manera tal que si hacemos la conexión SSH, obtendremos el comentado Byebye!:



Veamos que pistas nos proporciona el enunciado de este level:


Todo parece indicar que el fichero .bashrc (fichero que se carga al iniciar una 'shell de login interactiva) ha sido modificado de tal manera que no nos proporcione un shell. Por tanto, lo que debemos hacer es forzar la conexión SSH argumentando la shell que deseamos usar de la siguiente manera:



El resto, es sencillo. Tan solo debemos leer el contenido del fichero 'readme'.

Esto es todo por el momento!



Práctica de la asignatura de Sistemas Distibuidos 2k15


Presentación de la asignatura dada por el E.D.: 
El objetivo de esta asignatura es aprender los principios básicos sobre sistemas distribuidos, así como caracterizarlos y clasificarlos en función de una serie de parámetros básicos y distinguir entre los distintos tipos de modelos utilizados en sistemas distribuidos. Además, se pondrán de manifiesto la heterogeneidad, tanto de los medios de transmisión (cable coaxial, fibra óptica, canales inalámbricos,...) como de los dispositivos hardware y componentes software que los integran.
Esto hace necesario la aparición de una capa de abstracción software, comúnmente denominada Middleware (capa intermedia), la cual proporciona servicios a las aplicaciones distribuidas tales como la comunicación entre procesos (mediante RPC y Sockets) o invocación de objetos distribuidos (mediante RMI y CORBA).

También se estudian dos de los servicios más habituales ofrecidos por cualquier sistema distribuido, el servicio de archivos distribuidos y el servicio de nombres distribuidos.

Desde mi punto de vista es una asignatura complicada de estudiar, por lo extenso del temario. Sin embargo, la práctica compensa. Es de las más gratificante que he hecho a lo largo de estos años. Eso sí, como casi todas las prácticas en la UNED, se lleva mucho tiempo dejarla medianamente completa.

Si más preámbulos subo la práctica de este año, la cual trata de construir un "Sistema básico de microblogging tipo Twitter® usando Java RMI". 

Los ficheros para su descarga son:

jueves, 12 de febrero de 2015

CVE-2011-4862: Buffer overflow in libtelnet/encrypt.c


Un miembro de la lista de CrackSLatinoS a.k.a Boken (@Boken_), ha planteado una manera diferente de colaborar, motivar, aprender y practicar temas relacionados con la ingeniería inversa.

Para ello, propone la resolución de una serie de exploits de diferentes niveles de dificultad, del cual éste writeUp se encarga de documentar el primero de ellos de nivel medio.

El post original publicado en la lista el 11/12/2014 fue:


http://www.cvedetails.com/cve/2011-4862
La idea principal es que todo el que quiera hacer su versión de este exploit y comprender en profundidad el fallo, vaya comentando aquí sus avances, dudas, problemas y demás. Hay tanto exploits como detalles del mismo, pero la cuestión es que cada uno que lo intente y se atasque venga aquí a explicar sus problemas y pueda continuar.
Ni es un concurso, ni hay fecha de entrega. El único objetivo es que todo el que crea que no sabría hacerlo, pero quiera, utilice este post para conseguirlo. A ver si al final de este hilo entre todo lo comentado se pueden montar uno o varios tutes conjuntos.
Boken


Los detalles de esta vulnerabilidad son:
Buffer overflow in libtelnet/encrypt.c in telnetd in FreeBSD 7.3 through 9.0, MIT Kerberos Version 5 Applications (aka krb5-appl) 1.0.2 and earlier, Heimdal 1.5.1 and earlier, GNU inetutils, and possibly other products allows remote attackers to execute arbitrary code via a long encryption key, as exploited in the wild in December 2011.
Como no podía ser de otra manera, soez y yo nos pusimos a resolverlo con un resultado altamente satisfactorio para nosotros. Este tipo de retos siempre nos dejan muy buen sabor de boca. 

Ni que decir tiene que tan solo mostramos una pequeña prueba de concepto y que dista mucho de la POC original que en su día hicieron NighterMan y BatchDrake. Sin duda la de ellos es infinitamente más elaborada.

Espero que disfrutéis de esta lectura, tanto como nosotros redactándola. Aquí os dejamos todo lo necesario:
¡Hasta el próximo exploit!


martes, 20 de enero de 2015


Las Jornadas X1RedMasSegura se celebrarán los días 22 y 23 de Mayo en el Salón de Actos de la Escuela Técnica Superior de Ingenieros de Telecomunicación de la Universidad Politécnica de Madrid (ETSIT-UPM).


Durante estos dos días se tendrá la oportunidad de escuchar a verdaderos profesionales de la Seguridad traduciendo sus conocimientos y experiencias para hacerlas llegar a los usuarios finales de Internet con la finalidad de hacer más sencillo su paso en la Red, tan presente hoy en día en nuestras vidas.

Novedades

La edición 2015 repetirá de nuevo la experiencia de los talleres, celebrándose para ciberabuelos, padres, educadores, musicales para niños, empresas y empresarios, disCAPACITADOS e internautas en general, así como cualquiera que surgiera viabilidad para su celebración.

A diferencia de las dos ediciones anteriores los talleres se desarrollarán desde los meses febrero/marzo con la finalidad de poder realizarlos, además, en localidades distantes de Madrid, ciudad donde se culminará la edición 2015 con la celebración de las jornadas los días 22 y 23 de mayo.

Estos talleres, que seguirán siendo TOTALMENTE GRATUITOS, se desarrollarán a solicitud de los
interesados y tras el estudio de viabilidad y desarrollo por las partes, teniendo en cuenta la logística a la hora del desplazamiento de/l/los ponente/s, designados por Organización de X1RedMasSegura para participar en la actividad

Patrocinios y Colaboraciones 2015

Si deseas patrocinar o colaborar en la edición 2015 de las Jornadas X1RedMasSegura puedes ponerte en contacto con nosotros en: info@x1redmassegura.com y/o descargarte el dossier de información y patrocinio.

Buscamos colaboración principalmente en los siguientes aspectos. Los patrocinadores se encargarán
directamente de la aportación de recursos sin intervenir la organización de x1RedMasSegura más allá de la coordinación. Figurarán en la publicidad y página web como tales además de ser nombrados en todos los eventos.

COMUNICACIÓN 
  • Publicidad y difusión
  • Cartelería e impresiones
  • Acreditaciones

LOGÍSTICA 
  • Catering 2 Jornadas x 300 personas
  • Catering Talleres (400 personas total)
  • Catering Networking
  • Viajes y Alojamiento ponentes no residentes en Madrid (Jornadas)
  • Realización de talleres fuera de Madrid

MATERIALES 
  • Agradecimiento autoridades y ponentes
  • Agradecimiento asistentes Jornadas y Talleres
  • Agradecimiento staff (personal apoyo en Jornadas y Talleres)
  • Premios concurso Infografías para niños (6 en total)

Cualquier otra ayuda será bienvenida ya que x1RedMasSegura es una iniciativa sin ánimo de lucro que persigue llevar el uso seguro y responsable de Internet a todos los ciudadanos.

Cierre confirmación patrocinios el domingo 3 de mayo de 2015.

domingo, 3 de agosto de 2014

Euskal Encounter 22


Los días 25 y 26 de Julio del presente año, tuve la oportunidad de asistir a un evento del cual no tenía referencia alguna a pesar de ser su 22 edición. Estoy hablando de la Euskal Encounter 22 que se ha celebrado en Barakaldo y por donde han pasado más de 5700 asistentes, con una extensión de más de 35000 metros cuadrados.

Lo primero que llama la atención es la cantidad de puntos de red que había montados (aprox. 4000 si no más), con un acceso a Internet de 20 Gbps. Es impresionante ver desde la altura la dimensión real del evento, especialmente cuando se apagan las luces y solo se ven los monitores conectados.



Lo segundo es las decenas de actividades que hay en ella y que a grandes rasgos son:
  • Escena
  • Hardware
  • Software Libre
  • Juegos
  • Conferencias y talleres
  • Otras, por si no encajas en ninguna de las anteriores.


En mi caso, participé en la actividad Hack it/Solve it, perteneciente a Software Libre, en donde es el primer evento presencial que tengo con el grupo al que pertenezco (@amn3s1a_team). En esta ocasión no pudimos contar con Skuater y Nox, así que haremos todo lo posible para que el próximo año, esto no suceda.

Hack it/Solve it es un concurso en donde hay que intentar resolver restos hacking, de ingeniería inversa, criptografía, esteganografía, etc. !El paraíso!


Como en todos estos eventos, el social networking es algo inevitable y en este caso me ha servido para desvirtualizar a una persona que, a pesar de su juventud tiene gran cantidad de admiradores entre los cuales ahora me incluyo yo. Estoy hablando de Héctor Martín Cantero (@marcan42). Por si a alguno no le suena, diré que entre otros logros, fue responsable directo del hack a Kinect.

Quisiera recomendar este evento a todos aquello a los que como yo, les fascina todo lo que huela a bits y electrones. Os aseguro que es una experiencia muy muy positiva.



El siguiente vídeo, resume un poco todo lo que he contado:




Hasta la próxima entrada!!

jueves, 15 de agosto de 2013

Resumen de la asignatura de "Seguridad"


Estos son los resúmenes que hice para la asignatura de "Seguridad" perteneciente al Grado en Ingeniería Informática de la UNED.

El objetivo de la asignatura es adquirir los conocimientos asociados a todos los aspectos del problema de la seguridad informática, orientándolos a la consecución de la creación de una política de seguridad de una organización. 
Analizando los problemas de seguridad física y lógica asociados con los componentes hardware (cableado, switches, routers, etc.) así como los del software (sistemas operativos, aplicaciones y protocolos). 

Se estudian los distintos tipos de ataques a la seguridad, haciendo una taxonomía lo más exhaustiva posible, así como los distintos tipos de defensas posibles, además de las distintas herramientas de defensa habituales como cortafuegos, analizadores de vulnerabilidades, sistemas de detección de intrusiones y otros. 

El libro desde mi punto de vista está obsoleto y creo que deberían de actualizar su contenido, sin embargo las prácticas (análisis de paquetes de red, IPTables e IPS) son de bastante actualidad y ayudan bastante a asimilar la asignatura.

El equipo docente está muy implicado con los alumnos y eso es una garantía de éxito.

A continuación adjunto los resúmenes en formato PDF:


Resúmen de la asignatura "Arquitecturas y Protocolos TCP/IP"


Aquí dejo los resúmenes que he realizado de la asignatura "Arquitectura y Protocolos TCP/IP" perteneciente al Grado en Ingeniería Informática de la UNED.

Ha sido una asignatura dura por la cantidad de contenido, pero muy entretenida y didáctica. 

El texto base es del libro 'Redes de computadoras - Un enfoque descendente'. Libro bastante actualizado y muy bien redactado.Su enfoque descendente se debe a que empieza por la capa más alta de la pila TCP/IP, la capa de aplicación, y va descendiendo hasta la más baja, la capa física. Aunque para esta asignatura solo es necesario estudiar hasta la capa de red pues el resto de capas ya las estudiamos en la asignatura "Transmisión de datos y redes de comunicaciones".

El equipo docente es bastante bueno y se nota su implicación con los alumnos.

Antes de terminar la entrada quiero hacer mención a un compañero (ahora amigo) al que he tenido el placer de conocerle mientras cursaba esta asignatura y que su aparición ha sido enormemente fructífera, pues es una persona con un tesón inconmensurable. Su conocimiento de las redes ha sido fundamental para estudiar esta asignatura como se merece, por tanto desde aquí le doy las gracias, Alejandro González de Aguilar.

Por cierto, me ha prometido que en breve tendrá su propio blog y ya veréis como tengo razón en lo que digo ;)

A continuación adjunto los resúmenes en formato PDF:
  1. REDES DE COMPUTADORAS E INTERNET
  2. LA CAPA DE APLICACIÓN
  3. LA CAPA DE TRANSPORTE
  4. LA CAPA DE RED

domingo, 10 de marzo de 2013

Rooted CON 2013



Terminó la Rooted CON 2013. Esta vez no voy a comentar nada acerca de los ponentes, de las charlas o de la organización. Y no comento nada, por la sencilla razón de que absolutamente todos han cubierto mis expectativas con creces, especialmente las charlas de Roberto Baratta, Joxean Koret, Albert López, Antonio Ramos y Jaime Sánchez. 

Sin embargo, esta vez escribiré algunas líneas sobre otra parte fundamental de este tipo de eventos, los asistentes. Asistentes que construyen un ambiente especial y en donde por suerte he podido reforzado la amistad con algunos genios como Carlos Díaz, Javier GDT y Angelucho, ..., que no solamente son buenísimos profesionales, sino que además son excelentes personas.

Tampoco quiero olvidarme de otros nuevos como @madrikeka, @TheXC3LL, @kriptus_com, @0b1t , así como de otros que ya forman parte de la familia como @Agux_, @dot_Ike, @jaime_jhernando.

Ha sido para mi un honor haber compartido excelentes momentos con todos ellos y espero que lo sigan haciendo para la próxima #rooted2014.

Me despido con una frase de uno de los ponente, que hashea perfectamente estos tres días de magia y que decía algo así como:

"En el mundo de la seguridad de la información, los que nos dedicamos a ello, no estamos aquí para competir entre nosotros, sino para colaborar"


miércoles, 7 de noviembre de 2012

II CONGRESO DE SEGURIDAD NAVAJA NEGRA (Albacete - 30 de Noviembre y 1 de Diciembre)



Si eres un entusiasta y apasionado de la seguridad de la información y por ende de la seguridad informática has de saber que los días 30 de Noviembre y 1 de Diciembre se celebrará en Albacete las II CONFERENCIAS DE SEGURIDAD "NAVAJA NEGRA"

Contara con 11 ponentes de excepción más un servidor, o sea, yo mimo.

La charlas serán variadas y con gran valor instructivo como:

  • All your appliances are belong to us. Presentación de un 0-day
  • Show me your Intents
  • HASH COLLISIONS: Welcome to the (un)real World!
  • Take a walk on the wild side
  • A brief introduction to reversing code with OllyDbg and other tools
  • From mail to jail: Exploit your ex.girlfriend
  • (in)Security in Mobile Communications
  • IPv6 vs IDS, se aceptan apuestas...

Se realizarán en el SALON DE ACTOS DEL CEEI (Centro Europeo de Empresas de Innovación) el viernes en horario de tarde y el sábado en horario de mañana e impartidas por reconocidos profesionales.

Son completamente gratuitas pero es necesario registrarse (aforo limitado). 

La información sobre las charlas, está disponible en el apartado Itinerario del Congreso. Si os desplazáis desde fuera de Albacete, hay descuentos de Renfe y del Hotel Beatríz para alojaros. También tenéis el Cartel Oficial para descargar.

Toda la información se encuentra disponible en http://navajanegra.com/

Por la parte que a mi me toca, intentaré haceros pasar aproximadamente 1 hora entretenida, amena y si es posible didáctica al máximo.

No dejéis pasar esta ocasión, os espero a todos en Albacete!!!

domingo, 4 de marzo de 2012

Rooted CON 2012


Ya termino la 3ª edición de la rooted CON y por fin he conseguido dormir más de 7 horas seguidas, por lo tanto, toca organizar ideas y dar una valoración a este evento del que tantas ganas tenía de formar parte.

Comenzaré, mencionando a la organización: Sencillamente impecable. En general, me hicieron sentirme como en casa y el capo del evento, a.k.a. PatoWC, con el que nunca había hablado, es tan buena persona como conocimiento tiene del mundillo y sólo espero que pronto se ponga las pilas y saque la certificación que me prometió ;). Por supuesto la foto de rigor no debe faltar:





Los ponentes, absolutamente todos, inmejorables. El nivel que tenemos en España no le tiene envidia a nadie de fuera. Sin embargo quisiera hacer mención especial a estas personas (ponencia):

    • Carlos Díaz y Fco. Jesús Gómez (CMD: Look who's talking too). Sorprendente su charla. No los conocía, pero no me extraña que trabajen para el gran hermano (Telefónica) y me quedo con la idea que quisieron transmitir, DNS a saco.

    • Chema Alonso y Manu "The Sur" (Owning "bad" guys {and mafia} with Javascript botnets), en su linea. Todos conocemos a Chema por su trayectoria y desde luego dio un recital de bonets.

    • Epsylon (XSSer, the cross site scripting framework). Tampoco le conocía pero fue increible todo lo que expuso sobre su herramienta para XSS. En futuras ediciones de la rooted deberían seguir contando con él, tiene mucho en la cabeza y es bueno que lo comparta. No me cabe duda que será uno de los grandes.

    • Gerardo García Peña (Enfoque práctico a la denegación de servicio). Aunque pudiera parecer que está peor que Juana la loca, supo exponer rigurosamente que es un DOS. 

    • Jaime peñalba a.k.a. NighterMan (Live Free or Die Hacking), no tengo palabras para evaluar a este personaje, solo puedo decir que fue la mejor ponencia, me puso los pelos de punta. Espero volver a verlo en otros eventos similares y desde hoy seguiré todavía más de cerca sus pasos aunque para ello tenga que saltar por impresoras, videos o tostadoras XDD.

    • Raúl Siles y José Antonio Guasch (Seguridad de aplicaciones web basadas en el DNIe). Un buen trabajo que me hizo tomar conciencia del DNIe y de todo lo que queda por mejorar.

    • José Picó y David Pérez (Nuevos escenarios de ataque con estación base falsa GSM/GPRS). Cada vez que en la sala se oía el nombre de Taddong, absolutamente todos desconectábamos el móvil. Madre mía que pareja, desde hoy no tengo móvil y me currado un terminal nuevo con dos yogures vacíos y un cuerda de lana, pero aun así no me extrañaría que ellos mismos me hicieran un MITM en la mitad de la cuerda jeejje. Bromas a parte, desconocía el hacking en comunicaciones móviles y desde luego, taddong, es un referente sin duda.

Todos estos eventos tienen un fin y el fin es que las empresas, por desgracia, aun no tienen conciencia de que tienen que invertir más si o si en seguridad informática y que como no se pongan las pilas pronto es muy posible que se arrepientan por no tomar el tema en serio, sobre todo cuando tengan que rascarse el bolsillo por no hacer bien su trabajo en la protección de datos.

Por la parte que me toca, intentaré hacer llegar el mensaje a todos los que me sea posible aun a riesgo de no conseguir nada.

Para concluir el post, quiero recordar a las personas con la que he hecho amistad y que para mi han sido igual de importantes que el resto, así que un saludo muy especial para Carlos Díaz, Adrian Ramírez, Javier Partido y Agustín.

Nos veremos pronto amigos!!

lunes, 25 de octubre de 2010

Chat P2P en JAVA

Proyecto que desarrollé en NetBeans para el club mentes inquietas, y que faclilita el aprendizaje y práctica de diversas técnicas tales como:

  • Programación en JAVA.
  • Programación con Sockets TCP.
  • Programación concurente.
  • Protocolos y Serialización de datos.
  • Cifrado y codificación de datos.
  • Modelo de programación cliente-servidor.
  • ...

He intentado buscar la simplicidad en todo el proyecto para que se entiendan bien todos los conceptos, ya que cuando uno se enfrenta a una arquitectura cliente servidor  por primera vez, suele ser algo doloroso si no tenemos quien nos guíe. 

Ejemplos de este tipo hay muchos, pero que en la misma aplicación convivan servidor y cliente, no hay tantos.

He de recordar que dentro del proyecto existe un módulo "Base64Coder.java" que pertenece a Christian d'Heureuse y que no estaría nada mal que supieseis bajo que licencias se encuentra. Este modulo es el encargado de la codificación en base 64 que se utiliza en el proyecto.

Anexo además un presentación con definiciones que ayudarán a comprender un poco mejor de que va todo esto.

Descargas:

domingo, 14 de marzo de 2010

El día que un CRC cambió mi vida parte III

Continuamos con la saga del CRC.

En esta 3ª entrega os muestro como calcular el CRC a un fichero, utilizando CRCs estandarizados como el CRC-16 y el CRC-CCITT.

El código está hecho en C y es portable a Linux para todo aquel que lo desee.


Como podréis observar el código está contenido en un sólo módulo y es muy secuencial, con el fin de que se pueda seguir fácilmente y sin demasiadas complicaciones.

No obstante todo el que quiera aportar algo más o mejorar la aplicación, pues que lo haga sin más. Todos estamos aquí para seguir aprendiendo unos de otros.

Sin más rodeos anexo el código fuente:



/*****************************************************************************/
/*                                                                           */
/*  NOMBRE      : CRCx.c                                                     */
/*  AUTOR       : Longinos Recuero Bustos                                    */
/*  EMAIL       : lrecuero1@alumno.uned.es                                   */
/*  WEB         : http://longinox.blogspot.com/                              */
/*  FECHA       : 14/03/2010                                                 */
/*  LICENCIA    : GPL                                                        */
/*  DESCRIPCIÓN : Aplicación que calcula a un fichero un CRC estandarizado.  */
/*                                                                           */
/*****************************************************************************/

/* INCLUSIÓN DE HEADERS ******************************************************/

#include <stdio.h>
#include <stdlib.h>

/* DEFINICIÓN DE CONSTANTES SIMBÓLICAS ***************************************/

#define CRC_CCITT 0x1021
#define CRC_16    0x8005

/* DEFINICIÓN DE TIPOS *******************************************************/

typedef enum
{
 FALSE = 0,
 TRUE
}TBoolean;

/* DEFINICIÓN DE PROTOTIPOS DE FUNCIONES *************************************/

void calculoCRCx( unsigned char value, unsigned int *crc );

/* MAIN PROGRAM **************************************************************/

int main( int argc, char* argv[] )
{
 /* Se comprueba que si se ha introducido la ruta del fichero */
 if( argc > 1 )
 {
  /* Argumentos OK */
  FILE *fichero;

  /* Se obtiene el manejador del fichero */
  fichero = fopen( argv[ 1 ], "r" );

  if( fichero != NULL )
  {
   /* OK: El fichero existe */

   /* Contador de bytes leidos */
   unsigned int contador = 0;

   /* Valor inicial del CRC */
   unsigned int crc = 0;

   /* Se almcena el primer byte a tratar */
   unsigned char byte = fgetc( fichero );

   /* Mientras queden bytes por leer... */
   while( !feof( fichero ) )
   {
    contador++;

    /* Se formatea la salida */
    if( byte > 0x0F )
    {
     printf( "0x%X\t", byte );
    }
    else
    {
     printf( "0x0%X\t", byte );
    }

    calculoCRCx( byte, &crc );

    /* Se almacena el próximo byte a tratar */
    byte = fgetc( fichero );
   }

   /* Se cierra el fichero */
   fclose( fichero );

   /* Se enmascaran los 32 bits de menos peso */
   crc &= 0xFFFF;

   /* Se muestra el CRC calculado formateando la salida */
   puts("\n\n------------------- FIN -------------------\n");
   printf( "\n\tBytes leidos:\t%d\n", contador );
   printf( "\n\tCRC calculado:\t0x%X\n", crc );
   puts("\n-------------------------------------------\n");
  }
  else
  {
   /* FALLO: No exite el fichero */
   puts("\n\t¡¡¡ ERROR !!!. No existe el fichero\n");
   return EXIT_FAILURE;
  }
 }
 else
 {
  /* FALLO: No se ha introducido nugún argumento */
  puts("\n\t¡¡¡ ERROR !!!. Se necesita la ruta del fichero\n");
  return EXIT_FAILURE;
 }

 return EXIT_SUCCESS;
}

/* FUNCIONES PRVADAS *********************************************************/

void calculoCRCx( unsigned char byte, unsigned int *crc )
{
 unsigned char i;
 unsigned int  polinomioGenerador  = CRC_16;

 /* Para cada byte del fichero... */
 for( i = 0; i < 8; i++ )
 {
  /* Se comprueba si el bit actual está a 1 */
  TBoolean es_Bit_A_Uno = ( ( ( byte >> ( 7 - i ) ) & 1 ) == 1 );

  /* Se comprueba si el MSB actual del crc está a 1 */
  TBoolean es_MSB_CRC_A_Uno = ( ( ( *crc >> 15 ) & 1 )  == 1 );

  *crc <<= 1;

  /* Si los booleanos son distintos uno de otro */
  if( es_MSB_CRC_A_Uno ^ es_Bit_A_Uno )
  {
   /* XOR entre el crc actual y el polinómio generador */
   *crc ^= polinomioGenerador;
  }
 }
}
Para probar esta aplicación desde línea de comandos, se llama al ejecutable pasándole como único argumento la ruta del fichero.

Ej.: CRCx C:\TEMP\vacaciones.jpg

El resultado será la visualización por consola de todos los bytes que componen el fichero, el número de bytes tratados y el CRC calculado.

Como veis la cosa no es tan trivial como se planteo en la entrega anterior, pero si nos vale para entender como se hace en el mundo real.

Podéis contrastar el resultado obtenido aquí y que además contiene abundante información del tema que nos ocupa a un nivel mucho más profundo.

Os dejo el código fuente y el ejecutable para el que no tenga ganas de teclear ni compilar:


En la próxima y última entrega de esta saga veremos como proteger nuestro código de depuradores usando para ello nuestra estrella, el CRC.

sábado, 6 de marzo de 2010

El día que un CRC cambió mi vida parte II

El fundamento matemático del CRC nos habla de códigos de bloques lineales expresados como polinomios en cuerpos de Galois, pero si profundizamos por este camino nos podría dar una hemorragia cerebral.

En vez de eso, comenzaremos por dar un ejemplo sencillo, pasando de lo particular a lo general.

Imaginemos que nuestro mejor amigo nos manda el mensaje “SOS” por cualquier medio, indicándonos que se encuentra en peligro. Pero por desgracia durante la transmisión del mensaje ha habido interferencias electromagnéticas que han alterado el contenido del mensaje y lo que recibimos es “OSO”. 
No solamente no prestamos ayuda a nuestro amigo, sino que además nos cabreamos con él por llamarnos OSO.

Para evitar lo anterior y asegurarnos que el mensaje que nos llega está inalterado, nuestro amigo le aplicará un CRC, es decir, le añadirá al mensaje otro símbolo (de ahí viene lo de redundancia) que nos indicará si el mensaje ha sido alterado o no.

Ese símbolo extra no es más que el resto de dividir el mensaje por un valor previamente pactado en ambas partes.

Veamos el proceso:

Según el estándar ASCII el mensaje “SOS” se codifica como:

‘S’ es codificado con el valor 83.
‘O’ es codificado con el valor 79.

El mensaje sería 837983 y lo vamos a dividir por el símbolo ‘P’ que en ASCII es 80, el resto de esta división se concatena al mensaje origen:

837983 MOD 80 = 63

63 equivale a el símbolo ‘?’, por lo tanto el mensaje listo para enviar sería “SOS?”. 
Cuando recibamos el mensaje, como pactamos el CRC con nuestro amigo, repetimos el proceso y comprobamos si coincide.
Si el mensaje recibido hubiese sido “OSO?”, calcularíamos el CRC de “OSO”:

798379 MOD 80 = 59

59 equivale al símbolo ‘;’ que es distinto de ‘?’, luego ya estamos en condiciones de advertir que el mensaje no es fiable.

Para que los dispositivos electrónicos operen justamente como nosotros acabamos de hacer, los matemáticos, esos grandes inventores de realidades, idearon una manera magistral de entender y analizar los códigos cíclicos mediante polinomios.

Un patrón de 0 y 1 se representa como un polinomio con coeficientes de valor 0 y 1.

La potencia de cada término del polinomio muestra la posición del bit y el coeficiente el valor del bit.

Por ejemplo, el polinomio:



se representa como 10000010000010001. 

Como se observa el beneficio es inmediato ya que un patrón de 17 bits se representa con un polinomio de 4 términos.

Sin embargo hay que recalcar que la elección del divisor, llamado polinomio generador, no es trivial, pero nuevamente nuestros amigos matemáticos han elaborado algunos polinomios generadores estandarizados y que se aproximan al 100% de la detección del error en mensajes grandes.
Alguno de estos son:    
  • CRC-12.
  • CRC-16.
  • CRC-CCITT.
  • CRC-32.
Puede veniros bien profundizar en el cálculo del resto de una divisón de polinomios mediante operaciones lógicas XOR para entender luego el código que publicaré en sucesivas entregas. 


Aconsejo visitar:
Como veis la teoría es fácil, pero en la práctica, un fichero se compone de millones de bits y calcular el resto de una división de tal calibre es impensable.

En lugar de esto lo que se suele hacer es una mezcla de checksum con CRC, pero esto lo veremos en la próxima entrega, donde nos meteremos de lleno con un código que calcula el CRC de un fichero.

El día que un CRC cambió mi vida

Tal día como hoy, traceando el código desensamblado de una aplicación, me encontré, con sorpresa, un ingenioso método de técnica anti-depuración. El creador de la aplicación comprobaba la integridad de una parte de su código mediante un algoritmo CRC, algo que no se me abría ocurrido en la vida.
Debido a este hallazgo me puse a repasar los libros de la carrera en donde nos explicaban la técnica del CRC, pero con asombro vi que una cosa es la teoría y otra muy diferente es la práctica.
Pues bien, con este y otros artículos próximos quiero hacer que el CRC sea lo más entendible posible, ya que en la red hay infinidad de artículos, pero que se aproximen de los general a lo particular no hay tantos.
Comencemos entonces.
¿Qué es CRC?
CRC es el acrónimo de Código de Redundancia Cíclica o en inglés Cyclic Redundancy Check y es una técnica que se utiliza para comprobar si un flujo binario ha sufrido alguna modificación en el paso de un origen a un destino.
Algunos pensaran ¿flujo qué…?, ¿paso qué…?, vale, vale, un poco más despacio.
Todos sabemos que nuestro mundo está rodeado de dispositivos electrónicos y en donde la información generalmente se codifica con señales electromagnéticas, que habitualmente suelen ser ceros y unos lógicos a los que llamamos bits.
El traspaso de un punto a otro de estos bits es lo que se denomina flujo. Como algunos ejemplos cotidianos podríamos destacar:
  • Descomprimir archivos. Paso de un fichero comprimido (origen) a uno sin comprimir (destino).
  • Ver fotos en nuestros dispositivos. Paso de un fichero binario (origen) a un programa (destino) que interprete esa foto y la visualice.
  • Intercambiar archivos con nuestros móviles por cualquier medio.
  • Mandar un correo.
  • Navegar por la web.
·     Y en general todo lo que implique traspaso de información de un punto a otro.
Ahora pensad ¿qué ocurriría si ese flujo fuese alterado? bien por problemas en el medio de transmisión (cable, ondas, luz, …) o bien intencionadamente por algún personajillo que le guste lo ajeno. Pues que sencillamente nadie podría garantizar la integridad de los datos recibidos y eso en determinados contextos puede ser fatal.
Y es aquí donde entran en juego técnicas como el CRC para comprobar la integridad de un mensaje o flujo de datos.
En la próxima entrega de la saga explicaré el fundamento que hace esto posible.

martes, 2 de marzo de 2010

Como un niño con juguete nuevo

Hace apenas unas horas me he matriculado en un curso semipresencial que no tiene desperdicio "Avances en seguridad en Internet".

Para empezar trata de temas que son mi auténtica pasión y para finalizar se realiza en Salamanca, una ciudad que emana cultura por todos sus rincones o como bien puntualiza mi hermana 'huele a libro'.

Sólo me queda decir a todos los que estudiáis conmigo que aun estáis a tiempo de matricularos ya que el plazo termina el 10 de Marzo y el curso promete.

El temario es:

1. Seguridad en la web, problemática, sistemas y políticas de seguridad (2 horas)

2. Fundamentos de la criptología: (3 horas)
  • Base teórica y fundamentos: criptografía y criptoanálisis

3. Tipos de sistemas criptográficos: (3 horas)
  • Criptosistemas de clave privada: IDEA, DES, TRIPLE DES, AES
  • Criptosistemas de clave pública: RSA, Diffie-Hellman
  • Protocolo SSL

4. Aplicaciones Seguras: (3 horas)
  • Autenticación, Firmas digitales.
  • Funciones resumen: MD5, DSA.
  • Trusted Third Parties.
  • Certificados X.509, Correo electrónico seguro. PGP.
  • Medios de Pago: SSL, SET.
  • Dinero electrónico. Banca electrónica.

5. Técnicas de ataque: (3 horas)
  • Herramientas de recogida de información, Herramientas de búsqueda de debilidades.

6. Técnica de Spoofing: (3 horas)
  • Técnica de sniffer, troyanos, firewalls

7. Auditoría Informática (3 horas)
8. Certificación Profesional (3 horas)
9. Legislación Vigente (2 horas)
10. e-Forensis (2 horas)
11. Programación de Exploits (2 horas)
12. Análisis de ficheros binarios (1 horas)

sábado, 20 de febrero de 2010

Estoy en la nube

Desde hace relativamente poco tiempo y desde mi última visita al Simo Network del 2009, aparece un nuevo vocablo en mi jerga informática que no deja de perseguirme, “la nube”.

Muchos de vosotros ya tenéis claro este concepto, pero seguro que para otros es completamente nuevo. Pues bien para ello es mi reflexión.
Este concepto será el futuro inmediato de todo lo que nos rodea a nivel informático, tanto a usuarios, como a profesionales, y sin olvidarnos de las empresas.
Podemos decir que “informática en la nube” o "cloud computing" es la conexión de todos los recursos que se disponen en la red sin ningún tipo de restricción sobre la máquina en donde nos encontremos.
Es decir, tan solo nos bastará con disponer de un terminal con una capacidad de procesamiento y almacenamiento relativamente pequeña para poder realizar todas nuestras tareas cotidianas, como por ejemplo, crear documentos, hojas de cálculo, desarrollo de software, creación, edición y visionados multimedia como música, imagen y vídeo…y todo lo que se nos ocurra.
Seguro estoy que la mayoría de vosotros ya usáis este concepto sin saberlo. ¿Qué no me crees?, entonces dime que son servicios como iCloud, eyOS, Windows Azure, Dropbox, Filebox, skyDrive, Gmail, iTunes, Spotyfi, Google maps, Google street, Google Earth, Google SketchUp, Google Picasa, .... y así podríamos continuar hasta acabar en el infinito y mas allá.
Todo esto plantea muchas ventajas y a la vez muchas dudas.
Las ventajas son evidentes, simplemente si nos hace falta un servicio y ya está en la nube, haremos uso de él sin preocuparnos por instalaciones, almacenamiento, capacidad de procesamiento y mucho menos del mantenimiento.
Las desventajas, también son evidentes, ¿Qué ocurre con nuestros datos?, ¿Estarán seguros de terceras personas?...
Una de las personas más importantes de este siglo  Richard Stallman asegura que la nube pone en peligro las libertades de los usuarios.
Como podéis observar la polémica está servida.
Por mi parte yo sí que haré uso de ella, siempre y cuando lo necesite. Véase como ejemplo mi descubrimiento de Dropbox (gracias kiko) o filebox, que me permite subir copias de respaldo de mis datos digitales de manera tal, que me despreocupa de posibles borrados accidentales o cosas similares debidos a mi integral despiste. Imagínate que pasaría si se te estropea el disco duro que alberga todas tus fotos, documentos o programas más importantes.
Todo lo anterior ha sido dando una visión superficial a nivel de usuario, imaginaros si nos adentramos a los que nos compete la creación de software, pero eso por el momento lo pospongo.
Para terminar, si os ha picado la curiosidad os invito a que hagáis uso de la nube y visitéis la definición en Wikipedia que no tiene desperdicio.
Saludos y hasta mi próxima reflexión.