Učím se o zabezpečení linuxu a snažím se pochopit, proč je USB klíčenka se znakovým zařízením potenciálně nebezpečná.
Pokud mám USB klíčenku se spustitelným souborem bash, na kterém je setuid root, nebezpečí je zřejmé:Kdokoli s takovým USB klíčem může získat práva root na mém počítači, pokud mám záznam jako
/dev/sdb1 /media/usbstick auto defaults 0 0
v mém /etc/fstab
protože defaults
zahrnuje suid
.
Ale co zařízení na postavy? Jak mohu použít znakové zařízení k získání práv root nebo k porušení obsahu, pokud se USB klíčenka se znakovým zařízením připojí pomocí dev
nebo defaults
?
Přijatá odpověď:
Vzhledem k tomu, že přístup k základnímu zařízení je ve výchozím nastavení řízen pouze oprávněními k souborům, takže pokud váš USB flash disk obsahuje souborový systém POSIX se světově zapisovatelným uzlem zařízení odpovídajícím skutečnému zařízení v systému, můžete tento uzel zařízení použít k přístupu k odpovídajícímu zařízení jako „prostý“ uživatel. Představte si zařízení odpovídající jednomu ze zvukových zařízení, vaší webové kameře, /dev/sda
(což je blokové zařízení spíše než znakové zařízení, ale argument je stejný)…
Zde je příklad, aby bylo vše jasnější. Řekněme, že chcete získat přístup k /dev/sda
(pak můžete s obsahem disku dělat cokoli, včetně zasazení programu, který vám umožní stát se root
; toto je blokové zařízení, ale problém je stejný se znakovými zařízeními). Na vašem cílovém systému ls -l /dev/sda
ukazuje
brw-rw---- 1 root disk 8, 0 Sep 8 11:25 sda
To znamená /dev/sda
je blokové zařízení (b
na začátku řádku), s hlavním číslem 8 a vedlejším číslem 0 (8, 0
uprostřed řádku). Zařízení je přístupné pouze pro root
(čtení/zápis) a členy disk
skupina (také čtení/zápis).
Nyní si představte, že se v tomto systému nemůžete stát root
ale z nějakého důvodu můžete připojit USB klíče jako uživatel bez nodev
. Na jiném systému, kde jste root
, můžete vytvořit odpovídající speciální soubor na vašem USB klíči:
mknod -m 666 usersda b 8 0
Tím se vytvoří speciální soubor s názvem usersda
, čitelná a zapisovatelná pro každého.
Připojte klíč na váš cílový systém a hej, můžete použít usersda
zařízení stejným způsobem jako /dev/sda
, ale bez omezení přístupu…
(Toto bude fungovat i se zašifrovanými systémy souborů, pokud budete mít přístup k dešifrovanému mapovacímu zařízení:vytvořte zařízení, které odpovídá příslušnému /dev/mapper
vstup.)