Jak bezpieczna jest Java w porównaniu z innymi językami?

Podobnie jak w przypadku innych aspektów cyberbezpieczeństwa, poziom bezpieczeństwa języka programowania zależy od tego, co rozumiemy przez „bezpieczny”. Prawdą jest, że Java ma mniej zidentyfikowanych luk w zabezpieczeniach niż niektóre inne powszechnie używane języki. Prawdą jest również, że niektóre nowsze języki wydają się bezpieczniejsze niż Java, przynajmniej na pierwszy rzut oka.

Wiele luk w zabezpieczeniach, które znaleziono w Javie, jest wynikiem jej popularności. Powszechne użycie oznacza, że ​​tysiące poszukiwaczy błędów poświęca się znajdowaniu luk w zabezpieczeniach języka Java, co daje Javie nieuczciwą „przewagę” w tej dziedzinie. Podobnie domniemane bezpieczeństwo niektórych nowszych języków, takich jak Ruby, może bardziej odzwierciedlać ich niszowe wykorzystanie niż integralność.  

[Również w JavaWorld: Istnieją pewne oznaki, że programiści Java są coraz lepsi pod względem bezpieczeństwa.] 

W tym artykule przyjrzymy się, jak pod względem bezpieczeństwa plasują się najczęściej używane języki programowania. Wyjaśnię kilka czynników, które sprawiają, że jeden język jest mniej bezpieczny od drugiego, i dlaczego zidentyfikowane luki w zabezpieczeniach wzrosły tak bardzo w ciągu ostatnich kilku lat. Na koniec zasugeruję kilka sposobów, w jakie programiści Java mogą zmniejszyć luki w kodzie.  

Konkluzja: Z punktu widzenia bezpieczeństwa luki, o których wiemy, są lepsze niż te, których nie znamy. 

Jak bezpieczna jest Java?

Niedawne badania dotyczące luk w najczęściej używanych językach programowania pochodzą z WhiteSource, platformy o otwartym kodzie źródłowym, zapewniającej bezpieczeństwo i zgodność z licencjami. WhiteSource przyjrzał się siedmiu najpopularniejszym językom programowania typu open source: C, Java, JavaScript, Python, Ruby, PHP i C ++. Następnie analitycy korzystali z różnych źródeł, aby uszeregować języki według liczby zidentyfikowanych luk.

Dlaczego open source?

Decyzja o uszeregowaniu języków open source nie jest przypadkowa. Wiele zastrzeżonych języków - w tym zastrzeżone implementacje języków open source - jest znacznie mniej przejrzystych, jeśli chodzi o luki w zabezpieczeniach. Publikowanie luk w zabezpieczeniach w swoim produkcie nie ma sensu biznesowego, więc pozostajemy w dużej mierze w ciemności, jeśli chodzi o poziom luk w zabezpieczeniach tych języków. Wady, o których wiemy, są znacznie łatwiejsze do opanowania niż te, których nie znamy.

Na podstawie badania WhiteSource, zdecydowanie najbardziej wrażliwym językiem programowania był C, z 47% wszystkich zgłoszonych luk . Ten ranking nie zaskoczy doświadczonych programistów, ale inne wyniki mogą. Na odległym drugim miejscu uplasował się PHP z 17%, następnie Java z 12%, a JavaScript dopełnia pierwszą czwórkę z 11%. Tymi „liderami” były Python, C ++ i Ruby. 

Zrozumienie bezpieczeństwa języka programowania

Następnie powinniśmy zapytać, dlaczego niektóre języki programowania są bardziej podatne na ataki niż inne. Na podstawie cytowanych przeze mnie badań możesz dojść do wniosku, że C stanowi ogromne zagrożenie dla bezpieczeństwa. Ale weź pod uwagę, że C jest używany znacznie dłużej niż jakikolwiek inny język na liście. Jak ujął to Stephen Turner w Journal of Technology Research, „języki programowania są jak genetyka, ponieważ istnieje kilku przodków o wspólnych cechach, które się rozmnożyły”. 

Jako najstarszy język na liście, C został opracowany w zupełnie innym środowisku zagrożeń niż stosunkowo nowsze języki, takie jak Java i Ruby. Jak wskazuje WhiteSource, względny wiek C oznacza, że ​​ma odpowiednio większą ilość napisanego kodu. C jest również jednym z języków używanych w głównych infrastrukturach, takich jak OpenSSL i jądro Linuksa. To połączenie wielkości i centralności może prowadzić do większej liczby znanych luk w zabezpieczeniach open source.

Chociaż Java dobrze sobie radzi w tej analizie, autorzy zwracają uwagę na dwa typy luk, które szczególnie dotyczą Javy. Po pierwsze, zauważają, że US-CERT od dawna ostrzegał nas o podatności Javy na ataki polegające na wstrzykiwaniu dziennika, głównie za pośrednictwem przeglądarek internetowych. Takim atakom można zapobiec poprzez walidację lub uwierzytelnianie przesłanych danych wejściowych, ale programiści często są niechętni dokładnemu sprawdzaniu poprawności danych wejściowych z obawy, że może to uczynić ich aplikacje mniej przyjaznymi dla użytkownika. 

Po drugie, Java jest szczególnie podatna na zaufanie exploitom, które wykorzystują luki w kontroli dostępu. Chociaż procesy certyfikacji poprawiły się od 2013 r., Wielu programistów polega na certyfikatach wystawionych przez organy, które są mniej niż wiarygodne. Możliwe jest uzyskanie certyfikatu, który jest mniej rygorystyczny, niż powinien. US-CERT, cytowany w Journal of Technology Research, ostrzega przed tymi otwartymi drzwiami dla zdalnych napastników wykonujących dowolny kod.

Stosunkowo niska luka w zabezpieczeniach Javy stanowi interesujący kontrast z C. Java została opracowana długo po C, w środowisku, w którym świadomość zagrożeń była znacznie wyższa, więc nie jest zaskoczeniem, że Java jest znacznie bezpieczniejsza. Podobnie, chociaż Ruby wydaje się być bezpieczniejszy niż Java, można to wytłumaczyć względną młodością języka i jego niszową aplikacją.

Narastają luki w zabezpieczeniach - w pewnym sensie

WhiteSource donosi o „znacznym wzroście liczby znanych luk w zabezpieczeniach oprogramowania typu open source we wszystkich językach w ciągu ostatnich dwóch lat”. Chociaż ogólna liczba luk w zabezpieczeniach Javy stale spada od 2015 r., Niedawny wzrost liczby luk wymaga wyjaśnienia. Wzrost ten możemy przypisać dwóm czynnikom.  

Po pierwsze, istnieją nagrody za błędy, stosunkowo nowy trend, w którym tysiące specjalistów od technologii wybiera język, aby znaleźć luki w zabezpieczeniach. Odpowiadają one przynajmniej częściowo za wzrost liczby luk w zabezpieczeniach oprogramowania typu open source. Ponadto ogólnie przyjmuje się, że łowcy zagrożeń skanują wszystkie języki jednakowo, ale to nieprawda. Jako jeden z najczęściej używanych języków w tworzeniu stron internetowych, Java jest ważnym celem dla łowców zagrożeń. W tym kontekście trzecie miejsce w rankingu Javy pod względem znanych luk w zabezpieczeniach zaczyna wyglądać dość nisko.

Systemy oprogramowania są również o rząd wielkości bardziej skomplikowane niż 10 lat temu, co jest kolejnym ważnym czynnikiem wpływającym na rosnącą liczbę luk w zabezpieczeniach w Javie i innych językach. W świecie, w którym aplikacje na smartfony mogą być źródłem infekcji, a każda firma musi mieć witrynę obsługującą JavaScript, nie jest zaskoczeniem, że liczba luk w zabezpieczeniach witryn wzrosła wykładniczo. Dodajmy do tego długoterminowy niedobór specjalistów ds. Cyberbezpieczeństwa, a sprawy w przyszłości zaczynają wyglądać ponuro. 

Jak uniknąć luk w zabezpieczeniach Java

Czytanie badań dotyczących luk w zabezpieczeniach może przyspieszyć bicie serca, ale nie bój się: programiści Java mają silną pozycję, jeśli chodzi o bezpieczeństwo aplikacji. Ponieważ tysiące profesjonalistów skanuje język w poszukiwaniu luk, jest duża szansa, że ​​wiemy o dużej części luk w tym języku. Ta wiedza to potęga.

Niedawny artykuł JavaWorld zawierał 13 zasad tworzenia bezpiecznych aplikacji Java. Można również znaleźć wiele artykułów i oficjalnych dokumentów na temat bezpiecznego wdrażania języka Java w określonych środowiskach, takich jak zabezpieczenia w chmurze dla języka Java i zabezpieczenia aplikacji internetowych dla języka Java. Rozważmy kilka sposobów ograniczenia luk w zabezpieczeniach, które mogłeś przeoczyć.

Przejdź do przepływu pracy DevSecOps

Jednym ze sposobów zmniejszenia luk w kodzie Java jest przejście do przepływu pracy DevSecOps. Ten rodzaj przepływu pracy sprawia, że ​​bezpieczeństwo jest najważniejszym problemem na wszystkich etapach procesu tworzenia. Jako programiści często zapominamy, że nasze oprogramowanie jest używane (a czasem adaptowane) przez wszystkie części organizacji, dla których pracujemy. Zabezpieczanie aplikacji internetowych przed włamaniami nie jest dobre, jeśli Twój zespół marketingowy jest zdeterminowany, aby podkopać Twoje wysiłki. Włącz wszystkie swoje zespoły w proces programowania i upewnij się, że bezpieczeństwo jest brane pod uwagę w każdym aspekcie projektu.

Oceń bezpieczeństwo przepływu pracy

Powinieneś także dobrze przyjrzeć się bezpieczeństwu własnego przepływu pracy. Twoje aplikacje internetowe mogą być same w sobie bezpieczne, ale jednym z najszybciej rosnących źródeł luk w zabezpieczeniach dla programistów jest sam system programistyczny. Jeśli Twój system programistyczny zostanie zhakowany, staje się portalem służącym do wprowadzania złośliwego kodu do oprogramowania. Aby tego uniknąć, upewnij się, że używasz VPN do szyfrowania całej komunikacji wewnętrznej. Pamiętaj też, aby zaimplementować zaszyfrowane przechowywanie danych.

Wniosek

Chociaż badania pokazują, że Java jest mniej bezpieczna niż niektóre inne języki, programiści powinni potraktować to z przymrużeniem oka. Nowsze i rzadziej używane języki mogą wydawać się bezpieczniejsze, ale jest to prawdopodobnie spowodowane tym, że wiele z ich luk w zabezpieczeniach nie zostało jeszcze odkrytych - lub, co gorsza, znaleziono je, ale nie zgłoszono.

Chociaż powinieneś znać ryzyko i podjąć wszelkie rozsądne środki ostrożności, aby zabezpieczyć swoje aplikacje Java, nie przejmuj się zbytnio rankingami. Jako programista Java przynajmniej wiesz, z czym masz do czynienia.

Ta historia „Jak bezpieczna jest Java w porównaniu z innymi językami?” został pierwotnie opublikowany przez JavaWorld.