Jak chronić Ubuntu przed bombą widelcową

72

Słyszałem, jak ktoś mówił o bombie widelcowej, przeprowadziłem badania i znalazłem okropne informacje na temat dziwnie wyglądających postaci, które ludzie mogą kazać Ci pisać w wierszu poleceń, w wyniku czego robią złe rzeczy na komputerze. Z pewnością nie wydawałbym poleceń, których nie rozumiem, ale nigdy nie wiadomo, co może się zdarzyć.

Słyszałem, że niektóre systemy operacyjne pozwalają administratorowi na ograniczenie procesów użytkownika w celu złagodzenia skutków bomb wideł, czy ta ochrona w Ubuntu jest domyślnie czy też osoba z uprawnieniami sudo musiałaby to ustawić? Jeśli tak to jak?

dblang
źródło

Odpowiedzi:

73

Modyfikując, możesz łatwo ograniczyć liczbę procesów, które mogą zostać uruchomione w Ubuntu i większości innych dystrybucji Linuksa /etc/security/limits.conf

sudoedit /etc/security/limits.conf

Następnie dodaj ten wiersz na dole tego pliku:

*    hard     nproc     nnn

gdzie:

  • hard ustawia limit na poziomie jądra, dzięki czemu nie można go zmienić bez ponownego uruchomienia.
  • nproc to maksymalna liczba procesów na użytkownika.
  • nnn to liczba, którą należy obliczyć dla swojego systemu:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

Powyższe polecenie wyświetli listę wszystkich procesów dla wszystkich użytkowników, w tym wątków , zsumuje je i wyświetli nazwę użytkownika z największą liczbą procesów. Aby być bezpiecznym, przed uruchomieniem powyższej komendy otwórz tyle aplikacji, ile zwykle potrzebujesz, a następnie podwoj tę liczbę dla bezpieczeństwa.

Po wprowadzeniu tego limitu konieczne będzie ponowne uruchomienie komputera, ale będzie to miało wpływ na każdego użytkownika innego niż root w systemie. Więc jeśli bomba rozwidlona zostanie wykonana przez użytkownika innego niż root, będzie miała ten twardy limit.

Limity grup i symboli zastępczych domyślnie nie dotyczą użytkownika root . Użyj literalnej nazwy użytkownika rootw regułach, jeśli chcesz zastosować regułę do administratora.

Ponadto, jeśli nie chcesz w najbliższym czasie zrestartować, możesz użyć tej opcji, sudo ulimit -u 800która ograniczy tylko sesję, ale można ją łatwo obejść za pomocą bomby widelcowej z sudouprawnieniami!

Po ponownym uruchomieniu wszystko, co jest w /etc/security/limits.confśrodku, zostanie użyte.

Kilka dodatkowych informacji o bombach widełkowych: nie są złośliwym oprogramowaniem ani niczym strasznym. Zwykle składają się z czegoś tak podstawowego jak skrypt, który wywołuje się dwukrotnie, zwiększając w ten sposób wykładniczo swoją obecność na komputerze. Mimo że zajmują niewiele miejsca w pamięci, biorąc pod uwagę ich szybkie tempo, wielokrotnie, szybko zapełniają całą dostępną pamięć RAM, a urządzenie zawiesza się lub restartuje. Jedynym niebezpieczeństwem jest utrata niezapisanych informacji. Sklasyfikowałbym widełki bardziej jako dowcip niż złośliwe oprogramowanie.

Ważne przypomnienie:

Rzadko powinieneś kiedykolwiek wykonywać cokolwiek w wierszu poleceń, gdy nie jesteś pewien 98% jego działania. Jeśli nie możesz odczytać wykonywanych poleceń - nie rób tego. Odnosi się to podwójnie do nieczytelnych fragmentów znaków szesnastkowych / base64, które można wykorzystać do zaciemnienia wszelkiego rodzaju paskudności. Jeśli nie masz pewności co do polecenia, zawsze możesz wyszukać jego działania na stronach Ubuntu i zachować dodatkową ostrożność podczas korzystania z niego, sudoponieważ zostanie ono wykonane jako użytkownik root.

Marco Ceppi
źródło
@MarcoCeppi: twój numer nie był daleki dla typowego użytkownika Unity: dane wyjściowe do obliczeń wynoszą obecnie 404 dla mojego systemu ...
Fabby
1
Jeśli, powiedzmy, włożę coś alias ":(){ :|: & };:"="echo 'No.'"do mojego .bashrc- czy wykona każde logowanie?
UniversallyUniqueID
Czy istnieje wada wyboru wyższego limitu nproc? Wygląda na to, że nie ma zbyt wiele miejsca na ograniczenie lub nawet dwukrotność obecnego # procesu, czy limit znacznie wyższy, nawet 10.000 lub więcej, nadal byłby skuteczny przeciwko bombom widelcowym? O ile pamięci zużywa każdy widelec / proces? Może istnieje bardziej uniwersalny limit wynikający z pamięci RAM?
Xen2050,
1

Prostym sposobem, który lubię, jest utworzenie aliasu, chociaż aliasy nie zawsze są stosowane, sprawdź odpowiedź powyżej.

alias :="echo No."

Teraz

$ :(){ :|: & };:
bash: syntax error near unexpected token `('
Adrian Webster
źródło
22
z pewnością jest to powszechne rozwiązanie; jak to się kończy a(){ a|a & };a? (czy jakakolwiek inna nazwa funkcji?)
cat