Gdybyś miał ustawić globalnie
alias ':(){ :|:& };:'='echo fork bomb averted'
czy byłaby to skuteczna strategia bezpieczeństwa pozwalająca uniknąć egzekucji bomby widelcowej Bash, czy też byłby sposób na jej wykonanie?
Przypuszczam, że pojawia się pytanie: czy istnieje sposób na wykonanie polecenia, gdy jest ono powiązane z czymś innym?
a(){ a|a& };a
Odpowiedzi:
Dwa, nietrzy, ... Wśród głównych przeszkód, które są:To nie jest poprawna nazwa dla aliasu. Podręcznik online Bash :
(
,)
,&
,|
I spacje są w Bash 4.4.Ten konkretny ciąg nie jest jedynym sposobem na napisanie bomby widelcowej w skorupce, znanym tylko dlatego, że wygląda niejasno. Na przykład nie ma potrzeby wywoływania funkcji
:
zamiast czegoś, co faktycznie składa się z liter.Jeśli możesz ustawić alias, użytkownik może rozbroić alias, obejść go, usuwając nazwę aliasu w wierszu poleceń, lub całkowicie wyłączyć aliasy, prawdopodobnie uruchamiając funkcję w skrypcie (Bash nie rozwija aliasów w nieinteraktywnych powłokach) .
Nawet jeśli pocisk jest wystarczająco ograniczony, aby zatrzymać wszystkie wersje bomby widełkowej, system ogólnego przeznaczenia będzie miał inne programowalne narzędzia, które mogą się powtarzać i rozwidlać podprocesy. Masz kompilator Perl lub C? Wystarczająco łatwe. Nawet awk mógłby to zrobić. Nawet jeśli nie masz tych zainstalowanych, musisz również powstrzymać użytkownika przed wprowadzaniem skompilowanych plików binarnych spoza systemu lub działaniem,
/bin/sh
które prawdopodobnie musi być w pełni działającą powłoką, aby reszta systemu mogła działać.Wystarczy użyć
ulimit -u
(tj.RLIMIT_NPROC
) Lub odpowiednika, aby ograniczyć liczbę procesów, które użytkownik może uruchomić. W większości systemów Linuxpam_limits
można ustawić limit liczby procesów przed uruchomieniem jakichkolwiek poleceń wybranych przez użytkownika.Coś takiego
/etc/security/limits.conf
wprowadziłoby sztywny limit 50 procesów dla wszystkich użytkowników:(Stephen Kitt wspomniał już o punkcie 1, Jeff Schaller o 2 i 3.)
źródło
&
?&
ograniczeń.Nie. Jest po prostu zbyt wiele sposobów na napisanie bomby.
Pisarz złych bomb widłowych po prostu spróbuje jeszcze raz z inną nazwą funkcji. Lub inne zmiany, dopóki jego bomba nie rozwinie się.
Nieumyślny autor widelec-bomba przede wszystkim nie wyprodukuje kanonicznej bomby-widelca.
Tak naprawdę łatwo jest samemu zostać nieumyślnym pisarzem-bombą. Na przykład, możesz po prostu użyć rekurencyjnego
make
z zewnętrznym, niezaznaczonymcd
, łącząc go z-j
opcją i nieistniejącymi podkatalogami - prawdziwy przykład, na który natknąłem się raz.Nie możesz zabezpieczyć się przed wszystkimi możliwościami, a na pewno nie przed zdeterminowanym atakującym. Wszystko, co osiągniesz, to zwiększenie złożoności systemu.
źródło
Nie możesz aliasować bomby widelcowej, ponieważ nie jest to prawidłowy alias :
Niektóre powłoki nie sprawdzają nazw aliasów, gdy są zadeklarowane, ale podczas interpretacji poleceń i pomijają wtedy niepoprawną nazwę. Widelec zawsze będzie zawierać bombę
&
, której nie można podać w prawidłowym aliasie, więc ochrona się w ten sposób nie jest możliwa.źródło
dash
ibosh
np. oba cicho to ignorują.Dwa razy nie.
To nie jedyny sposób na napisanie bomby widelcowej.
Istnieje również kilka sposobów wykonania „polecenia”, gdy istnieje alias:
Przykład:
źródło
\ls
pojawił,output.png
alecommand ls
nie zrobił?