Melindungi Perangkat dari Perintah dd dan fdisk

8

Saya bertanya-tanya apakah ada beberapa cara untuk mencegah perangkat tertentu menjadi file output dari ddperintah dan target dari fdiskperintah. Saat ini saya menggunakan dua operasi untuk mengatur penulisan sistem bootloader, kernel, dan root pada kartu SD, yang muncul sebagai /dev/sdd. Aku selalu sedikit cemas bahwa saya akan mencampur sdddengan sdb, atau sdakarena surat-surat Adan Ddekat pada keyboard, dan saya ingin menemukan cara untuk mencegah perintah dengan format ini:

dd if=/dev/sd[a-zA-Z0-9]* of=/dev/sd[ab]

atau

fdisk /dev/sd[ab]
sj755
sumber
1
Salah satu solusi yang mungkin adalah dengan mengatur izin sehingga Anda hanya memiliki akses tulis langsung ke kartu-SD tetapi tidak pada perangkat penyimpanan lain.
Sampo Sarrala - codidact.org

Jawaban:

5

Anda dapat mencoba menulis aturan udev untuk memberikan HDD tambahan nama yang cukup unik.

Gagasan lain: Setiap kali Anda dapat menyebut persyaratan keamanan sebagai "Bukan siapa yang melakukannya, itu bagaimana mereka melakukannya" Anda sedang berbicara tentang penegakan jenis, dan di sebagian besar distro Linux, TE dilakukan pada tingkat MAC. Sebagian besar pengalaman MAC saya dengan "SELinux"

Anda tidak dapat menguncinya di tingkat DAC jika tidak, Anda tidak akan dapat melakukan I / O pada perangkat (belum tentu kegagalan DAC sebagai model keamanan, hanya saja kebijakan DAC saat ini semata-mata berbasis identitas sehingga semua program berjalan di bawah identitas tertentu mendapatkan hak yang identik tanpa ekspresi administratif tambahan mungkin). Mengunci itu di tingkat MAC dapat dibuat sehingga komponen ruang pengguna biasa tidak dapat melakukan apa pun dengan file blok tetapi utilitas root Anda dan bagian tertentu dari platform dapat. Pada Fedora, ini sudah merupakan kasus dengan perangkat blok yang muncul dengan tipe SELinux fixed_disk_device_tdan grub setelah bootloader_exec_tmelihat contoh berikut:

[root@localhost ~]# ls -lhZ $(which grub2-install)
-rwxr-xr-x. root root system_u:object_r:bootloader_exec_t:s0 /sbin/grub2-install
[root@localhost ~]# ls -lhZ /dev/sda
brw-rw----+ root disk system_u:object_r:fixed_disk_device_t:s0 /dev/sda
[root@localhost ~]# sesearch --allow | egrep bootloader | grep fixed
   allow bootloader_t fixed_disk_device_t : lnk_file { read getattr } ; 
   allow bootloader_t fixed_disk_device_t : chr_file { ioctl read write getattr lock append open } ; 
   allow bootloader_t fixed_disk_device_t : blk_file { ioctl read write getattr lock append open } ; 
[root@localhost ~]# 

Sedangkan ddmemiliki label bin_t reguler:

[root@localhost ~]# ls -lhZ $(which dd)
-rwxr-xr-x. root root system_u:object_r:bin_t:s0       /bin/dd

bin_t(tampaknya) masih dapat menulis untuk memblokir perangkat tetapi membuat jenis konteks file baru untuk fdiskdan dddan menulis aturan selinux untuk melarang tipe baru mengakses fixed_disk_device_ttidak boleh terlalu sulit. Anda hanya perlu membuatnya sehingga peran pengguna biasa tidak dapat melakukannya tetapi pengguna dengan sysadm_tdapat melakukannya, maka ingatlah untuk hanya melakukan newrole -r root:sysadm_rsebelum Anda mencoba mempartisi ulang disk atau melakukan ddover the block device (yang seharusnya tidak t menjadi masalah besar karena tidak seperti Anda berlari fdisksetiap hari sepanjang hari).

Mungkin lebih banyak pekerjaan daripada yang Anda cari, tetapi TE adalah mekanisme yang memecahkan masalah umum yang Anda hadapi. Secara pribadi, udevaturannya mungkin taruhan Anda paling aman. Saya hanya menyebutkan hal-hal TE jika Anda tertarik untuk memecahkan masalah yang lebih besar mirip dengan yang satu ini.

Bratchley
sumber
4

Jika Anda tidak yakin tentang /dev/sdx, gunakan nama perangkat alternatif yang dapat Anda temukan /dev/disk/.

Misalnya, pembaca kartu SD saya /dev/disk/by-id/usb-TS-RDF5_SD_Transcend_000000000011-0:0. Itu agak bertele-tele, pasti, tetapi setidaknya tidak ada cara untuk membingungkannya dengan HDD.

Atau a hdparm -i /dev/sdxdapat menampilkan info bermanfaat jika berupa hard disk dan membantu menghindari kecelakaan yang tidak menguntungkan ...

frostschutz
sumber
Apakah mungkin membuat tautan bernama unik ke perangkat?
sj755
1
Dengan aturan udev, tetapi itu hanya akan berfungsi pada kotak yang menggunakan aturan itu (dan tidak ketika mem-boot Live CD atau sejenisnya), sedangkan /dev/disk/*tersedia di sistem Linux apa pun.
frostschutz
aturan udev akan mencapai ini, tetapi lebih mudah untuk menggunakan tautan simbolik (asalkan tautan "dari" itu sendiri tidak ada di / dev, / proc, atau / run) ATAU cukup buat variabel (seperti pada bash / zsh): mysdcard=/dev/sdd, dan kemudian Anda tentu saja menggunakan $mysdcardargumen di mana pun Anda membutuhkannya.
tgm1024 - Monica dianiaya
3

Ada nama yang lebih panjang dan bermakna dalam /dev/disk/by-*. Untuk seluruh disk, /dev/disk/by-idberisi symlink ke perangkat disk yang berisi model disk dan nomor seri.

Untuk perlindungan tambahan, beri diri Anda izin untuk mengakses perangkat (mis. sudo chown sj755 /dev/disk/by-id/ata-Yoyodine-50RDF15H), Lalu lakukan sisanya di bawah pengguna Anda sendiri alih-alih root.

Pastikan untuk memeriksa ulang bahwa disk Anda akan bertindak atas memiliki kandungan diharapkan, misalnya cek fdisk -l /dev/whatever, file - </dev/sdz99... Dalam shell, Esc .mengingat argumen dari perintah sebelumnya, tidak pernah mengetik ulang nama perangkat.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1

Saya melihat dua cara untuk mencapai itu:

  1. Tulis pembungkus (fungsi shell) dan periksa argumen di sana sebelum meneruskannya ke program nyata.
  2. Lakukan operasi ini dari shell yang telah dibatasi oleh SELinux, AppArmor atau sejenisnya.
Hauke ​​Laging
sumber