Categoría: Ordenadores

Esos grandes desconocidos… Si no ves esta categoría, prueba a reiniciar.

Ordenador-acuario

Publicado por Iñaki a las 9:36 Sábado 23 de Enero de 2010

Una bonita manera de refrigerar nuestro ordenador: sumergiéndolo completamente en aceite mineral. ¡Con burbujitas y todo!

Es tan fácil como hacer una especie de “acuario” de metacrilato del tamaño de la placa base, meter las tripas del PC dentro y llenarlo de aceite mineral. Existe un vídeo del proceso. Importante: sacar los puertos USB fuera. ;-)

Bombas fork

Publicado por Iñaki a las 10:36 Lunes 25 de Mayo de 2009

La bomba fork es un ataque de tipo DoS para sistemas operativos. Se llama así por la función fork() de UNIX, encargada de crear procesos hijos y base de este ataque. Mediante unas pocas líneas de código ejecutadas por cualquier usuario de manera local, se puede tumbar cualquier máquina en cuestión de segundos. No es algo que se pueda parchear fácilmente debido a que no es ningún fallo ni ninguna vulnerabilidad. Tampoco se puede identificar como virus o malware, porque tampoco lo es. Una bomba fork suele hacer uso de algo tan sencillo como un bucle infinito dentro del cual se crea un proceso hijo. Así, el número de procesos en el sistema crece de forma incontrolada hasta consumir los recursos de la máquina (memoria RAM y procesador), quedando colgada. ¿El resultado? Pues que hay que reiniciar a las bravas (léase tirando del cable o pulsando el botón), pero nada más. No supone ningún peligro, salvo que estemos trabajando con algún documento y no hayamos guardado…

En resumidas cuentas, la bomba fork no es un agujero en la seguridad de los sistemas operativos porque no produce ningún daño (salvo la molestia), porque lo tiene que ejecutar el propio usuario del sistema (luego es un suicidio en toda regla) y porque es más bien una característica de los lenguajes de programación y el resultado de un programador patoso. Vamos, que es lo mismo que tirar del cable de alimentación queriendo. Aún así, no deja de ser una bonita curiosidad.

Vamos a ver unos ejemplos. Empecemos con Linux. Existe una bomba fork para este sistema que tiene el honor de ser considerada «la bomba más bonita jamás creada», tanto por su simplicidad como por su elegancia. El código es el siguiente:

 :( ) { : | : & };:

Así de simple. Si introducimos lo anterior en una consola de Linux, probablemente el ordenador quedará inmediatamente colgado. O no. Este código se conoce desde hace bastante tiempo y es posible que en vuestra distribución de Linux ya no funcione porque hayan implementado algún tipo de protección contra usuarios suicidas. Por ejemplo, en mi Fedora 10 no funciona. Si lo analizamos, es lo mismo que escribir lo siguiente:

funcion() {
	funcion | funcion &
};
funcion

forkbombAhora está mucho más claro: definimos una función y luego la llamamos. Dentro de la misma, se llama a sí misma y el resultado se pasa por una tubería a ella misma de nuevo y todo estos se ejecuta en segundo plano (carácter “&”). Es decir, de cada proceso salen dos nuevos, y de cada uno de ellos, otros dos, y así hasta que el sistema operativo lo permita.

Windows también tiene su versión de línea de comandos, y tiene esta pinta:

:s
start %0
%0 | %0
goto s

Hace lo mismo que la anterior. Basta con guardar esto en un fichero de texto y cambiarle la extensión de “.txt” a “.bat”. Tras esto, ejecutar y disfrutar del espectáculo. Guardad todo lo que estéis haciendo primero, que esta sí que funciona, aunque no deja el sistema totalmente colgado, porque llega un momento que los procesos creados empiezan a dar errores de aplicación y la carga del sistema baja, con lo que se puede llegar a hacer algo, pero de todas formas hay que acabar reiniciando.

Y ahora vienen las bombas buenas. Las que dejan al sistema congelado sí o sí, tanto para Linux como para Windows, en lenguaje C. La primera la del pingüino:

#include <unistd.h>

int main(void) {
	while(1)
		fork();
	return 0;
}

Copiad este código en un archivo y guardadlo como “.c”. Tras esto, compiladlo con nuestro querido gcc —sí, de acuerdo, es una mierda, pero es nuestra mierda— y lanzad el binario. It works!

Bien, y como lo prometido es deuda, la versión de Windows (esta es cosecha propia, seguro que las hay mejores):

#include <windows.h>

int main (void) {
	STARTUPINFO si;
	PROCESS_INFORMATION pi;

	ZeroMemory( &si, sizeof(si) );
	si.cb = sizeof(si);
	ZeroMemory( π, sizeof(pi) );

	while(1)
		CreateProcess ("bomba.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, π);
	return 0;
}

Aquí el archivo se llama “bomba.cpp” y al compilar queda como “bomba.exe”, por lo que la llamada anterior hace que se inicie a sí mismo. Para los que lo queráis probar, podéis descargar el ejecutable desde aquí.

Como ya hemos comentado, no es algo grave para ningún sistema operativo y un ordenador personal, pero sí que hay que tenerlo en cuenta cuando se trata de servidores. Los administradores deben tener cuidado y configurar adecuadamente los equipos para evitar que usuarios tocahuevos con acceso shell puedan darles un disgusto. Así pues, la solución que pueden aplicar es limitar el número de procesos que puede crear un usuario. Con 20 son más que suficientes. En Linux, mediante el comando ulimit -a podemos ver el número de procesos máximo de nuestro usuario. En mi distribución, el límite está en 1024, algo alto. Esto se puede modificar en el archivo /etc/security/limits.conf.

Para más información y para ver bombas en otros lenguajes de programación, visitad la página de la Wikipedia (primer enlace).

Discos duros con sectores defectuosos

Publicado por Iñaki a las 2:25 Miércoles 22 de Abril de 2009

Recientemente he tenido diversas aventuras y desventuras (más de lo segundo) con un disco duro (con Windows, aunque en principio da igual) que fallaba debido a sectores defectuosos. Costó lo suyo, pero finalmente salí airoso y desfice el entuerto. Para el que le pueda servir —y también a modo de apuntes para mí mismo—, dejo aquí plasmado lo que he aprendido al respecto.

Diagnóstico

¿Doctor, qué le sucede a mi PC? El síntoma más claro de que nuestro disco duro pudiere albergar sectores defectuosos es que todo va bien en apariencia, pero observamos mucha lentitud en determinadas acciones. ¡Ojo! No confundir con la tontería creciente que va acumulando Windows con el paso del tiempo, no… Me refiero a LLLLLLEEEEEEEEEEENNNNTTTIIITTTTTUUUUUUUUUUUUDDDD (el ordenador puede llegar a quedarse parado), y además en puntos concretos: al abrir un archivo, al iniciar el PC, etc.

¿Y si tiene sectores defectuosos, es grave? Depende; para empezar del número de defectos, y, por último, del tipo de estos. Existen dos tipos: sectores mal magnetizados y defectos materiales del disco. Los primeros se pueden arreglar fácilmente con el software adecuado. Los segundos no tienen remedio, pero si no son demasiados podremos seguir utilizando el disco sin problemas tras realizar unos apaños. ¿Por qué se produce esto? Generalmente por tratar el PC con cariño a hostia limpia. Lo malo que tienen los defectos materiales es que, si son muchos, pueden indicar que el deterioro del disco va in crescendo. Por lo tanto, más nos vale comprar otro (y cuidarlo mejor). En cualquier caso, y dejando aparte el disco, lo peor que nos puede pasar es que perdamos algún archivo.

Ya nos hemos mentalizado. ¿Por dónde empezamos?

Antes que nada, recomiendo bajar un LiveCD que os puede sacar de más de un apuro y más de dos, y que contiene la mayoría de las herramientas que os voy a recomendar. Se trata del Hiren’s BootCD.

Lo primero que hay que hacer cuando Windows empieza a tambalearse es ejecutar el CHKDSK (el que por allí por Windows 98 se llamaba SCANDISK). En mi caso, había un problema: Windows no llegaba a iniciarse, y sin Smint no hay beso. Esto significaba que los sectores defectuosos se encontraban al principio del disco: mal rollo… Así que nada, metemos el LiveCD, arrancamos, y ejecutamos una herramienta llamada NTFS Dos Pro, que lo primero que hace es ejecutar CHKDSK. En este punto ya confirmé que había sectores defectuosos, pero como la herramienta en cuestión es estúpida, no hace nada con ellos.

Una vez confirmado el diagnóstico, lo primero es utilizar la excelente herramienta llamada HDD Regenerator (en el mismo CD mientras no diga lo contrario). Es un programa bastante lento, todo hay que decirlo, pero con la peculiaridad de que repara los sectores defectuosos debidos a errores magnéticos sin pérdida de datos. Si hace bien su trabajo, solucionado. Como mucho, tendréis que volver a copiar los archivos del sistema de Windows si no carga porque estaban dañados, y el PC como nuevo.

Los sectores están materialmente dañados

Todavía no está todo perdido (ni lo estará). El programa Seagate Seatools Graphical es capaz de encontrar los sectores defectuosos y marcarlos, haciendo una lista con ellos. Así, el sistema operativo los ignora, y es como si no existieran, como si tuviéramos un disco duro un pelín más pequeño. Vale, perfecto. Tras esto, como en el apartado anterior, el disco como nuevo.

Son demasiados sectores y la cosa va a más

El disco duro está en las últimas. Pobrecillo. Habrá que copiar todo a un disco nuevo y corregir allí los errores. Tenéis diversas herramientas en el CD que seguro funcionarán muy bien (como Norton Ghost, Acronis True Image, etc.), sin embargo, al ser un sistema de ficheros NTFS, acudí a una herramienta específica: ntfsclone. Os recomiendo para ello el SystemRescueCd, un LiveCD de Linux que contiene todas las herramientas más importantes de Linux para la recuperación de nuestro sistema.

Conectamos el disco duro nuevo vacío (como esclavo, por USB, o como queráis), iniciamos y ejecutamos lo siguiente:

ntfsclone --rescue /dev/hda1 --overwrite /dev/hdd1
dd if=/dev/hda of=/dev/hdd bs=446 count=1

La primera sentencia clona la partición NTFS dañada (hda1) al nuevo disco (hdd) ignorando los errores de lectura debido a los sectores dañados. La segunda, copia el MBR, para que podamos arrancar desde el nuevo disco. Ahora no recuerdo si es necesario poner el flag de boot en la partición del nuevo disco, pero eso es fácil con cualquier editor de particiones (recomiendo Gparted, del LiveCD de Linux).

¿Ya está?

No. Ahora viene lo bueno: tenemos un disco sin daños, pero con supuestos sectores dañados marcados gracias al punto 3. Hemos clonado el disco, para lo bueno y para lo malo. Si queremos redimensionar la partición, por ejemplo, no nos dejará debido a esto. ¡Pero sabemos que no están realmente dañados! ¿Cómo los desmarcamos? Esto no es tan fácil. Al parecer Windows Vista trae un CHKDSK con una opción /b que vuelve a repasar los sectores marcados para ver si realmente están dañados, pero, obviamente, no merece la pena instalar ESO… La solución la encontré en el LiveCD de Linux que os acabo de recomendar (por esta razón recomiendo ese y no otro), pues es de los pocos que he visto con el programa que necesitamos: ntfstruncate.

Primero ejecutamos lo siguiente (sustituimos <partition> por nuestra partición):

ntfsinfo -i 8 <partition>

Esto nos da una información de salida. De ella, bajo el título “Dumping attribute $DATA (0×80)”, tenemos que buscar el apartado que dice “Allocated size” y copiar el valor que aparece a la derecha. Ahora:

ntfstruncate <partition> 8 0x80 '$Bad' 0
ntfstruncate <partition> 8 0x80 '$Bad' <ntfs_size>

Donde <ntfs_size> es el número que hemos copiado antes. Ya está. De esta manera, hemos eliminado la lista de sectores defectuosos que habíamos mencionado más arriba. Sólo queda ejecutar el CHKDSK de Windows para que arregle algún índice y como nuevo.

Límites inciertos

Publicado por Almudena a las 14:44 Sábado 18 de Abril de 2009

Parecería que hemos alcanzado los límites de lo que se puede lograr en materia de tecnología computacional, aunque uno debería tener cuidado con este tipo de sentencias, pues tienden a sonar bastante estúpidas al cabo de cinco años.

(John von Neumann, matemático húngaro-estadounidense, 1949)

Refranero del siglo XXI

Publicado por Almudena a las 17:57 Sábado 31 de Enero de 2009

Barra de progreso mirada, no avanza.

(Vista en una viñeta de Mauro Entrialgo, humorista gráfico que publica en Público, y recogida por El Perro Mistetas)

Un ‘geek’ en apuros

Publicado por Iñaki a las 1:42 Jueves 15 de Enero de 2009

Otra perla de xkcd traducida por xkcd-es para vuestra comodidad.

Geek en apuros

Historia de Internet

Publicado por Iñaki a las 1:22 Jueves 15 de Enero de 2009

Un excelente trabajo de Melih Bilgil que narra los orígenes de Internet. Unos gráficos sencillos y claros complementan a la perfección la explicación del narrador. No os lo perdáis [en inglés, sencillito, se entiende muy bien]:

Ver vídeo

(Vía: haha.nu)

[X] Cerrar