Hi,
wenn ich mich recht entsinne, ging es dem Originalposter um DESKTOP-Systeme.
Es ist richtig, dasss auf sehr vielen Routern ein linuxbasiertes System laeuft, ebenso auf vielen Smartphones (iOS wegen seiner Unix-Wurzeln hier in den gleichen Topf zu werfen, ist mutig, da das ein komplett anderer Kern ist). Allerdings laufen diese Systeme in den allermeisten Faellen auf Basis anderer Architekturen als x86 bzw. x86_64. Router sind meist MIPS-basiert, seltener ARM, waehrend die Linux-Smartphones und Tablets (Android) fast ausschliesslich (es gibt einige MIPS- und x86-Exoten) auf ARM-CPUs laufen. Wenn es also eine Sicherheitsluecke im Kern gibt, die alle Architekturen betrifft (nur dann gelten obige Argumente), dann mag der prinzipielle Angriff ueberall gleich sein, fuer eine Code-Injektion muss man das aber mit dem Code der Zielplattform fuer das Speicherlayout der Zielplattform tun. Schon laeuft der x86-Exploit auf dem MIPS-Router ins Leere. Auch ist es nicht so, dass alle ARM- oder MIPS-SoC gleich sind. Wer sich mal damit beschaeftigt hat, Linux auf einen neuen SoC zu bringen oder fuer einen solchen anzupassen, lernt schnell, wie viele Details da lowlevel angepasst werden muessen. Ein Kernelexploit setzt in den allermeisten Faellen sehr tief an und muss darum auch sehr genau angepasst sein, damit es funktioniert. Zudem setzt es in den meisten Faellen bestimmte Kernelconfigs voraus, die bei vielen eingebetteten Systemen schlicht nicht gegeben sind.
Ich will damit nicht sagen, dass man einen Router, ein NAS oder ein Android-Telefon nicht hacken kann (es gibt genug Gegenbeweise!), sondern, dass ein solcher Hack sehr stark von der Plattform abhaengt und nicht eben so ganz einfach "portiert" werden kann.
Sobald wir das Userland dazuziehen, wird die Sache noch viel spezieller, denn gerade da werden die Unterschiede gewaltig. Setz mal den typischen fortgeschrittenen Ubuntu-Nutzer an eine gerootete Android-Maschine und bitte ihn, irgendwas recht triviales auf Lowlevel damit zu tun. Das faengt schon damit an, dass man auf der einen Seite (Ubuntu) ein kompletes GNU-Userland inkl. Libc hat, waehrend es bei Android gerade einmal rudimentaere Tools + Bionic sind. Oder versuch mal, unter reiner Verwendung von Busybox und newlib oder ulibc (typische Umgebung auf einem Router) irgendwas auf die gleiche Weise zu tun wie auf einem vollstaendigen Desktopsystem...
Mein Argument mit der Vielfalt von weiter oben gilt hier ebenso, eher noch in einem groesseren Mass.
Viele Gruesse,
Jan
Hi,
Aua.... muss man das wirklich noch kommentieren?
Rums... alles erledigt, und das ohne ein Execute-Flag (ausser dem, das die bash eh schon hat). Das ist auf dem gleichen Level wie rechnung.pdf.exe
Statt obiger Trivialitaet kann man da auch eine Fork-Bombe reinschreiben und schon steht der Kasten.
Der Punkt ist nur: Die meisten Linux-Nutzer sind deutlich erfahrener als ihre Windows-Pendants (so ueber die Masse gesehen), so dass es nicht lohnt, solche Dinger zu bauen. Wenn jeder Linux verwenden wuerde, koennten wir uns davor auch nicht mehr retten.
Von daher ist - das sage ich als absoluter Linux-Anhaenger - jede Diskussion ueber die "bessere Architektur" usw. vollkommen nutzlos. Die Hauptprobleme sind immer der Nutzer und die Groesse der Angriffsflaeche.
Viele Gruesse,
Jan
wenn ich mich recht entsinne, ging es dem Originalposter um DESKTOP-Systeme.
Es ist richtig, dasss auf sehr vielen Routern ein linuxbasiertes System laeuft, ebenso auf vielen Smartphones (iOS wegen seiner Unix-Wurzeln hier in den gleichen Topf zu werfen, ist mutig, da das ein komplett anderer Kern ist). Allerdings laufen diese Systeme in den allermeisten Faellen auf Basis anderer Architekturen als x86 bzw. x86_64. Router sind meist MIPS-basiert, seltener ARM, waehrend die Linux-Smartphones und Tablets (Android) fast ausschliesslich (es gibt einige MIPS- und x86-Exoten) auf ARM-CPUs laufen. Wenn es also eine Sicherheitsluecke im Kern gibt, die alle Architekturen betrifft (nur dann gelten obige Argumente), dann mag der prinzipielle Angriff ueberall gleich sein, fuer eine Code-Injektion muss man das aber mit dem Code der Zielplattform fuer das Speicherlayout der Zielplattform tun. Schon laeuft der x86-Exploit auf dem MIPS-Router ins Leere. Auch ist es nicht so, dass alle ARM- oder MIPS-SoC gleich sind. Wer sich mal damit beschaeftigt hat, Linux auf einen neuen SoC zu bringen oder fuer einen solchen anzupassen, lernt schnell, wie viele Details da lowlevel angepasst werden muessen. Ein Kernelexploit setzt in den allermeisten Faellen sehr tief an und muss darum auch sehr genau angepasst sein, damit es funktioniert. Zudem setzt es in den meisten Faellen bestimmte Kernelconfigs voraus, die bei vielen eingebetteten Systemen schlicht nicht gegeben sind.
Ich will damit nicht sagen, dass man einen Router, ein NAS oder ein Android-Telefon nicht hacken kann (es gibt genug Gegenbeweise!), sondern, dass ein solcher Hack sehr stark von der Plattform abhaengt und nicht eben so ganz einfach "portiert" werden kann.
Sobald wir das Userland dazuziehen, wird die Sache noch viel spezieller, denn gerade da werden die Unterschiede gewaltig. Setz mal den typischen fortgeschrittenen Ubuntu-Nutzer an eine gerootete Android-Maschine und bitte ihn, irgendwas recht triviales auf Lowlevel damit zu tun. Das faengt schon damit an, dass man auf der einen Seite (Ubuntu) ein kompletes GNU-Userland inkl. Libc hat, waehrend es bei Android gerade einmal rudimentaere Tools + Bionic sind. Oder versuch mal, unter reiner Verwendung von Busybox und newlib oder ulibc (typische Umgebung auf einem Router) irgendwas auf die gleiche Weise zu tun wie auf einem vollstaendigen Desktopsystem...
Mein Argument mit der Vielfalt von weiter oben gilt hier ebenso, eher noch in einem groesseren Mass.
Viele Gruesse,
Jan
Ergänzung ()
Hi,
Etwas, das starten kann, benötigt das Execute-Flag. Das kriegts aber nicht von selbst. Kein Flag, kein Programmaufruf.
Aua.... muss man das wirklich noch kommentieren?
Code:
echo "rm -rf *" > boese.sh
bash boese.sh
Rums... alles erledigt, und das ohne ein Execute-Flag (ausser dem, das die bash eh schon hat). Das ist auf dem gleichen Level wie rechnung.pdf.exe
Statt obiger Trivialitaet kann man da auch eine Fork-Bombe reinschreiben und schon steht der Kasten.
Der Punkt ist nur: Die meisten Linux-Nutzer sind deutlich erfahrener als ihre Windows-Pendants (so ueber die Masse gesehen), so dass es nicht lohnt, solche Dinger zu bauen. Wenn jeder Linux verwenden wuerde, koennten wir uns davor auch nicht mehr retten.
Von daher ist - das sage ich als absoluter Linux-Anhaenger - jede Diskussion ueber die "bessere Architektur" usw. vollkommen nutzlos. Die Hauptprobleme sind immer der Nutzer und die Groesse der Angriffsflaeche.
Viele Gruesse,
Jan