GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kali Pi 2018 sichern

Wir haben bereits behandelt, wie man mit dem Raspberry Pi sichere „Wegwerf-Hackboxen“ erstellt, aber wir dachten, es sei an der Zeit, zurückzugehen und uns den Prozess noch einmal anzusehen. Mit all den neuen Raspberry Pi-Modellen und Kali-Änderungen seit unserer letzten Behandlung stellten wir fest, dass der alte Prozess aktualisiert werden musste.

Als Überprüfung versuchen wir zu erreichen, ein eigenständiges „Zurücklassen“-Gerät zu erstellen, das es, wenn es entdeckt wird, nicht einfach macht, herauszufinden, was Sie getan haben. Also verwenden wir die LUKS-Festplattenverschlüsselung zusammen mit der LUKS-Nuke-Fähigkeit, um dies zusammenzusetzen. Wenn Sie ein Raspberry Pi 3 Model B+ oder wirklich ein anderes Modell oder ein ähnliches Gerät haben, können Sie die folgenden Anweisungen verwenden, um Ihr eigenes sicheres System einzurichten. Dieser aktualisierte Prozess basiert auf unserer vorherigen Dokumentation und wurde mit einigen Community-Vorschlägen aktualisiert.

Übersicht über den Prozess

Bevor wir in die Technik dessen eintauchen, was wir zu erreichen versuchen, werfen wir einen kurzen Blick auf unsere Ziele bei der Einrichtung unseres Raspberry Pi 3 Model B+ (im Folgenden „RPi“ genannt):

  1. Erstellen Sie eine normale Kali Linux RPi-Installation
  2. Bereiten Sie das System für verschlüsseltes Booten mit Remote Disk Unlock vor
  3. Erstellen Sie ein mit Dropbear und SSH-Schlüsseln konfiguriertes initramfs, damit die Entsperrung erfolgen kann
  4. Vorhandene Daten sichern
  5. Konfigurieren Sie die verschlüsselten Partitionen
  6. Stellen Sie unsere Daten wieder her
  7. LUKS Nuke konfigurieren
  8. Hack weg!

Das mag nach viel erscheinen, aber es ist wirklich ziemlich einfach und sobald es fertig ist, wird uns ein RPi übrig bleiben, das bootet, eine IP von DHCP erhält und Dropbear uns erlaubt, uns über SSH zu verbinden, um den LUKS-Schlüssel bereitzustellen. Dies ermöglicht es uns, das RPi kopflos zu betreiben, aber unsere Daten trotzdem sicher zu halten. Dann, wenn wir damit fertig sind, können wir es abrufen oder unsere Daten mit LUKS NUKE aus der Ferne vernichten.

Vorbereitung des Basissystems

Zunächst müssen wir das RPi-Image auf eine SD-Karte schreiben. Wir werden hier nicht darauf eingehen, aber Sie finden Informationen dazu in unseren Dokumenten.

Nachdem das erledigt ist, stecken wir die SD-Karte in das RPi und lassen es hochfahren. Beim ersten Start wird die Größe der SD-Karte geändert und neu gestartet, danach ist sie einsatzbereit. Als nächstes verbinden wir uns über SSH, aktualisieren Kali und installieren einige Pakete, die wir benötigen.

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

Das Magic-Fu machen

Das RPi ist fertig eingerichtet und einsatzbereit, also machen wir uns die Hände schmutzig und tauchen in die Dinge ein. Beachten Sie, dass wir, sobald wir diesen Prozess starten, eine Reihe kritischer Dateien in unserer RPi-Installation ändern werden. Es ist wichtig, das Gerät nicht neu zu starten oder das System anderweitig herunterzufahren, bis Sie bereit sind, oder Sie werden mit einem System zurückgelassen, das nicht booten kann.

Zunächst müssen wir eine Zeile an /boot/config.txt anhängen :

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

Als Nächstes wollen wir überprüfen, wo sich unser eigentliches Root-Dateisystemgerät befindet:

[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

Beachten Sie besonders, dass sich unser Root-Dateisystem unter /dev/mmcblk0p2 befindet . Dies werden wir in Zukunft für unsere Beispiele verwenden, also aktualisieren Sie die Anweisungen mit dem Wert, den Sie auf Ihrem System erhalten haben.

Da wir nun den Speicherort unseres Root-Dateisystems kennen, bearbeiten wir die Datei /boot/cmdline.txt . Standardmäßig enthält es Folgendes:

[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

Beachten Sie den Eintrag root=/dev/mmcblk0p2 . Wir werden es mit einem cryptdevice aktualisieren Wert:

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

Mit der vorgenommenen Änderung sieht unsere Datei wie folgt aus:

[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

Wir müssen auch /etc/fstab bearbeiten und ersetzen Sie das Gerät, auf dem unser Root-Dateisystem derzeit /dev/mapper/crypt sein soll :

[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

Als nächstes müssen wir ein /etc/crypttab erstellen Datei mit folgendem Inhalt:

crypt /dev/mmcblk0p2 none luks

Achten Sie hier besonders darauf – die Trennzeichen zwischen den Einträgen müssen Tabs sein , keine Leerzeichen. Bevor wir jetzt beginnen, unser initramsfs zu erstellen, müssen wir einen schlauen kleinen Hack machen, um die Aufnahme von cryptsetup zu erzwingen. Dazu erstellen wir ein gefälschtes LUKS-Dateisystem. Wir dd eine leere Datei, formatiere sie als LUKS, mounte sie und lege ein Dateisystem darauf.

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

Machen Sie sich nicht zu viele Gedanken darüber, ein starkes Passwort für diese Fakeroot festzulegen, da es nur in diesem Fall verwendet wird.

Einrichten von SSH und Initramfs

Jetzt sind wir auf der Zielgeraden. Dieser Teil ist wirklich cool, da normalerweise beim Start eines Systems, auf dem LUKS ausgeführt wird, der Startvorgang angehalten wird, damit Sie die Festplatte mit Ihrem LUKS-Schlüssel entsperren können. Wenn Sie ein Headless-System betreiben, ist das nicht besonders praktisch.

Um dies zu umgehen, werden wir Dropbear so konfigurieren, dass es startet, Ihnen die Authentifizierung mit SSH ermöglicht und Sie dann verbindet, um Ihr LUKS-Passwort anzugeben – alles aus der Ferne!

Wir beginnen mit der Erstellung einer Datei unter /etc/dropbear-initramfs/authorized_keys das enthält:

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 ist wichtig zu beachten, dass dies alles in einer Zeile stehen muss. Da sind überhaupt keine Zeilenumbrüche drin. Wenn Sie dies richtig eingerichtet haben, sollte es ungefähr so ​​aussehen:

[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]

Als nächstes nehmen wir eine kleine Änderung an /usr/share/initramfs-tools/scripts/init-premount/dropbear vor . Diese Änderung ist darauf zurückzuführen, dass wir Dropbear verlangsamen müssen, um sicherzustellen, dass das Netzwerk eingerichtet ist, bevor Dropbear einsetzt. Am Ende der Datei, wo es heißt:

# 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

Wir möchten einen einfachen Schlaf hinzufügen Anweisung wie folgt:

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

Damit sind wir endlich bereit, unsere initramfs zu erstellen!

mkinitramfs -o /boot/initramfs.gz

Bevor wir fortfahren, stellen wir sicher, dass unsere benutzerdefinierten Änderungen in das neue initramfs aufgenommen wurden:

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

Wenn dies validiert ist, stellen wir sicher, dass alle Änderungen auf die Festplatte geschrieben werden, und fahren das RPi herunter.

sync && sync
init 0

Sichern und Wiederherstellen

Entfernen Sie die SD-Karte aus Ihrem RPi und kehren Sie zu dem System zurück, das Sie ursprünglich zum Beschreiben der SD-Karte verwendet haben. Bereiten wir die Umgebung vor:

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}

Legen Sie nun die SD-Karte ein und validieren Sie die Geräte-ID. In unserem Fall ist das Gerät /dev/sdc2 aber Ihres könnte anders sein, also passen Sie es nach Bedarf auf Ihrem System an. Wir mounten das Gerät und erstellen ein Backup des Dateisystems:

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

Sobald dies erledigt ist, löschen wir die vorhandene 2. Partition auf der SD-Karte und erstellen eine leere neu, die wir für die LUKS-Verschlüsselung einrichten.

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

Nachdem die Partitionen aktualisiert wurden, laden wir sie neu, indem wir partprobe ausführen und konfigurieren Sie dann LUKS auf der neuen Partition:

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

Nachdem dies aus dem Weg geräumt ist, stellen wir die Sicherung des Root-Dateisystems auf der jetzt verschlüsselten Partition wieder her.

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

Ausprobieren

Sie können nun die SD-Karte wieder in das RPi stecken und es hochfahren lassen. Wenn Sie den Start beobachten, sollten Sie Dropbear starten sehen. An diesem Punkt sollten Sie in der Lage sein, sich per SSH mit dem System zu verbinden und das Laufwerk zu entsperren.

[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.

Die Vielseitigkeit dieser kleinen Geräte in Kombination mit der Kraft von Kali erstaunt uns immer wieder. Jetzt haben wir ein nettes kopfloses System, das wir mit relativer Zuversicht betreiben können, dass es, selbst wenn es entdeckt wird, nicht zu einfach ist, hineinzukommen.

Aber wir sind noch nicht fertig! Lassen Sie uns einige LUKS NUKE-Funktionen hinzufügen:

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

Wenn wir uns jetzt per SSH anmelden, haben wir ein Passwort, das wir eingeben können, damit die SD-Karte entsperrt und den Startvorgang fortsetzen kann, und ein weiteres, das den LUKS-Header zerstört und die Daten unzugänglich macht. Wenn Sie in eine Situation geraten, in der Sie das Gerät nicht abrufen können, kann diese Option zum Brennen des Geräts sehr hilfreich sein. Wenn Sie wirklich schick sein möchten, können Sie dies auch damit kombinieren, das RPi zu einem drahtlosen Zugangspunkt zu machen, sodass Sie das System über eine drahtlose Verbindung fernsteuern und entsperren/nukleieren können. Dies ist sehr nützlich, wenn Sie keinen ständigen direkten Zugriff auf das Netzwerk haben, an das das RPi angeschlossen wird.


Linux
  1. Sichere Kali Pi (2022)

  2. Kali unkaputtbar

  3. Kali Linux 2018.2-Version

  4. Kali Linux 2018.1-Version

  5. Kali Linux 2018.4-Version

Härten von Kali Linux

So installieren Sie den SSH-Dienst (Secure Shell) unter Kali Linux

Kali-Linux-Download

Kali Linux gegen Papagei

Kali Linux 1.0.7-Veröffentlichung

Kali Linux 2016.1 Release - Rolling Edition