2010-04-01 12 views
7

Na stronie Ideone użytkownik przesyła kod do uruchomienia na zdalnym serwerze. Jest to podobne do funkcji internetowego sędziego.Jak chronić internetowego sędziego przed złośliwym kodem?

Problem polega na tym, że użytkownicy mogą przesyłać kod, który próbuje "zhakować" system. Rozumiem, że w C i C++ łatwo jest wyłączyć pewien zestaw wywołań systemowych (załatać kilka .dll), ale nie jestem pewien innych języków.

Jak chroniłbyś swój system, jeśli miałbyś obsługiwać języki wyższego poziomu (Erlang, Haskell) w internetowym sądzie?

+0

Czasami warto zajrzeć do „safeexec” projekt na github – daveagp

Odpowiedz

2

Uruchamianie w piaskownicy jako użytkownik nieuprzywilejowany. Nie jest to absolutnie niezawodne, ale sprawia, że ​​bar za trwałe uszkodzenie lub poważny kompromis jest bardzo wysoki. Nie zależy również od możliwych opcji lub modyfikacji danego czasu uruchamiania języka. Jeśli masz do czynienia z w pełni skompilowanym językiem (to znaczy bez interpretera czasu pracy), możesz to również zrobić.

Weźmy na przykład Erlang. Skonfiguruj chroot jail, który zawiera tylko to, czego potrzebujesz, aby uruchomić Erlang. Dodaj nieuprawnione konto użytkownika i katalog osobisty. Wprowadź kod, który ma zostać uruchomiony, sprawdź wszystkie uprawnienia do pliku/katalogu, zmień na nieuprzywilejowany identyfikator UID i uruchom kod.

Więcej szczegółowych instrukcji na temat konfigurowania więzień można znaleźć w artykule w Wikipedii, o którym mowa powyżej. Procedury i wymagania są nieco różne dla różnych systemów operacyjnych.

Powiązane problemy