Debian und die Sicherheit ( interessant )

Smalltalk
Antworten
Benutzeravatar
rkrueger
Beiträge: 1044
Registriert: 17.06.2004 17:57:17

Debian und die Sicherheit ( interessant )

Beitrag von rkrueger » 17.07.2004 18:06:25

Ein Bekannter hat mir gestern etwas gezeigt, was mir kopfzerbrechen bereitet. Er hat in der Konsole, angemeldet als unprviligierter User folgendes eingegeben:
  • cd /*/*/*/*/*/*/*/*/*/*/*/*/*
Danach pasierte erst einmal nichts, zumindest auf dem Bildschirm. Die Platte dagegen randalierte richtig rum. Auf einer anderen Konsole haben wir uns die Systemlast mal mit top angesehen. CPU bis zu 40% und Speicherauslastung bei über 420 MB.

Kurz darauf hat uns die Konsole folgendes gezeigt:
  • internetuser@vernus:/etc/init.d/............../proc/255/...../Deutsch
Danach konnte er einen symbolischen Link auf Deusch anlegen. Pfeiltaste rauf und Enter und so weiter. Das Spiel hat er so 20 Mal wiederholt.

Meine Frage jetzt, ist das ein Bug, ein Sicherheitsrisiko oder ein Fake?

Wenn ja, gibt es Patches oder ist es ratsam eine andere Shell zu verwenden?

Benutzeravatar
se8i
Beiträge: 1017
Registriert: 08.11.2002 17:02:20
Wohnort: nähe Karlsruhe
Kontaktdaten:

Beitrag von se8i » 17.07.2004 19:59:01

panik. Ich werfe Debian gleich weg.


wenn man sich das ganze mal anschaut: der stern ist ein regulärer Ausdruck und triftt für beliebig viele beliebige Zeichen zu, er versucht also in jedes Verzeichnis zu wechseln...

Code: Alles auswählen

cd /*/
die shell versucht in jedes Verzeichnis der Tiefe 1 nach / zu wechseln. Ich lande dann in /bin und das darf ich als nicht-root anschauen (ich will ja auch programme ausführen)

Code: Alles auswählen

cd /*/*/
Wechselt in alle Verzeicnisse der Tiefe 2 (ich lande in /boot/grub)
wenn mann das argument noch entsprechend verlängert, dann wird ziemlich oft das Verzeichnis gewechselt ==> viele Festplatten zugriffe ==> geräusch.

Noch fragen?

ps: hoffentlich war das jetzt auch technisch ordentlich erklärt :)

//eidt: Man landet übrigens im ersten vezeichnis, mit der entsprechenden tiefe.
und ein cd /*/*/* (mit stern hinten geht bei mir gar nicht, weil der ausdruck dann auch auf normale dateien zutrifft.

Benutzeravatar
smoon
Beiträge: 248
Registriert: 07.05.2004 15:44:57
Kontaktdaten:

Beitrag von smoon » 17.07.2004 20:07:20

se8i hat geschrieben:panik. Ich werfe Debian gleich weg.


wenn man sich das ganze mal anschaut: der stern ist ein regulärer Ausdruck und triftt für beliebig viele beliebige Zeichen zu, er versucht also in jedes Verzeichnis zu wechseln...
Das stimmt so nicht ganz. * wird von der bash vor dem Ausführen des Befehls ersetzt. Wenn du also z.B. in einem Verzeichnis bist, das die Datei test und die Verzeichnisse foo und bar enthält wird * von der Bash durch die Zeichenkette "test foo bar" ersetzt. cd probiert also nicht in jedes Verzeichnis zu wechseln sondern in das Verzeichnis "test foo bar". Da Dateinamen mit Leerzeichen aber escaped werden müssen um von der Bash gescheit behandelt zu werden wird versucht in den ersten Teil des Strings zu wechseln. Wenn das wie in meinem Beispiel aber eine Datei ist schlägt das ganze fehl. Ansonsten wird in das Verzeichnis gewechselt, das am Anfang der Zeichenkette steht.

Und mal davon abgesehen, dass man seinen Speicher mit einem Teil der Verzeichnisstruktur füllt sehe ich hier keine Probleme. Bei mir hat das ganze auch in keinem Versuch zu genanntem Fehler geführt.

Ich hoffe ich irre mich nicht ;)
smoon:#linuxger:Undernet

Benutzeravatar
rkrueger
Beiträge: 1044
Registriert: 17.06.2004 17:57:17

Beitrag von rkrueger » 17.07.2004 20:31:51

Das mag zwar ganz interessant sein, trifft meine Frage aber nur halb.

Er konnte dann als normaler user symbolische Links erstellen, und zwar in dem Verzeichnis /etc. Und das sollte normalerweise nicht möglich sein, oder?

floschi
Beiträge: 791
Registriert: 17.09.2002 14:36:18
Wohnort: München
Kontaktdaten:

Beitrag von floschi » 17.07.2004 21:09:40

rkrueger hat geschrieben:Er konnte dann als normaler user symbolische Links erstellen, und zwar in dem Verzeichnis /etc. Und das sollte normalerweise nicht möglich sein, oder?
Warum nicht?

Es kommt darauf an, wie die Berechtigungen sind, bei root.root 700 sollte z.B. niemand anderes was machen können.

Benutzeravatar
smoon
Beiträge: 248
Registriert: 07.05.2004 15:44:57
Kontaktdaten:

Beitrag von smoon » 17.07.2004 21:26:55

Ich gehe mal davon aus, dass dein Freund sich da einen Spaß mit dir erlaubt hat. Oder ist es ausgeschlossen, dass er das System vorher entsprechend manipuliert hat (schreibrechte in /etc für alle z.B.)?
smoon:#linuxger:Undernet

Benutzeravatar
rkrueger
Beiträge: 1044
Registriert: 17.06.2004 17:57:17

Beitrag von rkrueger » 17.07.2004 21:27:43

Und bei 755 ist ein Erstellen von Links auch nicht möglich. Wieso ist denn dieses nach der Aktion : cd /*/*/*/*/*/*/*/*/*/ so ohne weiteres möglich?

grübel grübel.

die tcsh meldet mehrdeutig.

Was ist nun Ambach?

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 17.07.2004 21:43:06

das du die festplatte beschäftigst ist ja trivial.
mit "cat *" in einem verzeichnis mit vielen dateien würde
ja auch mächtig viel ausgegeben. 40% auslastung klingen aber auch
nicht nach überforderung.

und das mit dem "symbolischen link anlegen" musst du mir nochmal erklären.
einen link "auf" eine datei zu legen, auf die du leserechte hast ist doch kein problem.

Benutzeravatar
rkrueger
Beiträge: 1044
Registriert: 17.06.2004 17:57:17

Beitrag von rkrueger » 18.07.2004 15:30:53

Ich treffe meinen Kumpel Mitte dieser Woche noch und werden alles mitloggen.

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 18.07.2004 18:11:50

Mit dem /*/*/*.........../* findet man im Prinzip automatisch einen rekursiven Pfad (Symlink nach ../ oder ./), da die normale Hierarchie nicht so tief ist. Wenn man dann in das Verzeichnis schreiben kann, kann man da einen Link anlegen, und so den Pfad noch tiefer machen...

Das Verzeichnis liegt übrigens nicht unter /etc/init.d sondern irgendwo anders. In /proc/PID/fd sind nämlich Links zu allen geöffneten Dateien des Prozesses mit der Pid PID, daher kann es gut sein, dass das cd Kommando sonst irgendwo gelandet ist (irgendwo unter /home z.B.).

Das Ganze zeigt keinerlei Sicherheitsproblem, solange die Permissions nicht umgangen werden, was hier nicht der Fall sein dürfte. Kontrolliere 'mal, wo Du mit dem cd Kommando wirklich landest ("pwd") und schau dann, ob Du dort nicht doch ausreichende Permissions hast (mit Sicherheit der Fall).

Schlimmer sind eigentlich solche Sachen:
WARNUNG!!!! FORK BOMBE!
Nicht ausprobieren!!! Wenn doch: Vorher alle Daten speichern, möglichst alle Programme beenden, Platten syncen ("sync") und aus dem Terminal (nicht aus X! X vorher beenden) starten!!! Wenn kein entsprechendes ulimit gesetzt ist, ist ein paar Sekunden nach dem absetzen des Befehls ein Reboot (Reset Button) fällig!!! Die letzte bei mir angezeigte Load war ca. 1500, die Maus liess sich nicht mehr bewegen!!!

Code: Alles auswählen

. () { . | . } .
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 18.07.2004 18:17:08

pdreker hat geschrieben:

Code: Alles auswählen

. () { . | . } .
Was genau macht das denn? Ich versteh die Zeile nicht.

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 20.07.2004 15:41:04

Müsste es nicht eigentlich

Code: Alles auswählen

.() { .|.; } ; .
heißen?
.() definiert eine Funktion names ".", die wie folgt definiert ist:
.|. also soll sie die ausgabe von ".", also sich selbst, an ".", auch sich selbst weiterleiten. Dies geschieht, indem die bash einen fork macht (Kindprozess erstellt), und darin die Funktion . aufruft; im Originalprozess wird ebenfalls "." erneut aufgerufen, also wieder geforkt. Nach 2 durchläufen hast du also schon 4 Prozesse, danach 8 usw. Das Paradabeispiel einer Kettenreaktion.

Das ; . am ende sorgt nur dafür, dass die Funktion "." auch einmal aufgerufen wird.

Solche Sachen lassen sich mit "ulimit -u" verhindern.

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 20.07.2004 22:22:41

Bei mir geht's auch ohne die Semikola (Semikolons? Semikolonne?)... Ich habe es ausprobiert: ohne ulimits ist mein 512MB Athlon 2800+ innerhalb von ca. 5 Sekunden langsam und nach ca. 10 Sekunden bleibt dann die Maus stehen...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
kairo
Beiträge: 175
Registriert: 04.02.2004 13:41:03
Wohnort: Sachsen

Beitrag von kairo » 21.07.2004 01:12:08

<klugscheißen mode=duden>
Se|mi|ko|lon: <lat.-gr.> das; -s; -s u. [selten] Semikola <Sprachwiss.>
Strichpunkt (>;<) als Satzzeichen <<ein Semikolon setzen>>
</klugscheißen>

;) Kairo

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 21.07.2004 02:08:43

In der Schule habe ich damals "Semikola" gelernt, aber das war alles vor der neuen Rechtschreibung... Naja, "Semikolonne" war dann auch mehr ein Witz, als ganz ernstgemeint.

Pa 'ja, ich muss immer das letzte Wort haben' trick
Definitely not a bot...
Jabber: pdreker@debianforum.de

basman
Beiträge: 102
Registriert: 22.06.2004 08:48:14
Wohnort: Winterthur

Beitrag von basman » 25.07.2004 01:24:39

Es gibt Kernel-patches, welche die Anzahl geforkter Prozesse pro User limitieren. Damit kann man sich solcher Fork-Bomben erwehren.

Benutzeravatar
demarque
Beiträge: 70
Registriert: 29.07.2002 19:59:46

Beitrag von demarque » 30.07.2004 18:15:48

man 5 limits.conf

Antworten