web-dev-qa-db-fra.com

Amorcer SquashFS chiffré à partir de Live CD

Peut-on démarrer squashfs chiffrés à partir de livecd . Si possible, suggérez-moi de déchiffrer et d’amorcer le système d’exploitation.

ici, j'utilise la technique de chiffrement Luks pour sécuriser le fichier Squashfs mais je ne parviens pas à déchiffrer le conteneur de fichier squashfs stocké.

Merci,

1
Mohan

Vous trouverez ci-dessous un script bash "en une étape" qui crée un livecd amorçable chiffré à partir d’une installation Ubuntu existante. (Testé/fonctionnant sur Ubuntu 18.10)

En gros, le script copie l’installation existante d’Ubuntu dans un ensemble de répertoires de travail situés dans/tmp/livecd et:

  • Utilise chroot pour ajouter du casper à l'installation
  • Modifie les casper-helpers pour ajouter la fonctionnalité de démarrage squashfs chiffrée
  • Crée les squashfs initiaux non chiffrés hébergeant l'ensemble du système de fichiers
  • Utilise une chaîne aléatoire pour pré-chiffrer un nouveau fichier squashfs chiffré
  • Utilise une phrase secrète entrée pour configurer ensuite le fichier squashfs chiffré, créer un système de fichiers ext4, puis copier le fichier squashfs non chiffré dans celui-ci.
  • Enfin, l'intégralité de l'ISO amorçable chiffré (pour les fichiers squashfs inférieurs à 4 Go) ou IMG est créée à l'emplacement /tmp/livecd/live-cd.iso ou /tmp/livecd/live-cd.img

Lorsque l'ISO/IMG est démarré sur la machine ou sur une machine virtuelle, les squashfs chiffrés sont complètement transférés dans la RAM, il est demandé à l'utilisateur de saisir le mot de passe composé approprié. Les squashfs sont alors non chiffrés et utilisés pour démarrer le système.

La chaîne de ligne de commande rsync peut être modifiée pour ajouter/supprimer des éléments copiés à partir de l'installation Ubuntu existante lors de la création de la livecd cryptée.

EDIT: Le script gère maintenant les images supérieures à la limite de 4 Go de l'iso6990. Si le fichier filesystem.squashfs créé est supérieur à 4 Go, un live-cd.img est créé. Il s'agit d'une image amorçable ext4 contenant les mêmes fichiers que l'iso En outre, le script vous demande si vous préférez créer un fichier iso ou iso lorsque le fichier filesystem.squahfs est inférieur à la limite de 4 Go.

livecd.sh:

#!/bin/bash

echo 
echo Setting up /tmp/livecd
echo 
Sudo mkdir -p /tmp/livecd/cd/{casper,boot/grub} /tmp/livecd/chroot/rootfs /tmp/livecd/mnt

echo 
echo Installing necessary packages
echo 
Sudo apt-get update
Sudo apt-get install -y grub2 xorriso squashfs-tools cryptsetup

echo 
echo Copying over existing system
echo 
Sudo rsync -av --one-file-system --exclude=/swapfile --exclude=/proc/* --exclude=/dev/* \
--exclude=/sys/* --exclude=/tmp/* --exclude=/lost+found \
--exclude=/var/tmp/* --exclude=/boot/grub/* --exclude=/root/* \
--exclude=/var/mail/* --exclude=/var/spool/* --exclude=/media/* \
--exclude=/etc/fstab --exclude=/etc/mtab --exclude=/etc/hosts \
--exclude=/etc/timezone \
--exclude=/etc/X11/xorg.conf* --exclude=/etc/gdm/custom.conf \
--exclude=/etc/lightdm/lightdm.conf --exclude=/tmp/livecd/chroot/rootfs / /tmp/livecd/chroot/rootfs

echo 
echo Setting up links to chroot
echo 
Sudo mount --bind /dev/ /tmp/livecd/chroot/rootfs/dev
Sudo mount -t proc proc /tmp/livecd/chroot/rootfs/proc
Sudo mount -t sysfs sysfs /tmp/livecd/chroot/rootfs/sys
Sudo mount -o bind /run /tmp/livecd/chroot/rootfs/run

echo 
echo Processing chroot commands
echo 
cat <<'ABC' | Sudo chroot /tmp/livecd/chroot/rootfs /bin/bash
LANG=
apt-get update
apt-get install -y casper lupin-casper
cat >> /etc/cryptsetup-initramfs/conf-hook <<'DEF'
CRYPTSETUP=Y
DEF
patch -d /usr/share/initramfs-tools/scripts /usr/share/initramfs-tools/scripts/casper-helpers <<'GHI'
@@ -141,6 +141,13 @@
                 losetup -o "$offset" "$dev" "$fspath"
             else
                 losetup "$dev" "$fspath"
+                modprobe dm-crypt
+                mkdir /mnt
+                echo "Enter passphrase: " >&6
+                cryptsetup --type plain -c aes-xts-plain64 -h sha512 -s 512 open "$dev" squash >&6
+                mount -t ext4 /dev/mapper/squash /mnt
+                dev="$(losetup -f)"
+                losetup "$dev" /mnt/filesystem.squashfs
             fi
             echo "$dev"
             return 0
GHI
depmod -a $(uname -r)
update-initramfs -u -k $(uname -r)
apt autoremove
apt clean
find /var/log -regex '.*?[0-9].*?' -exec rm -v {} \;
find /var/log -type f | while read file
do
        cat /dev/null | tee $file
done
rm /etc/resolv.conf /etc/hostname
exit
ABC

echo 
echo Copying chroot images to livecd
echo 
export kversion=`cd /tmp/livecd/chroot/rootfs/boot && ls -1 vmlinuz-* | tail -1 | sed 's@vmlinuz-@@'`
Sudo cp -vp /tmp/livecd/chroot/rootfs/boot/vmlinuz-${kversion} /tmp/livecd/cd/casper/vmlinuz
Sudo cp -vp /tmp/livecd/chroot/rootfs/boot/initrd.img-${kversion} /tmp/livecd/cd/casper/initrd.img
Sudo cp -vp /tmp/livecd/chroot/rootfs/boot/memtest86+.bin /tmp/livecd/cd/boot

echo 
echo Removing chroot links
echo 
Sudo umount /tmp/livecd/chroot/rootfs/proc
Sudo umount /tmp/livecd/chroot/rootfs/sys
Sudo umount /tmp/livecd/chroot/rootfs/dev

echo 
echo Creating the squashfs file
echo 
Sudo mksquashfs /tmp/livecd/chroot/rootfs /tmp/livecd/filesystem.squashfs -noappend

echo 
echo Setting up encrypted squashfs file
echo 
size=$(du --block-size=1 /tmp/livecd/filesystem.squashfs | awk '{print $1}')
((size=size+size/10))
((size=size/1024))
echo $size
Sudo dd if=/dev/zero of=/tmp/livecd/cd/casper/filesystem.squashfs bs=1024 count=$size status=progress
dev="$(losetup -f)"
Sudo losetup "$dev" /tmp/livecd/cd/casper/filesystem.squashfs

echo 
echo Enter a large string of random text below to setup the pre-encryption.
echo 
Sudo cryptsetup --type plain -c aes-xts-plain64 -h sha512 -s 512 open "$dev" squash

echo 
echo Pre-encrypting entire squshfs with random data
echo 
Sudo dd if=/dev/zero of=/dev/mapper/squash bs=1M status=progress
sync
sync
sync
sync
Sudo cryptsetup close squash

echo 
echo Enter the desired passphrase for the encrypted livecd below.
echo 
Sudo cryptsetup --type plain -c aes-xts-plain64 -h sha512 -s 512 open "$dev" squash

echo 
echo Creating ext4 into encrypted container
echo 
Sudo mkfs.ext4 -m 0 /dev/mapper/squash
Sudo mount -t ext4 /dev/mapper/squash /tmp/livecd/mnt

echo 
echo Moving unencrypted squashfs file into encrypted sqaushfs container
echo 
Sudo mv /tmp/livecd/filesystem.squashfs /tmp/livecd/mnt
sync
sync
sync
sync
Sudo umount /tmp/livecd/mnt
Sudo cryptsetup close squash
Sudo losetup -d "$dev"

echo 
echo Creating size and md5sum cd files
echo 
echo -n $(Sudo du -s --block-size=1 /tmp/livecd/chroot/rootfs | tail -1 | awk '{print $1}') | Sudo tee /tmp/livecd/cd/casper/filesystem.size
find /tmp/livecd/cd -type f -print0 | Sudo xargs -0 md5sum | sed "s@/tmp/livecd/cd@.@" | grep -v md5sum.txt | Sudo tee -a /tmp/livecd/cd/md5sum.txt

echo 
echo Creating grub.cfg for the livecd
echo 
Sudo bash -c 'cat > /tmp/livecd/cd/boot/grub/grub.cfg <<EOF
set default="0"
set timeout=10

menuentry "Ubuntu GUI from RAM" {
linux /casper/vmlinuz boot=casper toram quiet
initrd /casper/initrd.img
}

EOF'

filesize=$(Sudo du --block-size=1 -s /tmp/livecd/cd/casper/filesystem.squashfs | tail -1 | awk '{print $1}')

echo "filesystem.squashfs size: $filesize"

devflag=0

if [ $filesize -lt 4294967295 ]
then
    echo
    echo filesystem.squashfs is under the 4GB iso6990 limit
    echo
    echo "Create a bootable iso or bootable device img for (usb, hd)?"
    select yn in "iso" "dev"; do
        case $yn in
        iso )   echo;
            echo Creating bootable ISO at /tmp/livecd for the now encrypted livecd;
            echo;
            Sudo grub-mkrescue -o /tmp/livecd/live-cd.iso /tmp/livecd/cd;
            echo
            echo COMPLETE!
            echo
            break;;
        dev )   devflag=1;
            break;;
        esac
    done
else
    devflag=1
fi

if [ $devflag -eq 1 ]
then
    echo
    echo Setting up /tmp/livecd/live-cd.img
    echo
    filesize=$(Sudo du -s --block-size=1 /tmp/livecd/cd | tail -1 | awk '{print $1}')
    ((filesize=filesize+filesize/10))
    ((filesize=filesize/1024))
    Sudo dd if=/dev/zero of=/tmp/livecd/live-cd.img bs=1024 count=$filesize status=progress
    dev="$(losetup -f)"
    Sudo losetup $dev /tmp/livecd/live-cd.img
    echo
    echo Formating /tmp/livecd/live-cd.img to ext4
    echo
    Sudo mkfs.ext4 -m 0 $dev
    echo
    echo Installing grub and copying live system files
    echo
    Sudo mount -t ext4 $dev /tmp/livecd/mnt
    Sudo grub-install --no-floppy --force --root-directory=/tmp/livecd/mnt $dev
    Sudo rsync -av --one-file-system /tmp/livecd/cd/ /tmp/livecd/mnt
    sync
    sync
    sync
    sync
    Sudo umount /tmp/livecd/mnt
    Sudo losetup -d $dev
    echo
    echo COMPLETE!
    echo live-cd.img can now be written to a usb or hard drive using dd or similar
    echo
fi
1
live.cd