Last week a user asked me for help, he wanted to use Chicago 16th Edition in Microsoft Word 2010. After loosing the whole day, finally I succeeded it and I'm going to tell you how you can do it.
How to install Chicago 16th Edition in Word 2010
Note: Although I haven't test it, this should work with Word 2007 too.
- Open the Windows File Explorer and find the Style folder in the Office folder. The common path is: Local Disk C: --> Program Files --> Microsoft Office --> Office14 --> Bibliography --> Style Note: This path may change from one computer to another depending on your configuration. It it possible that instead of the folder Office14 you have Office12 or similar, or maybe you need to look for the folder Style in both Program Files and Program Files (x86)
- Once in Style folder, find the file CHICAGO.XSL, change its name to CHICAGO.XSL.BCK and move it to the parent folder Bibliography.
- Open Word 2010, if you have been following the process correctly, the Chicago 15th Edition style must be missing from the bibliographic styles list.
- Finally, open Word 2010 again and you should see the Chicago 15th style again in the list. Don't worry to find a 15th instead 16th. Although Word thinks that you are using the 15th Edition, this is actually the 16th Edition.
If you want to check that it is working, you can download this Word document sample and create the bibliography with the Chicago Style. It should be similar to this screenshot:
Technical details about the creaton of the CHICAGO.XSL file
The XSL style files are written in a proprietary XML language from Microsoft. These files are written in plain text and can be modified with any text editor. What I have done it is to take the file CHICAGO.XLS from Microsoft Word 2016 and modify it to work with Word 2010. To do so, I replaced the following code (line 2114):
Note: English translation of this article/Traducción al inglés de este artículo: https://franvelez.blogspot.com.es/2016/07/how-to-set-chicago-16th-edition-style.html
El otro día acudieron a mí con un problema, un usuario quería usar Chicago 16ª Edición en Microsoft Word 2010. Tras perder el día buscando en Internet, finalmente lo logré y os cuento aquí cómo podéis hacerlo vosotros.
Tutorial para instalar Chicago 16ª Edición en Word 2010
Nota: Aunque no lo he probado, en Word 2007 debería funcionar.
- Abrir el Explorador de Archivos de Windows y buscar la carpeta Stylede Office. El camino que normalmente hay que seguir es Unidad C: --> Archivos de programa --> Microsoft Office --> Office14 --> Bibliography --> Style Nota: Esta ruta puede variar de un ordenador a otro según tu configuración. Puede ser que en vez de Office14tengas Office12o similar o que tengas que buscar tanto en Archivos de programacomo en Archivos de programa (x86).
- Una vez en la carpeta Style localizamos el fichero CHICAGO.XSL, le cambiamos el nombre a CHICAGO.XSL.BCK y lo movemos a la carpeta padre Bibliography.
- Abrimos World 2010, si lo hemos hecho bien, ya NO estará el estilo Chicago 15ª Edición en al lista de estilos bibliográficos.
- Finalmente abrimos Word de nuevo y aparecerá el estilo Chicago 15ª Edición en la lista. No te preocupes si en la lista pone 15ª en vez de 16ª. Aunque Word cree que es la 15ª Edición, se trata en realidad de la 16ª Edición.
Si quieres probar que funciona correctamente, descarga este documento Word de ejemplo y genera la bibliografía con el estilo Chicago. Debería ser igual que la siguiente captura:
Detalles técnicos sobre la obtención del fichero CHICAGO.XSL
Los ficheros de estilos XSL están escritos en un lenguaje propietario XML de Microsoft. Estos ficheros están en texto plano y pueden ser modificados con cualquier editor de texto. Lo que yo hice fue tomar el fichero CHICAGO.XSL de Microsoft Word 2016 y adaptarlo para que funcionara en Word 2010. Para ello necesité modificar el siguiente fragmento de código (linea 2114):
RB Citas es la última aplicación que he desarrollado para el ecosistema RB Conecta. Esta aplicación permite a un negocio crear fácilmente un sistema personalizado de gestión de citas o reservas. Al estar integrado en el ecosistema RB Conecta, los clientes podrán pedir cita desde su móvil usando la app RB Conecta.
En este proyecto he trabajado en las siguientes áreas:
Configuración, mantenimiento y optimización de servidores: Apache, MySQL, BackupPC.
Diseño y desarrollo de la versión web de RB Citas (HTML5, SASS, JavaScript, PHP5 y MySQL).
Desarrollo de interfaz con vista de diseño adaptable (Responsive) con Bootstrap 4
Desarrollo de la API de conexión (PHP) entre servidor y aplicaciones web y móvil.
Un problema habitual de los diseñadores web es definir diferentes diseños o temas (tipografía, colores, tamaños) para que el usuario elija aquel que le resulte más confortable. El método tradicional consiste en crear un fichero CSS con todos los estilos para un tema y luego replicarlo a cada uno de los otros temas. Esto, que a priori puede ser la solución más rápida, a la larga supondrá graves problemas de mantenimiento, ya que un simple cambio como añadir algo nuevo a algún botón o cambiar el color del tema, puede resultar tedioso y llevarnos a cometer errores como olvidar actualizar uno de los temas.
Como nosotros somos programadores y nos gusta tratar de hacer las cosas bien, vamos a seguir otro enfoque usando SASS.
Nota: Lo bueno de SASS es que es totalmente compatible con código CSS estándar, así que si no conoces SASS, puedes empezar usando sólo las variables y los imports (que es lo que veremos aquí) y luego ir aprendiendo a añadir bucles o condiciones. Te recomiendo que aprendas a usarlo, porque simplificará enormemente tu código CSS y es muy sencillo de aprender. Puedes pasarte por este manual en español.
Ejemplo base en CSS
Supongamos que hemos creado una página en la que queremos tener varios temas con sus respectivos estilos para los títulos h2 y para dos tipos de botones: primario y secundario. El código en CSS sería:
h2 {
font-family : "Times New Roman";
font-size : 2rem;
color : orange;
}
.boton-primario{
background-color : orange;
color : marron;
border : 1px solid #444444;
}
.boton-secundario{
background-color : purple;
color : white;
border : 1px solid #000000;
}
Este CSS lo tendríamos que replicar para cada una de las plantillas cambiando en cada apartado los elementos que varían.
Ejemplo con SASS
La estructura propuesta es la siguiente:
_paletas.scss
_tema-base.scss
tema-1.scss
tema-2.scss
tema-X.scss
Donde:
Se distingue con barra baja a los ficheros que son usados solo para inclusión.
Tendremos un fichero tema-X.scss por cada tema que queramos generar.
En _paletas.scss agregaremos las listas de colores, fuentes, etc. de todos los temas:
//Los nombres de variables se distinguen por llevar un $ delante.
//Estas tres variables son "listas"
$paletaTemasPrimario : orange, blueViolet, limeGreen;
$paletaTemasSecundario : purple, coral, fireBrick;
$fuenteTemas : "Times New Roman", Helvetica, Arial;
En _tema-base.scss agregamos nuestro código CSS pero cambiando los elementos que varían por variables (fíjate que el nombre es diferente a las variables definidas antes):
Y finalmente agregamos a cada fichero tema-X.scss lo siguiente, teniendo en cuenta que debemos variar la variable $temaSeleccionado para que cada tema tome sus estilos correspondientes:
//En los import no es necesario agregar la barra baja ni la extensión
@import 'paletas';
//Cambiar el valor de esta variable en cada tema-X empezando desde 1
$temaSeleccionado : 1;
//La función nth(lista, n) obtiene el enésimo elemento de la lista
$color-primario : nth($paletaTemasPrimario, $temaSeleccionado) !default;
$color-secundario : nth($paletaTemasSecundario, $temaSeleccionado) !default;
$fuente : nth($fuenteTemas, $temaSeleccionado) !default;
@import 'tema-base';
Ya solo resta compilar nuestros ficheros tema-X.scss, para así obtener los CSS finales, cada uno separado en un fichero tema-X.css, listo para usar.
Conclusiones
Diseñar así las plantillas nos aporta varias ventajas:
Si se modifica un color de un tema o similar, basta con modificar el fichero de paletas y recompilar para tenerlo todo en orden
Si se añade un nuevo elemento como puede ser un cuadro flotante, solo tendremos que añadirlo a _tema-base.scss usando las variables oportunas para que, al recompilar, se nos genere cada plantilla con el elemento nuevo y su correspondiente estilo
Nos ahorrará en grado sumo el ir copiando-pegando elementos o reemplazando colores.
Nota: El siguiente tutorial está probado con PHP5 en distribuciones estándar derivadas de Debian y Ubuntu.
Programar la tarea con cron
En Linux, la forma más sencilla para que un script PHP se ejecute a intervalos regulares, suele ser con el uso de la herramienta cron (al final del artículo tienes varios tutoriales sobre el uso de cron y crontab)
Primero añadimos la tarea al fichero /etc/crontab. Así, si queremos ejecutar el fichero /var/www/test.php cada15 minutos:
sudo nano /etc/crontab
Y al final del fichero añadiremos:
15 * * * * usuario php -f /var/www/test.php
Si una vez pasada la hora programada, queremos comprobar que cron ha ejecutado el script, podemos ojear el log en el que registra los eventos. En él, debería haber una linea con la hora, el nombre "cron" y el nombre del script:
sudo cat /var/log/syslog
Debugging / Depuración del script
Si es tu primer script programado, es posible que cometas errores de rutas relativas y permisos, ya que cron normalmente se ejecuta con un usuario distinto al del servidor web y, además, usará las rutas del sistema de ficheros en vez de las rutas del servidor web. Por tanto, si el script se ejecuta pero no hace lo que debe, querrás depurarlo para encontrar el error.
Depuración básica
Para hacer una depuración a base de “echo” y “var_dump”, basta con modifiar la tarea programada en crontab a:
El motivo de poner cinco asteriscos es para que se ejecute cada minuto (sí, ya sé lo engorroso que es esto)
Depuración de errores
Para ver los errores generados por el motor de PHP, tendremos que modificar el fichero de configuración php.ini para la linea de comandos (CLI). Nota: Este fichero es distinto al php.ini del servidor web
sudo nano /etc/php5/cli/php.ini
Buscamos la variable error_reporting para activar todos los errores y la variable error_log para escribir la ruta del fichero en el que queremos guardar los errores. Por ejemplo:
Guardamos el fichero de configuración y comenzamos la depuración. Los cambios se aplican inmediatamente porque es el fichero de configuración para la linea de comandos.
¿Cuántas veces has tratado de hacer un UPDATE masivo en Oracle y la consulta ha fallado porque hay elementos duplicados, nulos, etc.?
Ejecutar un UPDATE masivo que continúe e ignore las tuplas con error es posible en Oracle siguiendo el siguiente proceso:
Primero, creamos una tabla que vincule la tabla que vamos a actualizar con la que va a guardar los errores. Así podremos saber qué tuplas han fallado:
Después, ejecutamos el UPDATE incluyendo al final de la consulta la llamada LOG ERRORS hacia la tabla log creada. Por ejemplo:
UPDATE tabla1
SET nombre=""
WHERE pais="es"
LOG ERRORS
INTO tabla1_error_log
('UPDATE running at '||to_char(sysdate, 'yyyy-MM-dd HH24:MI:SS'))
REJECT LIMIT UNLIMITED;
Cuando termine el UPDATE, podremos consultar en tabla1_error_log la lista de errores y cuando no la necesitemos, la podemos borrar con el habitual DELETE
DigiQ es una aplicación web desarrollada por Schneider-Electric para la creación y gestión de presupuestos y pedidos en las delegaciones de los países de categoría "C". Este proyecto hace uso de PHP5, Sencha Ext JS 2, SAP y Oracle y ya estaba en producción cuando me incorporé a él. Mis tareas consistieron en el desarrollo de alguna característica nueva y mantenimiento del producto.
Por defecto, las ventanas modales de Bootstrap 3 se cierran de tres formas:
Al pulsar la tecla escape
Al hacer clic en el botón de cierre (una equis en la esquina superior derecha)
Al hacer clic fuera de la ventana modal (la zona sombreada en negro)
Esto es deseable en interfaces de teclado y ratón, pero al pasar a una interfaz táctil he visto lo fácil que es tocar la zona sombreada con la palma de la mano sin querer, provocando que la ventana modal se cierre. Este comportamiento lo podemos desactivar de forma sencilla de dos formas:
Vía HTML: incluyendo el parámetro data-backdrop="static" en el div de la ventana modal
Vía JavaScript: pasando un JSON con la opción backdrop : 'static'
JavaScript dispone de dos funciones nativas (setTimeout() y setInterval()) muy útiles para ejecutar código tras un tiempo especificado. Vamos a ver cómo se utilizan.
setTimeout(func, x)
Ejecuta el código func al pasar x milisegundos. Parámetros:
func: función anónima, nombre de una función o variable que apunta a una función
x: el número de milisegundos de retraso
Soporte: Todos los navegadores (desde IE 4)
Así si, por ejemplo, queremos mostrar un mensaje a los tres segundos de cargar una página escribiremos el siguiente script antes de </body>
<script type="application/javascript">
function saludo(){
alert('Bienvenido');
}
setTimeout(saludo, 3000);
</script>
La mayor pega de esta versión de setTimeout() es que no permite el paso de parámetros a la función llamada, así que para tales casos tendrás que recurrir a rodeos como usar variables globales y similares. Sin embargo, si no necesitas dar soporte a Internet Explorer 9 e inferiores, podrás usar la versión más reciente de setTimeout() con soporte para paso de parámetros (en las referencias del final tienes más detalles). Su cabecera es:
setTimeout(func, retraso, param1, param2, ...) y puedes usarla de la siguiente forma:
function saludo(nombre){
alert('Bienvenido ' + nombre);
}
setTimeout(saludo, 2000, usuario);
Como has podido intuir, setTimeout() sólo se ejecuta una vez. ¿Qué pasa si queremos ejecutar de forma reiterada una función? Aquí entra en escena setInterval().
setInterval(func, x)
Ejecuta el código func cada x milisegundos. Parámetros:
func: función anónima, nombre de una función o variable que apunta a una función
x: el número de milisegundos de intervalo entre ejecuciones
Soporte: Todos los navegadores (desde IE 4)
Veamos cómo ejecutaríamos el ejemplo de antes cada 3 segundos:
<script type="application/javascript">
function saludo(){
alert('Bienvenido');
}
setInterval(saludo, 3000);
</script>
Como ves, su uso es similar a setTimeout, y al igual que este, dispone de una versión más actual con soporte para paso de parámetros. Puedes ver más información siguiendo los enlaces de las referencias.
Cuando trabajamos con PHP y MySQL, a menudo necesitarás insertar un elemento nuevo en una tabla y obtener su ID para trabajar con él en tu script de PHP. Por tanto, el esquema del script sería:
Operaciones en PHP
Inserción de elemento en la BD
Recuperación del ID insertado
Más operaciones en PHP
Supongamos que tenemos una tabla de usuarios con los siguientes campos:
/* Tabla BD:
* usuario
* Campos:
* id - int, auto_increment
* nombre - varchar
* edad - int
*/
La solución más inmediata (y errónea) sería:
$bd = new mysqli(...);
$bd->query('INSERT INTO usuario (nombre, edad) VALUES ("Fran", 23)');
$result = $bd->query('SELECT MAX(id) FROM usuario');
$id = $result->fetch_assoc();
Pero esto es un terrible error que no puedes cometer nunca, no solo por la pérdida de rendimiento al realizar dos consultas, sino que también porque la segunda consulta no siempre se ejecutará inmediatamente después de la primera. Si piensas que al estar una después de otra se ejecutarán las dos en ese orden, permiteme hacerte pensar en la concurrencia de usuarios. Si dos usuarios entran a la vez en esta parte del script, puede ser que se ejecuten primero los dos INSERT y después los dos SELECT, devolviendo a ambos el mismo id. ¿Qué podemos hacer entonces? Existen varias opciones:
Bloquear la tabla al entrar al script. No recomendado por la pérdida de rendimiento
Usar un procedimiento almacenado (PROCEDURE).
Usar insert_id de PHP
Si tenemos disponible la extensión mysqli de PHP (algo normal), bastará con acceder al atributo insert_id. Este atributo lo actualiza el servidor de forma automática cada vez que se hace una inserción y, lo que es mejor, con control de concurrencia.
Veamos un ejemplo usando la extensión mysqli de PHP con orientación a objetos:
$bd = new mysqli(...);
$bd->query('INSERT INTO usuario (nombre, edad) VALUES ("Fran", 23)');
$id = $bd->insert_id);
$bd->close();
Si estás usando mysqli por procedimientos, entonces deberías llamar a la función mysqli_insert_id():
He aquí mi proyecto final de grado (PFG). Es una aplicación web que, apoyada en la Web Semántica, construye redes en las que se muestran las relaciones que unen a las entidades almacenadas.
Básicamente, la aplicación tiene una base de datos de personajes históricos de la informática que ha sido creada a partir de la información semántica que proporciona DBpedia (que a su vez extrae los datos estructurados de Wikipedia). Con estos datos, un usuario puede buscar dichos personajes históricos y ver qué relaciones les unen con otros personajes de la base de datos. De todas formas, en la sección de enlaces hay un enlace para probar la aplicación de forma inmediata.
Visualización que se puede crear con la aplicación
La aplicación ha sido desarrollada sobre cinco pilares básicos:
Web Semántica
AJAX
Teoría de redes
Sistemas de Recuperación de Información con Retroalimentación de Relevancia
Algoritmo Beam Search para la búsqueda de caminos
Desde el punto de vista de la interfaz, se han utilizado las siguientes tecnologías:
HTML5, CSS3 y AJAX para mejorar la interactividad con el usuario.
Biblioteca Bootstrap para generar una interfaz con diseño adaptable.
Biblioteca D3.js para gestionar el algoritmo de visualización de redes.
Interfaz completa de la aplicación (clic para ampliar)
Detalles técnicos:
Lenguaje: HTML5, CSS3, JavaScript, PHP5, MySQL
Plataforma: Cualquiera con un navegador web moderno
Paradigma: Programación Web
Aprendizaje de: Tecnologías Web, Web Semántica, Sistemas de Recuperación de Información, AJAX
Para la asignatura de Programación Web, se nos propuso una lista de proyectos para que realizara cada alumno uno. Yo opté por el Sistema Libre de Video Docencia (SiLViDo), una aplicación web similar a las conocidas plataformas de cursos masivos online como Coursera o Udacity pero teniendo en cuenta que apenas se disponen de 2-3 meses para realizar el proyecto, por lo que las características son limitadas.
Quise que el sistema que iba a diseñar tuviera las siguientes premisas:
Interfaz simple e intuitiva
Coherencia entre secciones, es decir, que las distintas secciones tuviesen un aspecto similar
Uso de AJAX para mejorar la interactividad
A continuación se presentan algunas capturas de pantalla de la aplicación.
Finalmente, mencionar que es posible probar la aplicación (disponible en la sección de enlaces) haciendo uso de los siguientes datos:
Como proyecto final cuando estudié Visión por Computador, mi compañero y yo decidimos trabajar en la creación de panoramas lineales. La proyección sería en superficies cilíndricas para no perder la perspectiva y para fusionar las imágenes usaríamos el algoritmo de Burt-Adelson. Trabajaríamos con la biblioteca OpenCV aunque no teníamos permitido usar el módulo Stitching, así que todo lo implementamos nosotros, salvo para la generación de puntos destacados con SIFT.
Un ejemplo de los resultados que obtuvimos es este panorama compuesto de 24 imágenes en el que no es fácil encontrar los puntos de unión:
Clic para ampliar
O este otro panorama de 12 imágenes:
Clic para ampliar
Aunque en la documentación adjunta es posible leer con detalle el enfoque teórico de nuestra implementación, comentaré aquí que, para la generación de los panoramas, básicamente se ha seguido el siguiente esquema:
Paso de las imágenes originales a coordenadas cilíndricas
Sencillo programa en C++ para poner en práctica el uso de las expresiones regulares junto con Lex. El programa recibe como entrada el log por defecto de un servidor web Apache y lo procesa para devolver al usuario las estadísticas que solicite.
El programa se utiliza desde la consola y la interfaz se muestra en la siguiente captura de pantalla.
Detalles técnicos:
Lenguaje: C++
Plataforma: GNU/Linux
Paradigma: Funcional
Aprendizaje de: Expresiones regulares, procesamiento de ficheros, Lex
Este artículo pertenece a un trabajo realizado en 2013 para la universidad. En él, se hace un repaso general a la historia de los virus, desde sus orígenes hasta el cibercrimen y la ciberguerra, deteniéndose en aquellos más representativos.
El origen de los virus
Core War (Darwin)
En 1959, en los laboratorios de Bell Computer, subsidiaria de AT&T, 3 jóvenes programadores: Robert Thomas Morris, Douglas McIlroy y Victor Vyssotsky, a modo de entretenimiento crearon un juego al que denominaron CoreWar, inspirados en la teoría de John Von Neumann, escrita y publicada en 1949.
Puesto en la práctica, los contendores del CoreWar ejecutaban programas que iban paulatinamente disminuyendo la memoria del computador y el ganador era el que finalmente conseguía eliminarlos totalmente. Este juego fue motivo de concursos en importantes centros de investigación como el de Xerox en California y el Instituto Tecnológico de Massachussets (MIT), entre otros.
Sin embargo durante muchos años el CoreWar fue mantenido en el anonimato, debido a que por aquellos años la computación era manejada por una pequeña élite de intelectuales.
Si bien no es un virus propiamente dicho, su principio de funcionamiento ha inspirado muchos virus posteriores, algunos muy dañinos para el sistema afectado.
Creeper
En el año de 1972, Robert Thomas Morris desarrolló el que es considerado primer virus de la historia, el Creeper. Era inofensivo y fue ideado para comprobar si era posible crear un programa que se propagara entre computadoras. Infectaba sistemas DEC PDP-10 que utilizaban el sistema operativo TENEX. Cuando Creeper llegaba a un ordenador, normalmente por ARPANET, el virus se auto ejecutaba y comenzaba a mostrar el siguiente mensaje: "I'm the creeper, catch me if you can!", que en español sería algo así como "Soy la enredadera, ¡atrápame si puedes!".
El virus no se replicaba de verdad, sino que únicamente iba de un ordenador a otro, eliminándose del ordenador anterior, por ello Creeper nunca se instalaba en un solo ordenador, sino que se movía entre los distintos ordenadores de una misma red.
Para eliminarlo se creó el programa Reaper que no era más que otro virus que también se extendía en las máquinas conectadas en red y cuando se encontraba con Creeper, lo eliminaba. Su funcionamiento consiste básicamente en buscar en el sistema cadenas de código que fuesen similares o afines a las del virus, y si lo encontraba lo eliminaba.
Según se rumorea, se dice que fue creado intencionadamente para comprobar la robustez o seguridad de la red militar Arpanet.
La época de los cibervándalos
Introducción
La historia de los virus está salpicada de llamativos virus, unos más dañinos que otros, unos más simpáticos que otros. No hay que olvidar que, en sus orígenes, los virus eran usados sobretodo como prueba de habilidad de sus creadores, gente que podía perseguir hacer el máximo daño, o gente que buscaba superar los límites de los sistemas sin causar demasiado perjuicio a los afectados. En este segundo grupo podemos encontrar un sinfín de ejemplos como el virus “Math test”, que te obligaba a superar una prueba matemática cada vez que querías usar un programa; el virus “Suicide”, que te mostraba un mensaje por pantalla diciéndote que era un virus y que si pulsabas la tecla D se suicidaba (quedando la máquina libre del virus); “Walker” que mostraba la animación en pantalla de un hombre dando vueltas, “RTL” que mostraba un mensaje defendiendo los derechos de los ficheros que tratabas de borrar y te impedía hacerlo o el virus “Elvira” que mostraba poemas en pantalla.
Jerusalem (Viernes 13)
Del primer grupo, podemos nombrar a Jerusalem, que, a pesar de no ser el primer virus destructivo para PC, sí que está considerado como el primero en tener repercusión mundial. Fue creado en Israel (de ahí su nombre) en 1988 para MS-DOS. Su medio de propagación en su época fueron los disquetes con ficheros infectados. Cuando alguno de estos ficheros era ejecutado en una máquina, el virus se copiaba en los ficheros de arranque para poder residir en memoria al iniciar el sistema. Mientras estaba en memoria, infectaba cada uno de los ficheros COM y EXE y ralentiza el ordenador introduciendo un retraso en la interrupción del reloj de la CPU. Además, todos los viernes 13 (día de la mala suerte anglosajona) activaba una segunda funcionalidad más destructiva: borrar todos los programas que eran ejecutados.
A día de hoy este virus está obsoleto, primero porque su método de infección basado en la interrupción 21h ha dejado de funcionar debido a que en los sistemas Windows ya no se usa. Y segundo, porque desde Windows NT, se dejaron de usar ficheros COM para cargar el núcleo. Hay que tener en cuenta que muchos de estos virus residentes en memoria fueron muy efectivos y usados porque aprovechaban que en MS-DOS, al cargar el núcleo con un fichero COM, las posiciones de memoria usadas estaban definidas de forma estática, lo que permitía a atacantes saber de antemano en qué zonas de memoria estaba la información o configuración que necesitaban modificar para poder infectar el sistema.
Casino
Por otra parte, estaban los virus que unían lo peor de los dos grupos mencionados anteriormente. En esta categoría podríamos incluir al virus Casino. Un virus creado en Malta en 1991 para MS-DOS, que residía en memoria, infectaba ficheros ejecutables COM y todos los 15 de enero, abril y agosto mostraba un mensaje invitando al usuario a participar en un juego de tragaperras. El juego era sencillo: Casino acababa de borrar la tabla de índices de la FAT del disco, pero conservaba una copia en memoria. Tenías 5 oportunidades para obtener tres “L” en la tragaperras (probabilidad de 1/27), si lo lograbas recuperabas tu tabla de ficheros pero no podrías usar el ordenador durante ese día; si perdías o te atrevías a pulsar el botón “reset”, se borraba tu tabla de ficheros.
Este virus ya no puede causar daño, puesto que las tablas de los sistemas de ficheros actuales son mucho más robustas y los sistemas operativos actuales las mantienen bloqueadas y siempre en uso, por lo que no pueden ser borradas en caliente.
Barrotes
El virus nacional por excelencia, fue creado por 0Soft en 1993 y, al igual que algunos de los virus comentados, residía en memoria y se copiaba al comienzo de todos los ficheros ejecutables del sistema de archivos. Por este motivo se propagaba velozmente a través de disquetes con ficheros infectados, cuya víctima ejecutaba sin notar ninguna alteración.
La infección se hacía evidente si la víctima encendía el ordenador la víspera del Día de Reyes (5 de enero), ya que era en esa fecha cuando Barrotes se activaba mostrando en pantalla unas franjas verticales azuladas a modo de reja y sobrescribía el sector de arranque del disco para que esto fuese así a cada reinicio posterior.
Con el tiempo aparecieron versiones más malignas de este virus, entre las que cabe destacar una que trataba de borrar archivos del sistema todos los días 22 de cada mes, pero que, por un error de programación, realmente lo intentaba los días 34, por lo que pasó a ser una variante sin ningún peligro.
CIH (Chernobyl)
Creado por el taiwanés Chen Ing Hau en 1998, CIH está considerado como uno de los virus más peligrosos de la historia, infectaba máquinas con Windows 9x y causó daños valorados en 100 millones de dólares por todo el mundo (sin contar toda la información que se perdió). El virus residía en memoria y permanecía inactivo a la espera de que fuera el 26 de abril (día del accidente de Chernobyl). Mientras tanto, infectaba todos los ficheros ejecutables que eran abiertos por el usuario. Cuando llegaba la fecha mencionada sobrescribía el sector de arranque del disco duro y aumentaba el voltaje que llegaba al chip de la Flash BIOS para sobrescribirla, logrando así, la inutilización completa de la placa base y del sistema de ficheros.
Fue un virus muy complejo, no sólo por ser capaz de alterar el voltaje de la Flash BIOS, sino también porque podía hacer escalada de privilegios para acceder a todo el sistema; podía copiarse en los ficheros ejecutables sin que estos aumentaran de tamaño usando los huecos vacíos que hay al principio de éstos y fragmentándose, si era necesario; y capturaba las excepciones que provocaba por su actividad, logrando que el usuario no se enterara de que había ocurrido un error.
CIH tuvo gran repercusión debido a que se distribuyó masivamente por todo el mundo en poco tiempo. El motivo principal de tal distribución fue que los controles de calidad software en las empresas brillaban por su ausencia y fueron distribuidos videojuegos (SiN de Activision), drivers (CD-R400 de Yamaha) o máquinas (IBM Aptiva) con el virus en su interior.
Por suerte este virus ha dejado de ser peligroso por no poder escalar privilegios en las ramas NT de Windows (XP, Vista…) y porque los fabricantes de Flash BIOS incluyen una protección que impide el aumento del voltaje sin control.
Los gusanos de Internet
Como hemos visto, los virus mencionados antes poseían características parecidas: residían en memoria, infectaban ficheros ejecutables para poder propagarse por distintos sistemas, procuraban pasar desapercibidos durante el tiempo de infección y causaban daños en el sistema en una fecha determinada.
Esta forma de actuar era muy común debido a que MS-DOS era monotarea y por tanto no podía mantener en segundo plano la ejecución de un antivirus que protegiera el sistema y a que las ramas Windows 9x trabajaban sobre MS-DOS con todos los problemas que ello acarreaba. Con la llegada a los usuarios comunes de sistemas operativos multitarea basados en NT se pudo mitigar la propagación de estos virus y entonces aparecerían otras formas de ataque. Como por ejemplo los gusanos que se auto propagaban por correo electrónico aprovechando vulnerabilidades de Outlook. Esto era posible por varias razones: la poca seguridad de los sistemas operativos Windows del momento, como por ejemplo que no se pusieran demasiadas restricciones a un usuario sin privilegios de administrador o que éstas eran fáciles de saltar; el propio Outlook, que era una puerta abierta para los atacantes; y el poco uso de antivirus residentes por parte de los usuarios.
Happy99
Fue el primer virus gusano en propagarse por correo electrónico. Como su nombre indica, fue creado en 1999 por Spanska en Francia y no tenía ningún propósito de dañar el equipo, su intención simplemente era auto propagarse. No tuvo tanto impacto debido a que su método para difundirse requería de la acción del usuario ya que se adjuntaba automáticamente a los mensajes enviados por éste.
Melissa
Melissa llegó a causar mucho impacto debido a que no necesitaba de la interacción del usuario para enviar copias suyas. Dependiendo de la versión se auto enviaba a más o menos contactos de la libreta de direcciones de la víctima según un patrón. La versión original de Melissa fue creada en 1999 por David L. Smith, Estados Unidos y, como Happy99, no tenía intención de causar daño en el equipo infectado, tan sólo propagarse. Pero, con el tiempo, surgieron otras variantes que llegaban a causar incluso pérdidas de datos.
Como curiosidad mencionar que hubo una variación, Melissa.B, que se propagaba con el fin de alertar a los usuarios de que no abriesen cualquier cosa que les llegara por correo electrónico. Melissa no fue el primer virus gusano en infectar el ordenador a través de las macros de algunos programas del paquete Office pero, sí fue el primero de este tipo en llegar a difundirse globalmente gracias al correo electrónico.
ILoveYou
ILoveYou es otro gusano de red que se propagaba por correo electrónico, fue programado por Onel de Guzmán en Filipinas en el año 2000. Es el más simple de los tres gusanos en cuanto a complejidad de implementación se refiere. Y es que el hecho de que un virus escrito en Visual Basic Script, con un código bastante trivial, consiguiera causar pérdidas millonarias en empresas de todo el mundo puso en evidencia la seguridad de los sistemas operativos Windows de la época y la ingenuidad de las personas, que abrían ficheros adjuntos por tener un título atractivo. Este gusano no sólo se limitaba a auto propagarse, sino que también borraba gran parte de la información del disco duro.
Actualmente ya no se dan casos de propagaciones tan masivas de virus de correo electrónico. Esto es debido a que la seguridad ha aumentado en todos los niveles: los sistemas operativos actuales no permiten que un programa cause tantos daños sin los permisos de usuario necesarios; suelen incluir firewalls y antivirus por defecto; es más común conectarse a internet a través de routers que incluyen su propio firewall frente a los módem de la época; ha aumentado mucho la seguridad e integridad de los clientes de correo electrónico; y, por otro lado, hoy en día es muy común utilizar una cuenta de correo con webmail que fuerza el análisis en el servidor en busca de virus en cualquier fichero adjunto que se reciba. Igualmente, las personas comienzan a tener la conciencia de que no se deben abrir los correos electrónicos sospechosos o raros.
Blaster (Lovsan)
Blaster, también conocido como Lovsan, es un gusano para Windows (rama NT) que se aprovecha un desbordamiento de buffer en el servicio DCOM para infectar a otros sistemas de forma automática, tratando de enviar una copia suya, de manera aleatoria, a todas las direcciones IP posibles.
Fue detectado el día 11 de agosto de 2003 llegando a su máxima tasa de infección el día 13 de agosto de 2003, pero, gracias al filtrado que realizaron las ISP's y a la gran publicidad que se hizo en los medios sobre este gusano, la infección pudo frenarse.
Durante la infección, el gusano deja una puerta trasera que permite la intrusión a terceros, haciendo que la máquina infectada sea fácilmente atacada por otros virus, o accesos remotos no autorizados. No obstante el verdadero motivo por el que se creó fue para, a partir del 15 de agosto de aquel año, realizar un Ataque Distribuido de Denegación de Servicio (DDoS) a los servidores de windowsupdate.com usando la técnica SYN flood. Por suerte, el gusano fue descubierto a tiempo y los daños ocasionados a Microsoft fueron mínimos debido a que el dominio windowsupdate.com no alojaba el sitio de descargas de Microsoft, sino que era una lanzadera que redirigía el tráfico a windowsupdate.microsoft.com. Aun así, Microsoft no se fio y apagó sus servidores ese día. Un mes después, publicaría un parche (MS03-039) para solucionar el problema del desbordamiento del servicio DCOM.
Este gusano se hizo rápidamente visible y reconocible debido a que en muchos sistemas producía inestabilidades que forzaban al apagado del servicio RPC. Y este apagado, a su vez, producía que Windows mostrara el característico mensaje con la cuenta atrás de 60 segundos indicando que se debía apagar el sistema porque el servicio RPC había terminado inesperadamente.
Como curiosidad, decir que los expertos se encontraron dentro del código del gusano los siguientes mensajes:
I just want to say LOVE YOU SAN!!
billy gates why do you make this possible ? Stop making money and fix your software!!
Blaster fue un punto de inflexión en Microsoft ya que, a partir de entonces, comenzó a tomarse en serio la seguridad y fiabilidad de su software, invirtiendo millones de dólares en la creación de una división específica encargada de la seguridad en su software.
La época de los cibercriminales
Introducción
En la historia del malware hay un punto destacado: la llegada de internet a la vida cotidiana. Es en este momento cuando las bandas de criminales ven el filón de poder obtener dinero a través de todo el mundo de forma anónima y, entonces, comienzan a popularizarse los troyanos. Programas informáticos que infectan un sistema y se comunican con un atacante remoto para que éste obtenga acceso total al sistema. Con las mafias depositando su dinero en el mundo del malware, pasamos de virus, más o menos destructivos, creados por personas con afán de popularidad, a programas informáticos que tratan de pasar desapercibidos el mayor tiempo posible para reportar beneficio económico al atacante ya sea a través del spam o robando dinero de la cuenta bancaria. Acabamos de entrar en la era de la profesionalización del malware.
Zeus
El mayor exponente de esta categoría es Zeus, un troyano modular creado en Europa del Este en 2007 que agrega a los sistemas infectados a la red zombie del atacante para poder robarles las credenciales, tanto bancarias como de otros servicios, usando técnicas de phishing, keylogging y capturando la pantalla. Este troyano está compuesto por módulos que pueden ser adquiridos en el mercado negro según las necesidades del atacante. Así, se puede empezar por 500€, con la versión más básica que sólo infecta equipos con Windows XP e ir añadiendo módulos para infectar equipos con Windows 7 (1.700€), para añadir un capturador de formularios (2.000€), hasta llegar a los 15.000€-20.000€ de la última versión completa, capaz de infectar móviles Android y Blackberry para capturar los códigos de validación que envían algunos bancos a los móviles.
Zeus se propaga a través de internet y cuando infecta un equipo aguarda hasta que el usuario introduzca sus credenciales bancarias o bien, pasará a la acción, usando técnicas de phishing para conseguir una transferencia a la cuenta del atacante. Todo ello, sin que la gran mayoría de antivirus puedan detectar su presencia.
En 2010, el creador de Zeus anunció su retirada, vendiendo el código fuente de Zeus al creador de SpyEye, otro troyano de las mismas características que Zeus pero más avanzado aún. Por ejemplo, SpyEye, antes de infectar un sistema, comprueba si está ya infectado por otro troyano. Si este es el caso, no se instalará hasta que logre eliminarlo. Y si el sistema está limpio se instalará e intentará cerrar las brechas de seguridad en el equipo para evitar que otros troyanos se instalen e interfieran en su tarea.
No obstante, debido a que el código fuente de Zeus se filtró por internet, cada día aparecen nuevas versiones que siguen infectando millones de equipos.
Flashback
A lo largo de la historia la gran mayoría de malware ha afectado a sistemas operativos de Microsoft. El motivo principal era que programar un virus tradicional era mucho más sencillo en MS-DOS/Windows 9x que en sistemas basados en UNIX. Pero con la llegada de la profesionalización del malware ya sólo había un motivo: la cuota de mercado. A las mafias no les interesaba invertir dinero para atacar sistemas cuya cuota de mercado era del 2% respecto de los sistemas Windows, y los usuarios vivían con la falsa tranquilidad de que el malware no afectaba a su sistema.
Pero ahora que la cuota de mercado de Apple crece mes a mes, las mafias comienzan a probar suerte con iOS y Mac OS X, y lo hacen atacando los dos puntos más débiles de la cadena: las aplicaciones de terceros como Flash o Java y aprovechando la ingenuidad del usuario.
El mejor ejemplo es el troyano Flashback, que apareció el 2011 y en unos pocos meses llegó a infectar más de 600.000 Macs a través de una vulnerabilidad existente en la versión Java que implementa Apple para Mac OS X. El objetivo de este troyano era crear una botnet al estilo de Zeus para poder robar datos personales y contraseñas con técnicas de phishing, realizar ataques DDoS o redireccionar los resultados de las búsquedas webs. Según Symantec, esta última característica, permitió a los creadores recaudar hasta 10.000$ diarios.
El caso fue muy sonado porque derribó el mito de que en Mac no había malware y dejó en evidencia a Apple, que tardó varios meses en publicar el parche para desinfectar a los ordenadores afectados.
Malware en Linux
En el panorama actual, los sistemas basados en UNIX tampoco se libran del malware. La gran popularidad y libertad que tiene Android hace que los creadores de malware centren sus esfuerzos en crear aplicaciones atractivas que, gracias a la ingenuidad de los usuarios, logran instalarse con los suficientes privilegios como para robarles sus datos o algún dinero de la tarjeta de crédito.
Por otra parte, en GNU/Linux, al igual que pasa con las últimas versiones de Mac OS o Windows, no resulta rentable atacar al sistema operativo, sino que es mucho más sencillo encontrar una vulnerabilidad en un programa ampliamente usado como puede ser Java o Flash. Por este motivo, es habitual encontrarse vulnerabilidades explotadas en servidores Apache, Postfix, Webmin o MySQL. Lo típico es que con tales vulnerabilidades, un atacante remoto pueda obtener acceso al sistema y logre ejecutar comandos arbitrarios e incluso algún código malicioso descargado en el sistema.
La falsa sensación de seguridad de que en GNU/Linux no hay virus y las configuraciones por defecto, hace que los administradores se relajen y no mantengan sus servidores de producción actualizados y protegidos de las amenazas externas.
La época de la ciberguerra
Introducción
Tras las décadas de los vándalos y los criminales en la red, los gobiernos han visto en el malware un aliado para poder atacar otros países sin necesidad de declararles la guerra de forma oficial.
Stuxnet
Durante años la ciberguerra ha permanecido oculta de los ojos del gran público pero en 2010 se hizo presente con Stuxnet, un gusano de asombrosas características que infectó los sistemas Siemens SCADA de control y monitorización de sensores de las centrales nucleares de Irán.
Para poder instalarse sin levantar sospechas, los creadores del gusano obtuvieron de forma fraudulenta los certificados digitales privados de Realtek para firmar digitalmente el código del gusano y hacerlo pasar por un driver de la empresa Realtek. Además, este gusano hacía uso de 4 vulnerabilidades de Windows (desde 2000 hasta 7) totalmente desconocidas y una vez infectado el sistema lograba privilegios de administrador, buscaba la base de datos de los sistemas SCADA para modificar sus parámetros y enviaba señales falsas a los sensores haciéndoles creer que todo seguía en orden. De esta forma, el gusano lograba la destrucción de los sistemas y por consiguiente, paralizaba la planta nuclear.
Según el New York Times, fue en una central nuclear de Israel, similar a las que posee Irán, donde Estados Unidos e Israel trabajaron durante varios años para el perfeccionamiento del gusano. Les fue realmente bien, pero debido a que el gusano se propagaba indiscriminadamente, más allá de los sistemas SCADA, infectó sistemas ajenos a las centrales nucleares y fue descubierto VirusBlokAda.
Flame
En 2012 se descubrió Flame, un troyano con propósitos de espionaje, que comparte el código de Stuxnet para infectar equipos con Windows 7 totalmente actualizados y que es capaz de realizar capturas de audio y video a través del micrófono y la cámara. Hace uso de certificados digitales de Microsoft, es muy modular para poder adaptarlo a las necesidades de espionaje, usa hasta cinco niveles de cifrado, y además, remotamente, se puede controlar el grado de propagación y puede auto eliminarse si recibe la orden para no dejar huellas.
Hay muestras de este troyano que datan del 2007 y se sospecha que Estados Unidos e Israel están detrás de él ya que comparte código con Stuxnet y ha infectado equipos de Irán, Palestina o Siria. Debido al tamaño del virus (más de 20 MB) y a la complejidad del cifrado que usa, las casas de antivirus no han logrado analizar al completo al virus, por lo que no se sabe si es capaz de realizar más acciones.