Warum ist „nodev“ in / etc / fstab so wichtig? Wie können Zeichengeräte zum Hacken verwendet werden?

19

Ich lerne etwas über Linux-Sicherheit und habe Probleme zu verstehen, warum ein USB-Stick mit einem darauf befindlichen Zeichengerät möglicherweise gefährlich ist.

Wenn ich einen USB-Stick mit einer ausführbaren Bash-Datei besitze, auf der sich setuid root befindet, liegt die Gefahr auf der Hand: Jeder mit einem solchen USB-Stick kann Root-Rechte auf meinem Computer erlangen, wenn ich einen Eintrag wie habe

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

in meinem /etc/fstabweil defaultsbeinhaltet suid.

Aber was ist mit Zeichengeräten? Wie kann ich ein Zeichengerät verwenden, um Root-Rechte zu erlangen oder Daten zu zerstören, wenn ein USB-Stick mit einem Zeichengerät mit devoder verbunden wird defaults?

rosix
quelle

Antworten:

31

Da der Zugriff auf das zugrunde liegende Gerät standardmäßig nur über Dateiberechtigungen gesteuert wird, können Sie über diesen Geräteknoten auf das entsprechende Gerät zugreifen, wenn Ihr USB-Stick ein POSIX-Dateisystem mit einem weltweit beschreibbaren Geräteknoten enthält, der einem realen Gerät im System entspricht Gerät als "normaler" Benutzer. Stellen Sie sich ein Gerät vor, das einem der Audiogeräte, Ihrer Webcam, entspricht /dev/sda(dies ist ein Blockgerät und kein Zeichengerät, aber das Argument ist dasselbe) ...

Hier ist ein Beispiel, um die Dinge klarer zu machen. Angenommen, Sie möchten darauf zugreifen /dev/sda(dann können Sie mit dem Inhalt der Festplatte so ziemlich alles tun, was Sie wollen, einschließlich des Einpflanzens eines Programms, das es Ihnen ermöglichen würde , darauf zuzugreifen root; dies ist ein Blockgerät, aber das Problem ist dasselbe mit Zeichengeräten). ls -l /dev/sdaZeigt auf Ihrem Zielsystem

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

Dies bedeutet, dass /dev/sdaes sich um ein Blockgerät ( bam Anfang der Zeile) mit der Hauptzahl 8 und der Nebenzahl 0 ( 8, 0in der Mitte der Zeile) handelt. Das Gerät ist nur für root(Lese- / Schreibzugriff) und Mitglieder der diskGruppe (auch Lese- / Schreibzugriff) zugänglich .

Stellen Sie sich nun vor, auf diesem System können Sie nicht werden, rootaber aus irgendeinem Grund können Sie USB-Sticks als Benutzer ohne einbinden nodev. Auf einem anderen System, auf dem Sie sich gerade befinden root, können Sie eine entsprechende Spezialdatei auf Ihrem USB-Stick erstellen:

mknod -m 666 usersda b 8 0

Dadurch wird eine spezielle Datei erstellt usersda, die von allen gelesen und beschrieben werden kann.

Bringen Sie den Schlüssel auf Ihrem Zielsystem an und hey presto, Sie können das usersdaGerät auf die gleiche Weise verwenden wie /dev/sda, aber ohne Zugriffsbeschränkung ...

(Dies funktioniert auch mit verschlüsselten Dateisystemen, solange Sie auf das entschlüsselte Mapper-Gerät zugreifen können: Erstellen Sie ein Gerät, das dem entsprechenden /dev/mapperEintrag entspricht.)

Stephen Kitt
quelle
Das hört sich interessant an! Aber ich bin nicht sicher, ob ich das verstehe. Ein Gerät ist eine Datei und auf Dateien wird über Inodes zugegriffen. Das gefälschte Gerät auf meinem USB-Stick hätte einen anderen Inode und wäre daher ein anderes Gerät, nicht wahr?
Rosix
7
Ein Gerät ist eine spezielle Datei mit einer Haupt- und einer Nebennummer. Sie können diese sehen, wenn Sie dies tun ls -l /dev, es sind die zwei Zahlen, die anstelle der Dateigröße erscheinen. Der Kernel vergleicht eine Gerätedatei mit einem Treiber, der diese Nummern verwendet, sodass Sie mehrere Dateien haben können, die auf denselben Kerneltreiber und dasselbe Gerät verweisen. Die speziellen Dateien werden mit erstellt mknod.
Stephen Kitt
Beachten Sie, dass /dev/tty*Geräte Zeichengeräte sind und dass ein Eindringling, der vollständigen Lese- / Schreibzugriff auf Ihre Terminalsitzungen und / oder die Systemkonsole erhält, in Kombination mit dem Missbrauch der Terminalemulator-Funktionen möglicherweise alle möglichen bösen Tricks
zulässt
1
@TheQuark ziemlich genau, ja. Es ist etwas allgemeiner; Ich würde sagen, dass "interpretieren" "Gerätedateien als Geräteknoten und nicht als reine Dateien behandeln" bedeutet.
Stephen Kitt
1
@ n00b Sie können nicht mounten usersda, aber Sie können es zumindest verwenden, um uneingeschränkt von der zugrunde liegenden Festplatte zu lesen und möglicherweise auch darauf zu schreiben. Sie können einfach den gesamten Inhalt der Festplatte kopieren und mit Tools wie debuge2fsÜberschreiben /etc/shadowusw.
Stephen Kitt