Czy jest jakiś sposób, aby powstrzymać użytkownika przed tworzeniem plików wykonywalnych i uruchamianiem ich?

31

Ataki ransomware mogą wykorzystywać exploity zero-day, ale często atakujący oszuka łatwowiernego użytkownika, aby uruchomił plik wykonywalny, pobierając i klikając.

Załóżmy, że mamy naiwnego użytkownika i chcemy ograniczyć go do normalnej ścieżki. Czy istnieje sposób, aby ograniczyć ich tworzenie pliku z uprawnieniami do wykonywania?

Lub, bardziej ogólnie, czy jest jakiś sposób na zbudowanie listy kontroli dostępu i zdefiniowanie, że ten użytkownik może wykonywać tylko pliki z tej listy?

Dow
źródło
7
Wyłączenie wykonywania w ten sposób uniemożliwiłoby użytkownikom wykonywanie jakichkolwiek czynności w systemie. Nie ma mechanizmu tego wbudowanego w system, ani nawet w oprogramowanie innych firm, o których wiem, że mogę zrobić tego rodzaju blokadę bezpieczeństwa
Thomas Ward
3
nie odpowiada, ale sugeruje, co możesz zrobić: dodaj noexec do montowanych przez użytkownika montowań. nie zapobiegnie skryptom, ale faktyczne wykonanie binarne.
Sampo Sarrala
3
@ThomasWard, czy nie jest to dokładnie to, czym jest ograniczona powłoka?
Robert Riedl
7
@ThomasWard istnieje ogólna koncepcja „plików wykonywalnych umieszczonych na białej liście”, w których dozwolona jest pewna lista plików wykonywalnych (zwykle podpisanych) i nic więcej nie można uruchomić bez podniesionych uprawnień; a zarówno Windows, jak i OS X mają rozsądne rozwiązania, które to umożliwiają. Nie wiem jednak, czy istnieje dobre rozwiązanie Ubuntu (lub innego systemu Linux) do białej listy aplikacji.
Peteris,
2
@Peteris, istnieje wiele takich rozwiązań. Moim ulubionym jest posiadanie podpisanego systemu plików tylko do odczytu z plikami wykonywalnymi i montowanie wszystkich innych noexec, zgodnie z tym, jak ChromeOS używa dm_veritydo zapewnienia integralności systemu plików root. Dla osób, które nie są aż tak hardkorowe, można użyć modułów EVM; zobacz wiki.gentoo.org/wiki/Extended_Verification_Module, aby uzyskać dokumentację Gentoo na ten temat.
Charles Duffy

Odpowiedzi:

50

Konkretny atak, na który wyraziłeś obawy, to:

często osoba atakująca oszuka po prostu łatwowiernego użytkownika, aby uruchomił plik wykonywalny, pobierając i klikając.

Przynajmniej w powszechnym przypadku, gdy plik jest pobierany w przeglądarce internetowej, powinno się temu już zapobiegać w Ubuntu przez przestrzeganie przez przeglądarkę zasad Wymaganego bitu wykonania. Najbardziej bezpośrednio odpowiednie części tej polityki to:

  • Aplikacje, w tym komputery stacjonarne i powłoki, nie mogą uruchamiać kodu wykonywalnego z plików, gdy oba są:

    • brakuje bitu wykonywalnego
    • znajduje się w katalogu domowym użytkownika lub katalogu tymczasowym.
  • Pliki pobrane z przeglądarki internetowej, klienta poczty itp. Nigdy nie mogą być zapisywane jako pliki wykonywalne.

Jeśli więc użytkownik zostanie poproszony o pobranie programu z przeglądarki internetowej, zrobi to i spróbuje uruchomić plik, klikając go dwukrotnie, nie uruchomi się. Odnosi się to nawet, jeśli pobrany plik jest skryptem powłoki, a nawet plikiem .desktop. (Jeśli kiedykolwiek zastanawiałeś się, dlaczego pliki .desktop w katalogu domowym muszą być oznaczone jako pliki wykonywalne, mimo że tak naprawdę nie programami, właśnie dlatego).

Użytkownicy mogą zmienić to zachowanie poprzez zmiany konfiguracji. Większość tego nie zrobi i chociaż ci, którzy prawdopodobnie tego nie zrobią, nie powinniście się tak naprawdę martwić. Większy problem dotyczy bardziej złożonego ataku, o którym myślę, że już się martwisz, w którym złośliwa osoba (lub bot) instruuje użytkownika, aby pobrał określony plik, oznaczył go jako wykonywalny (przez przeglądarkę plików lub za pomocą chmod) i następnie uruchom to.

Niestety ograniczenie zdolności użytkownika do ustawienia bitu wykonania pliku lub wykonywania plików innych niż te z białej listy nie zmniejszy zauważalnie problemu. Niektóre ataki już działają, a te, których nie można w prosty sposób zmodyfikować, aby działały. Podstawową kwestią jest to, że efekt uruchomienia pliku można uzyskać, nawet jeśli plik nie ma uprawnień do wykonywania .

Najlepiej ilustruje to przykład. Załóżmy, że eviljest to plik w bieżącym katalogu, który, gdyby otrzymał uprawnienia do wykonywania ( chmod +x evil) i run ( ./evil), zrobiłby coś złego. W zależności od rodzaju programu ten sam efekt można osiągnąć, wykonując jedną z następujących czynności:

Żadna z nich, nawet ostatnia, nie wymaga, aby plik miał uprawnienia do wykonywania, ani nawet aby użytkownik mógł nadać temu plikowi uprawnienia.

Ale złośliwe instrukcje nie muszą nawet być tak skomplikowane. Rozważ to niezłośliwe polecenie, które jest jednym z oficjalnie zalecanych sposobów instalacji lub aktualizacji NVM :

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

Powodem, dla którego nie jest złośliwy, jest to, że NVM nie jest złośliwym oprogramowaniem, ale jeśli adres URL byłby zamiast skryptu, który wywołuje zło po uruchomieniu, polecenie to pobrałoby i uruchomiło skrypt. W żadnym momencie żaden plik nie musiałby mieć uprawnień do wykonywania. Pobieranie i uruchamianie kodu zawartego w złośliwym pliku za pomocą jednego polecenia tego typu jest, jak sądzę, dość częstym działaniem, które atakujący nakłaniają użytkowników do podjęcia.

Możesz pomyśleć o ograniczeniu dostępnych tłumaczy do uruchomienia przez użytkowników. Ale tak naprawdę nie ma sposobu, aby to zrobić, który nie wpływa znacząco na zwykłe zadania, które prawdopodobnie chcesz, aby użytkownicy mogli wykonywać. Jeśli konfigurujesz bardzo ograniczone środowisko, w którym prawie wszystko, co użytkownik chciałby zrobić na komputerze, jest niedozwolone, na przykład kiosk, w którym działa tylko kilka programów, może to zapewnić pewną ochronę. Ale to nie brzmi tak, jakby to był twój przypadek użycia.

Przybliżona odpowiedź na twoje pytanie brzmi: „Nie”. Pełniejsza odpowiedź jest taka, że prawdopodobnie uda Ci się uniemożliwić użytkownikom wykonywanie jakichkolwiek plików oprócz tych, które podajesz na białej liście. Ale to w ścisłym technicznym sensie słowa „wykonaj”, które nie jest potrzebne do osiągnięcia pełnego efektu działania większości programów lub skryptów. Aby zapobiec które , można spróbować zrobić whitelist bardzo mały, więc nie są wyświetlane żadne ustne z wyjątkiem tych, które mogą być bardzo ograniczone. Ale nawet jeśli ci się to udało, użytkownicy nie mogliby wiele zrobić, a jeśli uczynisz to tak małym, że nie mogliby się zranić, prawdopodobnie nie mogliby nic zrobić. (Zobacz komentarz Thomasa Warda ).

Jeśli twoi użytkownicy mogą się zranić, mogą zostać oszukiwani, by się zranić.

Możesz być w stanie ograniczyć używanie określonych programów lub w inny sposób zachowywać się w sposób, który może być szkodliwy, a jeśli patrzysz na określone wzorce, które ransomware zwykle stosuje, możesz być w stanie zapobiec niektórym konkretnym częstym przypadkom. (Zobacz AppArmor .) To może zapewnić pewną wartość. Ale nie da ci nic bliskiego kompleksowemu rozwiązaniu, na które liczysz.

Bez względu na to, jakie środki techniczne (jeśli w ogóle zastosujesz), najlepszym rozwiązaniem jest edukacja użytkowników. Obejmuje to nakazanie im, aby nie wykonywali poleceń, których nie rozumieją, i nie używali pobranych plików w sytuacjach, w których nie byliby w stanie wyjaśnić, dlaczego jest to wystarczająco bezpieczne. Ale obejmuje to również tworzenie kopii zapasowych, więc jeśli coś pójdzie nie tak (z powodu złośliwego oprogramowania lub w inny sposób), wyrządzone szkody będą tak małe, jak to możliwe.

Eliah Kagan
źródło
6
Być może do środków nietechnicznych należy podać dane kontaktowe osoby, która może mieć zdrowy rozsądek, aby sprawdzić, co chce zrobić. Za każdym razem, gdy nie są pewni, zadzwoń lub napisz i zapytaj. To może usunąć pokusę zgadywania.
Peter Cordes
1
To jest świetne streszczenie na temat problemów i obaw związanych z pytaniem dotyczącym PO
Robert Riedl
Minor nit: „ . ./evillub source ./eviluruchamia polecenia w evil.sh” - sourcepolecenia te uruchamiałyby polecenia, evilchyba że określają rozszerzenie, na przykład. ./evil.sh
Wstrzymane do odwołania.
@DennisWilliamson Thanks - naprawiono! Zostało to ze starszego (nie przesłanego) wstępnego szkicu odpowiedzi, w którym użyłem różnych nazw skryptów. Szybko zdałem sobie sprawę, że to głupie, ale najwyraźniej nie zmieniłem wszystkich wydarzeń.
Eliah Kagan
1
Za każdym razem, gdy widzę sposób na zainstalowanie lub aktualizację oprogramowania, które polega na „po prostu uruchom ten skrypt i uruchom go”, moje paznokcie u stóp nieco się zwijają. Nic nie stoi na przeszkodzie, aby ktoś utworzył konto / repozytorium GitHub, które jest wyłączone pojedynczym znakiem, nie używa 0 zamiast O, ani nie używa znaków UTF-8 do ukrywania i umieszczania w nim własnego złośliwego skryptu ... wtedy wystarczy tylko jeden literówka w poleceniu wget i bam.
Ian Kemp
11

TAK *


Nazywa się to ograniczoną powłoką.

Możesz użyć /bin/rbash, który jest już dostępny w Ubuntu i połączyć to z ograniczoną zmienną PATH . rbashZakaże wykonanie od wszystkiego, co nie jest $PATH.

Dodaj użytkownika z ograniczeniami:

sudo adduser --shell /bin/rbash res-user

Utwórz nowy katalog, w którym będziemy mogli łączyć pliki binarne, w których użytkownik będzie ograniczony do:

sudo mkdir /home/res-user/bin

Zmodyfikuj .profileplik:

sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

Uczynić .profile, bashrci .bash_profileniezmienne:

sudo chattr +i /home/res-user/.profile
sudo chattr +i /home/res-user/.bashrc
sudo chattr +i /home/res-user/.bash_profile

Teraz dajemy użytkownikowi jedyną rzecz, na jaką będzie mógł zrobić, tj. Otwórz Firefox:

sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

Teraz, jeśli się zalogujemy res-user, możemy otworzyć tylko Firefoksa:

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

Nie możemy łatwo uciec z naszej ograniczonej powłoki:

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

Użytkownik z ograniczonym dostępem nie może uruchomić plików ani uruchomić ich:

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

Użytkownik z ograniczonym dostępem nie może wykonywać złych skryptów z Internetu, ponieważ użytkownik nie może wykonać niezbędnych poleceń:

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

* Istnieją sposoby na wyrwanie się z ograniczonych powłok , ale jeśli twój użytkownik jest w stanie to zrobić, może nie być tak łatwowierny, jak myślisz.

Robert Riedl
źródło
2
Stara się to osiągnąć „ wyjątkowo ograniczone środowisko, w którym prawie wszystko, co użytkownik chciałby zrobić na komputerze, jest niedozwolone” (jak to ujęłam w mojej odpowiedzi). res-usernie mogę zalogować się graficznie. Jedyną przydatną rzeczą, jaką mogą zrobić, jest ssh -Xuruchomienie i uruchomienie firefox. Możesz zezwolić na więcej poleceń, aby użytkownik mógł wykonywać swoją pracę. Wtedy wyrwanie się staje się łatwiejsze. Kilka powiązanych metod można przekształcić w jednowarstwowe (które może dostarczyć atakujący). Jeśli użytkownicy uznają ograniczenia za duszące, staną się ekspertami w ich obchodzeniu, pozostając jednocześnie tak bystry lub łatwowierny, jak wcześniej.
Eliah Kagan
1
@EliahKagan tak, poprawne. Będziesz musiał połączyć wszystko, czego potrzebuje użytkownik. Ale jest to bardzo bliskie [...] czy istnieje jakiś sposób na zbudowanie listy kontroli dostępu i zdefiniowanie, że ten użytkownik może wykonywać tylko pliki z tej listy [...] . Może to pomóc OP. Wyłamanie się z tych pocisków nie jest niemożliwe, ale dość trudne. Mamy podobne konfiguracje zewnętrznego dostępu do określonych zasobów lub hostów skokowych. Wątpię, czy istnieją szeroko zakrojone ataki przeciwko ustawieniom z ograniczoną powłoką ... a jeśli masz do czynienia z atakiem ukierunkowanym , w którym atakujący zna środowisko ... wszystkie zakłady i tak są wyłączone.
Robert Riedl
4
Wyniosłbym przypis do pierwszej linii twojej odpowiedzi.
Wstrzymano do odwołania.
Prawdopodobnie lepiej, aby korzystali z chrome w trybie kiosku lub innej zahartowanej przeglądarki. Zainstalowanie wtyczki lub rozszerzenia Firefoksa powinno być dość łatwe z bardzo wysokim poziomem uprawnień i wykonywaniem poleceń systemowych. W Firefoksie upewnij się, że używasz ostatniej wersji i nie zezwalaj na rozszerzenia.
Benjamin Gruenbaum
Aby zapewnić dodatkową ochronę, użytkownik ma dostęp tylko do zapisu w systemach plików zamontowanych z opcją noexec.
Dan D.