Saltar al contenido

Flash it! Mejorando la seguridad de nuestro setup con el coreboot de Skulls.

20 octubre 2022 - Chavo

Eliminando puertas

Si eres una de esas personas paranoicas con la seguridad de tu bitcoin, seguro que tienes un equipo que usas en exclusiva para hacer los movimientos más delicados. Es importante separar en nuestros setups los equipos de uso diario de los que utilizamos para mover nuestros sats para evitar brechas de seguridad.

En la comunidad bitcoiner, son muy recomendados los Thinkpad de Lenovo para este fin por su potencia, durabilidad y por ser equipos extremadamente baratos y seguros y en ellos nos vamos a centrar, en concreto en el thinkpad x230. Un equipo que tiene un procesador potente para el uso que queremos darle, capaz de mover con soltura las distribuciones de linux mas habituales y que con un par de mejoras se convierte en una bestia.

¿Pero y si os dijera que la primera falla de seguridad se da nada más encenderlo?

Pues así es. Desde que encendemos el equipo ponemos en marcha uno de los agujeros de seguridad más grandes que existen en todos los equipos desde 2005 a nivel de hardware y firmware, el Intel management engine (IME en adelante).

Y ahora os preguntaréis ¿Esto qué es o qué hace? Pues el IME es un microcontrolador integrado en algunos chipsets de Intel para las placas base de sus microprocesadores y que es capaz de tener control absoluto sobre tu ordenador desde que tiene corriente hasta que se apaga por completo y desconectamos cualquier fuente de energía, incluso cuando lo tenemos en modo “sleep” o apagado pero con la batería conectada. (En AMD desde 2013 también lo han hecho, nombrado como AMD PSP, no vayáis a creer que si tenéis un equipo de ese fabricante ya estáis libres).

¿Y esto como lo han hecho? Pues básicamente han instalado en una partición del chip de BIOS usando EFFS (Embedded Flash File System) esto, que asume el control de absolutamente todo el equipo por “seguridad” y que ofrece mejoras para los administradores de sistemas, pudiendo hacer lo que se proponga en el equipo y monitoreando todas las actividades al más bajo nivel.

¿Y que podemos hacer nosotros si no queremos tener ese espía ahí?

Fácil…Flash it! Pero ¿El que? Esto viene ahora:

¿Qué es coreboot?

Coreboot (LinuxBIOS) es un proyecto apoyado por la Free Software Foundation que se inicia en 1999 y saca su primera versión estable en 2006, dirigido a sustituir el firmware no libre de BIOS propietarias y busca que se efectúen el mínimo de tareas para cargar un sistema operativo.

Coreboot, como veis cumple con parte de lo que buscamos pero… ¿Y el IME?

No os preocupéis que también hay un proyecto que lo neutraliza casi por completo llamado ME Cleaner que modifica su firmware hasta un punto en el que esté activo sólo durante el proceso de arranque, deshabilitándolo efectivamente durante el funcionamiento normal.

Una vez conocemos que es el IME y que opciones tenemos para neutralizarlo al máximo, vamos a tinkerear con el x230 un poco. Gracias al proyecto de Skulls, este proceso se ha facilitado muchísimo y vamos a aprovecharlo.

Que materiales necesitamos:

Una Raspberry pi 3b+ / 4 (Flasher)

MicroSD 16gb para flashear Raspbian OS

Una pinza SOIC8 de una calidad aceptable (Pomona 5250)

6 cables dupont para conectar la raspberry a la pinza

Destornillador pequeño para el portátil.

Actualiza la bios de tu pc antes de nada

Para empezar este proceso lo primero que haremos será actualizar la bios del equipo a la última versión disponible. Lo haremos siguiendo este tutorial si tenemos linux:

https://www.cyberciti.biz/faq/update-lenovo-bios-from-linux-usb-stick-pen

Si tenemos windows, basta con descargar el actualizador de la pagina oficial de lenovo y ejecutarlo.

Una vez actualizado seguiremos adelante con el proceso.

Preparamos la raspberry:

Descargaremos de la página oficial el sistema operativo Raspberry pi OS,

verificaremos la descarga y usando Balena etcher o cualquier software de flasheo, lo quemaremos en la micro sd.

Una vez completo el flash, nos indicará que todo ha sido correcto. En ese momento abrimos la micro sd desde el explorador de archivos y añadiremos un fichero de texto al que llamaremos ssh, y posteriormente le daremos a cambiar nombre y eliminamos su extensión .txt, dejándolo como una hoja blanca. Esto nos permitirá el acceso por SSH una vez cambiemos usuario y contraseña dentro del sistema operativo de la raspberry y nos permitirá trabajar mas cómodos que pegados a la máquina en cuestión.

Conectamos a una pantalla la rasp, le conectamos un teclado, un cable de red, un ratón y la encendemos. Tras un poco de espera quizá tenga actualizaciones y después de realizarlas se reinicie o si no las hay podemos pasar al siguiente punto. Nos pedirá que introduzcamos un usuario y una contraseña para el acceso al sistema en cuestión (sed creativos) en mi caso puse usuario: pi contraseña: pi porque no tenía ganas de andar escribiendo una contraseña larga cada vez que instalamos algo… Pero si vuestra preferencia es ir mas seguros, con caracteres alfanuméricos y símbolos está bien.

Una vez configuramos el usuario y la contraseña en la raspberry, buscamos la IP que se le ha asignado desde nuestro router.

Si la tuviéramos por ejemplo en 192.168.1.200 podríamos conectar con ella de dos formas, bien desde linea de comandos o bien desde PUTTY:

Desde linux, abrimos terminal y escribimos :

ssh usuario@laIpdetuRasp

Ejemplo:

ssh pi@192.168.1.200

Nos pedirá la contraseña que hayamos puesto en el paso anterior, y ya estaremos dentro de la terminal.

Desde putty la manera de proceder sería poner en hostname la IP de la raspberry y le damos a open. Aquí nos pedirá primero el usuario que hayamos puesto, y luego la contraseña.

Una vez dentro del terminal de la máquina empezaremos a preparar el flasheo.

Editaremos el config.txt para añadir al final estas líneas. Escribir en terminal:

sudo nano /boot/config.txt

Y una vez se abra el documento, añadir al final las lineas:

enable_uart=1

dtparam=spi=on

Una vez añadidas, Control+o (guardar) intro, y luego control+x para salir.

Ahora procederemos a modificar otro archivo escribiendo en terminal:

sudo nano /etc/modules

Y añadimos las líneas:

spi_bcm2835

spidev

Una vez añadidas, Control+o (guardar) intro, y luego control+x para salir.

Instalaremos flashroom con:

sudo apt-get install -y flashrom

Nos pondremos en modo SuperUsuario y descargaremos la versión de skulls que toque. Podemos comprobar que versión desde aquí. Aquí utilizaremos la última versión a la fecha actual que es la 1.0.4.

sudo su

wget https://github.com/merge/skulls/releases/download/1.0.4/skulls-1.0.4.tar.xz

Descomprimiremos el archivo descargado con:

tar -xvf skulls-1.0.4.tar.xz

Y a continuación apagaremos la raspberry con:

sudo shutdown –h now

Ahora preparamos el thinkpad:

Pasaremos a abrir el Thinkpad para tener acceso a los dos chips que nos interesan.

Le daremos la vuelta, quitaremos la batería y sacaremos los 7 tornillos que se indican en la imagen:

 Le daremos la vuelta, abriremos la tapa de la pantalla y con cuidado desmontaremos la tapa donde está el touchpad, ahí encontraremos un film negro que deberemos despegar por su parte de abajo a la izquierda para poder acceder a los chips (Redonda roja):

Conectando los cables.

Pasaremos a conectar los cables a la raspberry con sumo cuidado.

Marcaremos la pinza si no queremos liarnos con parte izquierda y parte derecha (en los dos chips se coloca de la misma manera).

La conexión de los cables es la siguiente:

En el chip, la parte de arriba es donde estaría la pantalla, y la de abajo mas cerca de nosotros (touchpad):

En la raspberry:

*Imagenes extraidas de la documentación del coreboot de skulls.

Ahora con imágenes:

El cable lila está inhabilitado
El cable naranja está inhabilitado

Ahora solo queda sudar frío…

Una vez tenemos los cables bien conectados, conectaremos la pinza al chip de abajo, de manera que la parte derecha (R en las fotos) sea la parte derecha del chip si tenemos el ordenador abierto delante nuestro como si lo fuéramos a usar.

Tenemos que ser muy cautelosos, y conectar la pinza de una manera correcta para que haga buen contacto con los pines de los chips si no queremos freírlos.

Esta es la parte donde todos los preparativos culminan con dos comandos fáciles, pero nos hacen sudar frío.

Una vez esté todo correctamente conectado, encenderemos la rasp nuevamente y conectaremos por ssh como en los primeros pasos.

Una vez estemos conectados desde la línea de comandos escribiremos:

cd skulls-1.0.4

sudo ./external_install_bottom.sh -m -k bottom.bak (bottom.bak será el nombre del backup file, aunque podemos ponerle otro si nos apetece)

Esto lanzará el flasher y hará una copia de seguridad de nuestro chip de abajo.

En la pantalla veremos:

Please select the hardware you use:

1) Raspberry Pi

2) CH341A

3) Exit

Please select the hardware flasher: 1 (elegimos el 1 porque lo hacemos con raspberry y damos al intro)

Al finalizar todo dará el mensaje que el flasheo está ok.

Ahora apagamos nuevamente la raspberry, conectamos al chip de arriba la pinza, la encendemos de nuevo, logueamos por ssh  y seguimos con:

cd skulls-1.0.4

sudo ./external_install_top.sh -b x230 -k top.bak (El nombre del backup file será top.bak)

Esto lanzará el flasher y hará una copia de seguridad de nuestro chip de arriba.

En la pantalla veremos:

1) ./x230_coreboot_seabios_free_74d2218cc7_top.rom

2) ./x230_coreboot_seabios_74d2218cc7_top.rom

3) Quit

Please select a file to flash or start with the -i option to use a different one: elegir la que se quiera (la 2 lleva algo de firmware propietario y la 1 es todo free)

Please select the hardware you use:

1) Raspberry Pi

2) CH341A

3) Quit

Please select the hardware flasher:1

Si todo ha sido correcto nos dará este mensaje:

Reading old flash chip contents… done.

Erasing and writing flash chip… Erase/write done.

Verifying flash… VERIFIED.

DONE

Ahora podemos apagar ya la raspberry, desconectar la pinza y montar de nuevo el ordenador. El trabajo está hecho.

Con esto ya estaría todo, y solo nos quedaría encenderlo de nuevo, ahora con el coreboot de Skulls hecho y la IME neutralizada en su mayoría.

Podréis comprobar que aumenta la velocidad tanto de encendido como de apagado del equipo, y que cuando enciende nos muestra el logo de skulls 😉

Guarda tus copias de seguridad

Al completar los procesos hemos generado los archivos bottom.bak y top.bak que son las copias de seguridad del contenido original de los dos chips de nuestro portátil. Deberemos guardar estos archivos por si en algún momento queremos revertir el proceso descrito en el tutorial.