Vad är Java?
Java släpptes ursprungligen i maj 1995 och är det populäraste programmeringsspråket i världen, och mer än 95 % av alla företagsdatorer körs med Java. Jave är utformat för att låta utvecklare ”skriva en gång, köra var som helst” (WORA), vilket innebär att kod som skrivs i Java kan köras på alla plattformar med Java-stöd utan att det behövs någon ytterligare omkompilering.
Java är ett samtidigt, klassbaserat, objektorienterat, allmänt användbart programmeringsspråk som hyllas för att vara snabbt, säkert och tillförlitligt och som finns överallt, från de populäraste webbplatserna till mobila enheter och från spelkonsoler till datacenter i företag och vidare. Java är licensierat under GNU General Public License och kan laddas ner gratis.
Java har påverkats av ett stort antal programmeringsspråk, bland annat C++, C#, Eiffel, Mesa, Modula-3, Objective-C och andra, och har spelat en viktig roll i utvecklingen av många populära programmeringsspråk som Groovy, Hack, Haxe, Kotlin, PHP, Python, Scala och andra. Det finns över 9 miljoner Javautvecklare världen över, vilket, om de alla gick samman och bildade ett land, skulle vara det 95:e största landet i världen sett till folkmängd, eller, om de bildade en stad, skulle den ligga på samma plats som den 20:e största staden i världen.
Varför skapades Java ursprungligen?
I början av 1990-talet ansågs det vara en radikal vision att utvidga kraften hos nätverksdatorer till vardagen, och en grupp ingenjörer från Sun Microsystem, kända som ”Green Team” och ledda av James Gosling, försökte förverkliga denna vision genom att inleda nästa våg av databehandling genom att förena konsumentenheter och datorer med skapandet av Java. Detta team av Sun-ingenjörer låg något före sin tid, eftersom de inledningsvis inriktade sig på interaktiv television och projektspråket kallades ursprungligen Oak, efter trädet utanför Goslings kontor, innan det döptes om till Java efter Java-kaffet.
Men Java låg före när det gällde interaktiv tv, men det uppstod samtidigt som internet började ta fart och passade perfekt till denna nya teknik. År 1995 tillkännagavs det att webbläsaren Netscape Navigator skulle innehålla Java-teknik och sedan dess har större webbläsare införlivat möjligheten att köra Java-applets.
Som med de flesta kodningsspråk styrdes utvecklingen av Java av ett antal principer som påverkade Javas tillkomst och fortsatta utveckling:
- Det måste vara ”enkelt, objektorienterat och välbekant”.
- Det måste vara ”robust och säkert”.
- Det måste vara ”arkitekturnära och portabelt”.
- Den måste köras med ”hög prestanda”.
- Den måste vara ”tolkad, trådad och dynamisk”.
Större Java-ramverk och deras säkerhetshot:
Struts
Struts är ett kostnadsfritt, åtgärdsbaserat ramverk med öppen källkod, modell-vy-kontroller (MVC) som används för att utveckla Java EE-webbprogram. Struts släpptes i maj 2000, skrevs av Craig McClanahan och donerades till Apache Foundation. Huvudmålet bakom Struts är att separera modellen (programlogik som interagerar med en databas) från vyn (HTML-sidor som presenteras för klienten) och controllern (instans som skickar information mellan vyn och modellen).
Ett stort säkerhetsproblem för tillämpningar som byggs med Struts är exekvering av fjärrkod. Under 2010 hämtades Struts2, ett populärt Struts-ramverk, över 1 miljon gånger under 2010 av över 18 000 organisationer och innehöll en unik svaghetsklass som gjorde det möjligt för skadliga parter att utföra godtycklig kod i en Struts2-webbapplikation.
Spring MVC
Spring MVC är ett ramverk för Spring-applikationer som skrevs av Spring-utvecklare som ett svar på vad de såg som konstruktionsfel i andra populära ramverk, t.ex. otillräcklig åtskillnad mellan presentations- och begärshanteringsskiktet och mellan begärshanteringsskiktet och modellen. I likhet med Struts är Spring MVC också ett åtgärdsbaserat ramverk. År 2011 ansågs Spring MVC, tillsammans med Struts, vara ett av de mest nedladdade sårbara biblioteken på grund av CVE-2012-3451. Denna version hade laddats ner över 18 miljoner gånger mellan 2011-2012 av över 43 000 organisationer
Google Web Toolkit (GWT)
Som en uppsättning verktyg med öppen källkod som gör det möjligt för utvecklare att skapa och underhålla komplexa JavaScript-frontend-applikationer i Java är Google Web Toolkit (GWT) gratis och används av både Google och tusentals utvecklare över hela världen. GWT utformades för att möjliggöra produktiv utveckling av högpresterande webbapplikationer utan att kodaren behöver ha avancerade kunskaper om webbläsarens egenheter, XMLHttpRequest och JavaScript. Eftersom GWT producerar JavaScript-kod måste GWT-applikationer säkras mot alla hot mot JavaScript-applikationer.
Hibernate
Hibernate ORM, känd som helt enkelt Hibernate, är ett ramverk för objektrelationell mappning för språket Java. Den är utformad för att mappa Java-klasser till databastabeller och mappa från Java-datatyper till SQL-datatyper. Program som innehåller Hibernate kan hotas av SQL-injektioner om SQL- eller HQL-förfrågningar genereras genom att sammanfoga strängar. Ett sätt att skydda sig mot dessa är att använda namngivna parametrar i all SQL eller HQL.
OWASP ESAPI
OWASP ESAPI, OWASP Enterprise Security API, är ett gratis, öppen källkod, kontrollbibliotek för säkerhetskontroll av webbapplikationer som gör det enklare för utvecklare att skriva tillämpningar med lägre risk, medan ESAPI-biblioteken är utformade för att underlätta för programmerare att i efterhand lägga till säkerhet i befintliga applikationer.
Java Server Faces (JSF)
Java Server Faces (JSF) är en Java-specifikation för att bygga komponentbaserade användargränssnitt för webbapplikationer som formaliserats som standard genom Java Community Process. Enligt OWASP ”implementerar JSF inte sin egen säkerhetsmodell utan förlitar sig i stället på standard JEE-säkerhet. Detta innebär att både applikationsserverns säkerhetsmodell, JAAS eller andra ACL-implementationer kan användas med JSF-ramverket utan någon integrationsinsats”. Ett säkerhetsproblem för tillämpningar som implementerar JSF är frågor om åtkomstkontroll och auktorisering.
JSP
JavaServer Pages (JSP) bygger på Servlet API och gör det möjligt att bädda in Java-kod som kompileras och sedan körs när en begäran tas emot. Ett vanligt hot mot JSP-kod är cross-site scripting (XSS).
Sårbarheter i Javas säkerhet
Samtidigt som Javaplattformen innehåller många funktioner som är utformade för att förbättra säkerheten för Java-applikationer är det viktigt för utvecklare att se till att deras Javakod är fri från sårbarheter i de tidigaste skedena av livscykeln för programvaruutveckling. Att undvika Java-säkerhetsmisstag som att inte begränsa åtkomsten till klasser och variabler, att inte slutföra klasser, att förlita sig på package scoop och annat är den bästa platsen att börja när man ska säkra Java-kod. Det är också viktigt för utvecklare att bekanta sig med de vanligaste säkerhetshoten som Java-kod, liksom Java-ramverk, står inför. För mer information om att säkra Javakod under utveckling, läs 9 säkerhetsfel som varje Javautvecklare måste undvika här.
Högrisk Java-säkerhetssårbarheter:
Med över 95 % av alla företagsdatorer i världen som körs med Java får det allvarliga konsekvenser när sårbarheter i Javakod tar sig till produktion och utnyttjas av illvilliga parter. Nedan följer en förteckning över några av de hot med hög risk för program som är skrivna i Java:
- Kodinjektioner
- Kommandoinjektioner
- Injektion av anslutningssträngar
- Injektion av LDAP
- Reflekterad XSS
- Ressource Injection
- Second Order SQL Injection
- SQL Injection
- Stored XSS
- XPath Injection
Säkra din Java
Checkmarx’s CxSAST, en lösning för statisk kodanalys, utmärker sig bland Java-testlösningar inte bara som den lösning som kommer att hålla din Java-kod fri från säkerhets- och efterlevnadsproblem, utan också som det verktyg som kommer att bidra till din organisations framsteg när det gäller mognad för applikationssäkerhet.
CxSAST arbetar med de verktyg som dina utvecklare redan använder eftersom det sömlöst integreras med de flesta vanliga utvecklingsprogram som finns tillgängliga i varje skede av SDLC. CxSAST:s funktioner som inkrementell kodskanning och bästa korrigeringsplats gör den idealisk för alla CICD-miljöer (Continuous Integration Continuous Development).
När sårbarheter upptäcks i Javakoden kommer CxSAST inte bara att identifiera den bästa korrigeringsplatsen, utan kommer också att erbjuda resurser till utvecklaren för att förstå hur angreppsvektorn fungerar samt råd om korrigering, vilket kommer att hjälpa dem att se till att liknande misstag undviks i framtiden.