GNU/Linux >> Belajar Linux >  >> Linux

Amankan Kali Pi 2018

Kami telah membahas cara membuat "kotak peretasan" yang aman menggunakan Raspberry Pi sebelumnya, tetapi kami pikir sudah waktunya untuk kembali dan melihat prosesnya lagi. Dengan semua model Raspberry Pi baru dan perubahan Kali sejak terakhir kali kami membahas ini, kami menemukan bahwa proses lama perlu diperbarui.

Sebagai tinjauan, apa yang kami coba capai adalah membuat perangkat "tinggalkan" yang berdiri sendiri, yang ketika ditemukan, tidak memudahkan untuk mengetahui apa yang Anda lakukan. Jadi kami menggunakan enkripsi disk penuh LUKS bersama dengan kemampuan LUKS Nuke untuk menyatukannya. Jika Anda memiliki Raspberry Pi 3 Model B+, atau benar-benar model lain atau perangkat serupa, silakan gunakan petunjuk di bawah ini untuk menyiapkan sistem aman Anda sendiri. Proses yang diperbarui ini didasarkan pada dokumentasi kami sebelumnya, dan diperbarui dengan beberapa saran komunitas.

Ringkasan proses

Sebelum kita mendalami teknologi apa yang akan kita coba capai, mari kita lihat sekilas tujuan kita dalam menyiapkan Raspberry Pi 3 Model B+ (selanjutnya disebut “RPi”):

  1. Buat instalasi Kali Linux RPi biasa
  2. Siapkan sistem untuk boot terenkripsi dengan membuka kunci disk jarak jauh
  3. Buat initramf yang dikonfigurasi dengan Dropbear dan kunci SSH untuk memungkinkan pembukaan kunci terjadi
  4. Cadangkan data yang ada
  5. Konfigurasikan partisi terenkripsi
  6. Pulihkan data kami
  7. Konfigurasi LUKS Nuke
  8. Hapus!

Ini mungkin tampak seperti banyak, tetapi sangat mudah dan setelah selesai, kita akan dibiarkan dengan RPi yang akan boot, mendapatkan IP dari DHCP, dan Dropbear akan memungkinkan kita untuk terhubung melalui SSH untuk memberikan kunci LUKS. Ini memungkinkan kami untuk menjalankan RPi tanpa kepala, tetapi tetap menjaga keamanan data kami. Kemudian di jalan ketika kita selesai dengan itu, kita dapat mengambil atau remote dan menghancurkan data kita dengan LUKS NUKE.

Menyiapkan sistem Dasar

Untuk memulainya, kita perlu menulis gambar RPi ke kartu SD. Kami tidak akan membahasnya di sini, tetapi Anda dapat menemukan informasi tentang melakukannya di dokumen kami.

Dengan itu, kami memasukkan kartu SD ke RPi dan membiarkannya boot. Pada boot pertama, itu akan mengubah ukuran kartu SD dan reboot, setelah itu siap digunakan. Selanjutnya, kita terhubung melalui SSH, memperbarui Kali, dan menginstal beberapa paket yang kita perlukan.

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

Melakukan Magic-Fu

RPi sudah siap dan siap digunakan, jadi mari kita mengotori tangan kita dan menyelami berbagai hal. Perhatikan, setelah kita memulai proses ini, kita akan mengubah sejumlah file penting pada instalasi RPi kita. Penting untuk tidak me-reboot perangkat atau mematikan sistem sampai Anda siap atau Anda akan ditinggalkan dengan sistem yang tidak mau boot.

Pertama, kita perlu menambahkan baris ke /boot/config.txt :

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

Selanjutnya, kami ingin memvalidasi di mana perangkat sistem file root kami yang sebenarnya berada:

[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

Perhatikan secara khusus bahwa sistem file root kami berada di /dev/mmcblk0p2 . Inilah yang akan kami gunakan untuk contoh kami di masa mendatang, jadi pastikan untuk memperbarui instruksi dengan nilai apa pun yang Anda terima di sistem Anda.

Sekarang setelah kita mengetahui lokasi sistem file root, kita akan mengedit file /boot/cmdline.txt . Secara default, ini berisi yang berikut:

[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

Perhatikan entri yang membaca root=/dev/mmcblk0p2 . Kami akan memperbaruinya dengan cryptdevice nilai:

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

Dengan perubahan yang dibuat, file kami terlihat seperti ini:

[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

Kita juga perlu mengedit /etc/fstab dan ganti perangkat tempat sistem file root kita saat ini menjadi /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

Selanjutnya, kita perlu membuat /etc/crypttab file yang berisi sebagai berikut:

crypt /dev/mmcblk0p2 none luks

Berhati-hatilah di sini–pemisah antara entri harus berupa tab , bukan spasi. Sekarang, sebelum kita mulai membuat initramsfs, kita perlu melakukan sedikit peretasan untuk memaksa cryptsetup disertakan. Untuk melakukan ini, kami akan membuat sistem file LUKS palsu. Kami dd file kosong, format sebagai LUKS, pasang, dan letakkan sistem file di dalamnya.

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

Jangan terlalu khawatir tentang pengaturan kata sandi yang kuat untuk fakeroot ini karena hanya digunakan dalam contoh ini.

Mengatur SSH dan Initramfs

Sekarang kita berada di peregangan rumah. Bagian ini sangat keren, seperti biasanya ketika sistem yang menjalankan LUKS mulai, proses boot berhenti untuk memungkinkan Anda membuka kunci HDD dengan kunci LUKS Anda. Jika Anda menjalankan sistem tanpa kepala, itu sangat tidak nyaman.

Untuk mengatasinya, kami akan mengonfigurasi Dropbear untuk memulai, memungkinkan Anda untuk mengautentikasi dengan SSH, dan kemudian menghubungkan Anda untuk memberikan kata sandi LUKS Anda–semua dari jarak jauh!

Kita mulai dengan membuat file di /etc/dropbear-initramfs/authorized_keys yang berisi:

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"

Penting untuk dicatat, ini harus semuanya dalam satu baris. Tidak ada jeda baris di sana sama sekali. Jika Anda telah mengatur ini dengan benar, seharusnya terlihat seperti ini:

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

Selanjutnya, kita buat sedikit perubahan pada /usr/share/initramfs-tools/scripts/init-premount/dropbear . Perubahan ini disebabkan oleh fakta bahwa kita perlu memperlambat Dropbear untuk memastikan bahwa jaringan sudah diatur sebelum Dropbear masuk. Di akhir file, tertulis:

# 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

Kami ingin menambahkan tidur simple yang sederhana pernyataan seperti ini:

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

Setelah itu selesai, kita akhirnya siap untuk membuat initramf kita!

mkinitramfs -o /boot/initramfs.gz

Sebelum melanjutkan, kami memastikan bahwa perubahan khusus kami berhasil masuk ke initramf baru:

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

Dengan validasi tersebut, kami memastikan semua perubahan ditulis ke disk dan mematikan RPi.

sync && sync
init 0

Cadangkan dan Pulihkan

Keluarkan kartu SD dari RPi Anda dan kembali ke sistem yang awalnya Anda gunakan untuk menulis kartu SD. Mari persiapkan lingkungan:

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}

Sekarang masukkan kartu SD dan validasi ID perangkat. Dalam kasus kami, perangkatnya adalah /dev/sdc2 tetapi milik Anda mungkin berbeda, jadi sesuaikan seperlunya di sistem Anda. Kami memasang perangkat dan membuat cadangan sistem file:

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

Setelah selesai, kami menghapus partisi ke-2 yang ada pada kartu SD dan membuat ulang partisi kosong, yang kami siapkan untuk enkripsi LUKS.

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

Dengan partisi yang diperbarui, kami memuatnya kembali dengan menjalankan partprobe dan kemudian konfigurasikan LUKS pada partisi baru:

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

Dengan itu, kami mengembalikan cadangan sistem file root ke partisi yang sekarang dienkripsi.

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

Mengujinya

Anda sekarang dapat memasukkan kartu SD kembali ke RPi dan membiarkannya memulai. Jika Anda menonton boot, Anda akan melihat Dropbear mulai. Pada saat itu, Anda seharusnya dapat memasukkan SSH ke dalam sistem dan membuka kunci drive.

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

Fleksibilitas perangkat kecil ini dikombinasikan dengan kekuatan Kali tidak pernah berhenti memukau kami. Sekarang kita memiliki sistem tanpa kepala yang bagus yang dapat kita operasikan dengan keyakinan relatif bahwa, bahkan jika ditemukan, tidak akan terlalu mudah untuk masuk.

Tapi kita belum selesai! Mari tambahkan beberapa fungsi LUKS NUKE:

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

Sekarang ketika kita masuk SSH, kita memiliki satu kata sandi yang dapat kita masukkan untuk memungkinkan kartu SD membuka kunci dan melanjutkan proses boot, dan kata sandi lainnya yang menghancurkan header LUKS, membuat data tidak dapat diakses. Jika Anda berakhir dalam situasi di mana Anda tidak dapat mengambil perangkat, opsi untuk membakar perangkat ini bisa sangat membantu. Jika Anda ingin menjadi benar-benar mewah, Anda juga dapat menggabungkan ini dengan membuat RPi menjadi titik akses nirkabel, memungkinkan Anda untuk melakukan remote dan membuka kunci/nuke sistem melalui koneksi nirkabel. Ini sangat berguna jika Anda tidak akan memiliki akses langsung berkelanjutan ke jaringan yang akan dilampirkan RPi.


Linux
  1. Kali Linux 2018.2 Rilis

  2. Kali Linux 2018.1 Rilis

  3. Kali Linux 2018.4 Rilis

  1. WireGuard di Kali

  2. Kali Linux 2018.3 Rilis

  3. Kali Linux 2019.2 Rilis

  1. Amankan Kali Pi (2022)

  2. Kali Unkaputtbar

  3. Perangkat Keras Ampere &Kali Linux