2009-06-18 8 views
10

Spędziłem więcej niż kilka godzin upokarzając się na ACM ICPC's problem set archive i zastanawiałem się, w jaki sposób sędzia online jest w stanie skompilować i uruchomić kod źródłowy od dowolnego użytkownika i zapobiec złośliwym atakom na ich system.W jaki sposób Sędzia Online ACM ICPC zapobiega złośliwym atakom?

Czy skompilowane pliki binarne są uruchamiane z ograniczonego obszaru izolowanego? Jak by się zabrał do konfigurowania tego rodzaju piaskownicy? Z jakiego systemu operacyjnego korzystasz? W jaki sposób uruchomisz skompilowany plik wykonywalny użytkownika?

Odpowiedz

7

Można go uruchomić w chrootach Linuksa w systemie Linux lub połączyć z biblioteką libc, która nie implementuje żadnych operacji wejścia/wyjścia pliku.

+0

Czym dokładnie jest więzienie chroot? –

+3

Jest to środowisko dostępne w niektórych systemach UNIX, które pozwala na uruchomienie programu bez dostępu do pełnego systemu plików. Procesy działające wewnątrz więzienia widzą pewien podkatalog jako katalog główny i nie mają dostępu do niczego poza nim. W szczególności wywołanie systemowe ustawia fałszywy katalog główny, a wszystkie procesy potomne dziedziczą go. – thirtyseven

0

Myślę, że nie uruchamiają żadnego kodu. Czasem pojawia się ten błąd "Funkcja ograniczona", na przykład podczas próby odczytu lub zapisu pliku "ofstream" & "ifstream" w języku C++

6

Programy są uruchamiane w zamkniętym chrootowaniu z ograniczonym czasem wykonywania. Komputery sędziów są rozmieszczone na wielu serwerach, aby zapobiec pojedynczemu punktowi awarii lub atakom DOS.

Jestem regionalnym administratorem konkursu.

+0

Czy mógłbyś wyjaśnić, czym jest chrootowane więzienie? –

+0

Będzie świetnie, jeśli ktokolwiek może wyjaśnić to nieco więcej. Czy wszystkie biblioteki wymagane w czasie wykonywania przez gcc muszą znajdować się w tym zamkniętym obszarze? – Terminal

4

Łatwy sposób tworzenia piaskownicy (przy założeniu, że Linux jako system operacyjny, który jest wspólny dla ACM), używa (starożytnego) chroota lub niektórych łat jądra. Istnieje kilka zaawansowanych technik Piaskownica w jądrze teraz, na przykład:

  • seccomp - Linux 2.6.12+ - proces może poprosić OS za pomocą specjalnego prset połączenia, aby ograniczyć możliwości technologicznych do: wyjściu, czytania i pisania już otwarte pliki. OS odmówi wykonania jakiegokolwiek innego wywołania systemowego, skutecznie izolując program od świata zewnętrznego. I nie ma sposobu, aby zresetować te możliwości. (To rozwiązanie może złamać niektóre języki progresywne, takie jak python, perl, ruby ​​itp., Które chcą załadować niektóre wtyczki podczas pracy.)

  • Izolacja przestrzeni nazw - cgroups. chroot to program do zmiany (wyizolowania) tylko obszaru nazw systemu plików, a istnieją także inne przestrzenie nazw, np. sieć lub proces. Używając cgroups możemy ograniczyć więcej niż to możliwe, używając tylko chroot.

Niektóre łatki na jądro napisane dla sędziów online, np. * ejudge.ru ma łatki do 2.6.38.8, 3.4.15, 3.7.5; a także niektóre rozwiązania dla Windows. (Strona w języku rosyjskim.) Myślę, że ten system może być używany w niektórych konkursach w Rosji, nie jestem pewien co do 1/4 ACM ICPC.

Niektóre systemy sędziowskie używają systemu ptrace() syscall - innymi słowy, działają jak debugger dla testowanego programu, a sędzia może kontrolować wszystkie syscalls i może anulować dowolne z nich bez przekazywania go do jądra.

Istnieją także systemy sędziowskie typu open-source, np. https://openjudge.net/ (libsandbox)

Powiązane problemy