System z wtyczkami - jak zabezpieczyć się przed złośliwym kodem?

0

Cześć. Uczestniczę w projekcie, który ma za zadania stworzyć system, który ma z zasady być rozszerzalny. System będzie stworzony w javie, a rozszerzalność ma zapewnić system wtyczek. System nie wie co dana wtyczka ma robić, gdy sparsuje odpowiednią komendę, to wie, którą wtyczkę ma uruchomić. Wtyczka na wejściu dostaje dane w jsonie w określonym formacie, na wyjściu zwraca również jsona w określonym formacie. Wtyczkę dostarcza zainteresowany rozwojem systemu developer X. Tyle z teorii. Zastanawiam się w jaki sposób należy rozwiązać sposób tworzenia wtyczek by zabezpieczyć się przed wykonywaniem złośliwych komend (pisanie po dysku, odczyt i zapis bazy danych, łączenie się z internetem i przesyłanie danych), aby jednocześnie developerowi X nie wiązać rąk w kwestii łatwości tworzenia rzeczonych wtyczek? Nie jestem javowcem, więc po prostu nie wiem czy istnieje już jakiś sprawdzony sposób? Mi na myśl przyszły:

  • javowe serwisy spi (znam tylko z teorii, nie wgłębiałem się)
  • skrypty działające w tle i startujące razem z systemem, ale w jakiś sposób (jaki?) odizolowane od zewnętrznego świata, by nie mogły wyrządzić krzywdy
  • skrypty napisane w jakimś DSL-u lub Lua, sparsowane i uruchamiane przez system

Z góry dzięki za wszelkie podpowiedzi

0

A może na dzień dobry podpisywanie wtyczek certyfikatem. Następnie można nakazać wtyczce "samookreślenie się" co do wymaganych funkcjonalności np. połączenia z bazą, zewnętrznym serwisem itp. i uruchamiać ją jako osobny proces w odpowiednio skonfigurowanym sandboxie (z sandboxa łatwo uciec, ale to już wymaga pewnej wprawy). Skoro komunikacja idzie po JSonie to można pokusić się o uruchamianie wtyczek w kontenerze dockera. Wtedy możemy odpowiednio przyciąć prawa do głównej maszyny.

0

Jeśli system będzie obsługiwany przez użytkownika, to przed pierwszym uruchomieniem danej wtyczki, niech uzyska informację o tym czego dana wtyczka wymaga.
Czyli podobny pomysł co napisał @Koziołek. Każda wtyczka będzie musiała podać szereg uprawnień z których chce skorzystać (dostęp do bazy, dostępu do sieci etc.). Lista to wyświetla się userowi przy pierwszej próbie uruchomienia danej wtyczki (nie po uruchomieniu!), a następnie user decyduje, czy chce uruchomić ten plugin, czy też nie.
Myślę, że takie rozwiązanie jest bezpieczne i głównym zabezpieczeniem jest tutaj czynnik ludzki. Po stronie aplikacji należy w tym przypadku zablokowanie wtyczki do czasu zezwolenia na jej uruchomienie przez usera.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0