Programování

Jak bezpečná je Java ve srovnání s jinými jazyky?

Stejně jako u ostatních aspektů kybernetické bezpečnosti závisí úroveň zabezpečení programovacího jazyka na tom, co máme na mysli pod pojmem „zabezpečený“. Je pravda, že Java má méně identifikovaných zranitelností než některé jiné běžně používané jazyky. Je také pravda, že některé novější jazyky vypadají bezpečněji než Java, alespoň na první pohled.

Mnoho bezpečnostních děr, které byly nalezeny v Javě, je výsledkem její popularity. Rozšířené použití znamená, že tisíce hledačů chyb se věnují hledání zranitelností jazyka Java, což dává Javě nespravedlivou „výhodu“ v této oblasti. Stejně tak implikovaná bezpečnost některých novějších jazyků, jako je Ruby, by mohla více odrážet jejich využití niky než jejich integritu.

[Také na JavaWorld: Existují náznaky toho, že vývojáři prostředí Java zlepšují zabezpečení.]

V tomto článku se podíváme na to, jak se nejčastěji používané programovací jazyky řadí z hlediska bezpečnosti. Vysvětlím některé faktory, díky nimž je jeden jazyk méně bezpečný než jiný, a proč se za posledních několik let tolik zvýšila zjištěná zranitelnost. Nakonec navrhnu několik způsobů, jak mohou vývojáři Java snížit chyby zabezpečení v kódu.

Sečteno a podtrženo: Z hlediska zabezpečení jsou chyby zabezpečení, o kterých víme, lepší než ty, které ne.

Jak bezpečná je Java?

Nedávný výzkum zranitelností nejčastěji používaných programovacích jazyků pochází z WhiteSource, platformy pro zabezpečení a dodržování licencí v otevřeném zdrojovém kódu. WhiteSource zkoumal sedm nejpopulárnějších programovacích jazyků open-source: C, Java, JavaScript, Python, Ruby, PHP a C ++. Analytici poté použili různé zdroje k seřazení jazyků podle počtu identifikovaných chyb zabezpečení.

Proč open source?

Rozhodnutí o pořadí jazyků open source není náhodné. Mnoho proprietárních jazyků - včetně proprietárních implementací open source jazyků - je mnohem méně transparentních, pokud jde o chyby zabezpečení. Nemá obchodní smysl, aby soukromá společnost zveřejňovala bezpečnostní chyby ve svém produktu, takže ohledně úrovně zranitelnosti těchto jazyků zůstáváme do značné míry temní. Chyby, o kterých víme, jsou mnohem lépe zvládnutelné než ty, které neznáme.

Na základě studie WhiteSource byl nejzranitelnějším programovacím jazykem zdaleka C, s 47% všech hlášených zranitelností. Toto hodnocení nepřekvapí zkušené programátory, ale jiné výsledky možná. PHP přišlo ve vzdálené vteřině se 17%, následovanou Javou s 12% a JavaScript zaokrouhluje první čtyři s 11%. Následováním těchto „vůdců“ byli Python, C ++ a Ruby.

Porozumění zabezpečení programovacího jazyka

Dále bychom se měli zeptat, proč jsou některé programovací jazyky zranitelnější než jiné. Na základě výzkumu, který jsem citoval, můžete dojít k závěru, že C představuje obrovskou bezpečnostní hrozbu. Ale vezměte v úvahu, že C se používá mnohem déle než jakýkoli jiný jazyk na seznamu. Jak říká Stephen Turner, který píše v časopise Journal of Technology Research, „programovací jazyky jsou jako genetika, protože existuje několik předků se společnými rysy, které se rozmnožily.“

Jako nejstarší jazyk na seznamu byl C vyvinut v úplně jiném prostředí hrozeb než relativně novější jazyky jako Java a Ruby. Jak zdůrazňuje WhiteSource, relativní věk C znamená, že má odpovídajícím způsobem vyšší objem psaného kódu. C je také jedním z jazyků používaných pro hlavní infrastruktury, jako je OpenSSL a linuxové jádro. Tato kombinace objemu a centrálnosti může vést k vyššímu počtu známých zranitelností otevřeného zdroje.

Ačkoli Java v této analýze funguje dobře, autoři zdůrazňují dva typy zranitelnosti, které mají obzvláště dopad na Javu. Za prvé, poznamenávají, že US-CERT nás již dlouho varoval před zranitelností Javy vůči útokům pomocí injektáže protokolu, zejména prostřednictvím webových prohlížečů. Takové útoky lze odvrátit ověřením nebo ověřením odeslaného vstupu, ale vývojáři jsou často zdrženliví, aby důkladně ověřili vstup ze strachu, že by to mohlo jejich aplikace méně uživatelsky přívětivé.

Zadruhé, Java je obzvláště citlivá na zneužití důvěry, která následují po zranitelnostech řízení přístupu. Ačkoli se certifikační procesy od roku 2013 zlepšily, mnoho vývojářů spoléhá na certifikáty od úřadů, které jsou méně než spolehlivé. Je možné získat certifikát, který je méně přísný, než by měl být. US-CERT, citovaný v Journal of Technology Research, varuje před těmito otevřenými dveřmi pro vzdálené útočníky provádějící libovolný kód.

Relativně nízká zranitelnost Java nabízí zajímavý kontrast k C. Java byla vyvinuta dlouho po C, v prostředí, kde bylo vědomí ohrožení mnohem vyšší, takže není divu, že Java je mnohem bezpečnější. Podobně, i když se zdá, že Ruby je bezpečnější než Java, lze to vysvětlit relativní mládeží jazyka a jeho specializovanou aplikací.

Zranitelnosti zabezpečení jsou na vzestupu - tak nějak

WhiteSource uvádí „zásadní nárůst počtu známých bezpečnostních slabin zabezpečení ve všech jazycích za poslední dva roky“. Ačkoli se celkový počet zranitelných míst v Javě od roku 2015 stabilně snižuje, novější nárůst počtu zranitelných míst vyžaduje vysvětlení. Toto zvýšení můžeme připsat dvěma faktorům.

Za prvé, existují odměny za chyby, což je relativně nový trend, kdy tisíce technologických profesionálů volí jazyk a hledají zranitelná místa. Ty představují alespoň část nárůstu zranitelností zabezpečení otevřeného zdroje. Navíc se obecně předpokládá, že lovci hrozeb skenují všechny jazyky stejně, ale to není pravda. Jako jeden z nejčastěji používaných jazyků při vývoji webových aplikací je Java významným cílem lovců hrozeb. V této souvislosti začíná hodnocení Java na třetím místě známých zranitelností vypadat docela nízko.

Softwarové systémy jsou také řádově složitější než před 10 lety, což je další hlavní faktor zvyšujícího se počtu zranitelných míst v Javě a dalších jazycích. Ve světě, kde mohou být aplikace pro smartphony zdrojem infekce a kde každá společnost musí mít web podporující JavaScript, není překvapením, že počet zranitelností webových stránek exponenciálně vzrostl. Když k tomu přidáme dlouhodobý nedostatek odborníků v oblasti kybernetické bezpečnosti, začne to vypadat hrozivě pro budoucnost kybernetické bezpečnosti.

Jak se vyhnout zranitelnostem zabezpečení Java

Čtení výzkumu o bezpečnostních zranitelnostech vám může zrychlit srdce, ale nebojte se: vývojáři Java mají silnou pozici, pokud jde o zabezpečení aplikací. S tisíci profesionálů, kteří skenují jazyk kvůli zranitelnostem, existuje velká šance, že víme o dobrém podílu zranitelností v jazyce. To poznání je síla.

Nedávný článek o JavaWorld nabídl 13 pravidel pro vývoj zabezpečených aplikací Java. Můžete také najít spoustu článků a dokumentů o bezpečné implementaci prostředí Java v konkrétních prostředích, jako je cloudové zabezpečení pro Javu a zabezpečení webových aplikací pro Javu. Zvažme několik způsobů, jak snížit zranitelnosti, které jste možná přehlédli.

Přesuňte se na pracovní postup DevSecOps

Jedním ze způsobů, jak snížit chyby zabezpečení v kódu Java, je přechod na pracovní postup DevSecOps. Díky tomuto typu pracovního postupu je zabezpečení prvořadým zájmem ve všech fázích procesu vývoje. Jako vývojáři často zapomínáme, že náš software používají (a někdy i přizpůsobují) všechny části organizace, pro které pracujeme. Pokud je váš marketingový tým odhodlán podkopat vaše úsilí, není dobré zpochybňovat vaše webové aplikace proti vniknutí. Zahrňte všechny své týmy do procesu vývoje a ujistěte se, že bezpečnost je v úvahu pro všechny aspekty projektu.

Vyhodnoťte zabezpečení pracovního postupu

Měli byste se také dobře podívat na zabezpečení vlastního pracovního postupu. Vaše webové aplikace mohou být samy o sobě bezpečné, ale jedním z nejrychleji rostoucích zdrojů zranitelnosti pro vývojáře je samotný vývojový systém. Pokud je váš vývojový systém napaden, stane se portálem pro vkládání škodlivého kódu do vašeho softwaru. Abyste tomu předešli, ujistěte se, že k šifrování veškeré své interní komunikace používáte VPN. Nezapomeňte také implementovat šifrované úložiště dat.

Závěr

Ačkoli výzkum zjistil, že Java je méně bezpečná než v některých jiných jazycích, vývojáři by měli toto zjištění brát s trochou soli. Novější a méně běžně používané jazyky se mohou zdát bezpečnější, ale je to pravděpodobné, protože mnoho jejich zranitelných míst ještě nebylo objeveno - nebo ještě hůře, byly nalezeny, ale nebyly hlášeny.

I když byste měli znát rizika a přijmout veškerá přiměřená opatření k zabezpečení svých aplikací Java, o hodnocení se příliš nestarejte. Jako vývojář Java alespoň víte, proti čemu stojíte.

Tento příběh: „Jak bezpečná je Java ve srovnání s jinými jazyky?“ byl původně publikován společností JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found