Linuxのセキュリティについて学び、キャラクターデバイスが搭載されたUSBスティックが潜在的に危険な理由を理解するのに苦労しています。
Setuid rootが含まれているbash実行可能ファイルが含まれているUSBスティックを持っている場合、危険は明らかです。このようなUSBスティックを持つ誰でも、
/dev/sdb1 /media/usbstick auto defaults 0 0
私の/etc/fstab
defaults
にはsuid
が含まれるため。
しかし、キャラクターデバイスはどうですか?キャラクターデバイスを使用して、そのキャラクターデバイスを搭載したUSBスティックがdev
またはdefaults
でマウントされた場合、ルート権限を取得したり、文字デバイスを破壊したりするにはどうすればよいですか?
基礎となるデバイスへのアクセスは、デフォルトではファイル権限によってのみ制御されるため、USBスティックに、システム内の実際のデバイスに対応する誰でも書き込み可能なデバイスノードを持つPOSIXファイルシステムが含まれている場合、そのデバイスノードを使用して対応するデバイスにアクセスできます。 「プレーン」ユーザーとしてのデバイス。オーディオデバイスの1つであるウェブカメラ/dev/sda
に対応するデバイスを想像してください(これはキャラクターデバイスではなくブロックデバイスですが、引数は同じです)...
わかりやすくするための例を次に示します。 /dev/sda
にアクセスしたいとします(これで、root
になるプログラムを移植するなど、ディスクの内容でほとんど何でもできます。これはブロックデバイスですが、問題はキャラクターデバイスでも同じです)。ターゲットシステムでは、ls -l /dev/sda
が表示されます
brw-rw---- 1 root disk 8, 0 Sep 8 11:25 sda
これは、/dev/sda
がブロックデバイス(行の先頭のb
)であり、メジャー番号8およびマイナー番号0(行の中央の8, 0
)であることを意味します。デバイスは、root
(読み取り/書き込み)およびdisk
グループのメンバー(読み取り/書き込み)のみにアクセスできます。
このシステムでroot
になれないことを想像してみてください。ただし、何らかの理由で、nodev
なしでUSBスティックをユーザーとしてマウントできます。 root
である別のシステムでは、USBキーに対応する特殊ファイルを作成できます。
mknod -m 666 usersda b 8 0
これにより、usersda
という特別なファイルが作成され、誰でも読み取りと書き込みが可能になります。
キーをターゲットシステムにマウントして、prestoにusersda
デバイスを/dev/sda
と同じように使用できますが、アクセス制限はありません...
(これは、暗号化解除されたマッパーデバイスにアクセスできる限り、暗号化されたファイルシステムでも機能します。適切な/dev/mapper
エントリに一致するデバイスを作成してください。)