Lokaler DOS in FreeBSD 6.0 möglich?

  • Thread starter Thread starter tib
  • Start date Start date
quantumleeks said:
Allerdings mit folgendem kompilierten C-Program konnte ich OpenBSD in die Knie zwingen:

Super... das geht echt ab. Aber man kann trotzdem noch rein. Seeehr langsam. Ist schon Kacke.

Ich hab aber noch etwas besseres. Die Fork-Bombe wurde von mir etwas optimiert und ist zum panic() avanciert (FreeBSD):
Code:
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
  while(1) {
    fork();
    malloc(1024);
  }
  return 0;
}

Einen ähnlichen PR habe ich schon in der Datenbank gefunden. Nur reproduzieren ließ er sich nicht, so wie es aussieht. Jetzt haben wir einen Testfall.

Sollte bald hier erscheinen:
http://www.freebsd.org/cgi/query-pr.cgi?pr=80435
 
Als User bekomme ich:
ktrace: ktest: Premission denied
und als root:
ktrace: Refuse to append to ktest not owned by you.

EDIT: Verwendetes Sytem:
DragonFly 1.5.1-PREVIEW (mit eigenem Kernel)
 
Kann jemand von Euch die fork bomb mit dem malloc auf 6.0R ausprobieren. Ich habe leider hier keine solche Kiste. Ich wurde gebeten, dies auszuprobieren.

Vorsicht! Beide Fälle (mit oder ohne panic()) sind wahrscheinlich "ungesund" für Eure Kisten. Ich bitte jemanden mit Erfahrung dies durchzuführen.

Update: also es funktioniert nicht auf FreeBSD 6.0R. Es scheint sich neu eingeschlichen zu haben.
 
Last edited:
"Super" ist ein wenig übertrieben. So wie ich das verstanden habe, haben sie dafür einen Teil der FIFO-Funktionalität entfernt. Das was Du jetzt vor hast, wird jetzt eventuell nicht mehr möglich sein. Kann aber sein, dass ich etwas falsch verstanden habe. Versuch den Patch mal.
 
So wie ich das verstanden habe ist man da auf ein Grundlegendes Problem gestoßen, das mit dem Patch für den Release weggefrickelt wurde und später sauber gelöst werden soll.
 
Ich habe mir diesen Thread jetzt nach ein paar Tagen wieder angesehen und sehe, dass ich scheinbar nicht der Einzige bin, der sich für das Thema forkbombs $ Co. interessiert. Ich dachte schon, ich hätte euch mit meiner letzten Post (1. Seite des Threads) gelangweilt...

Seid mir nicht böse, falls das jetzt eine blöde Frage ist:

Was würdet Ihr mir empfehlen, um zumindest die einfachen Shell-Forkbombs bei allen Usern zu "entschärfen".

Ich nehme an, man trägt in /etc/profile einen entsprechenden ulimit-Wert ein.

1. Wie hoch sollte ich diesen ansetzen? (Faustregel oder so)
2. Ist ein Eintrag in der /etc/profile eine "gute" Lösung, oder würdet ihr etwas anderes empfehlen?

In MAC muss ich mich erst mal einlesen, davon habe ich noch gar keine Ahnung -- mir würde für den Anfang so ein "Provisorium" genügen...
 
@tib

Danke für die schnelle Antwort!

Gut, dass Du mich nochmal darauf hingewiesen hast => login.conf
(Das hätte ich als zsh-User eigentlich auch wissen sollen)

Ich dachte bei den Richtwerten an einen "Durchschnittsuser" -- d.h. inklusive X, aber mir fehlt für beide Fälle die Erfahrung so etwas abzuschätzen.
 
Last edited:
Ich würde es ausprobieren. Erst mal vorsichtig mit 100 Prozessen und dann in 100er Schritten steigern, bis man merkt das das System zäh wird.
 
Danke Euch beiden!

Ich probiere zunächst mal tibs Vorgaben für die login.conf aus, da ich im Moment relativ wenig Zeit habe. Am Wochenende probiere ich dann einfach mal mit verschiedenen Werten für ulimit rum.

Ich habe allgemein noch sehr viel zu lesen; wie ihr sicher bemerkt habt haperts bei mir ja teilweise noch an den einfachsten Sachen (zsh & /etc/profile z.B.). Ich wusste das zwar beim Installieren, aber wenns erst mal läuft, vergisst man sowas schnell wieder :)

Ich schau aber heute Abend auf jeden Fall mal in die empfohlenen Manpages rein.

Vielen Dank schonmal! Falls es mit tib's Vorgaben Probleme gibt, melde ich mich nochmal!
 
Last edited:
Ich habe jetzt in meiner login.conf für 'default' 'maxproc=500' gesetzt. Die root Gruppe sieht so aus:
Code:
root:\
	:ignorenologin:\
	:maxproc=unlimited:\
	:tc=default:
Da ich root nicht einschräken will habe ich dort 'maxproc=unlimited' gesetzt. Aus der Manpage geht leider nicht hervor welcher Wert hier Priorität hat. Der den ich für root gesetzt habe oder der den ich für default gesetzt habe.
 
@[LoN]Kamikaze

Ich habs mal auf 1 gesetzt => der default wird überschrieben!

EDIT:
Vielleicht ist es euch ja sowieso klar, aber ich finde es interessant, dass ulimit auch nach Änderung (nachweislich, da sich bei maxproc=1 keine Progs mehr starten lassen) noch unlimited liefert...

@tib

Mit deinen Vorgaben kann ich sudo nicht mehr ausführen! Funktioniert das bei Dir noch?

EDIT: Hab alles nochmal neu eingetragen, cap_mkdb -> funktioniert wieder! Keine Ahnung was los war. Ging jedenfalls nur bei betroffenen logins nicht mehr.
 
Last edited:
Da meinerseits jetzt für den "Hausgebrauch" alles soweit geklärt ist, nochmals Danke!

Ich übernehme vorerst tibs Einstellungen als defaults, für root setze ich alles auf unlimited (getestet->funzt). Da ich jetzt mehrere Stunden unter diesen Einschränkungen gearbeitet habe (auch unter X) und keinerlei Probleme hatte, lasse ich das jetzt mal ein paar Tage so laufen.

Das primäre Ziel, Fork-Einzeiler u.ä. zu vereiteln habe ich, dank Eurer Hilfe, erreicht! :)

Die speicherspezifischen Parameter sehe ich mir dann mal am Wochenende an!
 
Ich benutze die tcsh. Die spukt mir als root für '# limit maxproc'
maxproc 5547
aus. Und als normaler user
maxproc 500
also das was ich wollte.
 
@[LoN]Kamikaze

Guter Tip! Das funktioniert auch unter der ZSH!

% limit maxproc
maxproc 64

# limit maxproc
1760

Cool!
 
Last edited:
Bis jetzt läufts!

Ich habe aber nur Firefox, Gnome-Terminal und Evolution offen. Hier ist übrigens eine (Beispiel)Vorgabe aus /etc/login.conf:
Code:
##
## users of X (needs more resources!)  
##
#xuser:\
#       :manpath=/usr/share/man /usr/X11R6/man /usr/local/man:\
#       :cputime=4h:\
#       :datasize=12M:\
#       :vmemoryuse=infinity:\
#       :stacksize=4M:\
#       :filesize=8M:\
#       :memoryuse=16M:\
#       :openfiles=32:\
#       :maxproc=48:\
#       :tc=standard:

NACHTRAG:
Aber ich denke auch, dass ich wohl auf 150-200 gehe, schliesslich habe ich keine zig-Accounts die gleichzeitig unter X arbeiten.
 
Last edited:
Im Moment verwende ich folgende Werte:

defaults:
Code:
default:\
   :passwd_format=md5:\
   :copyright=/etc/COPYRIGHT:\
   :welcome=/etc/motd:\
   :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\
   :path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin ~/bin:\
   :nologin=/var/run/nologin:\
   :cputime=unlimited:\
   :datasize=unlimited:\
   :stacksize=unlimited:\
   :memorylocked=unlimited:\
   :memoryuse=unlimited:\
   :filesize=unlimited:\
   :coredumpsize=0:\
   :openfiles=64:\
   :maxproc=64:\
   :sbsize=unlimited:\
   :vmemoryuse=unlimited:\
   :priority=0:\
   :ignoretime@:\
   :umask=022:

Also die, welche Du mir empfohlen hast. Ich hatte bis jetzt auch noch keine Probleme damit.

für root:
Code:
root:\
   :ignorenologin:\
   :maxproc=unlimited:\
   :openfiles=unlimited:\
   :tc=default:

Also folge ich, wie ich schonmal gemailt hatte, Deinen Vorgaben für meine "normalen" User und habe, wie [LoN]Kamikaze, für root alles freigeschaltet.

Du hast meine Aussage nicht verstanden, weil es eigentlich nicht viel zu verstehen gab ;)

Das Beispiel hatte ich lediglich gepostet, da dort für unprivilegierte User noch weniger als 64 für maxproc und openfiles vorgegeben sind. Da mir aber 64 (und erst recht 32/48) auch irgendwie ziemlich gering vorkamen, habe ich mir vorbehalten ggf. noch auf 150 bis 200 hochzugehen. (Dabei bin ich davon ausgegangen, dass die empfohlenen Werte wohl eher für ein System mit sehr vielen Nutzern ausgelegt sind und deswegen (um Ressourcen zu sparen) so gering ausfallen -- schließlich sind 34 Dateien schnell erreicht).

Da ich bis jetzt (also über 2 Tage) mit deinen Einstellungen keinerlei Probleme hatte bin ich dabei geblieben.

Leider muss ich nächste Woche noch meine letzten 3 Klausuren schreiben und kann der Sache deshalb im Moment nicht so viel Zeit widmen; deshalb lasse ich die speicherrelevanten Einstellungen erst mal außen vor.
 
Back
Top