Jak przekonać mojego administratora, że ​​Java ON A SERVER nie jest niebezpieczna per se?

13

Aplikacja

Mamy małą aplikację Java, która wykorzystuje niektóre trasy wielbłądów do pobierania przesłanych plików z serwera WWW, przetwarzania ich i wysyłania wiadomości e-mail z wynikami.

Serwer, na którym działała ta aplikacja, został wycofany z eksploatacji. Na razie musimy go uruchomić na słabo wyposażonym sprzęcie, ponieważ nie mogę przekonać administratora do zainstalowania środowiska JRE na serwerze internetowym (który jest tak naprawdę serwerem wielofunkcyjnym).

Strach

Sam jestem inżynierem aplikacji Java, piszę kod JEE dla żywych, obsługujących transakcji B2B wartych dziesiątki tysięcy euro tygodniowo. Ale mam problemy ze znalezieniem wiarygodnych źródeł, które obalą mit, że java jest niepewna per se.

Dwa główne argumenty administratora przeciwko instalacji środowiska JRE:

  1. Aplikacje Java pochłaniają całą moją pamięć RAM
  2. Java jest pełna luk w zabezpieczeniach

Prawda?

Jeśli chodzi o aplikacje Java zjadające pamięci RAM. Cóż ... Powiedziałbym, że musimy ustawić odpowiednie wartości dla Xmx. Gotowy.

Teraz istnieje wiele źródeł mówiących o wielu lukach w Javie. Źródła te są głównie skierowane do użytkowników końcowych korzystających z określonego systemu operacyjnego firmy z Redmond / USA. AFAIK może być prawdą, że w przypadku niepakowanych wersji wtyczki Java Browser Plugin, która jest skonfigurowana do automatycznego uruchamiania wszystkich apletów, istnieje duże prawdopodobieństwo, że padnie ofiarą dysku z powodu infekcji. Podobnie jak ryzyko zachorowania na choroby przenoszone drogą płciową podczas seksu bez zabezpieczenia z każdym w pociągu podczas dojazdów do pracy.

Ale nie mogłem znaleźć nikogo w interwebzie na całym świecie, który mówi o aplikacjach serwerowych lub środowiskach JRE działających bezgłowo. To zupełnie inna sprawa.

A może coś tu brakuje?

[edycja 28.08.2014] Wyjaśnienie: Martwię się tylko o Javę na serwerach. Nie dbam o problemy z wtyczką Java i / lub konkretnym oprogramowaniem opracowanym w Javie.

lajuette
źródło
7
Jeśli sprzęt, na którym jest włączony, jest wyraźnie słabo zasilany i powoduje problemy, to obok obaw SA z pewnością masz uzasadnienie biznesowe do uzyskania nowego sprzętu.
user9517
4
Przekonaj go, że to nie kod Twojej firmy, który właśnie widział na thedailywtf.com.
Michael Hampton
9
Java miała trudny rok w 2013 roku. Była nawet strona internetowa śledząca exploity 0-day, które właśnie się rozwijały. Od połowy ubiegłego roku nie było żadnych exploitów 0-dniowych, ale naukowcy wciąż znaleźli 107 Java CVE w tym roku. To daleka droga od „bezpiecznego”.
Chris S
5
Czy mogę wyzwolić błąd JVM, dostarczając złośliwe dane do Twojej aplikacji? Lepiej w to uwierz. I wiele z tych CVE dotyczy uruchamiania Java na serwerach, a nie zwykłej wtyczki przeglądarki pulpitu Windows.
Michael Hampton
3
@lajuette Podałem link z numerem 107 z jakiegoś powodu - jeśli kliknąłeś go na wszystkie pytania, na które właśnie zadałeś odpowiedź. Niektóre z tych 107 dotyczą implementacji innych niż Oracle, na przykład Dalvak Androida, ale zdecydowana większość dotyczy implementacji Oracle. Java nie jest z natury niepewna, ale środowisko JRE firmy Sun / Oracle jest pełne problemów. PHP, Perl, Ruby również mają luki - żadna z nich nie jest idealna. Nie mogę powiedzieć, czy Java jest lepsza czy gorsza od tych obecnie, ale w ciągu ostatniego roku zdecydowanie był to biczujący chłopiec z branży bezpieczeństwa.
Chris S

Odpowiedzi:

18

Dodatkowa powierzchnia zabezpieczeń, którą Java umieszcza w twoim środowisku, jest złożona i ważne jest, aby jej nie ignorować ani nie próbować upraszczać.

Po pierwsze, istnieje okropny rekord JRE za błędy w zabezpieczeniach. Trudno wskazać konkretny, a to jest przerażające - błędy to w przeważającej mierze nieokreślone podatności na nieokreślone wektory.

Kiedy jako konsultant ds. Bezpieczeństwa czytam takie klauzule, jak „zezwala na atakującego zdalnego” bez dalszych kwalifikacji co do ich znaczenia, widzę, że może to bardzo dobrze oznaczać, że pewne parametry wchodzące w pewną funkcję mogą wywołać stan zagrożenia, nawet jeśli używają tylko kodu, który napisałeś. A ponieważ nie są one określone, nie wiesz, czy to dotyczyło Ciebie.

Co więcej, kanoniczne środowisko JRE opublikowane przez Oracle ma kwartalny cykl aktualizacji krytycznych aktualizacji, w tym prawie wszystkich aktualizacji bezpieczeństwa. W ciągu ostatnich czterech lat utworzyli łaty poza cyklem 11 razy. Oznacza to, że istnieje możliwość narażenia się na błąd bezpieczeństwa do trzech miesięcy po zgłoszeniu, zanim będzie można go naprawić.

Istnieją inne problemy z Javą, o których tu nie będę wspominał, ale tak naprawdę wydaje się, że istnieje uzasadniona obawa, szczególnie w przypadku serwera wielofunkcyjnego. Jeśli musisz uruchomić takie rzeczy, powinieneś przynajmniej utworzyć maszynę wirtualną do jednego celu i odizolować ją od innych rzeczy.

W szczególności, jeśli w środowisku JRE znajduje się pilot, który pozwala atakującemu uzyskać RCE, i inny w PHP, który robi to samo, i inny w Ruby, który robi to samo, musisz załatać wszystkie trzy. Wszystkie trzy wydają się nieco prawdopodobne, ponieważ te rzeczy idą, a atakujący może wybrać najbardziej dogodne, a następnie posiadać cały serwer. Właśnie dlatego powinniśmy używać maszyn wirtualnych do oddzielania oprogramowania, w szczególności błędnego oprogramowania, takiego jak frameworki zarządzanego języka, a zwłaszcza tych, które łączą poprawki zabezpieczeń tylko cztery razy w roku i są własnością dostawcy, który twierdzi wbrew wszelkim dowodom, że są wzorem bezpieczeństwo.

Aby zaktualizować, oto niektóre CVE, które wybrałem z połączonego wyszukiwania CVE ChrisS, w celach demonstracyjnych.

I mój ulubiony, odkąd tam byłem:

Nawiasem mówiąc, to tylko małe próbkowanie.

Falcon Momot
źródło
6

Aplikacje Java pochłaniają całą moją pamięć RAM

Alternatywą dla korzystania z pamięci RAM jest marnowanie pamięci RAM. Nie możesz zapisać tego na później.

Java jest pełna luk w zabezpieczeniach

To naprawdę nie ma znaczenia, ponieważ nie zamierzasz narażać JVM na świat. Zakładam, że nie będziesz uruchamiał żadnych wrogich programów, a jeśli tak, Java jest bezpieczniejsza niż większość innych języków. Liczy się to, czy twoje aplikacje mają luki.

David Schwartz
źródło
3
Okej, więc rozum nie działa. Jakie inne narzędzia znajdują się w twoim zestawie narzędzi perswazji? Czy masz jakieś zardzewiałe szczypce?
David Schwartz
1
@FalconMomot Tak, jądro może go używać do buforowania plików. Jądro może zabrać pamięć z JVM, jeśli ma lepsze wykorzystanie. Tak właściwie działa każdy nowoczesny system operacyjny. Alternatywą dla korzystania z pamięci RAM jest marnowanie pamięci RAM. System operacyjny ma menedżera pamięci, który zapewnia, że ​​pamięć RAM trafi do najlepszego celu. Argumenty takie jak „Aplikacje Java pochłaniają całą moją pamięć RAM” prawie zawsze wskazują na administratora, który nie rozumie, w jaki sposób nowoczesne systemy operacyjne używają pamięci RAM.
David Schwartz
1
Jeśli JVM nie zwolni pamięci, musi ją zamienić na przestrzeń wymiany (jeśli ma taką), aby to zrobić, co jest powolne. Jądro nie może wywoływać śmietnika. Również buforowanie plików ma zwykle niższy priorytet niż przydziały przestrzeni użytkownika, nawet jeśli są rzadko wykorzystywane (tyle, ile jądro może stwierdzić, że są rzadko wykorzystywane, co nie jest zbyt dobre).
Falcon Momot
3
Chcę wiedzieć więcej o tym, jak Linux może jednocześnie używać bloku pamięci RAM do buforowania, podczas gdy proces nadal uważa, że ​​jest jego właścicielem. Nigdy wcześniej o tym nie słyszałem.
Michael Hampton
1
@ FalconMomot Jądro nie musi wiedzieć, że pamięć RAM jest „wolna”. Jądro zawsze kontroluje użycie pamięci RAM, chyba że aplikacja blokuje strony. Musi tylko sprawić, że zmapowane strony zostaną odrzucone, aby odzyskać pamięć RAM. Jeśli dane są niezmodyfikowane i nieużywane przez pewien czas, a przepustowość we / wy nie jest nasycona, może oportunistycznie zapisać je do zamiany, dzięki czemu strony zostaną odrzucone, co pozwoli na odzyskanie pamięci RAM, gdy tylko będzie lepiej wykorzystywane dla tego. (Ta przestrzeń nie jest wystarczająco duża, aby wyjaśnić, jak działa nowoczesne zarządzanie pamięcią, ale wydaje się, że masz bardzo częste nieporozumienia.)
David Schwartz
2

Zatrudnij firmę do wykonania analizy statycznej Twojego programu. Na przykład Veracode to firma, z której korzystałem w przeszłości do kontroli bezpieczeństwa kodu programów Java.

Oczywiście rozliczaj kod opłat swojego zespołu administracyjnego.

mfinni
źródło
1

Wyjaśnij, że wszystkie inne języki (lub maszyny wirtualne) mogą być zagrożone przez kod, który jest na nich wdrażany, tak jak w Javie. Jeśli uważa, że ​​inne platformy są z natury bezpieczne (lub bardziej bezpieczne niż Java) bez prawidłowego rozwiązania kwestii bezpieczeństwa, to ma złudzenia.

Twoja firma oczywiście zainwestowała w zatrudnienie programisty Java, dlaczego sysadmin odmawia wsparcia technologii, z której firma zdecydowała się skorzystać?

Przerzuciłbym pytanie i zapytałbym go, jakie alternatywy proponuje i w jaki sposób są one bezpieczniejsze niż najnowsza dostępna wersja JRE serwera, pod bardzo konkretnymi warunkami. W międzyczasie staraj się pokazać, że rozumiesz swoją technologię, możliwą powierzchnię ataku i że starałeś się ją zminimalizować (np. Niepotrzebne ramy, kod innej firmy itp.). Zweryfikuj kod, poszukaj luk opublikowanych dla środowisk, na których polegasz w ciągu ostatnich X lat, porównaj go z innymi językami / ramami (pamiętaj, aby uwzględnić również udział w rynku, niejasne struktury bez opublikowanych luk nic nie znaczą).

Nie możemy wiedzieć, jak przebiegła cała konwersja między wami dwoma, ale gdyby to były jego dwa argumenty, uważam, że macie do czynienia z młodszym administratorem systemu. Czy ma doświadczenie z serwerami aplikacji Java? Być może czuje się niekomfortowo z technologią i boi się wprowadzić coś do produkcji bez dogłębnego zrozumienia (wtedy dobre nastawienie sysadmin).

Giovanni Tirloni
źródło
Dzięki. Nie mówimy o firmie. Raczej stowarzyszenie non-profit. Nasz sysadmin ma lekarza w dziedzinie IT i marketingu, ale nie jest „prawdziwym” sysadminem. I tak: uważam, że boi się Javy, której nie do końca rozumie.
lajuette