Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

viernes, 29 de agosto de 2008

Un ordenador de bambú


Hace unos días conversaba con un amigo sobre un tema relacionado con el que traigo hoy al blog. Hablábamos sobre los costes energéticos y, por extensión, medioambientales, que conllevaba la creación de cualquier producto tecnológico. Por un lado, nos encontramos con que la mayoría de estos productos son renovados continuamente, por lo que la elección de los materiales y procesos de fabricación puede ser crucial a la hora de minimizar el impacto que acarreará para el medio ambiente su obtención. En el caso de un ordenador podemos estar hablando de 1.500 litros de agua, 240 kg de combustibles fósiles y 22 kg de productos químicos. Por esto, aunque no podemos –ni debemos- dejar de lado la importancia del proceso de reciclado de materiales, la elección de aquellos materiales menos contaminantes y fácilmente reciclables se convierte en un asunto crucial, así como que intervengan en su fabricación la menor cantidad de productos químicos posible. Greenpeace, por ejemplo, publica anualmente una guía de electrónica verde por la que podemos guiarnos a la hora de saber qué compañías usan más o menos componentes químicos contaminantes en la fabricación de sus productos. Este año, Nintendo, Philips y Microsoft comparten el dudoso mérito de ser los primeros de la lista… empezando por la cola. Obviamente, este tipo de información es útil para los consumidores, siempre y cuando se evalúen otros factores, como la vida útil del aparato –ya que un producto poco contaminante pero que requiera su renovación cada 2 ó 3 años podría perder puntos frente a otro que durase, pongamos, 10 años-, o el consumo energético del mismo, ya que en la producción de energía, las renovables, desgraciadamente, ocupan un puesto poco destacado de momento. Para la medida del consumo de nuestros equipos podemos echar mano de calculadoras como la que proporciona myGreenElectronics, o de aplicaciones como Local Cooling, que nos ayudan a controlar el consumo eléctrico.


Volviendo al tema de la fabricación y reciclado de los componentes de nuestros ordenadores, quería hablar de la iniciativa de Asus (Eco Book), a la que parecen sumarse Dell (Eco Bamboo) y Fujitsu (WoodShell), de fabricar ordenadores revestidos de bambú, en lugar de aluminio o plástico. En el caso de Asus se llega más allá, ya que los plásticos que incorpora el equipo (por ejemplo, en las teclas) provienen de plástico reciclado. La idea me parece ingeniosa, especialmente en el caso de Asus y Dell, en el que el material a usar para las carcasas será el bambú, que es a un tiempo resistente y liviano, y cuyo crecimiento es bastante rápido. Fujitsu, por su lado, pretende lanzar un portátil de madera de cedro, que estimo será algo más pesado que el de sus competidores. Aunque el cedro es un árbol de crecimiento rápido, según leo su aprovechamiento maderero puede darse a partir de los 8 años de edad, por lo que requerirá un mayor periodo de cultivo, y más aportes hídricos, aunque su explotación podría compatibilizarse, por ejemplo, con la apicultura, al tratarse de una especie melífera.



Ante esto, podríamos plantearnos que se trata de una genial idea, que minimizaría la producción de componentes contaminantes, aprovecharía parte de otros equipos gracias al reciclado de plásticos, y requeriría menos productos químicos en su elaboración, ¿verdad? Bueno, lo cierto es que no exactamente. Cuando he visto el Asus EcoBook Bamboo en la página de Informática Verde, me ha parecido inicialmente interesante, pero me ha dado por pensar qué ocurrirá con las siguientes cuestiones:




  • Las explotaciones madereras de bambú o cedro rosado están tomando especial relevancia en las selvas de Sudamérica. Para poder crear una plantación competitiva, es necesario limpiar y desbrozar grandes extensiones de selva. Lo de limpiar es un claro eufemismo para talar…




  • Estas especies proceden de países asiáticos (China, la India…), y son plantados sin más en otros países donde son especies exóticas. No abundaré en ello, pero uno de los grandes problemas a nivel mundial de la globalización de las comunicaciones, y la intervención humana en las poblaciones autóctonas es la introducción de este tipo de especies, que de un uso ornamental o simple explotación agrícola pasan a constituirse en plagas en toda regla.




  • Los monocultivos requieren un uso intensivo de pesticidas y fungicidas para evitar las plagas en las cosechas. El cedro, además, es muy dado a sufrirlas, y aunque no me consta algo así del bambú, es bastante que ocurra algo parecido simplemente por la masificación en los cultivos. Así, aunque en el proceso último de construcción de los ordenadores se usase la menor cantidad de productos químicos, de nada serviría si éstos se vertieron ya en origen.





¿Quiero decir con todo esto que sería mejor quedarnos como estamos? Evidentemente, la respuesta es un no rotundo. Es necesario que se produzcan iniciativas como éstas, que lleven a la industria tecnológica un paso más allá, y empecemos a pensar no sólo en gigahercios y terabytes, sino también en las implicaciones que tienen sobre la industria y nuestro entorno las decisiones que tomemos. Pero no lo es menos que debemos investigar y reflexionar (en esto, como en todo en la vida), antes de tomar una determinación. Las empresas, obviamente, van a vendernos lo que queremos o está de moda en un determinado momento –caso actual de la ecología-, pero posiblemente se quedarán contándonos todo acerca de “la parte contratante de la primera parte”, por no llegar a lo que hay más abajo. Por ejemplo, y aunque Asus ha sido quien ha innovado con este tipo de materiales de fabricación, no podemos olvidar que no hace tanto lanzaba sus portátiles S6 y F8P revestidos de piel, o el monitor LS221H, con acabados en el mismo material. No entraré aquí –por no tratarse del lugar más adecuado- en los costes ambientales de la cría de animales, ya sea para la alimentación y/o estos usos, pero avanzo que son muy, muy elevados.


Dicho todo esto, me mojaré un poco. ¿Compraría un ordenador así? Posiblemente sí; en función de lo transparente que fuese el proceso de fabricación de estos equipos, personalmente me plantearía adquirir uno, en similitud de condiciones, pongamos, que un altamente contaminante Apple MacBook Air. Pero no sólo los materiales usados serían determinantes a este respecto, sino que influirían, como apuntaba más arriba, condicionantes como el consumo energético medio del producto, o la vida útil estimada para el mismo.

miércoles, 27 de agosto de 2008

¿Y tú de quién eres?


Aunque no se trata de un sistema de spam novedoso, en el último mes vengo sufriéndolo en mis carnes, ya laceradas por los comentarios basura de diversos sitios, de los que sólo me libra el uso de Askimet, que diligentemente y con absoluta eficiencia se dedica a clasificarlos y eliminarlos por mí. Hablo hoy del spam en los referers o en la referencia que incluye la cabecera de una petición GET de un cliente web al servidor. Es esta referencia la que nos permite saber de qué dirección provienen nuestros visitantes, posibilitando así la creación de aplicaciones estadísticas (por ejemplo, saber de qué sitio viene tal o cual visitante, qué cadena usó en el buscador para encontrar nuestro sitio web, etc).


En el caso de Lobosoft, hace bastantes meses incluí una opción (la barra lateral “Nos encuentran por”) que permitía ver a los lectores del blog la proveniencia de aquellos que les precedieron. Quería así mostrar un poco más de información de aquello que estaba siendo buscado en un determinado momento, puesto que la temática del blog, aun girando siempre en torno al mundo de la informática, ha ido diversificándose con el transcurso del tiempo. El caso es que (en particular) desde que sufrí la sucesión de ataques que tantas líneas y cambios en el blog han venido provocando aportando últimamente (incluyendo este retorno que contaré otro día a la imagen originaria del mismo) uno de los problemas que ha venido sumándose es el del spam en forma de “visitas” desde sitios web pornográficos, que prometen hacernos ricos en un santiamén, o de los que simplemente se intuye que albergan en sus entrañas los más sofisticados malwares. Una delicia para los sentidos, vaya. Este tipo de spam ha proliferado junto a la expansión sin precedentes de los blogs, ya que ha encontrado en éstos el caldo de cultivo adecuado para contar con multitud de sitios web de interés, muy visitados y dotados de contenido que se actualiza con relativa frecuencia. El ataque es sencillo: se basan en bots que van recorriendo las webs usando como “trampolín” aquéllas que quieren publicitar, simulando un salto a través de un enlace que realmente no existe en éstas. Es decir, que si quiero hacer publicidad de misitioguay.com en el blog de elpardillo.es, hago una petición a elpardillo.es a través de un GET modificado que le indica al servidor que provengo de misitioguay.com, y el bueno de mi víctima creerá ver que misitioguay.com contiene un enlace a elpardillo.es, cuando no es así. Gano con ello que Pardillo me verá en sus estadísticas y puede ser que me visite, y si además es tan gentil de tener en su blog una lista de los sitios que le apuntan o desde los que lo visitaron, que sus potenciales lectores puedan ver el enlace y venir también a mi sitio. Hay páginas que han sufrido este tipo de ataques en el pasado, como la archiconocida Microsiervos, y por desgracia seguirá ocurriendo día sí y día también en Internet.


Ante este percal, ¿qué se puede hacer? Como apuntaba antes, poca cosa. Si nos han “fichado” y ven que nuestro sitio les proporciona visitas, seguirá habiendo bots que acudan cada cierto tiempo simulando el paso de usuarios reales. El perjuicio para nuestro sitio web viene determinado por el consumo de ancho de banda que realizan (ya que nuestro servidor les devolverá el contenido de la página que solicitaban), por contar con unas estadísticas “sucias”, y por una pérdida de credibilidad por parte de los usuarios y buscadores. Sin embargo, no está todo perdido. Precisamente gracias a mis queridos atacantes rusos he tenido que refrescar un poco los conocimientos sobre .htaccess (que ya mencioné en su día al hablar del spam en los comentarios) y sobre el que hablaré más a fondo en un futuro próximo. Con el “spam referer” también podrá ayudarnos, si no evitando que siga produciéndose, sí al menos controlando lo que nuestro servidor envía a estos molestos visitantes. Podemos sobrescribir así las directivas de .htaccess para que Apache no devuelva más que una cabecera, o proporcione un error 403 (Forbidden), evitando el consumo de ancho de banda, aunque suponga en cualquier caso un trabajo mayor para el servidor.


El .htaccess resultante podría asemejarse a:


RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?adult(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?casino(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?porn(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?sex(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?pus*y(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?nude(-|.).*$ [OR]
...
RewriteRule .* - [F,L]


La línea con el RewriteRule hará que Apache devuelva un forbidden a aquellos visitantes provenientes de dominios que coincidan con la expresión indicada. Si deseamos por el contrario que el visitante sea redirigido a otra página, podríamos sustituirla por



RewriteRule \.*$ http://www.sitio_al_que_redirigir.com [R=300,L]


o incluso “devolverle la pelota” para que consuman también un poco de ancho de banda, haciendo que se produzca una petición a su propio servidor:


RewriteRule /* %{HTTP_REFERER} [R=301,L]


Similar a este tipo de spam es el que se incluye en los trackbacks a entradas de nuestros blogs. En particular, Drupal parece muy sensible a dicho tipo de ataque (aunque es fácil de controlar mediante la moderación de trackbacks, aun sin dejar de ser un latazo), y es el que más ha venido sufriendo Lobosoft en las semanas que este CMS ha sustituido a Wordpress para darme un poco de descanso vacacional :) .


Para saber más:


martes, 26 de agosto de 2008

Esteganografía en .NET

Ya estoy de nuevo por aquí. Tras unas vacaciones, no sé si merecidas pero sí largo tiempo anheladas, me dispongo a retomar las riendas del blog. Quería haber aprovechado estos días de descanso para avanzar un par de proyectos que tenía en mente, así como para volver a dar formato a las entradas antiguas del blog, que quedaron bastante deterioradas tras la importación que tuve que llevar a cabo de Wordpress al nuevo CMS. Un trabajo arduo y que me llevará tiempo, pero que como digo, aún no he iniciado porque pudo conmigo "la letal desidia" que me atenazaba.


En cualquier caso, he de ponerme pronto con ello. Pero entretanto, me gustaría dejaros un par de enlaces a un recurso que me ha parecido tremendamente interesante. Se trata de una serie de artículos (en inglés) de la desarrolladora alemana Corinna John, que incluye tanto en su sitio web como en CodeProject. En ellos profundiza en la esteganografía y el desarrollo de un framework en torno a esta técnica de ocultación de información en archivos poco convencionales: desde imágenes a videos, pasando por ficheros MIDI y ensamblados en .NET. Altamente recomendable si os interesa esta disciplina.

miércoles, 20 de agosto de 2008

Toribash, la sangrienta batalla por la supremacía


Hace unos días encontré un juego que me pareció bastante original, me llamó la atención y decidí descargarlo y probarlo. Tras hacerlo, he de admitir que ha cumplido sobradamente con las expectativas generadas, y es que aunque inicialmente resulta un poco confuso, termina por ser bastante adictivo. Se trata de Toribash, un juego de lucha (bastante sangriento) en el que debemos planificar una estrategia de ataque diseñando nosotros mismos los movimientos de nuestro guerrero. En efecto, no estamos ante un juego de lucha al uso, en el que existan movimientos predefinidos, combos ocultos de alucinantes resultados, y nuestro objetivo sea derrotar al contrario en uno o varios asaltos. En Toribash, debemos definir en una primera fase cómo se irán produciendo los movimientos de nuestro luchador en cada momento, relajando y tensando los músculos de su cuerpo, manteniendo la posición o extendiéndolos para que sus articulaciones permitan llevar a cabo el ataque esquivando el del contrario, todo ello para conseguir decapitar al contrario (como si del mítico Barbarian se tratase). Además, incluye la posibilidad de grabar scripts de movimientos, módulos con distintos tipos de guerreros (desde aviones en modo “transformer” hasta gusanos), así como la posibilidad de personalizarlo a nuestro gusto mediante los puntos que podemos obtener a través de la lucha en Internet con otros jugadores.


Sin duda, un curioso lanzamiento que merece la pena probar, por su originalidad, por tratarse de un lanzamiento de la escena independiente y, sin duda alguna, por la adicción que despierta el particular sistema de juego, mezcla de estrategia por turnos y de conocimiento de los rudimentos de la Física.


http://www.youtube.com/v/xsU_5bP8eGg&color1=11645361&color2=13619151&fs=1;rel=0

domingo, 17 de agosto de 2008

Serialización XML de un diccionario genérico en .NET

En el .Net Framework 2.0, los diccionarios genéricos no permiten, a priori, la serialización XML. Hace unos meses, trabajando en un proyecto que requería el uso de este tipo de colecciones para facilitar el paso de parámetros y la configuración del estado de unos objetos en Windows Workflow Foundation, me encontré con la “agradable” sorpresa de la falta de soporte en WF del uso de genéricos en las actividades personalizadas que podíamos desarrollar. Si bien un objeto de una determinada clase era configurable desde el editor de Workflow (en el propio IDE de Visual Studio), y permitía la ejecución del flujo de trabajo sin mayor problema, en cuanto pretendíamos incluir el uso de genéricos como una de las propiedades de la actividad en aras de obtener una mayor flexibilidad en la configuración de aquella, el Workflow perdía el estado del objeto cuando comenzaba su ejecución. Para resolver este impedimento (tan inexplicable cuando hablamos de la versión 3.5 del Framework), me vi obligado a implementar la serialización de las actividades personalizadas, así como del objeto diccionario que exponía como una propiedad inicializada en tiempo de diseño, y configurable para obtener la ejecución deseada de la actividad.


En la entrada de hoy presento una breve introducción a una posible implementación de la serialización XML de un diccionario genérico, aunque existen diversos enfoques para resolverla. De hecho, Scott Hanselman habla en su blog sobre la serialización de listas genéricas, en una entrada que recomiendo leer, ya que resulta complementaria a la mía.


Lo primero que debemos hacer es crear una clase etiquetada como serializable que heredará del diccionario genérico Dictionary, e implementará el interfaz IXmlSerializable [Líneas 11-14]. En mi caso, he nombrado a esta clase XDictionary (por eXtendedDictionary), e incluirá tres propiedades protected que permitirán la configuración de los nombres de las etiquetas XML para los campos del nombre del objeto, de la clave y el valor (por cada elemento incluido en nuestro diccionario a serializar). [Líneas 17-23]. Además del constructor sin parámetros, que da nombres concretos a las propiedades para una instancia de esta clase, incluyo un constructor que recibe dos parámetros, uno de tipo SerializationInfo y otro StreamingContext [Líneas 25-39]. De momento, y para la entrada de hoy, no será necesario entrar en ellos, ya que éste último es necesario fundamentalmente para su uso con WF. En cuanto a los miembros del interfaz IXmlSerializable, implementaremos obligatorialmente el método GetSchema, aunque simplemente devolveremos null, aunque podríamos implementar un esquema determinado para nuestro XML.


El meollo del asunto se encuentra en los métodos ReadXml y WriteXml. El primero de ellos recorre el XML insertando los valores encontrados en el mismo en un diccionario genérico, creando un par por cada nodo del XML que coincida con la configuración que especificábamos al inicializar el diccionario mediante sus propiedades protegidas. El valor es deserializado usando el deserializador del tipo correspondiente al valor –ya se sabe: el deserializador que lo deserialice, buen deserializador será-. Incluyo también una comprobación sobre la clave, ya que si existe previamente en el diccionario saltaría una excepción si intentamos insertarlo nuevamente. En este caso, sustituyo el valor previo por el encontrado posteriormente. Otras aproximaciones podrían pasar por ignorar este segundo encuentro, o por capturar la excepción y tratarla si llegase a producirse.


En cuanto al método WriteXml, su funcion es justo la contraria –o complementaria- a la de ReadXml. Se dedica a recorrer el diccionario genérico y a crear la estructura XML necesaria para albergarlo. Los valores son serializados usando el serializador propio del tipo que corresponda a aquellos.


El código podría usarse para crear una biblioteca de utilidad con clases abstractas, por ejemplo, que implementasen funcionalidades extendidas para las colecciones en .Net. En una futura entrada veremos cómo usarlo en combinación con WF para serializar un diccionario en tiempo de diseño y poder usarlo junto a esta novedosa tecnología. A continuación, por tanto, el código fuente de la entrada:




.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: Consolas, "Courier New", Courier, Monospace;
background-color: #ffffff;
/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}

.csharpcode .lnum { color: #606060; }


   1:  using System;

   2:  using System.Collections.Generic;

   3:  using System.Linq;

   4:  using System.Text;

   5:  using System.Xml.Serialization;

   6:  using System.Xml;

   7:  using System.Runtime.Serialization;

   8:   

   9:  namespace Lobosoft.Collections.Extended

  10:  {

  11:      [Serializable(),

  12:      XmlRoot("dictionary")]

  13:      public class XDictionary 

  14:          : Dictionary, IXmlSerializable

  15:      {

  16:          

  17:          #region Properties

  18:          

  19:          protected string ItemName { get; set; }

  20:          protected string KeyName { get; set; }

  21:          protected string ValueName { get; set; }

  22:          

  23:          #endregion

  24:   

  25:          #region Constructors

  26:          

  27:          public XDictionary()

  28:              : base()

  29:          {

  30:              Initialize();

  31:          }

  32:   

  33:          public XDictionary(SerializationInfo info, StreamingContext context)

  34:              : base(info, context)

  35:          {

  36:              Initialize();

  37:          }

  38:          

  39:          #endregion

  40:   

  41:          #region IXmlSerializable Members

  42:          /// 

  43:          /// Inicialmente, no tenemos un esquema XML para el diccionario

  44:          /// 

  45:          /// 

  46:          public System.Xml.Schema.XmlSchema GetSchema()

  47:          {

  48:              return null;

  49:          }

  50:   

  51:          /// 

  52:          /// Deserializa el XML dentro de un diccionario genérico, usando el XmlReader.

  53:          /// 

  54:          /// 

  55:          public void ReadXml(XmlReader reader)

  56:          {

  57:              XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));

  58:              XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));

  59:   

  60:              bool wasEmpty = reader.IsEmptyElement;

  61:   

  62:              reader.Read();

  63:   

  64:              if (wasEmpty)

  65:                  return;

  66:   

  67:              reader.ReadStartElement(ItemName + "s");

  68:   

  69:              while ((reader.NodeType != XmlNodeType.EndElement) &&

  70:                     (reader.NodeType != XmlNodeType.None))

  71:              {

  72:                  reader.ReadStartElement(ItemName);

  73:                  reader.ReadStartElement(KeyName);

  74:                  TKey key = (TKey)keySerializer.Deserialize(reader);

  75:                  reader.ReadEndElement();

  76:   

  77:                  reader.ReadStartElement(ValueName);

  78:                  TValue value = (TValue)valueSerializer.Deserialize(reader);

  79:                  reader.ReadEndElement();

  80:   

  81:                  if (this.ContainsKey(key))

  82:                  {

  83:                      this[key] = value;

  84:                  }

  85:                  else

  86:                  {

  87:                      this.Add(key, value);

  88:                  }

  89:   

  90:                  reader.ReadEndElement();

  91:                  reader.MoveToContent();

  92:              }

  93:   

  94:              reader.ReadEndElement();

  95:   

  96:          }

  97:   

  98:          /// 

  99:          /// Serializa el diccionario, usando el XmlWriter que se le pase como argumento.

 100:          /// 

 101:          /// 

 102:          public void WriteXml(System.Xml.XmlWriter writer)

 103:          {

 104:              XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));

 105:              XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));

 106:   

 107:              writer.WriteStartElement(ItemName + "s");

 108:              foreach (TKey key in this.Keys)

 109:              {

 110:                  writer.WriteStartElement(ItemName);

 111:                  writer.WriteStartElement(KeyName);

 112:                  keySerializer.Serialize(writer, key);

 113:                  writer.WriteEndElement();

 114:   

 115:                  writer.WriteStartElement(ValueName);

 116:                  TValue value = (TValue)this[key];

 117:                  valueSerializer.Serialize(writer, value);

 118:                  writer.WriteEndElement();

 119:                  writer.WriteEndElement();

 120:              }

 121:              writer.WriteEndElement();

 122:          }

 123:          #endregion

 124:   

 125:          #region Methods

 126:   

 127:          private void Initialize()

 128:          {

 129:              ItemName = "myItemName";

 130:              KeyName = "myKeyName";

 131:              ValueName = "myValueName";

 132:          }

 133:   

 134:          #endregion

 135:      }

 136:  }

sábado, 16 de agosto de 2008

Con la aparición estelar de...

Los amantes del rol, los videojuegos y el heavy metal están de enhorabuena. La segunda parte del juego de rol (RPG) Sacred, Fallen Angel, saldrá a la luz el próximo septiembre, y entre los alicientes que nos encontraremos en el mismo se encontrará la música de Blind Guardian, a los que podremos ver caracterizados en un concierto dentro del propio juego.



Es conocida la afición de los miembros de la banda de power metal a la literatura fantástica y a los videojuegos, y de hecho no es la primera vez que sus canciones hacen alusiones a esta temática: títulos como Otherland -por la saga de ciencia ficción de Tad Williams-, o The Lord of The Rings se unen al disco-homenaje al Silmarillion de Tolkien, Nightfall in Middle-Earth, por lo que no es de extrañar este cameo dentro de un juego de estas características.



Aunque este tipo de noticia no es novedosa (de hecho, pudimos ver cómo los holandeses Within Temptation aportaban el tema The Howling a la banda sonora del MMO Chronicles of Spellborn), sí lo es el hecho de incluir a los propios músicos dentro de la trama del juego, aportando para sus seguidores la riqueza de encontrarlos actuando con unos peculiares instrumentos que han contribuido a diseñar.


http://www.youtube.com/v/hk_pHrbUyaI&hl=en&fs=1;rel=0


Ahora, a esperar el lanzamiento del juego, que aparecerá disponible para varias plataformas: Xbox 360, PS3 y PC.

miércoles, 13 de agosto de 2008

Divagando

Tras los insistentes ataques sufridos por el blog, como bien sabéis quienes me leéis habitualmente, decidí cambiar el CMS que uso para la publicación. Hasta el momento, en Lobosoft había usado Wordpress en sus versiones 2.3.1 a 2.6 (pasando por la 2.3.2, 2.3.2 “MU” y 2.5.1), ya que me pareció -y sigue pareciendo- una completa gozada a nivel de usuario.


Aunque me inicié en este mundillo con un blog de Blogger, la capacidad de expansión (casi) ilimitada de Wordpress gracias a la amplia cantidad de plantillas y plugins disponibles me gustó tanto que me decidí a probarlo, no en la versión de Wordpress.com, más rápida en su configuración pero menos flexible por las limitaciones propias del hosting que ofrece Wordpress, sino descargando el software de Wordpress.org e instalándolo en mi propio servidor. Y he de admitir que me encantó. Era como tener una especie de CMS “mecano” que ir construyendo poco a poco, y haciéndolo crecer. Su interfaz de usuario además es sencillísima, ya que al estar especialmente orientado a la publicación de entradas no provoca una sensación de desorientación en el usuario, que enseguida sabe dónde encontrar cada cosa.


Lo cierto es que Wordpress pronto me mostró su cara más cruel, ya que debido a la ingente cantidad de memoria que consumen tanto su core como los plugins instalados tuve algún que otro problema, pero que con algunos ajustes en la configuración de Apache quedo pronto atajado, de modo que en verdad no podía quejarme. De hecho, en su momento álgido, Lobosoft llegó a tener más de 20 plugins ejecutándose, configurados adecuadamente e incluso modificados en algunos casos para ofrecer una funcionalidad extra, o para interactuar entre sí ofreciendo nuevas capacidades al blog, tanto a nivel administrativo como en cuanto a la visión que ofrecía a los usuarios del mismo. De ahí mis reticencias a la hora de llevar a cabo actualizaciones completas (iba actualizando los módulos vulnerables conformen aparecían problemas de seguridad), que desembocaron hace unas semanas en la obligación de dar el salto a la versión 2.5.1, tras los primeros ataques hackers al blog, desactivando de paso gran parte de los plugins.


Esta acción me proporcionó unos días de respiro, pero la persistencia de los atacantes obtuvo su fruto y dieron con un nuevo agujero de seguridad. Actualicé a la versión 2.6, pero días después atacaban mediante SQL-Injection al plugin Now Reading que tenía instalado para ir mostrando qué libros me encontraba leyendo en un momento dado, intentando realizar una escalada de privilegios y acceder como el usuario administrador del blog. Por último, y tras ver cómo era rodeado por más y más atacantes, decidí cortar por lo sano y proteger el sitio web mediante directivas a Apache incluidas en el correspondiente archivo .htaccess. Esto dio un mejor resultado, protegiendo definitivamente el blog, pero para entonces Wordpress me había tocado la moral y el orgullo, y comencé a investigar sobre el mismo. Tras encontrar un mar de críticas sobre la seguridad de WP, decidí cambiar de sistema de publicación. Resumiendo, que tras hacer variados pinitos detectivescos averiguando por dónde entraban las ratas al barco, decidí ser yo mismo quien lo hundiera antes de que se comieran todo el queso.


Pero dado que Wordpress se ha convertido en el CMS más difundido a la hora de crear bitácoras y, por ende, es usado y se seguirá usando con este fin, podríamos dar una serie de consejos respecto a su seguridad que nos harán la vida un poco más fácil. Y diréis: “¿cómo osas dar consejos cuando tu propio blog ha sido atacado y vencido por los hackers?” Y os responderé: “bien decís, amados lectores. Mas si he sido defenestrado por los hackers no ha sido más que por mi inconsciencia, y una vez caído, tras levantarme y sacudirme el polvo del camino, he mirado hacia arriba y he presenciado con pesadumbre y cierta sensación de vértigo los despropósitos que había cometido debido a mi cerrazón. Además, que más sabe el diablo por viejo que por demonio”.


¿Y a que viene todo esto? Pues que en el próximo post encontraremos un resumen de la jugada. ¡Salud!

Al principio fue el post

Ayer divagaba un poco en torno a la blogosfera, Wordpress, y la andadura de Lobosoft en estos meses de vida, pensando en voz alta sobre las problemáticas que me había ido encontrando en estos últimos tiempos en lo que a seguridad se refiere. Así las cosas, si tuviera que volver a crear el blog desde cero, ¿habría seguido el mismo camino? La respuesta, en la entrada de hoy.


Imaginemos que deseamos crear un blog para escribir de nuestras vivencias e inquietudes. Lo primero que deberíamos plantearnos es para qué queremos el blog. ¿Simplemente para escribir? Si es así, posiblemente la mejor opción sea delegar (como me sugería ayer un buen amigo ;)) la seguridad y el mantenimiento del sitio en uno de los proveedores de blogs existentes: Blogger y Wordpress.com son buenas opciones, ya que permiten configurar el blog a partir de una serie de plantillas preinstaladas, además de poder redirigir nuestro dominio, si lo poseemos, para que el blog sea accesible a través del mismo. Existen otras muchas opciones, como Bitacoras.com o Weblogs S.L., por poner un par de ejemplos. A la comodidad de uso, se le suman las ventajas de pertenecer a una amplia comunidad de bloggers: el Page Rank de estos sitios es elevado; las entradas aparecen publicadas, además de en nuestro blog particular, en la página principal del sitio; existen buscadores internos por temáticas, noticias, usuarios…


Ahora bien, si además de escribir queremos tener más control sobre cómo y qué mostramos a nuestros lectores, mayor facilidad a la hora de realizar o restaurar copias de seguridad, y hacer que nuestro blog sea aún más personal, habrá que decantarse por usar un CMS apropiado. Opciones muy deseables son Movable Type (Perl), el decano de los CMS orientados a blogs; Wordpress (PHP), el más extendido; Textpattern (PHP), una alternativa que no desmerece a Wordpress; Serendipity (PHP), con el código bastante limpio pero una interfaz de administración demasiado espartana para el usuario medio; BlogEngine (C# .NET), una opción muy similar a Wordpress, aunque le falta algo de rodaje. En cuanto a CMS más genéricos, que igualmente pueden cubrir nuestras necesidades presentes y futuras, podríamos contar con Joomla (PHP), muy extendido y ampliamente personalizable, y Drupal (PHP), que aunque requerirá algo más de trabajo por nuestra parte, resulta una de las mejores opciones posibles, por su facilidad de configuración y posibilidades de expansión, tanto para montar blogs multiusuario como para desarrollar portales completos usándolo como base.

lunes, 11 de agosto de 2008

Lobosoft 2.0, Entrada 1.0

Bueno, pues ya estoy aquí de nuevo. En los próximos días os contaré un poco más a fondo mis indagaciones en torno a varios CMS que hay en el mercado, y la profunda decepción que me he llevado con Wordpress. A ver si hay más suerte ahora :)



Respecto al blog, aún quedan cosas por hacer. El nuevo estilo que le he estado creando tiene algunas fisuras, y hay ciertas páginas que no se visualizan correctamente. También debo cambiar gran parte de las antiguas entradas, en particular aquellas que incluyen código fuente, para que puedan verse como antes, y se habiliten las descargas de código y documentos. Pero será en lo sucesivo, llevo un buen día reconfigurando todo, tanto que no parece que esté de vacaciones, jeje.

sábado, 9 de agosto de 2008

¿Vacaciones?


Ayer, viernes, me disponía a escribir una entrada por la noche para avisar de los posibles estragos que puede hacer el periodo vacacional en el blog. Ya sea por defecto (porque ande en otras mil cosas y no escriba demasiado estos días) o por exceso (porque me dedique a escribir compulsivamente por aquí), las dos semanas de vacaciones que tengo por delante podrían dejar su huella en el blog. Sin embargo, como estáis comprobando, no llegué a escribirla. ¿Por qué?


Porque me están tocando la moral soberanamente. Cuando me autentiqué en el blog para escribir la entrada que os comentaba, accedí al panel de estadísticas para ver qué andaba buscando la gente un viernes de agosto por la tarde. Y me encontré con que la crisis que estamos viviendo en los últimos tiempos se vuelve más y más acuciante. Tanto como para buscar créditos bancarios en un blog de informática:



Otra vez no, j@d&r.


Pues sí, va a ser que sí. El fichero footer.php modificado. Esta vez, siguiendo la pista, es una IP que viene del país de las libertades, los grandiosos Estados Unidos de América. Entre los americanos y los rusos, me tienen frito.



Esta vez no se trata de un proxy anonimizador, como hace unos días, sino que la IP no se corresponde con una máquina del proveedor de Internet americano MegaPath. El ataque, además, ha sido completamente distinto a los anteriores. El aburrido lamer que ha estado por aquí ha usado un programa para intentar obtener contraseñas por fuerza bruta mediante SQL-Injection. El user-agent estaba basado en Microsoft .NET (usaba el framework 2.0), y había realizado más de 6000 peticiones durante la mañana de ayer. A media tarde, otra máquina con IP similar había hecho algo parecido, aunque usaba otro bot más avanzado (con el .NET Framework 3.5), y parecía tener instalado InfoPath.2 en su máquina (una aplicación de Microsoft para la gestión de datos XML), posiblemente para recolectar información de las máquinas atacadas. Como resultado, a última hora de la tarde habían conseguido colar un DIV oculto en el footer.php con un par de enlaces, los que aparecían en las estadísticas.



Aunque no he encontrado vulnerabilidades reconocidas para el plugin Now Reading que uso en el blog para mostrar lo que estoy leyendo, parece que todo el ataque se ha basado en realizar consultas y actualizaciones a través del mismo. Tras no saber si reír o llorar, limpié de nuevo la plantilla de Wordpress, desactivé el plugin en cuestión y me planteé seriamente dejar de lado WP para sustituirlo por otro CMS que presentase menos vulnerabilidades. Tal y como comentaba el otro día por aquí Des, al fin y al cabo Wordpress ha sido nominado en los premios Pwnie-Awards 2008:


Discovered by: everybody who cared to look
It seems like hardly a week goes by without a new vulnerability in WordPress or one of its many plugins. Many of them are actively being exploited to own popular WordPress blogs and use them to serve spam or client-side exploits to unsuspecting visitors. The popularity of WordPress combined with the abysmal security practices of WordPress plugin developers places the entire Internet at risk and is worthy of a nomination.


De modo que ya sé a qué voy a dedicar los primeros días de vacaciones, aunque las expectativas no son del todo halagüeñas. Como tantas otras aplicaciones ampliamente difundidas, los CMS más usados presentan vulnerabilidades que son descubiertas día a día. Usar un CMS menos común no es más seguro de por sí, ya que aunque tenga menos probabilidades de ser atacado, al estar menos “rodado”, los problemas que puede presentar serían incluso más graves. Y la profusión en los ataques de las últimas semanas, no puede ser casual. Con toda probabilidad los primeros ataques efectivos provocaron que el dominio lobosoft.es entrase en alguna base de datos de sitios vulnerables para los hackers, y de ahí el incremento de los ataques de todo tipo que ando sufriendo últimamente.


Otra opción que me planteo es crear un CMS propio, tal vez aprovechando estos días y usando algún framework de desarrollo rápido como CodeIgniter, que tengo ganas de probar desde hace casi un año, y hasta el momento no había tenido tiempo. Aunque eso no me libraría de los ataques, tendría la opción de intentar desarrollar un CMS que fuese simple (justo lo que necesito para mantener el blog) y que estuviese orientado fundamentalmente hacia la seguridad.


Entretanto, y mientras decido qué hacer, he establecido unas políticas de seguridad un poco más duras sobre el sitio web, ampliando el .htaccess para que deniegue cualquier tipo de petición extraña o mal construida, y bloquee el acceso a determinados directorios del sitio web. Por eso, si obtenéis algún problema al acceder a los recursos del blog, o a cualquier a de las entradas, os agradecería que me lo comunicaseis para solucionarlo a la mayor brevedad. Esperemos, ahora sí, que el castillo aguante un poco más el asedio.


NOTA:


Temporalmente no funciona el plugin de descargas. Si necesitas algún archivo (código fuente o documento) de forma apremiante, solicítalo a través del formulario de contacto del blog.

miércoles, 6 de agosto de 2008

Generación automática de temas para Wordpress


Una de las características de Wordpress, al igual que ocurre con otros CMS como Joomla o Drupal (por citar tan sólo un par de ellos), es la capacidad de transformación que posee gracias al uso de temas (themes) o plantillas (templates), disponibles para su descarga en Internet, bien gratuitamente, bien a cambio de un importe determinado. Sin embargo, es posible modificarlos pada adaptarlos a nuestros gustos y necesidades, pero lo cierto es que es complicado dar con uno que nos guste especialmente, aunque siempre podemos crearlo de cero a partir del tema básico que incorpora la instalación de Wordpress. En cualquier caso, existe un servicio bastante interesante para aquellos que no dominen las triquiñuelas del HTML, el PHP y las CSS, que permite crear una plantilla personalizada de Wordpress a través de un menú de configuración. Se trata del Wordpress Theme Generator, que produce temas compatibles con las versiones 2.1 a 2.6 del conocido CMS para la creación de blogs. La configuración se realiza a través de un menú y permite la previsualización del tema antes de descargarlo en un cómodo paquete comprimido en ZIP.

En el laberinto multidimensional

Los juegos de reglas sencillas y complejidad creciente suelen ser tremendamente adictivos. Si a estas características añadimos la posibilida de jugar on-line, y que me gustan los laberintos casi más que a Borges, no es de extrañar que me haya pasado las horas muertas con este laberinto multidimensional que podemos encontrar en Casual Gameplay, un sitio web dedicado a videojuegos Flash.



El juego lo conocí a través de Jay is Games, un blog colectivo bastante interesante que trata sobre videojuegos, y que os recomiendo a todos aquellos que os gusta, por ejemplo, Malvicio. En este blog encontré también la referencia de El laberinto circular, ejemplar de un curioso e interesante concepto: el cyber-comic.



El laberinto esférico nos brinda una aventura interactiva, fácil de jugar pero muy interesante, en la que nos vamos adentrando en una historia algo surrealista pero igualmente divertida, y que nos podrá hacer pasar un buen rato.



Ha ganado el primer premio de un concurso de cyber-comics, y la verdad es que tanto por su aspecto visual como por la historia en sí, parece merecerlo. Probadlo, conoced un poco más a su autor, y ya me contaréis.


Sufrimos un nuevo ataque XSS


Estimado lammer:



Me consta que en las frías noches al este de los Urales, cuando el ulular del cárabo rasga el silencio y el lobo recorre la estepa siberiana buscando una presa de la que alimentarse, tú te aburres soberanamente. Por eso, entiendo que te ocultes entre las sombras, frente al brillo de tu monitor en el interior de tu habitación, y te dediques al juego de los hackers. Es divertido colarse en los sistemas ajenos, no sabes cómo te entiendo. Pero los hackers de verdad no se dedican a llevar ataques de Cross Site Scripting a sitios con Wordpress, ni a inyectar HTML con enlaces a sitios web de juegos de azar o pornográficos. Tal vez por esto, amigo mío, los cuatro copeks que te dan por llevar a cabo este trabajo valgan más que tu dignidad.

Y deja ya de tocarme la moral, ¡c@#@!

Sin rencor,

Lobosoft.

Bueno, si no nos tomamos lo que nos viene con un poco de humor, sería para tirar la toalla. El pasado mes Lobosoft sufría un ataque XSS que me hacía perder posicionamiento en Google, debido a una inyección de código HTML en el archivo de cabecera (header.php) de Wordpress. En aquel momento tenía la versión 2.3.2 con parches de seguridad del CMS, actualicé a la 2.5.1 tras el ataque y, posteriormente, a la 2.6, que es la que sirve de motor actualmente al blog. Pues bien, el día 27 de julio sufrí otro ataque frustrado en el blog, pero esta noche (6 de agosto) ha vuelto a ocurrir. Al levantarme esta mañana, como suelo hacer habitualmente, mientras desayuno  leo otros blogs y noticias, reviso posibles comentarios de los lectores de Lobosoft y elimino SPAM… En fin, el pan nuestro de cada día. Al revisar las estadísticas, me encontré con una entrada extraña a través de un sitio de referencia, muy similar a las entradas buscando pastillitas azules para la virilidad que tuve durante el anterior ataque.



Andaba preguntándome si se debería aún al mismo (de vez en cuando aún siguen llegando visitas, aunque cada vez menos), cuando he entrado en el blog y me he encontrado con que sólo se visualizaba la cabecera, y nada más. "No puede ser", me he dicho, pero sí que era. Al visualizar el HTML de la página, y aunque se encontraba completo, en la cabecera he encontrado un DIV, como la vez anterior, posicionado en un punto externo a la pantalla, con un enlace a casinos on-line. El problema es que esta vez, además, se habían dejado la etiqueta DIV sin cerrar, por lo que el resto de la página no era renderizada por el navegador debido al error del código HTML. He cambiado el header.php, eliminando el DIV y su contenido, y he revisado otros componentes, encontrando en el pie de página (footer.php) otro DIV similar, ahora sí, con más de 100 enlaces a casinos.


Tras limpiar el footer.php,  me dispongo a revisar el log de accesos a la página. Casi 15200 accesos a recursos en la última semana, pero basta con buscar por header.php y llego a las 00:39 del día 6 de agosto. Una llamada al archivo comments-popup.php del tema Default de Wordpress (el que incorpora con su instalación básica), pasándole como parámetros la ruta del tema predefinido para Lobosoft, la página header.php y un parámetro edit con valor 1. El acceso se ha producido con un navegador Opera 9.50, y el sistema operativo del atacante era un Windows XP. Origen: Rusia. En el log veo cómo ha accedido varias veces al archivo comments-popup.php para ir modificando el header.php y el footer.php. Pongo la URL que ha usado en el navegador y me encuentro con…



Sí, señoras y señores, una puerta trasera. Se trata del PHP Shell nsTview, un script de administración remota. y no (en principio), del contenido "normal" de comments-popup.php. De hecho descargo el archivo para editarlo, y su contenido es aparentemente normal… excepto por una función eval tremendamente sospechosa:



eval(gzinflate(base64_decode('7b1rcxtHsiD6XRH6DyWIIwA2CQI…

Eval lee y ejecuta un determinado código PHP que se le pasa como parámetro. Pero el código que está ejecutando aquí está comprimido, de ahí que deba descomprimirse (gzinflate) tras ser convenientemente decodificado (base64_decode). Si extraemos el contenido de la cadena, lo tendremos (sustituyo las etiquetas HTML por otras con corchetes para que se visualicen correctamente):



[title]nsTView v2.1:: nst.void.ru[/title]
[center]
[table width=100 bgcolor=#D7FFA8 border=1 bordercolor=black][tr][td]
[font size=1 face=verdana][center]
[b]nsTView v2.1 :: [a href=http://nst.void.ru style='text-decoration:none;']
[font color=black]nst.void.ru[/font][/a][br][/b]
[/center]


El sitio http://nst.void.ru que aparece en el código es el del Network Security Team, que por el ruso que sé (es decir, nada) tiene apariencia de sitio web de hacking o dedicado a la seguridad, vaya usted a saber, pero que tienen toda la pinta de ser los creadores del nsTView, ¿verdad? ;) .



El código que mostraba antes presenta sólo el formulario de acceso (el HTML) del administrador. Si cambiamos el eval por un echo, veremos el código PHP real... y acongoja mirarlo. Se trata de un administrador remoto completísimo, que permite desde modificar un archivo del servidor (cambiando si es necesario los permisos del mismo), hasta hacer consultas y modificaciones sobre las bases de datos del mismo, pasando por todo tipo de lindezas. Yo quiero uno para Reyes :)



Y el panel de administración, ya obtenido el PHP sin errores, está muy, pero que muy bien:



Por otro lado, la IP del atacante se corresponde con el dominio pps.nntime.com, un proxy anonimizador, por lo que debería contar con la colaboración de sus administradores para conocer la IP origen del ataque (si no dio más de un salto hasta llegar a Lobosoft, lo que es posible, aunque no muy probable si tenemos en cuenta la cantidad de rastros que ha ido dejando el atacante a su paso). Además del registro en los logs de acceso al dominio, he encontrado errores de ejecución, por ejemplo, generados por el propio comments-popup.php:



[06-Aug-2008 00:39:22] PHP Fatal error:  Call to undefined function add_filter()…

Ante esto, más vale prevenir que curar. De poco valen (para este tipo de ataque al menos) los numerosos parches de seguridad que han ido apareciendo de forma paralela a las versiones de Wordpress. He revisado los permisos del sitio web, y eliminado la puerta trasera, así como cualquier posible acceso a través del tema Default. Sin embargo, y aunque intento tomarme a broma el asunto, la verdad es que me ha tocado la moral encontrarme con este tipo de problemas en Wordpress hasta en la última de sus versiones. A ver cuánto dura la calma ahora.


Para saber más:




0xA593E40


O lo que es lo mismo, ¡¡¡felices 1010010110010011111001000000"!!!

martes, 5 de agosto de 2008

Revisión de entradas en Wordpress 2.6

Hace unos días descubría casualmente la opción de acelerar Wordpress 2.6 usando Google Gears, y ahora me encuentro con otra grata sorpresa en el que se está convirtiendo en uno de mis CMS preferidos. Andaba modificando una página, he guardado los cambios y he debido incluir algún espacio, porque al actualizar el navegador Wordpress me ha avisado de que tenía una versión obsoleta de la página, a través de su nueva función de revisión.



Tras esto, me ha permitido seleccionar dos elementos del historial de cambios de la página, y mostrar las diferencias entre las mismas al más puro estilo de un repositorio como Subversion o de herramientas como WinMerge. Simplemente, ¡genial!


Calculando, que es gerundio


Que Google ofrece una amplia capacidad de funciones es algo innegable. Lo hemos comprobado a lo largo de su evolución, y en Lobosoft he venido refiriéndolo en numerosas ocasiones. Una de sus curiosas utilidades es servir como calculadora, ya que podemos usar el cuadro de texto de la búsqueda para indicar una serie de operaciones aritméticas cuyo resultado será el de nuestra búsqueda. Sin embargo, aunque Google ofrece una guía de referencia rápida respecto a esta función, no cabe la menor duda de que el interfaz que nos ofrece el buscador es mejorable. Esto es lo que nos ofrece Soople, una web que interactúa con Google para ofrecernos el resultado de cuantas consultas deseemos realizar, incluidas las operaciones de la calculadora. ¿Para cuando una calculadora integrada con Google Docs y las Google Spreadsheets y/o Google Chart?

Multitarea en Linux

La crisis imperante está causando estragos a todos los niveles. Y si no, que se lo digan a Tux, el pingüino abanderado de Linux, que se está dedicando a montar una cadena de supermercados. Al menos, es lo que parece tras encontrármelo hace unos días en Microsiervos




y más recientemente, en el blog de Un informático en el lado del mal.

Un pagerank para el malware


Leo en Ars Technica que recientemente se ha presentado en sociedad una lista de malware basada en un PageRank particular. La iniciativa, que podemos encontrar en el sitio web DShield.org, se basa en la colaboración de los administradores de servidores en Internet, que envían los logs informes de los firewalls cortafuegos de sus máquinas con la lista de intentos de ataque sufridos. En DShield, procesan los ataques mediante un algoritmo que establece un ranking de los puertos más apetecibles para el malware, posiblemente por estar asociados a software con vulnerabilidades o no contar con la debida protección. El algoritmo se basa en la siguiente fórmula:




sqrt( (S-s)^2/s + (T-t)^2/t ) )
S: número de IPs de origen atacando al puerto en las últimas 24 horas.
s: número medio de IPs de origen atacando este Puerto los últimos 30 días.

T/t: igual que con el par S/s, pero referido a las IPs de destino detectando escaneos en el puerto.



El documento de presentación que prepararon sus autores para Usenix Security está disponible para su descarga (en inglés), y es interesante comprobar cómo prevén posibles futuros atacantes basándose en el comportamiento previo del malware analizado. Así, si varios administradores proveen logs informes de sus firewalls cortafuegos, y DShield encuentra patrones comunes de ataques, establece una correlación entre los servidores que permite, en caso de detectar un nuevo ataque, determinar quiénes serán las próximas víctimas del mismo y avisar así a los administradores de estos sistemas para que tomen las medidas de contingencia oportunas. Actualmente la eficacia en la detección de futuros ataques supera el 45% de aciertos, lo que convierte al proyecto en una interesante iniciativa que irá mejorando conforme se automatice y crezca el número de logs informes disponibles para su análisis.

lunes, 4 de agosto de 2008

Un momento de tensión

Lo encontré en Codigo Geek, y no he podido resistirme al momento geek-revival del nudo gordiano:

Control de acceso de un usuario en ASP.NET

Hacía tiempo que deseaba escribir algo sobre ASP.NET, una tecnología con la que he trabajado durante varios años y que en lo s últimos meses he dejado un poco de lado debido a que en el trabajo me estoy decantando por otro tipo de proyectos más cercanos a la parte de programación de sistemas y redes. Sin embargo, y aun a pesar de sus numerosas peculiaridades, ASP.NET es una tecnología muy interesante que recomiendo a aquellos que deseen adentrarse en el mundo de la programación web de aplicaciones empresariales.


La entrada de hoy está relacionada con la seguridad de nuestras aplicaciones. Habitualmente, las aplicaciones web permiten a los usuarios conectarse desde lugares remotos a nuestros servidores para ejecutar consultas, introducir datos o efectuar cualquier tipo de cálculo o trabajo. Esto se solventa fácilmente mediante un sencillo sistema de autenticación, bien sea mediante autenticación Windows, bien a través de la autenticación de Passport o a través de formularios. Sin embargo, es posible que nuestros usuarios se conecten varias veces desde diferentes navegadores ocupando varias sesiones, y podría interesarnos que esto no sea así. Hoy veremos un sencillo método para validar en la página de login de nuestra aplicación si un determinado usuario se ha autenticado previamente en el sistema, y en caso de ser así, no permitirle acceder a la aplicación hasta que termine la sesión, bien manualmente, bien por expiración de la misma.


En sí, el ejemplo está constituido por un par de páginas, una inicial de login (Default.aspx) y otra accesible desde aquella (Lobosoft.aspx). En la primera, el usuario se autentica mediante su nombre de usuario y password. Esta tupla se valida de algún modo (en el ejemplo, simplemente mediante un método que los comprueba, pero en un caso real se produciría una validación contra una base de datos o un LDAP, por ejemplo). Si el usuario existe y su contraseña es correcta, se comprueba entonces que no haya accedido previamente al sistema. Para ello, sus datos son almacenados en la caché de la aplicación (para prever la expiración por tiempo) y su nombre de usuario en la sesión. En ese momento es redirigido a la página “de trabajo”, Lobosoft.aspx. El usuario puede volver mediante un enlace a la página anterior, y si intenta volver a identificarse el sistema le indicará que ya está registrado. Para poder volver a identificarse, debería cerrar la sesión mediante el enlace “Salir” (que limpia de la caché sus datos).


Como decía, el código es muy simple, y está basado principalmente en el método UniqueLogin(), en Default.aspx, que comprueba si el usuario se registró previamente, actuando en consecuencia.


[csharp]
private bool UniqueLogin(string user)
{
string myUser = Convert.ToString(Cache[user]);

// Si el usuario es nulo o cadena vacía...
if (myUser.ToString() == String.Empty)
{
TimeSpan SessTimeOut = new TimeSpan(0, 0, HttpContext.Current.Session.Timeout, 0, 0);
HttpContext.Current.Cache.Insert(user, user, null, DateTime.MaxValue, SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable, null);

Session["user"] = user;

return true;
}
else
{
return false;
}
}
[/csharp]

Y en Lobosoft.aspx, una limpieza de la caché en caso de terminar la sesión:


[csharp]
Cache[(string)Session["user"]] = string.Empty;
[/csharp]

Dejo el código accesible para su descarga en el siguiente enlace:


[download#11]


Más adelante me gustaría mostrar cómo impedir que una determinada sección de nuestra aplicación se ejecute varias veces por uno o más usuarios a la vez, e incluso que se impida “compartir” URLs entre usuarios, siendo estas únicas para una determinada ejecución de la aplicación, algo que ya tuve que implementar en el pasado y que me pareció ciertamente útil en determinadas situaciones.

Mi visión de la Campus Party


A veces nos ocurre que, por esperar demasiado de algo, nos sentimos defraudados cuando lo conseguimos, bien porque nuestras expectativas fueran demasiado altas y aquello que ansiábamos no llegue a colmarlas, bien porque realmente el resultado obtenido sea francamente mediocre. No es este el caso que nos ocupa, ya que cuando fui a la Campus Party 2008 no tenía ninguna idea preestablecida sobre la misma, y de hecho no se ha alejado demasiado respecto de lo que imaginaba, pero sin embargo la sensación con que he vuelto de la misma es, si no de decepción, sí al menos de indiferencia.



Por un lado, está la facción meramente campusera. Miles de ordenadores conectados a Internet para descargar información (totalmente lícita, eso siempre, y nunca ilegal, entre otras cosas porque nuestros queridos dispositivos electrónicos ya van gravados por ley antes de que procedamos a grabar en ellos byte alguno), jugar al WoW (fundamentalmente) o ver películas y series on-line (¿?). Tal vez mi tiempo pasó, y hace 10 años habría sido una forma de salir de casa y pasarme jugando toda la noche sin que mis padres viniesen a decirme: “niño, ¿quieres acostarte y apagar ya el ordenador?”. Pero claro, hace 10 años jugaba al Dark Heart of Uukrul y al Ultima VII (sí, tenían algún tiempo, pero los clásicos no pasan de moda), e Internet discurría en lenta y dolorosa procesión a través del módem de 56K. En cualquier caso, no veo mal que se acuda a la Campus en este sentido, aunque a día de hoy le encuentro poco sentido (más allá de estar junto a los amigos/as día y noche juntos). Por cierto, allí vi uno de los tokens de autenticación sobre los  que hablaba Des en su blog hace unos días, precisamente entre los jugadores de WoW, y me llamó bastante la atención.



En cuanto a los talleres, charlas y demás, pude asistir a unos pocos en el día fuerte que anduve por allí. Me interesaron especialmente una charla sobre desarrollos software que ofreció Google a los asistentes que descansaban cómodamente tumbados sobre unos extraños y coloridos sacos y pelotas, y la que se ofreció en el área de Campus Blog bajo el título Vivir de un blog, por cortesía de Microsiervos (coincidí en la ida a la Campus con Wicho en el tranvía), Weblogs, S.L. e Hipertextual, tras la que extraje la conclusión de que Lobosoft no me sacará de pobre (algo que ya sabía), pero que podré seguir divirtiéndome con él como hasta ahora. Aunque había actividades en todas las áreas, la verdad es que me parecieron escasas, en particular para los visitantes que acudiesen sin ordenador.



La zona con más actividad era la de juegos, donde podíamos probar los últimos ordenadores para jugar por cortesía de Asus, combatir en una lucha de smileys de Messenger o competir en un concierto de Guitar Hero, entre otros.



Mención aparte merece el área Campus Verde, la que me pareció más triste del lugar. No sólo se trataba de una zona apartada, al final del pabellón 1, sino que consistía en cuatro plantitas, un par de sillones y tres contenedores (para inertes, papel y basura orgánica) que poco hacía por concienciar sobre la necesidad de preservar el medio ambiente o establecer la vinculación entre éste y la tecnología. Y, aunque había bastantes contenedores repartidos por toda la Campus, lo cierto es que me sorprendió la regañina que me echó uno de los encargados del catering por echar el papel sucio a la basura orgánica, y más aún la indiferencia con la que recibió mi sugerencia sobre cómo el papel sucio (con trozos de pizza o manchado de aceite) no puede reciclarse con el contenedor azul. Una muestra más de cómo el medio ambiente “queda bien” en cualquier discurso porque está de moda, pero hacemos bien poco por informar y poner en práctica las medidas más básicas para preservarlo.


sábado, 2 de agosto de 2008

Campus Party 2008

Esto es afanarse en el trabajo. Sé de más de uno que es lunes me llamará friki, pero aquí estoy por fin: Campus Party 2008, en Valencia, escribiendo desde mi Adelita (una flamante Dell Axim X51-v a 624 MHz) en el blog. Hoy seré breve... escribir a golpe de puntero no es lo más ergonómico del mundo. Me voy a ver qué hacen los de Google. Saludos, y feliz navegación.