Mengapa "nodev" di / etc / fstab begitu penting? Bagaimana perangkat karakter dapat digunakan untuk meretas?

19

Saya belajar tentang keamanan linux dan berjuang untuk memahami mengapa stik USB dengan perangkat karakter di dalamnya berpotensi berbahaya.

Jika saya memiliki stik USB dengan executable bash yang memiliki root setuid di atasnya, bahayanya sudah jelas: Siapa pun dengan stik USB seperti itu dapat memperoleh hak akses root di komputer saya jika saya memiliki entri seperti

/dev/sdb1 /media/usbstick auto defaults 0 0

di /etc/fstabkarena saya defaultstermasuk suid.

Tapi bagaimana dengan perangkat karakter? Bagaimana saya bisa menggunakan perangkat karakter untuk mendapatkan hak akses root atau merusak barang-barang jika USB stick dengan perangkat karakter di atasnya terpasang dengan devatau defaults?

rosix
sumber

Jawaban:

31

Karena akses ke perangkat yang mendasarinya dikendalikan hanya oleh izin file secara default, jadi jika stik USB Anda berisi sistem file POSIX dengan simpul perangkat yang dapat ditulis dunia yang sesuai dengan perangkat nyata dalam sistem, Anda dapat menggunakan simpul perangkat itu untuk mengakses yang sesuai perangkat sebagai pengguna "biasa". Bayangkan sebuah perangkat yang sesuai dengan salah satu perangkat audio, webcam Anda, /dev/sda(yang merupakan perangkat blok daripada perangkat karakter, tetapi argumennya sama) ...

Berikut ini contoh untuk membuat segalanya lebih jelas. Katakanlah Anda ingin mengakses /dev/sda(maka Anda bisa melakukan apa saja yang Anda inginkan dengan isi disk, termasuk menanam program yang memungkinkan Anda menjadi root; ini adalah perangkat blok tetapi masalahnya sama dengan perangkat karakter). Pada sistem target Anda, ls -l /dev/sdapertunjukan

brw-rw----  1 root disk      8,   0 Sep  8 11:25 sda

Ini berarti /dev/sdaadalah perangkat blok ( bdi awal baris), dengan nomor utama 8 dan nomor kecil 0 ( 8, 0di tengah-tengah garis). Perangkat ini hanya dapat diakses oleh root(baca / tulis) dan anggota diskgrup (juga baca / tulis).

Sekarang bayangkan pada sistem ini Anda tidak bisa menjadi roottetapi untuk beberapa alasan Anda dapat memasang USB stick sebagai pengguna tanpa nodev. Di sistem lain, di mana Anda berada root, Anda dapat membuat file khusus yang sesuai pada kunci USB Anda:

mknod -m 666 usersda b 8 0

Ini akan membuat file khusus yang disebut usersda, dapat dibaca dan ditulis oleh semua orang.

Pasang kunci pada sistem target Anda dan hei presto, Anda dapat menggunakan usersdaperangkat dengan cara yang sama /dev/sda, tetapi tanpa batasan akses ...

(Ini akan bekerja bahkan dengan sistem file terenkripsi, selama Anda dapat mengakses perangkat mapper yang dienkripsi: buat perangkat yang cocok dengan /dev/mapperentri yang sesuai .)

Stephen Kitt
sumber
Kedengarannya menarik! Tapi saya tidak yakin saya memahaminya. Perangkat adalah file dan file diakses melalui inode. Perangkat palsu pada stik USB saya akan memiliki inode yang berbeda dan karena itu akan menjadi perangkat yang berbeda, bukan?
rosix
7
Perangkat adalah file khusus, dengan nomor besar dan kecil; Anda dapat melihat mereka jika Anda melakukannya ls -l /dev, mereka adalah dua angka yang muncul bukan ukuran file. Kernel cocok dengan file khusus perangkat dengan driver menggunakan angka-angka itu, sehingga Anda dapat memiliki beberapa file yang mengarah ke driver dan perangkat kernel yang sama. File khusus dibuat menggunakan mknod.
Stephen Kitt
Perhatikan bahwa /dev/tty*perangkat adalah perangkat karakter, dan penyusup mendapatkan akses baca / tulis penuh ke sesi terminal Anda dan / atau konsol sistem yang dikombinasikan dengan fitur terminal emulator yang menyalahgunakan mungkin memungkinkan semua jenis trik jahat ...
telcoM
1
@TheQuark cukup banyak, ya. Ini sedikit lebih umum; Saya akan mengatakan "menafsirkan" berarti "memperlakukan file perangkat sebagai node perangkat, bukan file biasa".
Stephen Kitt
1
@ n00b Anda tidak dapat memasang usersda, tetapi setidaknya Anda dapat menggunakannya untuk membaca dari disk yang mendasarinya tanpa batasan, dan mungkin menulisnya juga. Anda dapat dengan mudah menyalin semua isi disk, dan dengan alat-alat seperti debuge2fs, menimpa /etc/shadowdll.
Stephen Kitt