Desbloqueo de SecureBoot en la Panasonic Toughpad FZ-B2
Si has llegado aquí es posible que tengas una de estas tablets panasonic que, a pesar de montar procesador Intel, llevan una versión arcaica de Android que casi no tiene soporte. Esta guía trata de enseñar como deshabilitar el SecureBoot que bloquea la instalación de otros sistemas operativos en esta curiosa tablet. El proceso para hacer esto es para usuarios relativamente avanzados, si vas a seguir los pasos de este tutorial que sea bajo tu propia responsabilidad. Lo que se va a necesitar es lo siguiente:
- Un USB de al menos 8GB
- Un ladrón USB (replicador de puertos USB)
- Un teclado USB
- Paciencia
Antes de comenzar
Antes de empezar ten en cuenta que hay 3 variantes de esta tablet: la FZ-B2 original, la FZ-B2B Mark I y la FZ-B2D Mark II. Este método fue probado originalmente por junk-labs en una FZ-B2B Mark I que monta un Celeron, este tutorial es una traducción y ampliación de dicho vídeo.
Antes de empezar ten en cuenta que dependiendo de cual de las 3 variantes de la tablet tengas se deberán ejecutar unos comandos u otros, si ejecutas los comandos pensados para un FZ-B2B en una FZ-B2D podrías brickear la tablet.
Estructura del USB que se creará
Para poder desbloquear el SecureBoot tenemos que crear un USB con la siguiente estructura:
USB
├──MokManager.efi ← Se encarga de manejar certificados MOK
├──shim.efi ← Ya viene dentro
├──gummiboot.efi ← Debe ser sustituido por refind_x64.efi
├──cert/ ← Aquí se debe meter refind.crt y el certificado MOK que crearemos
├──EFI/tools ← Aquí debe ir un shell como "shellx64.efi" firmado con el MOK
├──AmiSetupWriter.efi ← Lo que usaremos para modificar la BIOS
│
└──EFI/boot
├──bootx64.efi copiado de shim.efi
├──refind.conf ←Configuración del refind rEFInd
├──icons/ ←Iconos de rEFInd
└──drivers_x64/ ←drivers de rEFInd
├──MokManager.efi ← Se encarga de manejar certificados MOK
├──shim.efi ← Ya viene dentro
├──gummiboot.efi ← Debe ser sustituido por refind_x64.efi
├──cert/ ← Aquí se debe meter refind.crt y el certificado MOK que crearemos
├──EFI/tools ← Aquí debe ir un shell como "shellx64.efi" firmado con el MOK
├──AmiSetupWriter.efi ← Lo que usaremos para modificar la BIOS
│
└──EFI/boot
├──bootx64.efi copiado de shim.efi
├──refind.conf ←Configuración del refind rEFInd
├──icons/ ←Iconos de rEFInd
└──drivers_x64/ ←drivers de rEFInd
En esta sección vamos a ver como crear este USB, como base se va a tomar el que deja Junk-Labs en su block que puedes descargar aquí. OJO: este comprimido debe ser abierto con 7zip, si no, por alguna razón se ve vacío. Dentro de este comprimido encontramos lo siguiente:
Creación de certificado MOK y firma de archivos EFI
Un certificado MOK o Machine Owner Key es un certificado digital que se usa para autorizar una máquina a arrancar en un sistema con SecureBoot Habilitado. La mejor manera de crear y firmar estos es usar un sistema operativo GNU/Linux, en mi caso he usado el sistema operativo PopOS. Lo primero que debemos hacer es crear un fichero llamado "openssl.cnf" con el siguiente contenido:
# This definition stops the following lines choking if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3
string_mask = utf8only
prompt = no
[ req_distinguished_name ]
countryName = CA
stateOrProvinceName = Quebec
localityName = Montreal
0.organizationName = cyphermox
commonName = Secure Boot Signing
emailAddress = example@example.com
[ v3 ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage = codeSigning,1.3.6.1.4.1.311.10.3.6,1.3.6.1.4.1.2312.16.1.2
nsComment = "OpenSSL Generated Certificate"
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3
string_mask = utf8only
prompt = no
[ req_distinguished_name ]
countryName = CA
stateOrProvinceName = Quebec
localityName = Montreal
0.organizationName = cyphermox
commonName = Secure Boot Signing
emailAddress = example@example.com
[ v3 ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage = codeSigning,1.3.6.1.4.1.311.10.3.6,1.3.6.1.4.1.2312.16.1.2
nsComment = "OpenSSL Generated Certificate"
Una vez creado en archivo en cuestión debemos abrir un terminal en el directorio en el que lo hemos creado y ejecutar el siguiente comando para crear el certificado MOK:
openssl req -config ./openssl.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
Como resultado de esta operación recibiremos una clave privada MOK.priv y una clave pública MOK.der. Debemos copiar MOK.der a la carpeta cert/ en el USB, si no has creado antes dicha carpeta, creala ahora. Tras eso, convertiremos la clave pública MOK.der en un .pem con el siguiente comando:
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
Y tras eso utilizaremos el ceertificado .pem para firmar los archivos .EFI que usaremos posteriormente en este tutorial. El comando para firmar los archivos .EFI sería:
sbsign --key MOK.priv --cert MOK.pem archivo.efi --output archivo.efi
Para esta guía sobre como generar certificados MOK y firmar archivos he usado como fuente el tutorial oficial del Blog de Ubuntu.
Añadir el Certificado MOK a la BIOS
Para añadir el certificado MOK a la BIOS y luego poder así arrancar otros archivos EFI que firmaremos como eEFInd o shell.efi tenemos que conectar el USB que hemos conectado a la tablet con un replicador de puertos USB junto a un teclado. Con todo esto conectado, pulsaremos el botón de encendido de la tablet y pulsaremos repetidamente el botón F2 hasta que se muestre la BIOS de la tablet. Navegaremos hasta el último menú y en la parte de boot override seleccionaremos nuestro USB y le daremos a enter:
Tras eso veremos una pantalla negra con 3 opciones, navegaremos a la que dice MOKmanager y le daremos a Enter:
El la pantalla que aparecerá ahora vamos a enroll certificate y le damos a enter:
En el menú que aparezca seleccionaremos nuestro USB:
Dentro del USB iremos a la carpeta cert/ y pulsaremos enter (En vuestro USB probablemente se verá un poco diferente ya que en el mío tengo cosas de más que estuve usando para testear cosas):
Dentro seleccionaremos MOK.der y pulsaremos enter:
Nos aparecerá el siguiente menú, pulsaremos 0, presionaremos enter, preguntará si queremos hacer enroll del certificado, pulsaremos "y" y le daremos a enter:
Tras eso repetimos el procedimiento para el certificado "refind.cer" (Se encuentra dentro de la carpeta "keys" de refind. Puedes descargar refind en este enlace: este enlace), que se encarga de permitir bootear rEFInd. Con esto ya hemos instalado un certificado. Ya modemos apagar la tablet y pasar al siguiente paso.
Preparar rEFInd, Shell.efi y AMISetupWriter.efi
Para el siguiente paso debemos descargar rEFInd de este enlace, Shell.efi de este enlace y AMISetupWriter.efi en este enlace (Descarga Boot_shell_AmiSetupWriter.rar).
rEFInd
Comenzaremos con rEFInd, lo primero que debemos hacer es abrir el zip en el que viene rEFInd, donde veremos las siguientes carpetas:
Iremos a la carpeta llamada "refind", donde encontraremos lo siguiente:Los archivos que se pueden ver marcados en la captura de pantalla son los que nos interesan, lo primero que debemos hacer es tomar las carpetas "drivers_x64" e "icons" y copiarlas dentro de la carpeta Boot que se encuentra dentro de EFI en nuestro USB. Tras eso cambiaremos el nombre de "refind_x64.efi" por "gummiboot.efi". Finalmente cambiamos el nombre de "refind.conf-sample" por "refind.conf" y lo movemos a la carpete boot dentro de la carpeta EFI. Ahora, si insertamos nuestro USB a la tablet ya podremos bootear rEFInd.shell.efi
Tomamos el archivo shellx64.efi que hemos descargado y lo movemos a la carpeta donde están los certificados MOK en nuestro equipo con Linux. Tras eso lo firmamos con el siguiente comando:
sbsign --key MOK.priv --cert MOK.pem shellx64.efi --output shellx64.efi
Una vez firmado el archivo, lo movemos a la carpeta tools dentro de la carpeta EFI en nuestro USB. Si la carpeta tools no existe, la creamos. Ahora, cuando arranquemos el USB en nuestra tablet rEFInd nos dará la opción de arrancar el Shell EFI.
AMISetupWriter.efi
Esta herramienta es necesaria para poder modificar la BIOS de nuestro sistema. Lo primero que debemos hacer es abrir el comprimido .rar que hemos descargado y extraer el archivo AmiSetupWriter.efi:
Una vez extraido lo movemos a la carpeta en la que tenemos los certificados MOK en nuestro equipo Linux y lo firmamos con el siguiente comando:
sbsign --key MOK.priv --cert MOK.pem AmiSetupWriter.efi --output AmiSetupWriter.efi
Tras eso lo movemos al USB, en este caso no iría dentro de ninguna carpeta en especial como en los anteriores casos. Con esto ya tendremos nuestro USB listo.
Habilitar configuración de SecureBoot y otras cosas importantes de la BIOS
Tras realizar toda esta montaña de pasos ya podemos pasar a lo que queríamos hacer desde un principio: desbloquear SecureBoot en nuestra FZ-B2. Para ello debemos insertar el USB que hemos creado en nuestra tablet y arrancar desde el. Una vez booteado el USB aparecerá rEFINd y seleccionaremos la opción de arrancar el Shell EFI. Ahora mucho ojo, asegúrate de que tablet tienes y en función de la que tengas usa uno de los siguientes comandos:
FZ-B2 (Original)
No está muy claro si esta tablet usa comandos específicos o se pueden usar los mismos que para la FZ-B2B (mark I) ya que en teoría usan la misma placa base y la única diferencia entre los dos modelos parece ser la cámara, pero esto es algo que NO SE HA PODIDO CONFIRMAR. Si vives al límite puedes ARRIESGARTE A USAR LOS MISMOS COMANDOS QUE EN LA FZ-B2B (Mark I), pero hazlo bajo TU PROPIA RESPONSABILIDAD.
FZ-B2B (Mark I)
En este modelo se pueden usar los comandos indicados por Junk-Labs para desbloquear el secureboot, cambiar el tipo de sistema operativo que se bootea y cambiar el modo de operación de la pantalla táctil (Si esto no se hace puede que no funcione en otros sistemas operativos). Los comandos en cuestión son los siguientes:
Mostrar los ajustes de SecureBoot (El valor 0x1 los oculta):
AmiSetupWriter.efi 0x22e 0x0
Cambiar el tipo de sistema operativo (El valor para Windows 8 es 0x0, para Android 0x1 y para Windows 7 0x2):
AmiSetupWriter.efi 0x1F0 0x0
Cambiar los dispositivos de tipo LPSS y SCC a modo de arranque ACPI (El valor para android es 0x1):
AmiSetupWriter.efi 0x1F1 0x0
AmiSetupWriter.efi 0x22e 0x0
Cambiar el tipo de sistema operativo (El valor para Windows 8 es 0x0, para Android 0x1 y para Windows 7 0x2):
AmiSetupWriter.efi 0x1F0 0x0
Cambiar los dispositivos de tipo LPSS y SCC a modo de arranque ACPI (El valor para android es 0x1):
AmiSetupWriter.efi 0x1F1 0x0
FZ-B2D (Mark II)
Mostrar los ajustes de SecureBoot (El valor 0x1 los oculta):
AmiSetupWriter.efi 0x02AA 0x0
Cambiar el tipo de sistema operativo (El valor para Windows 8 es 0x1 y para Android 0x4, desconozco para que son 0x0, 0x2 y 0x3. De buenas a primeras esto no es necesario hacerlo, pero lo incluyo por que en el tutorial de Junk-Labs se mecionaba):
AmiSetupWriter.efi 0x02C1 0x1
Muestra en el menu exit la opción de arrancar shell.efi
AmiSetupWriter.efi 0x0038 0x1
En caso de no ser capaz de leer tarjetas SD se debe habilitar el MS Custom Sdbus Driver
AmiSetupWriter.efi 0x02C5 0x1
AmiSetupWriter.efi 0x02AA 0x0
Cambiar el tipo de sistema operativo (El valor para Windows 8 es 0x1 y para Android 0x4, desconozco para que son 0x0, 0x2 y 0x3. De buenas a primeras esto no es necesario hacerlo, pero lo incluyo por que en el tutorial de Junk-Labs se mecionaba):
AmiSetupWriter.efi 0x02C1 0x1
Muestra en el menu exit la opción de arrancar shell.efi
AmiSetupWriter.efi 0x0038 0x1
En caso de no ser capaz de leer tarjetas SD se debe habilitar el MS Custom Sdbus Driver
AmiSetupWriter.efi 0x02C5 0x1
2 Comentarios
Hola tengo problemas con esta instruccion (sbsign --key MOK.priv --cert MOK.pem archivo.efi --output archivo.efi ) error "Error reading file archivo.efi: No such file or directory" , no entiendo porque el error
ResponderEliminarComo se comenta en el post, en archivo.efi tienes que poner el archivo que quieres firmar, el error viene por que estás intentando firmar archivo.efi, en el siguiente apartado se ve el comando para firmar cada archivo. Ojo, debes colocar la ruta al archivo.
Eliminar