Колко сигурна е Java в сравнение с други езици?

Както при другите аспекти на киберсигурността, нивото на защитеност на езика за програмиране зависи от това какво разбираме под „сигурно“. Вярно е, че Java има по-малко идентифицирани уязвимости, отколкото някои други често използвани езици. Вярно е също така, че някои по-нови езици изглеждат по-сигурни от Java, поне на пръв поглед.

Много от дупките в сигурността, открити в Java, са резултат от нейната популярност. Широкото използване означава, че хиляди ловци на грешки са посветени на откриването на уязвимости на езика Java, което дава на Java несправедливо „предимство“ в тази област. По същия начин, подразбиращата се сигурност на някои по-нови езици, като Ruby, може да отразява използването на тяхната ниша повече от тяхната цялост.  

[Също така в JavaWorld: Има някои признаци, че разработчиците на Java се подобряват по отношение на сигурността.] 

В тази статия ще разгледаме как се класират най-често използваните програмни езици по отношение на сигурността. Ще обясня някои фактори, които правят един език по-малко сигурен от друг и защо идентифицираните уязвимости са се увеличили толкова много през последните няколко години. И накрая, ще предложа няколко начина, по които разработчиците на Java могат да намалят уязвимостите в кода.  

В крайна сметка: От гледна точка на сигурността уязвимостите, за които знаем, са по-добри от тези, които не знаем. 

Колко сигурна е Java?

Последните изследвания на уязвимостите на най-често използваните програмни езици идват от WhiteSource, платформа за сигурност и спазване на лицензите с отворен код. WhiteSource разгледа седем от най-популярните езици за програмиране с отворен код: C, Java, JavaScript, Python, Ruby, PHP и C ++. След това анализаторите използваха различни източници за класиране на езиците по броя на идентифицираните им уязвимости.

Защо с отворен код?

Решението за класиране на езиците с отворен код не е случайно. Много собственически езици - включително собствени реализации на езици с отворен код - са далеч по-малко прозрачни, когато става въпрос за уязвимости. Няма смисъл от частна компания да публикува недостатъци в сигурността на своя продукт, така че оставаме до голяма степен в тъмното относно нивото на уязвимост на тези езици. Недостатъците, за които знаем, са далеч по-управляеми от тези, които не познаваме.

Въз основа на проучването WhiteSource, най-уязвимият език за програмиране досега е C, с 47% от всички докладвани уязвимости . Това класиране няма да изненада опитни програмисти, но други резултати могат. PHP дойде в далечна секунда, със 17%, следван от Java с 12%, и JavaScript закръгля челните четири с 11%. След тези "лидери" бяха Python, C ++ и Ruby. 

Разбиране на сигурността на езика за програмиране

След това трябва да попитаме защо някои езици за програмиране са по-уязвими от други. Въз основа на изследването, което цитирах, може да заключите, че C представлява огромна заплаха за сигурността. Но помислете, че C се използва много по-дълго от всеки друг език в списъка. Както казва Стивън Търнър, пише в Journal of Technology Research, "езиците за програмиране са като генетиката, тъй като има няколко предци с общи черти, които са се размножили." 

Като най-старият език в списъка, C е разработен в напълно различна заплашителна среда от сравнително по-новите езици като Java и Ruby. Както WhiteSource посочва, относителната възраст на C означава, че има съответно по-голям обем писмен код. C също е един от езиците, използвани за основните инфраструктури като OpenSSL и ядрото на Linux. Тази комбинация от обем и централност може да доведе до по-голям брой известни уязвимости с отворен код.

Въпреки че Java се представя добре в този анализ, авторите подчертават два вида уязвимост, които особено влияят на Java. Първо, те отбелязват, че US-CERT отдавна ни предупреждава за уязвимостта на Java при регистриране на инжекционни атаки, главно чрез уеб браузъри. Такива атаки могат да бъдат предотвратени чрез валидиране или удостоверяване на подадения вход, но разработчиците често са сдържани да проверяват въведеното задълбочено от страх, че това може да направи приложенията им по-малко удобни за потребителя. 

Второ, Java е особено уязвима за доверителни експлойти, които следват уязвимости за контрол на достъпа. Въпреки че процесите на сертифициране са се подобрили от 2013 г. насам, много разработчици разчитат на сертификати от органи, които са по-малко от надеждни. Възможно е да получите сертификат, който е по-малко строг, отколкото би трябвало да бъде. US-CERT, цитиран в Journal of Technology Research, предупреждава за тази отворена врата за отдалечени нападатели, изпълняващи произволен код.

Сравнително ниската уязвимост на Java предлага интересен контраст с C. Java е разработена дълго след C, в среда, в която съзнанието за заплаха е било много по-високо, така че не е изненадващо, че Java е далеч по-сигурна. По същия начин, докато Ruby изглежда по-сигурен от Java, това може да се обясни с относителната младост на езика и неговото нишово приложение.

Уязвимостите в сигурността се увеличават - нещо като

WhiteSource съобщава за „значителен ръст на броя на известните уязвимости със сигурност с отворен код за всички езици през последните две години“. Въпреки че общият брой на уязвимостите в Java непрекъснато намалява от 2015 г., по-скорошният скок в броя на уязвимостите изисква обяснение. Можем да отдадем това увеличение на два фактора.  

Първо, има грешки, относително нова тенденция, при която хиляди технически професионалисти избират език, за да намерят уязвимости. Те представляват поне част от нарастването на уязвимостите в сигурността с отворен код. Освен това обикновено се приема, че ловците на заплахи сканират еднакво всички езици, но това не е вярно. Като един от най-често използваните езици в уеб разработката, Java е важна цел за ловците на заплахи. В този контекст класирането на Java на трето място за известни уязвимости започва да изглежда доста ниско.

Софтуерните системи също са от порядък по-сложни, отколкото преди 10 години, което е друг основен фактор за нарастващия брой уязвимости, открити в Java и други езици. В свят, в който приложенията за смартфони могат да бъдат източник на инфекция и където всяка компания трябва да има уебсайт с активиран JavaScript, не е изненадващо, че броят на уязвимостите на уебсайта се е увеличил експоненциално. Добавете към това дългосрочния недостиг на специалисти по киберсигурност и нещата започват да изглеждат мрачни за бъдещето на киберсигурността. 

Как да избегнем уязвимости в защитата на Java

Четенето на проучването за уязвимостите в сигурността може да накара сърцето ви да бие по-бързо, но не се страхувайте: разработчиците на Java са в силна позиция по отношение на сигурността на приложенията. С хиляди професионалисти, които сканират езика за уязвимости, има голяма вероятност да знаем за добра част от уязвимостите в езика. Това знание е сила.

Скорошна статия за JavaWorld предлага 13 правила за разработване на защитени Java приложения. Можете също така да намерите много статии и технически статии за сигурно внедряване на Java в специфична среда, като например облачна защита за Java и защита на уеб приложения за Java. Нека разгледаме няколко начина за намаляване на уязвимости, които може би сте пренебрегнали.

Преминаване към работен процес на DevSecOps

Един от начините за намаляване на уязвимостите в Java кода е да се премине към работен процес на DevSecOps. Този тип работен процес прави сигурността първостепенна грижа на всички етапи от процеса на разработка. Като разработчици често забравяме, че нашият софтуер се използва (а понякога и адаптира) от всички части на организацията, за която работим. Не е добре да втвърдявате уеб приложенията си срещу проникване, ако вашият маркетинг екип е решен да подкопае усилията ви. Включете всичките си екипи в процеса на разработване и се уверете, че сигурността е съображение за всеки аспект на проекта.

Оценете сигурността на работния процес

Трябва също така да разгледате добре сигурността на вашия собствен работен процес. Вашите уеб приложения може да са сигурни сами по себе си, но един от най-бързо растящите източници на уязвимост за разработчиците е самата система за разработка. Ако вашата система за разработка е хакната, тя се превръща в портал за инжектиране на зловреден код във вашия софтуер. За да избегнете това, уверете се, че използвате VPN, за да шифровате всичките си вътрешни комуникации. Също така, не забравяйте да приложите криптирано съхранение на данни.

Заключение

Въпреки че изследванията установяват, че Java е по-малко сигурна от някои други езици, разработчиците трябва да приемат тази констатация с малко сол. По-новите и по-рядко използвани езици може да изглеждат по-сигурни, но това е вероятно, защото много от техните уязвимости все още не са открити - или по-лошо, те са намерени, но не са докладвани.

Въпреки че трябва да знаете рисковете и да вземете всички разумни предпазни мерки, за да защитите вашите Java приложения, не се притеснявайте твърде много за класирането. Като разработчик на Java вие поне знаете срещу какво се изправяте.

Тази история, "Колко сигурна е Java в сравнение с други езици?" е първоначално публикуван от JavaWorld.