Pytanie:
Czy uruchamianie serwera CGI jako root jest zbyt niebezpieczne?
Tomas
2012-10-16 19:38:21 UTC
view on stackexchange narkive permalink

Skonfigurowałem moje Raspberry Pi z nginx i fcgiwrap jako CGI. Chciałem kontrolować porty GPIO za pomocą skryptu Python z biblioteką Rpi.GPIO. Problem polega na tym, że aby móc kontrolować porty, muszę uruchomić Pythona jako root, a więc CGI jako root.

Przeczytałem w tym pytaniu Jak dołączyć RPi. GPIO w skrypcie CGI w języku Python z lighttpd?, który uruchamia serwer CGI jako root, otwiera wielką lukę w zabezpieczeniach. Czy możesz wyjaśnić, dlaczego?

Dwa odpowiedzi:
#1
+4
Der Hochstapler
2012-10-16 19:51:36 UTC
view on stackexchange narkive permalink

Uruchamianie serwera WWW jako root jest uważane za niebezpieczne, ponieważ każda luka w zabezpieczeniach twoich aplikacji internetowych może potencjalnie pozwolić atakującemu na wykonanie kodu z uprawnieniami roota.

Jeśli twój serwer WWW działa z ograniczonymi uprawnieniami, osoba atakująca może uzyskać co najwyżej takie same uprawnienia, jakie ma serwer sieciowy.

Serwer WWW nie działa jako root, ale wywołuje serwer CGI, który działa jako root. Czy to ten sam scenariusz?
@Tomas: Istota tego jest taka, że ​​dane wejściowe użytkownika nigdy nie powinny być oceniane w kontekście głównym. Ponieważ stwarza to możliwość wykonania złośliwego kodu w tym kontekście.
Atakujący może uzyskać dalsze przywileje nawet z ograniczonym serwerem WWW, ale będzie musiał też zepsuć coś innego. Na przykład. użyć błędu httpd, aby uzyskać dostęp do jednego hosta, a następnie znaleźć złe uprawnienia, podsłuchać zaufany ruch sieciowy lub umieścić trojany w celu uzyskania roota lub dostępu do innego komputera itp. Osoby, które uważają, że bezpieczeństwo to produkt lub obwód, zwykle mają inne sieć i zawsze będą błędy, więc nie możesz też całkowicie wierzyć w ograniczone przywileje.
#2
+3
Chris Stratton
2012-10-16 20:53:24 UTC
view on stackexchange narkive permalink

Możesz zmienić własność wymaganych plików urządzenia GPIO na identyfikator użytkownika innego niż root, pod którym uruchamiasz serwer WWW i powiązane pomocniki. Co więcej, przypisz je do grupy użytkowników, w tym serwera WWW i konta testowego, i ustaw bity uprawnień grupy.

Możesz też napisać demona działającego jako użytkownik, któremu udzielono te pliki i akceptuje polecenia i zapytania, które starannie oczyszcza za pośrednictwem kanału, takiego jak gniazdo domeny unix, nazwany potok z ograniczeniami dostępu na poziomie pliku itp.

Najnowsza wersja modułu Python GPIO (od wersji 0.3.0) używa rejestrów GPIO mapowanych w pamięci przez `/ dev / mem` (zamiast / sys / class / gpio). Można zmienić prawo własności do `/ dev / mem`, ale nie byłoby to dużo bardziej bezpieczne przed uruchomieniem jako root. Twoja druga sugestia jest znacznie lepsza, ale wymaga znacznie więcej pracy.
Albo można wrócić do starej metody wykonywania GPIO ...


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...