Co je Java?
Původně byla Java vydána v květnu 1995 a je nejpopulárnějším programovacím jazykem na světě – více než 95 % všech podnikových desktopů běží na Javě. Jave je navržen tak, aby umožnil vývojářům „napsat jednou, spustit kdekoli“ (WORA), což znamená, že kód napsaný v jazyce Java je schopen běžet na všech platformách s podporou jazyka Java bez nutnosti další rekompilace.
Java je souběžný, na třídách založený, objektově orientovaný univerzální programovací jazyk, který je proslulý svou rychlostí, bezpečností a spolehlivostí a lze jej nalézt všude, od nejpopulárnějších webových stránek po mobilní zařízení a od herních konzolí po podniková datová centra a další. Java je licencována pod GNU General Public License a je volně ke stažení.
Java ovlivnila řadu programovacích jazyků včetně C++, C#, Eiffel, Mesa, Modula-3, Objective-C a dalších a hrála důležitou roli při vývoji mnoha populárních programovacích jazyků, jako jsou Groovy, Hack, Haxe, Kotlin, PHP, Python, Scala a další. Na celém světě je více než 9 milionů vývojářů Javy, což by v případě, že by se všichni spojili a vytvořili stát, znamenalo 95. největší zemi na světě podle počtu obyvatel, nebo pokud by vytvořili město, bylo by na 20. místě na světě.
Proč byla Java původně vytvořena?
Na počátku 90. let 20. století bylo rozšíření výkonu síťových počítačů do každodenního života považováno za radikální vizi a skupina inženýrů společnosti Sun Microsystem, známá jako „Zelený tým“, vedená Jamesem Goslingem, se snažila tuto vizi uskutečnit tím, že vytvořila Javu a uvedla tak další vlnu výpočetní techniky spojením spotřebitelských zařízení a počítačů. Tento tým inženýrů Sunu poněkud předběhl svou dobu, protože se zpočátku zaměřil na interaktivní televizi a jazyk tohoto projektu se původně jmenoval Oak podle stromu před Goslingovou kanceláří, než byl přejmenován na Javu podle kávy Java.
Java sice předběhla dobu, pokud jde o interaktivní televizi, ale vznikla ve stejné době, kdy se začal prosazovat internet, a pro tuto nově vznikající technologii se dokonale hodila. V roce 1995 bylo oznámeno, že internetový prohlížeč Netscape Navigator bude obsahovat technologii Java, a od té doby hlavní webové prohlížeče obsahují schopnost spouštět aplety Java.
Stejně jako u většiny kódovacích jazyků se vývoj Javy řídil několika zásadami, které ovlivnily její vznik a další vývoj:
- Musí být „jednoduchá, objektově orientovaná a známá“.
- Musí být „robustní a bezpečná“.
- Musí být „architektonicky neutrální a přenosná“.
- Musí být „vysoce výkonný“.
- Musí být „interpretovaný, vláknový a dynamický“.
Hlavní frameworky Java a jejich bezpečnostní hrozby:
Struts
Struts je svobodný,akční open-source, model-view-controller (MVC) framework používaný pro vývoj webových aplikací Java EE. Struts byl vydán v květnu 2000, napsal jej Craig McClanahan a daroval nadaci Apache Foundation, hlavním cílem Struts je oddělení modelu (aplikační logika, která komunikuje s databází) od pohledu (stránky HTML prezentované klientovi) a kontroléru (instance, která předává informace mezi pohledem a modelem).
Hlavním bezpečnostním problémem aplikací vytvořených pomocí sady Struts je vzdálené spuštění kódu. V roce 2010 byl populární framework Struts2 stažen více než milionkrát v roce 2010 více než 18 000 organizacemi a obsahoval jedinečnou třídu slabin, která umožňovala
Zlomyslným stranám spustit libovolný kód v libovolné webové aplikaci Struts2.
Spring MVC
Spring MVC je aplikační rámec Spring, který vývojáři napsali jako reakci na to, co považovali za chyby v návrhu jiných populárních rámců, například nedostatečné oddělení vrstvy prezentace od vrstvy zpracování požadavků a vrstvy zpracování požadavků od modelu. Stejně jako Struts je i Spring MVC framework založený na akcích. V roce 2011 byl Spring MVC spolu se Struts považován za jednu z nejstahovanějších zranitelných knihoven kvůli CVE-2012-3451, tato verze byla v letech 2011-2012 stažena více než 18 milionkrát více než 43 000 organizacemi
Google Web Toolkit (GWT)
Jako open source sada nástrojů, které umožňují vývojářům vytvářet a udržovat komplexní front-endové aplikace v jazyce Java, je Google Web Toolkit (GWT) zdarma a používá jej jak společnost Google, tak tisíce vývojářů po celém světě. GWT byl navržen tak, aby umožnil produktivní vývoj vysoce výkonných webových aplikací, aniž by programátoři museli mít pokročilé znalosti o zvláštnostech prohlížeče, XMLHttpRequest a JavaScriptu. Vzhledem k tomu, že GWT vytváří kód JavaScriptu, musí být aplikace GWT zabezpečeny proti všem hrozbám, kterým aplikace JavaScriptu čelí.
Hibernate
Hibernate ORM, známý jednoduše jako Hibernate, je framework pro objektově-relační mapování v jazyce Java. Je určen k mapování tříd jazyka Java na databázové tabulky a k mapování z datových typů jazyka Java na datové typy jazyka SQL. Aplikace obsahující Hibernate mohou být ohroženy SQL injections, pokud jsou dotazy SQL nebo HQL generovány spojováním řetězců. Jedním ze způsobů ochrany proti nim je používání pojmenovaných parametrů v jakémkoli SQL nebo HQL.
OWASP ESAPI
OWASP ESAPI, OWASP Enterprise Security API, je bezplatná open source knihovna pro kontrolu zabezpečení webových aplikací, která vývojářům usnadňuje psaní aplikací s nižším rizikem, zatímco knihovny ESAPI jsou navrženy tak, aby programátorům usnadnily dodatečné přidávání zabezpečení do stávajících aplikací.
Java Server Faces (JSF)
Formalizovaný jako standard prostřednictvím Java Community Process, Java Server Faces (JSF) je specifikace jazyka Java pro vytváření komponentových uživatelských rozhraní pro webové aplikace. Podle OWASP „JSF neimplementuje vlastní model zabezpečení, ale spoléhá se na standardní zabezpečení JEE. To znamená, že s rámcem JSF lze bez jakéhokoli úsilí o integraci používat jak model zabezpečení aplikačního serveru, tak JAAS nebo jiné implementace ACL.“ Problémem zabezpečení aplikací, které implementují JSF, jsou otázky řízení přístupu a autorizace.
JSP
Stránky JavaServer Pages (JSP) jsou postaveny nad rozhraním Servlet API a umožňují vložení kódu v jazyce Java, který je zkompilován a poté spuštěn při přijetí požadavku. Běžnou hrozbou pro kód JSP je cross-site scripting (XSS).
Zranitelnosti zabezpečení Javy
Platforma Java obsahuje řadu funkcí určených ke zvýšení zabezpečení aplikací Java, přesto je pro vývojáře velmi důležité zajistit, aby jejich kód Java neobsahoval zranitelnosti již v nejranějších fázích životního cyklu vývoje softwaru. Vyvarovat se chyb v zabezpečení jazyka Java, jako je neomezování přístupu ke třídám a proměnným, nedokončování tříd, spoléhání se na package scoop a další, je nejlepším začátkem při zabezpečování kódu jazyka Java, ale je také důležité, aby se vývojáři seznámili s běžnými bezpečnostními hrozbami, kterým čelí kód jazyka Java, a také s frameworky jazyka Java. Další informace o zabezpečení kódu Javy během vývoje naleznete zde: 9 bezpečnostních chyb, kterých se musí vyvarovat každý vývojář Javy.
Vysoce rizikové bezpečnostní zranitelnosti Javy:
Více než 95 % všech podnikových desktopů na světě používá Javu, a proto má vážné následky, když se zranitelnosti v kódu Javy dostanou do výroby a jsou zneužity záškodníky. Následuje seznam některých vysoce rizikových hrozeb, kterým čelí aplikace napsané v jazyce Java:
- Vstříknutí kódu
- Vstříknutí příkazu
- Vstříknutí řetězce připojení
- Vstříknutí protokolu LDAP
- Reflected XSS
- Resource Injection
- Second Order SQL Injection
- SQL Injection
- Stored XSS
- XPath Injection
Zabezpečení Javy
Checkmarx’s CxSAST, řešení pro statickou analýzu kódu, vyniká mezi řešeními pro testování jazyka Java nejen jako řešení, které váš kód jazyka Java ochrání před problémy se zabezpečením a dodržováním předpisů, ale také jako nástroj, který přispěje k pokroku vaší organizace, pokud jde o vyspělost zabezpečení aplikací.
CxSAST spolupracuje s nástroji, které vaši vývojáři již používají, protože se bezproblémově integruje s většinou běžných vývojových programů dostupných v každé fázi SDLC. Díky funkcím CxSAST, jako je inkrementální skenování kódu a nejlepší umístění opravy, je ideální pro jakékoliv prostředí kontinuální integrace kontinuálního vývoje (CICD).
Pokud jsou v kódu Java zjištěny zranitelnosti, CxSAST nejen určí nejlepší umístění opravy, ale také nabídne vývojáři zdroje, aby pochopil, jak funguje vektor útoku, a také rady pro nápravu, které mu pomohou zajistit, aby se podobných chyb v budoucnu vyvaroval.