2012-11-03 11 views
7

Pracuję nad systemem podobnym do Ideone, w którym niezaufany kod użytkownika musi działać w trybie piaskownicy.Jak zapobiec wywołaniu wywołania systemowego za pomocą ptrace

Po to szukałem możliwości ptrace dla pierwszej warstwy ochrony. Jednak po kilku eksperymentach wydaje się, że:

  • Potrafię przechwycić wywołanie systemowe przed jego wywołaniem i zmodyfikować argumenty wejściowe.
  • Potrafię przechwycić wywołanie systemowe po wywołaniu i zmienić wartość zwracaną.
  • Jednak wydaje się, że nie ma sposobu, aby uniemożliwić wykonanie połączenia w ogóle (z wyjątkiem zabicia całej aplikacji).

Chcę przechwycić niektóre wywołania systemowe i zwrócić fałszywy kod wyniku bez faktycznego połączenia. Czy istnieje sposób na wdrożenie tego?

+0

PTRACE_SYSEMU? Według strony podręcznika: "Wywołanie to jest używane przez podobny tryb użytkownika, który chce emulować wszystkie wywołania systemowe tego dziecka" – Krumelur

Odpowiedz

2

Proszę pamiętać, że sandbox może tylko być bezpiecznym, jeśli kod, który uruchamia, nie jest wielowątkowy. Będziesz musiał również zachować szczególną ostrożność, aby nie dopuścić do rozwidlenia się piaskowanego kodu.

Patrz, na przykład, następujące omówienie papierze o problemach Roberta Watson:

Exploiting races in system call wrappers

Papier jest związana w tym artykule, ale będę oferują link tutaj bezpośrednio jako dobrze:

"Exploiting Concurrency Vulnerabilities in System Call Wrappers"

lepszym rozwiązaniem wydaje się być nadal jak jest zalecane przez Watsona: uwzględniać ramy bezpieczeństwa całkowicie do jądra i zająć się jego stosowania w celu uniknięcia concu problemy z walutami. Linux i NetBSD i Mac OS X oraz inne systemy zorientowane na bezpieczeństwo już zapewniają takie struktury, a więc wszystko, co konieczne, jeśli używasz tych systemów, to implementacja twoich polityk w ramach istniejących struktur. To znaczy. nawet nie próbuj implementować swoich zasad bezpieczeństwa w opakowaniach zawinięć systemowych lub innych mechanizmach interpolacji wywołań systemowych.

+0

Albo, ponieważ planujesz uniemożliwić aplikacji wywoływanie niektórych wywołań systemowych, możesz zapobiec ich rozwidlenie lub tworzenie wątków. To jednak znacznie zmniejszyłoby możliwości programu. – petersohn

Powiązane problemy