Mi a Java?
A eredetileg 1995 májusában megjelent Java a világ legnépszerűbb programozási nyelve, a vállalati asztali számítógépek több mint 95%-a Java nyelven fut. A Javát úgy tervezték, hogy a fejlesztők “egyszer írjanak, bárhol fussanak” (WORA), ami azt jelenti, hogy a Java nyelven írt kód minden Java-támogatással rendelkező platformon futtatható, további újbóli fordítás nélkül.
A Java egy konkurens, osztályalapú, objektumorientált, általános célú programozási nyelv, amelyet gyors, biztonságos és megbízható voltáért ünnepelnek, és amely a legnépszerűbb weboldalaktól a mobileszközökig, a játékkonzoloktól a vállalati adatközpontokig és azon túl mindenhol megtalálható. A Java a GNU General Public License licenc alatt áll, és ingyenesen letölthető.
A Java számos programozási nyelv, köztük a C++, C#, Eiffel, Mesa, Modula-3, Objective-C és mások hatása alatt áll, és fontos szerepet játszott számos népszerű programozási nyelv, például a Groovy, Hack, Haxe, Kotlin, PHP, Python, Scala és mások fejlesztésében. Világszerte több mint 9 millió Java-fejlesztő van, ami, ha mindannyian összefognának és egy országot alkotnának, a világ 95. legnagyobb népességű országa lenne, vagy ha egy várost hoznának létre, holtversenyben a világ 20. legnagyobb városa lenne.
Miért hozták létre eredetileg a Javát?
A kilencvenes évek elején a hálózati számítástechnika erejének kiterjesztése a mindennapi életre radikális víziónak számított, és a Sun Microsystem mérnökeinek egy csoportja, a “Zöld csapat” néven ismert James Gosling vezetésével ezt a víziót igyekezett megvalósítani azzal, hogy a Java létrehozásával a fogyasztói eszközök és számítógépek egyesítésével a számítástechnika következő hullámát indította el. Ez a Sun-mérnökökből álló csapat kissé megelőzte korát, mivel erőfeszítéseik középpontjában kezdetben az interaktív televíziózás állt, és a projekt nyelvét eredetileg Oaknak nevezték el, a Gosling irodája előtt álló fa után, mielőtt a Java kávé után átnevezték volna Java-ra.
Míg a Java az interaktív televíziózás terén megelőzte a korszakot, az internet fellendülésével egy időben jelent meg, és tökéletesen illeszkedett ehhez a feltörekvő technológiához. 1995-ben bejelentették, hogy a Netscape Navigator internetböngészőbe beépítik a Java technológiát, és azóta a nagyobb webböngészők beépítették a Java appletek futtatásának képességét.
A legtöbb kódolási nyelvhez hasonlóan a Java fejlesztését is számos alapelv vezérelte, amelyek befolyásolták a Java létrehozását és folyamatos fejlesztését:
- “Egyszerűnek, objektumorientáltnak és ismerősnek” kell lennie.
- “Robusztusnak és biztonságosnak” kell lennie.
- “Architektúrasemlegesnek és hordozhatónak” kell lennie.
- “nagy teljesítményűnek” kell lennie.
- “értelmezettnek, szálkezeltnek és dinamikusnak” kell lennie.
Főbb Java keretrendszerek és biztonsági fenyegetéseik:
Struts
A Struts egy ingyenes,akcióalapú, nyílt forráskódú, modell-nézet-vezérlő (MVC) keretrendszer, amelyet Java EE webes alkalmazások fejlesztésére használnak. A 2000 májusában megjelent Struts-ot Craig McClanahan írta és az Apache Foundation-nek adományozta.A Struts fő célja a modell (az alkalmazás logikája, amely kölcsönhatásba lép az adatbázissal), a nézet (az ügyfélnek bemutatott HTML oldalak) és a vezérlő (a nézet és a modell között információt továbbító példány) szétválasztása.
A Struts segítségével épített alkalmazások egyik fő biztonsági problémája a távoli kódfuttatás. A Struts2, a népszerű Struts keretrendszert 2010-ben több mint 18 000 szervezet több mint 1 millió alkalommal töltötte le, és tartalmazott egy egyedi gyengeségosztályt, amely lehetővé tette
A rosszindulatú felek számára, hogy tetszőleges kódot hajtsanak végre bármely Struts2 webes alkalmazáson.
Spring MVC
A Spring MVC egy Spring alkalmazás keretrendszer, amelyet a Spring fejlesztői írtak válaszul más népszerű keretrendszerek általuk vélt tervezési hibáira, például a prezentációs és a kéréskezelő réteg, illetve a kéréskezelő réteg és a modell közötti elégtelen elválasztásra. A Strutshoz hasonlóan a Spring MVC is egy akcióalapú keretrendszer. 2011-ben a Spring MVC-t a Struts-szal együtt a CVE-2012-3451 miatt az egyik legtöbbet letöltött sebezhető könyvtárnak tartották, ezt a verziót 2011-2012 között több mint 18 milliószor töltötték le több mint 43 000 szervezetnél
Google Web Toolkit (GWT)
A Google Web Toolkit (GWT) egy nyílt forráskódú eszközkészlet, amely lehetővé teszi a fejlesztők számára, hogy komplex JavaScript front-end alkalmazásokat hozzanak létre és tartsanak fenn Java nyelven, és amelyet a Google és fejlesztők ezrei használnak világszerte. A GWT-t úgy tervezték, hogy lehetővé tegye a nagy teljesítményű webes alkalmazások produktív fejlesztését anélkül, hogy a programozónak fejlett ismeretekkel kellene rendelkeznie a böngésző furcsaságairól, az XMLHttpRequestről és a JavaScriptről. Mivel a GWT JavaScript kódot állít elő, a GWT alkalmazásokat védeni kell a JavaScript alkalmazásokat fenyegető összes fenyegetés ellen.
Hibernate
A Hibernate ORM, vagy egyszerűen csak Hibernate néven ismert, egy objektum-relációs leképező keretrendszer a Java nyelvhez. Java osztályok adatbázis táblákra való leképezésére és Java adattípusok SQL adattípusokra való leképezésére tervezték. A Hibernate-et tartalmazó alkalmazásokat SQL-injekciók veszélyeztethetik, ha SQL, vagy HQL lekérdezéseket generálnak karakterláncok összekapcsolásával. Ezek ellen úgy lehet védekezni, hogy minden SQL-ben vagy HQL-ben megnevezett paramétereket használunk.
OWASP ESAPI
Az OWASP ESAPI, azaz az OWASP Enterprise Security API egy ingyenes, nyílt forráskódú, webes alkalmazások biztonságát ellenőrző könyvtár, amely egyszerűbbé teszi a fejlesztők számára az alacsonyabb kockázatú alkalmazások írását, míg az ESAPI könyvtárak célja, hogy a programozók számára megkönnyítse a biztonság utólagos hozzáadását a meglévő alkalmazásokhoz.
Java Server Faces (JSF)
A Java Server Faces (JSF) a Java Community Process által szabványként formalizált Java specifikáció a webes alkalmazások komponensalapú felhasználói felületeinek kialakítására. Az OWASP szerint “A JSF nem valósít meg saját biztonsági modellt, hanem a szabványos JEE biztonságra támaszkodik. Ez azt jelenti, hogy a JSF keretrendszerrel integrációs erőfeszítés nélkül használható mind az alkalmazásszerver biztonsági modellje, mind a JAAS vagy más ACL implementációk”. A JSF-et implementáló alkalmazások biztonsági problémája a hozzáférés-szabályozási és engedélyezési kérdések.
JSP
A JavaServer Pages (JSP) a Servlet API-ra épül, és lehetővé teszi a Java kód beágyazását, amelyet lefordítanak, majd a kérés fogadásakor végrehajtanak. A JSP kódot gyakran fenyegető veszély a cross-site scripting (XSS).
Java biztonsági sebezhetőségek
Míg a Java platform számos olyan funkciót tartalmaz, amelyek célja a Java-alkalmazások biztonságának javítása, a fejlesztők számára létfontosságú, hogy már a szoftverfejlesztési életciklus legkorábbi szakaszaiban biztosítsák, hogy Java-kódjuk sebezhetőségmentes legyen. Az olyan Java-biztonsági hibák elkerülése, mint az osztályokhoz és változókhoz való hozzáférés nem korlátozása, az osztályok nem véglegesítése, a csomagok szkópjára való hagyatkozás és mások, a legjobb kiindulópont a Java-kód védelmében, emellett fontos, hogy a fejlesztők megismerkedjenek a Java-kódot, valamint a Java-keretrendszereket fenyegető gyakori biztonsági fenyegetésekkel. A Java kód fejlesztés közbeni védelméről bővebben itt olvashat a 9 biztonsági hiba, amelyet minden Java-fejlesztőnek el kell kerülnie.
Nagy kockázatú Java biztonsági sebezhetőségek:
Mivel a világ összes vállalati asztali számítógépének több mint 95%-án Java fut, komoly következményekkel jár, ha a Java kódban található sebezhetőségek eljutnak a termelésbe, és rosszindulatú felek kihasználják őket. Az alábbiakban felsorolunk néhányat a Java nyelven írt alkalmazásokat fenyegető magas kockázatú veszélyek közül:
- Code Injections
- Command Injections
- Connection String Injection
- LDAP Injection
- Reflected XSS
- Resource Injection
- Second Order SQL Injection
- SQL Injection
- Stored XSS
- XPath Injection
Securing your Java
Checkmarx’s CxSAST, statikus kódelemző megoldás, kiemelkedik a Java tesztelési megoldások közül, mivel nem csak az a megoldás, amely megóvja a Java kódot a biztonsági és megfelelőségi problémáktól, hanem az az eszköz is, amely hozzájárul a szervezet fejlődéséhez az alkalmazások biztonsági érettségét illetően.
A CxSAST együttműködik a fejlesztői által már használt eszközökkel, mivel zökkenőmentesen integrálódik az SDLC minden szakaszában elérhető legtöbb elterjedt fejlesztési programmal. A CxSAST olyan funkciói, mint az inkrementális kódszkennelés és a legjobb javítási hely, ideálissá tették bármilyen folyamatos integrációs folyamatos fejlesztési (CICD) környezethez.
Amikor a Java kódban sebezhetőségeket észlelnek, a CxSAST nemcsak a legjobb javítási helyet azonosítja, hanem forrásokat is kínál a fejlesztőnek, hogy megértse a támadási vektor működését, valamint javítási tanácsokat is, amelyek segítenek abban, hogy a jövőben elkerüljék a hasonló hibákat.