GNU/Linux >> Tutoriales Linux >  >> Linux

Asegure Kali Pi 2018

Hemos cubierto cómo crear "cajas de piratería desechables" seguras con Raspberry Pi antes, pero pensamos que era hora de volver y echar un vistazo al proceso nuevamente. Con todos los nuevos modelos de Raspberry Pi y los cambios de Kali desde la última vez que cubrimos esto, descubrimos que el proceso anterior necesitaba algunas actualizaciones.

Como revisión, lo que estamos tratando de lograr es crear un dispositivo independiente "dejar atrás" que, cuando se descubre, no hace que sea fácil descifrar lo que estabas haciendo. Así que usamos el cifrado de disco completo de LUKS junto con la capacidad Nuke de LUKS para armar esto. Si tiene una Raspberry Pi 3 Modelo B+, o realmente cualquier otro modelo o dispositivo similar, no dude en utilizar las instrucciones a continuación para configurar su propio sistema seguro. Este proceso actualizado se basa en nuestra documentación anterior y se actualizó con algunas sugerencias de la comunidad.

Resumen del proceso

Antes de sumergirnos en la tecnología de lo que vamos a intentar lograr, echemos un vistazo rápido a nuestros objetivos al configurar nuestro Raspberry Pi 3 Model B+ (en adelante, "RPi"):

  1. Cree una instalación normal de Kali Linux RPi
  2. Preparar el sistema para arranque encriptado con desbloqueo de disco remoto
  3. Cree un initramfs configurado con Dropbear y claves SSH para permitir que ocurra el desbloqueo
  4. Copia de seguridad de datos existentes
  5. Configurar las particiones cifradas
  6. Restaurar nuestros datos
  7. Configurar LUKS Nuke
  8. ¡Corta!

Esto puede parecer mucho, pero es bastante sencillo y, una vez completado, nos quedará un RPi que se iniciará, obtendrá una IP de DHCP y Dropbear nos permitirá conectarnos a través de SSH para proporcionar la clave LUKS. Esto nos permite ejecutar el RPi sin cabeza, pero manteniendo nuestros datos seguros. Luego, en el futuro, cuando hayamos terminado con él, podemos recuperarlo o ingresar de forma remota y destruir nuestros datos con LUKS NUKE.

Preparando el sistema Base

Para empezar, necesitamos escribir la imagen RPi en una tarjeta SD. No entraremos en eso aquí, pero puede encontrar información sobre cómo hacerlo en nuestros documentos.

Con eso fuera del camino, insertamos la tarjeta SD en el RPi y dejamos que arranque. En el primer arranque, cambiará el tamaño de la tarjeta SD y se reiniciará, luego estará listo para usar. A continuación, nos conectamos a través de SSH, actualizamos Kali e instalamos algunos paquetes que necesitaremos.

apt update
apt dist-upgrade
apt install cryptsetup lvm2 busybox dropbear

Haciendo la Magia-Fu

El RPi está todo configurado y listo para funcionar, así que ensuciémonos las manos y sumérjase en las cosas. Tome nota, una vez que comencemos este proceso, cambiaremos una cantidad de archivos críticos en nuestra instalación de RPi. Es importante no reiniciar el dispositivo ni apagar el sistema hasta que esté listo o se quedará con un sistema que no arrancará.

En primer lugar, debemos agregar una línea a /boot/config.txt :

echo initramfs initramfs.gz followkernel >> /boot/config.txt

A continuación, queremos validar dónde se encuentra nuestro dispositivo de sistema de archivos raíz real:

[email protected]:~# cat /etc/fstab
# proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

Tome nota especial de que nuestro sistema de archivos raíz se encuentra en /dev/mmcblk0p2 . Esto es lo que usaremos para nuestros ejemplos en el futuro, así que asegúrese de actualizar las instrucciones con cualquier valor que haya recibido en su sistema.

Ahora que conocemos la ubicación de nuestro sistema de archivos raíz, editaremos el /boot/cmdline.txt . Por defecto, contiene lo siguiente:

[email protected]:~# cat /boot/cmdline.txt
dwc_otg.fiq_fix_enable=2 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

Tome nota de la lectura de entrada root=/dev/mmcblk0p2 . Vamos a actualizarlo con un cryptdevice valor:

root=/dev/mapper/crypt cryptdevice=/dev/mmcblk0p2:crypt

Con el cambio realizado, nuestro archivo se ve así:

[email protected]:~# cat /boot/cmdline.txt
dwc_otg.fiq_fix_enable=2 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mapper/crypt cryptdevice=/dev/mmcblk0p2:crypt rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

También necesitamos editar /etc/fstab y reemplace el dispositivo donde nuestro sistema de archivos raíz se encuentra actualmente /dev/mapper/crypt :

[email protected]:~# cat /etc/fstab
# proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mapper/crypt / ext4 defaults,noatime 0 1
#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

A continuación, debemos crear un /etc/crypttab archivo que contiene lo siguiente:

crypt /dev/mmcblk0p2 none luks

Tenga especial cuidado aquí:los separadores entre las entradas tienen que ser pestañas , no espacios. Ahora, antes de que comencemos a crear nuestros initramsfs, necesitamos hacer un pequeño truco astuto para forzar la inclusión de cryptsetup. Para hacer esto, crearemos un sistema de archivos LUKS falso. Nosotros dd un archivo vacío, formatéelo como LUKS, móntelo y póngale un sistema de archivos.

dd if=/dev/zero of=/tmp/fakeroot.img bs=1M count=20
cryptsetup luksFormat /tmp/fakeroot.img
cryptsetup luksOpen /tmp/fakeroot.img crypt
mkfs.ext4 /dev/mapper/crypt

No se preocupe demasiado por establecer una contraseña segura para este fakeroot, ya que solo se usa en este caso.

Configuración de SSH e Initramfs

Ahora estamos en la recta final. Esta parte es realmente genial, ya que normalmente cuando se inicia un sistema que ejecuta LUKS, el proceso de arranque se detiene para permitirle desbloquear el HDD con su clave LUKS. Si está ejecutando un sistema sin periféricos, eso no es especialmente conveniente.

Para evitar eso, vamos a configurar Dropbear para que se inicie, permitirle autenticarse con SSH y luego conectarlo para proporcionar su contraseña de LUKS, ¡todo desde un control remoto!

Empezamos creando un archivo en /etc/dropbear-initramfs/authorized_keys que contiene:

command="export PATH='/sbin:/bin/:/usr/sbin:/usr/bin'; /scripts/local-top/cryptroot && kill -9 \`ps | grep -m 1 'cryptroot' | cut -d ' ' -f 3\` && exit"

Es importante tener en cuenta que esto debe estar todo en una línea. No hay saltos de línea allí en absoluto. Si tiene esta configuración correcta, debería verse similar a esto:

[email protected]:~# cat /etc/dropbear-initramfs/authorized_keys
command="export PATH='/sbin:/bin/:/usr/sbin:/usr/bin'; /scripts/local-top/cryptroot && kill -9 `ps | grep -m 1 'cryptroot' | cut -d ' ' -f 3` && exit" ssh-rsa AAAAB3NzaC... [email protected]

A continuación, hacemos un pequeño cambio en /usr/share/initramfs-tools/scripts/init-premount/dropbear . Este cambio se debe al hecho de que necesitamos reducir la velocidad de Dropbear para asegurarnos de que la red esté configurada antes de que Dropbear entre en acción. Al final del archivo, donde dice:

# On NFS mounts, wait until the network is configured. On local mounts,
# configure the network in the background (in run_dropbear()) so someone
# with console access can enter the passphrase immediately. (With the
# default ip=dhcp, configure_networking hangs for 5mins or so when the
# network is unavailable, for instance.)
[ "$BOOT" != nfs ] || configure_networking
run_dropbear &
echo $! >/run/dropbear.pid

Queremos agregar un simple dormir declaración como esta:

[ "$BOOT" != nfs ] || configure_networking
sleep 5
run_dropbear &
echo $! >/run/dropbear.pid

Con eso completado, ¡finalmente estamos listos para crear nuestro initramfs!

mkinitramfs -o /boot/initramfs.gz

Antes de continuar, nos aseguramos de que nuestros cambios personalizados hayan llegado al nuevo initramfs:

lsinitramfs /boot/initramfs.gz | grep cryptsetup
lsinitramfs /boot/initramfs.gz | grep authorized

Con eso validado, nos aseguramos de que todos los cambios se escriban en el disco y apaguemos el RPi.

sync && sync
init 0

Copia de seguridad y restauración

Retire la tarjeta SD de su RPi y regrese al sistema que usó inicialmente para escribir la tarjeta SD. Preparemos el ambiente:

ls -al /mnt/{chroot,backup,encrypted}
# Please make sure there is nothing here first before you move on, otherwise you will have a bad day.
rm -rf /mnt/{chroot,backup,encrypted}
mkdir -p /mnt/{chroot,backup,encrypted}

Ahora inserte la tarjeta SD y valide la ID del dispositivo. En nuestro caso, el dispositivo es /dev/sdc2 pero el suyo puede ser diferente, así que ajústelo según sea necesario en su sistema. Montamos el dispositivo y hacemos una copia de seguridad del sistema de archivos:

mount /dev/sdc2 /mnt/chroot/
rsync -avh /mnt/chroot/* /mnt/backup/
umount /mnt/chroot

Una vez hecho esto, eliminamos la segunda partición existente en la tarjeta SD y recreamos una vacía, que configuramos para el cifrado LUKS.

echo -e "d\n2\nw" | fdisk /dev/sdc
echo -e "n\np\n2\n\n\nw" | fdisk /dev/sdc

Con las particiones actualizadas, las recargamos ejecutando partprobe y luego configure LUKS en la nueva partición:

cryptsetup -v -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdc2
cryptsetup -v luksOpen /dev/sdc2 crypt
mkfs.ext4 /dev/mapper/crypt

Con eso fuera del camino, restauramos la copia de seguridad del sistema de archivos raíz a la partición ahora encriptada.

mount /dev/mapper/crypt /mnt/encrypted/
rsync -avh /mnt/backup/* /mnt/encrypted/
sync
umount /mnt/encrypted/
cryptsetup luksClose /dev/mapper/crypt

Probarlo

Ahora puede volver a colocar la tarjeta SD en el RPi y dejar que se inicie. Si observa el arranque, debería ver el inicio de Dropbear. En ese momento, debería poder acceder al sistema mediante SSH y desbloquear la unidad.

[email protected]:~# ssh -o "UserKnownHostsFile /dev/null" [email protected]
The authenticity of host '10.42.42.94 (10.42.42.94)' can't be established.
ECDSA key fingerprint is SHA256:L+QVP+OmncGDleuEoj77OlRGuCji2gp0c1gMYjUupU0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.42.42.94' (ECDSA) to the list of known hosts.
Please unlock disk /dev/mmcblk0p2 (crypt):
cryptsetup (crypt): set up successfully
Connection to 10.42.42.94 closed.

La versatilidad de estos pequeños dispositivos combinada con el poder de Kali nunca deja de sorprendernos. Ahora nos queda un buen sistema sin cabeza que podemos operar con relativa confianza de que, incluso si se descubre, no será demasiado fácil acceder a él.

¡Pero aún no hemos terminado! Agreguemos algunas funciones de LUKS NUKE:

cryptsetup luksDump /dev/mmcblk0p2
cryptsetup luksAddNuke /dev/mmcblk0p2

Ahora, cuando ingresamos mediante SSH, tenemos una contraseña que podemos ingresar para permitir que la tarjeta SD se desbloquee y continúe el proceso de arranque, y otra que destruye el encabezado LUKS, lo que hace que los datos sean inaccesibles. Si termina en una situación en la que no puede recuperar el dispositivo, esta opción para grabar el dispositivo podría ser muy útil. Si quiere ser realmente elegante, también puede combinar esto con convertir el RPi en un punto de acceso inalámbrico, lo que le permite acceder y desbloquear/desbloquear el sistema de forma remota a través de una conexión inalámbrica. Esto es muy útil si no tendrá acceso directo continuo a la red a la que se conectará el RPi.


Linux
  1. Kali Pi seguro (2022)

  2. Kali Unkaputtbar

  3. Lanzamiento de Kali Linux 1.0 - Moto - El nacimiento de Kali Linux

  4. ¿Qué hay de nuevo en Kali Linux?

  5. Lanzamiento del sitio web de Kali Tools, versión 1.0.9

Endurecimiento de Kali Linux

Cómo instalar el servicio SSH (shell seguro) en Kali Linux

Descargar KaliLinux

Kali Linux contra Parrot

Lanzamiento de Kali Linux 2018.3

Lanzamiento de Kali Linux 2019.2