Autor Wątek: Python i bezpieczeństwo  (Przeczytany 2787 razy)

Offline BrutalComputer

  • Użytkownik

# Styczeń 12, 2008, 18:34:53
Chciałbym móc przesyłać skrypty w Pythonie przez sieć ( aby użytkownicy mogli je modyfikować ). Problem polega na tym, że użytkownik może wpisać chociażby
import os
os.system( 'rm *' )
albo
file = open( 'plik.txt' )

Wie ktoś w jaki sposób nałożyć restrykcje na skrypty w Pythonie ( żeby mogły kożystać tylko z pamięci i niektórych funkcji - oczywiście bez pisania własnego preprocesora )?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

deX(ter)

  • Gość
# Styczeń 12, 2008, 18:41:14
Sprawdzać ręcznie przysyłane skrypty... Albo napisać automat, który będzie szukał określonych fraz, choć to zawsze ktoś może obejść.. ;].

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Styczeń 12, 2008, 19:06:41
Albo stworzyć własny język skryptowy, w którym nie będzie żadnej obsługi I/O :).

Offline Kosz85

  • Użytkownik

# Styczeń 13, 2008, 03:42:24
Jak zwykle Google gryzie ;)

Sandboxed Python, to artykuł którego szukasz, streszczając nie da się ;) Ale nie jest tak bardzo źle, bo możesz:
- użyć Restricted Execution ale jest przestarzałe i nieaktualizowane bodaj od wersji 2.2, czyli nie jest pewne i napisane w starym stylu klas. http://docs.python.org/lib/restricted.html
- jeśli pracujesz na linuksie, to możesz próbować stworzyć virtualne środowisko (chroot jail).
- możesz wykorzystać Jythona lub IronPythona i skorzystać z wbudowanych zabezpieczeń Javy/C#
- zmodyfikować CPython Runtime, chociaż to raczej może być czasochłonne ;)
- użyć RestricedPython z Zopa , ale z pewnymi ograniczeniami w języku. Sami twórcy też nie wiedzą, czy jest to 100% bezpieczne rozwiązanie. Blokowanie skryptu następuje na poziomie kompilacji. http://wiki.zope.org/SupportPython21/RestrictedPython
- użyć PyPy, implementacji Pythona w Pythonie :) http://codespeak.net/pypy/dist/pypy/doc/sandbox.html
- Rozwiązanie podobne do Zopa: http://www.wesnoth.org/forum/viewtopic.php?t=15593 tzn. ograniczona składnia.

Na koniec jeszcze artykuł:
http://wiki.python.org/moin/How_can_I_run_an_untrusted_Python_script_safely_%28i.e._Sandbox%29
W którm opisywane są między innymi narzędzia do automatyzacji budowy chroot jail. Część z wymienionych opcji powyżej. Artykuł niedawno został wzbogacony o nowinki w tym zakresie.
« Ostatnia zmiana: Styczeń 13, 2008, 03:53:58 wysłana przez Kosz85 »

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Styczeń 13, 2008, 13:42:53
A po co przesyłać skrypty przez sieć? Wytłumacz nam, czemu musisz tak robić? Mnie się to wydaje trochę dziwne i z założenia mało bezpieczne.

Są przypadki kiedy możliwość wykonywania dowolnego przysłanego czy wgranego do katalogu kodu skryptów można dopuścić, np.

- Kiedy użytkownik wgrywa pluginy do aplikacji. Jak ściągnął i zainstalował jakąś niebezpieczną wtyczkę to jest jego wina.
- Kiedy klient dostaje skrypty od serwera. Serwer ma prawo w pełni sterować tym co robi klient.

W pozostałych przypadkach ja bym się starał raczej przesyłać tylko jakieś dane i skrupulatnie je sprawdzał zapewniając bezpieczeństwo.

Offline Kosz85

  • Użytkownik

# Styczeń 13, 2008, 15:17:55
Na to, to i ja Ci mogę odpowiedzieć, bo zastosowań jest trochę, chociażby sytuacja, w której chcesz dać możliwość pisania skryptów użytkownikom, bez potrzeby sprawdzania każdego skryptu. Popatrz chociażby na SecondLife, czy coraz bardziej popularny serwis webowy (nie pamiętam nazwy), w którym użytkownicy sami piszą do niego aplikacje i wymieniają się nimi.
W tym wypadku nie musisz dbać o super zabezpieczenia, ale faktycznie nie chciałbyś, by ktoś Ci usunął połowę danych z dysków :P bo miał taki kaprys.

Inna sytuacja, piszesz platformę na której użytkownicy mogą sobie wywoływać skrypty. Prostym przykładem są olimpiady informatyczne, czy robot-areny, w której walczą skrypty. Zastosowań takich pomysłów jest wiele, od pisania własnych skryptów sklepikarzy NPC w grach sieciowych, po rozszerzanie funkcjonalności samego programu np. o mini gry.

Też o czymś takim myślałem, ale to jak dla mnie na razie za dużo roboty.
Pozdrawiam  ;D
Kosz85


Offline BrutalComputer

  • Użytkownik

# Styczeń 14, 2008, 22:13:31
Kosz85 - bardzo ci dziękuję. Wbrew pozorom szukałem w google (łącznie koło godziny) i nic ciekawego nie znalazłem.

Konkretnie chodziło mi o zrobienie czegoś w rodzaju gry GalaxyHack (programowane robociki). Ponadto skrypty przesyłane przez sieć przydają się do bezinwazyjnego dodawania trybów gry (ach pamiętam te rozbudowane tryby z Unreal Tournament), a także tryb Use Map Settings ze StarCraft-a.

Co do chroot jail, to byłoby trochę podejrzane, jeżeli gra prosiłaby o hasło root-a ;D
A PyPy odpada - co z wydajnością?

Ostatecznie uznałem, że użyję Lua bez bibliotek.
« Ostatnia zmiana: Styczeń 14, 2008, 22:18:45 wysłana przez BrutalComputer »