Zastanawiałem się, czy istnieje narzędzie lub technika uruchamiania pliku wykonywalnego w izolowanym środowisku, może na maszynie wirtualnej. Podczas działania programu chcę móc kontrolować aplikację, tzn. Zobaczyć wszystko, co robi plik wykonywalny (dostęp do plików i sieci).
W ten sposób chcę być w stanie sprawdzić, czy plik wykonywalny jest złośliwy, tj. Wykonuje operacje, których nie powinien (odczytywać / zapisywać plików, nasłuchiwać / podłączać do portów sieciowych, ...).
Nie miałbym nic przeciwko graficznemu interfejsowi.
sandbox somebinary
a wyimaginowanysandbox
program zarejestruje wszystkie plikisomebinary
odczytane lub zapisane, wszystkie Adresy IP / porty podłączone, przesyłane dane itp. Byłoby to przydatne, chciałbym również wiedzieć, czy coś takiego istnieje (i w rzeczywistości bez takiego narzędzia obserwowanie programu działającego na maszynie wirtualnej byłoby bezcelowe, ponieważ ty i tak nie mogę powiedzieć, co tam robi). Dobre pytanie.Odpowiedzi:
Tak, nazywa się to wirtualizacją aplikacji .
LXC (Linux Containers) jest często używanym narzędziem do konfiguracji. Umożliwia skonfigurowanie całkowicie oddzielnej sieci dla tej aplikacji i „piaskownicę” na maszynie wirtualnej, podobnie jak chroot. Jest to głównie ze względów bezpieczeństwa („więzienie”), a nie do kontroli.
Myślę, że wyjaśnienie kompletnych kontenerów LXC, a także dokładny audyt, jest nieco poza zakresem pytania. Poniżej znajduje się jednak trochę, jak zacząć.
Można to osiągnąć za pomocą
strace
i zadałem to samo pytanie w systemach Unix i Linux:Jak tam odpowiedziałem , sprowadza się to w zasadzie do
Ważne: gdy zobaczysz, że tak się dzieje, szkody już miały miejsce.
Kontener aplikacji LXC
Z tego artykułu . Sprowadza się do:
lxc-macvlan.conf
plik konfiguracyjny:Uruchom za pomocą
lxc-execute
:Pamiętaj, że LXC oferuje zarówno pojemniki systemowe, jak i aplikacyjne. Szukasz pojemników z aplikacją tutaj.
źródło
/sys
nie jest wirtualizowany, a zmiany wprowadzone/sys
w kontenerze są wprowadzane/sys
w hoście. Szybkie wyszukiwanie w sieci zawiera kilka artykułów dokumentujących „ucieczkę” z kontenera. LXC będzie dobrym rozwiązaniem problemu, ale obecnie nie jest i nie powinno być używane jako narzędzie bezpieczeństwa.lxc.mount
opcji. Oznacza to, że system plików całego użytkownika jest dostępny przez uruchomienie.To, czego szukasz, to narzędzie, które pokazuje, jak program wchodzi w interakcje z systemem (a dokładniej z jądrem). Programy współpracują z systemem za pomocą syscall. Przykłady syscalli to:
open
- służy do otwierania pliku;read
orazwrite
- służy do odczytu / zapisu z / do deskryptora pliku;connect
- służy do podłączenia gniazda do peera;man syscalls
).Chodzi o to, że syscalls można śledzić za pomocą
ptrace(2)
. Zasadniczo szukasz narzędzi zbudowanych wokółptrace
. Jednym z takich narzędzi jeststrace(1)
aplikacja terminalowa, która przyjmuje argument jako argument i wyprowadza:Wyjście jest w stylu C. Oto przykład:
Tam widzisz, że
cat test
otwiera plik o nazwietest
, odczytuje jego zawartość (hello
) i umieszcza go na standardowym wyjściu.strace
może generować dużo danych wyjściowych, więc przeczytaj jego stronęman strace
podręcznika man ( ), zwłaszcza dokumentację danych-e
wyjściowych, która pozwoli ci zobaczyć tylko te wywołania systemowe, którymi jesteś zainteresowany.Niestety nie znam graficznych ani łatwych w użyciu alternatyw. Jeśli chcesz ich szukać,
ptrace
powinno być jednym ze słów kluczowych wyszukiwania.Jeśli chodzi o izolację, istnieje wiele technologii. Najczęściej używane są chrooty, kontenery Linux (które są obecnie w fazie rozwoju i są niekompletne), wirtualizacja oprogramowania i parawirtualizacja. Jest to jednak temat zbyt obszerny, by go omawiać. Sugeruję otwarcie nowego pytania, jeśli chcesz uzyskać więcej informacji.
źródło
Spójrz na AppArmor . Możesz dodać ograniczony profil pliku wykonywalnego i wprowadzić go w tryb „narzekać”, w którym akcje będą dozwolone, ale zalogowane, co moim zdaniem spełnia twoje wymagania.
Ale zauważ, że to naprawdę nie wystarczy. Sprytny złośliwy plik binarny może wykryć, że jest obserwowany i nie może wykonywać złośliwych działań, z wyjątkiem przypadków, gdy nie jest obserwowany.
AppArmor wykracza poza to i pozwala na zawsze ograniczyć aplikację tylko do zatwierdzonych operacji. Aplikacje, które trafią do Centrum oprogramowania Ubuntu, są dostarczane z profilami AppArmor.
źródło
Jak już zidentyfikowałeś, lepiej byłoby zapewnić maszynę wirtualną do izolacji, szczególnie jeśli masz powody, by sądzić, że plik wykonywalny jest złośliwy. Ale nawet to nie jest idealne, ponieważ luki w platformie wirtualizacji (zarówno sprzętowej, jak i programowej) mogą zostać wykorzystane przez złośliwy kod w celu wyłamania się. Oto przykład podatności na zagrożenia wirtualizacji w świecie rzeczywistym: http://www.kb.cert.org/vuls/id/649219
źródło
Możesz utworzyć przystawkę .
Przystawki są „ograniczone do systemu operacyjnego i innych aplikacji za pośrednictwem mechanizmów bezpieczeństwa, ale mogą wymieniać zawartość i funkcje z innymi przystawkami zgodnie z precyzyjnymi zasadami kontrolowanymi przez użytkownika i domyślnymi systemami operacyjnymi”. (z http://snapcraft.io/docs/snaps/intro )
Zapewniają one dodatkową izolację oprócz AppArmor, na przykład również używając seccomp .
Ponadto przystawka może być samodzielna w celu łatwej dystrybucji i aktualizacji atomowych w systemie.
źródło
Dziękuję, odpowiedzi były bardzo pomocne ...
Znalazłem to również: https://downloads.cuckoosandbox.org/docs/
Jest to bardzo interesujące narzędzie do analizy złośliwego oprogramowania, które znajduje się na maszynie wirtualnej
źródło