Hvad er Java?
Java blev oprindeligt udgivet i maj 1995 og er det mest populære programmeringssprog i verden med over 95 % af alle virksomheders desktops, der kører på Java. Jave er designet til at lade udviklere “skrive én gang, køre overalt” (WORA), hvilket betyder, at kode skrevet i Java kan køre på alle platforme med Java-understøttelse uden behov for yderligere rekompilering.
Java er et samtidigt, klassebaseret, objektorienteret programmeringssprog til generelle formål, der er berømt for at være hurtigt, sikkert og pålideligt, og som findes overalt, lige fra de mest populære websteder til mobile enheder og fra spillekonsoller til virksomhedsdatacentre og videre. Java er licenseret under GNU General Public License og kan downloades gratis.
Java er påvirket af mange programmeringssprog, herunder C++, C#, Eiffel, Mesa, Modula-3, Objective-C og andre, og har spillet en vigtig rolle i udviklingen af mange populære programmeringssprog som Groovy, Hack, Haxe, Kotlin, PHP, Python, Scala og andre. På verdensplan er der over 9 millioner Java-udviklere, hvilket, hvis de alle gik sammen og dannede et land, ville være det 95. største land i verden målt på befolkningstal, eller, hvis de dannede en by, ville den ligge på en delt 20. plads som den 20. største i verden.
Hvorfor blev Java oprindeligt skabt?
I begyndelsen af 1990’erne blev det betragtet som en radikal vision at udvide kraften i netværkscomputere til hverdagen, og en gruppe af Sun Microsystem-ingeniører, kendt som “Green Team” under ledelse af James Gosling, forsøgte at realisere denne vision ved at indlede den næste bølge inden for databehandling gennem foreningen af forbrugerudstyr og computere med skabelsen af Java. Dette hold af Sun-ingeniører var lidt forud for deres tid, da de i første omgang fokuserede deres indsats på interaktivt tv, og dette projekts sprog blev oprindeligt kaldt Oak, efter træet uden for Goslings kontor, før det blev omdøbt til Java efter Java-kaffe.
Mens Java var forud for tidsplanen, når det gjaldt interaktivt tv, opstod det samtidig med, at internettet begyndte at tage fart, og det passede perfekt til denne nye teknologi. I 1995 blev det annonceret, at internetbrowseren Netscape Navigator ville inkorporere Java-teknologien, og siden da har større webbrowsere inkorporeret evnen til at køre Java-applets.
Som med de fleste programmeringssprog blev udviklingen af Java styret af en række principper, som har haft indflydelse på Javas tilblivelse og fortsatte udvikling:
- Det skal være “enkelt, objektorienteret og velkendt”.
- Det skal være “robust og sikkert”.
- Det skal være “arkitekturneutralt og bærbart”.
- Den skal udføres med “høj ydeevne”.
- Den skal være “fortolket, trådet og dynamisk”.
Større Java-rammer og deres sikkerhedstrusler:
Struts
Struts er en gratis,handlingsbaseret open source, Model-view-controller (MVC)-ramme (MVC), der bruges til at udvikle Java EE-webapplikationer. Struts blev udgivet i maj 2000 og blev skrevet af Craig McClanahan og doneret til Apache Foundation. Hovedmålet bag Struts er adskillelse af modellen (applikationslogik, der interagerer med en database) fra viewet (HTML-sider, der præsenteres for klienten) og controlleren (instans, der videregiver oplysninger mellem view og model).
Et af de største sikkerhedsproblemer for applikationer, der er bygget ved hjælp af Struts, er fjernudførelse af kode. I 2010 blev Struts2, en populær Struts-ramme, downloadet over 1 million gange i 2010 af over 18.000 organisationer og indeholdt en unik svaghedsklasse, som gjorde det muligt for
Beskadigede parter at udføre vilkårlig kode på enhver Struts2-webapplikation.
Spring MVC
Spring MVC er en Spring-programramme, der er skrevet af Spring-udviklere som et svar på, hvad de så som designfejl i andre populære rammer, f.eks. utilstrækkelig adskillelse mellem præsentations- og anmodningsbehandlingslagene og mellem anmodningsbehandlingslaget og modellen. Ligesom Struts er Spring MVC også en aktionsbaseret ramme. I 2011 blev Spring MVC sammen med Struts betragtet som et af de mest downloadede sårbare biblioteker på grund af CVE-2012-3451. Denne version var blevet downloadet over 18 millioner gange mellem 2011-2012 af over 43.000 organisationer
Google Web Toolkit (GWT)
Google Web Toolkit (GWT) er et open source-sæt af værktøjer, der gør det muligt for udviklere at oprette og vedligeholde komplekse JavaScript front-end apps i Java, og det er gratis og bruges af både Google og tusindvis af udviklere over hele verden. GWT blev designet til at muliggøre produktiv udvikling af højtydende webapplikationer uden at programmøren behøver at have et avanceret kendskab til browserens særheder, XMLHttpRequest og JavaScript. Da GWT producerer JavaScript-kode, skal GWT-applikationer være sikret mod alle trusler mod JavaScript-applikationer.
Hibernate
Hibernate ORM, kendt som blot Hibernate, er en ramme for objektrelationel mapping til Java-sproget. Den er designet til at mappe Java-klasser til databasetabeller og til at mappe fra Java-datatyper til SQL-datatyper. Programmer, der indeholder Hibernate, kan blive truet af SQL-injektioner, hvis der genereres SQL- eller HQL-forespørgsler ved at sammenkæde strenge. En måde at beskytte sig mod disse er ved at bruge navngivne parametre i enhver SQL eller HQL.
OWASP ESAPI
OWASP ESAPI, OWASP Enterprise Security API, er et gratis open source-bibliotek til kontrol af sikkerheden i webapplikationer, som gør det enklere for udviklere at skrive applikationer med lavere risiko, mens ESAPI-bibliotekerne er designet til at gøre det lettere for programmører at tilføje sikkerhed med tilbagevirkende kraft i eksisterende applikationer.
Java Server Faces (JSF)
Java Server Faces (JSF) er en Java-specifikation til opbygning af komponentbaserede brugergrænseflader til webapplikationer, der er formaliseret som en standard gennem Java Community Process. Ifølge OWASP “implementerer JSF ikke sin egen sikkerhedsmodel, men baserer sig i stedet på standard JEE-sikkerhed. Det betyder, at både applikationsserverens sikkerhedsmodel, JAAS eller andre ACL-implementeringer kan anvendes sammen med JSF-rammen uden nogen integrationsindsats.” Et sikkerhedsproblem for applikationer, der implementerer JSF, er problemer med adgangskontrol og autorisering.
JSP
JavaServer Pages (JSP) er bygget oven på Servlet API og gør det muligt at indlejre Java-kode, som kompileres og derefter udføres, når der modtages en anmodning. En almindelig trussel mod JSP-kode er cross-site scripting (XSS).
Java-sikkerhedssårbarheder
Selv om Java-platformen indeholder mange funktioner, der er designet til at forbedre sikkerheden i Java-applikationer, er det afgørende for udviklere at sikre, at deres Java-kode er fri for sårbarheder i de tidligste faser af softwareudviklingslivscyklussen. At undgå Java-sikkerhedsfejl som f.eks. ikke at begrænse adgangen til klasser og variabler, ikke at finalisere klasser, at stole på package scoop og andre er det bedste sted at starte, når Java-kode skal sikres, men det er også vigtigt for udviklere at gøre sig bekendt med de almindelige sikkerhedstrusler, som Java-kode samt Java-rammer står over for. Du kan få flere oplysninger om sikring af Java-kode under udviklingen ved at læse 9 sikkerhedsfejl, som enhver Java-udvikler skal undgå her.
Højrisiko-Java-sikkerhedssårbarheder:
Med over 95 % af alle virksomheders desktops i verden, der kører Java, er der alvorlige konsekvenser, når sårbarheder i Java-kode når frem til produktionen og udnyttes af ondsindede parter. Nedenstående er en liste over nogle af de højrisikotrusler, som programmer, der er skrevet i Java, er udsat for:
- Kodeinjektioner
- Kommandoinjektioner
- Injektion af forbindelsesstreng
- LDAP-injektion
- Reflected XSS
- Ressource Injection
- Second Order SQL Injection
- SQL Injection
- Stored XSS
- XPath Injection
Sikring af din Java
Checkmarx’s CxSAST, en statisk kodeanalyseløsning, skiller sig ud blandt Java-testløsninger som ikke kun den løsning, der vil holde din Java-kode fri for sikkerheds- og overensstemmelsesproblemer, men også som det værktøj, der vil bidrage til din organisations fremskridt, når det gælder modenhed i forhold til applikationssikkerhed.
CxSAST arbejder sammen med de værktøjer, som dine udviklere allerede bruger, da det problemfrit integreres med de fleste af de almindelige udviklingsprogrammer, der er tilgængelige på alle stadier af SDLC’en. CxSAST’s funktioner såsom inkrementel kodeskanning og den bedste rettelsesplacering gjorde det ideelt til ethvert CICD-miljø (continuous integration continuous development).
Når sårbarheder opdages i Java-koden, vil CxSAST ikke kun identificere den bedste rettelsesplacering, men vil også tilbyde ressourcer til udvikleren for at forstå, hvordan angrebsvektoren fungerer, samt råd om afhjælpning, som vil hjælpe dem med at sikre, at lignende fejl undgås i fremtiden.