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
oraz write
- służy do odczytu / zapisu z / do deskryptora pliku;
connect
- służy do podłączenia gniazda do peera;
- wiele, wiele innych (patrz
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 jest strace(1)
aplikacja terminalowa, która przyjmuje argument jako argument i wyprowadza:
- wywołania systemowe, które wywołuje program;
- argumenty użyte do wywołania syscalls;
- wynik syscalls.
Wyjście jest w stylu C. Oto przykład:
$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY) = 3
/* ... */
read(3, "hello\n", 32768) = 6
write(1, "hello\n", 6) = 6
read(3, "", 32768) = 0
/* ... */
Tam widzisz, że cat test
otwiera plik o nazwie test
, 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.
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.