Was ist Java?
Ursprünglich im Mai 1995 veröffentlicht, ist Java die beliebteste Programmiersprache der Welt, und mehr als 95 % aller Unternehmens-Desktops laufen auf Java. Java wurde entwickelt, um Entwicklern die Möglichkeit zu geben, „einmal zu schreiben und überall auszuführen“ (WORA), was bedeutet, dass in Java geschriebener Code auf allen Plattformen mit Java-Unterstützung ausgeführt werden kann, ohne dass eine weitere Neukompilierung erforderlich ist.
Java ist eine nebenläufige, klassenbasierte, objektorientierte Allzweck-Programmiersprache, die als schnell, sicher und zuverlässig gilt und überall zu finden ist, von den beliebtesten Websites bis zu mobilen Geräten und von Spielkonsolen bis zu Unternehmensrechenzentren und darüber hinaus. Java ist unter der GNU General Public License lizenziert und kann kostenlos heruntergeladen werden.
Java wurde von zahlreichen Programmiersprachen wie C++, C#, Eiffel, Mesa, Modula-3, Objective-C und anderen beeinflusst und spielte eine wichtige Rolle bei der Entwicklung vieler beliebter Programmiersprachen wie Groovy, Hack, Haxe, Kotlin, PHP, Python, Scala und anderen. Weltweit gibt es über 9 Millionen Java-Entwickler, die, wenn sie sich zusammentun und ein Land gründen würden, das 95. größte Land der Welt wären, gemessen an der Bevölkerungszahl, oder, wenn sie eine Stadt gründen würden, die 20. größte Stadt der Welt wären.
Warum wurde Java ursprünglich entwickelt?
In den frühen 1990er Jahren galt es als radikale Vision, die Leistungsfähigkeit der vernetzten Datenverarbeitung auf das tägliche Leben auszudehnen, und eine Gruppe von Ingenieuren von Sun Microsystem, bekannt als das „Green Team“ unter der Leitung von James Gosling, versuchte, diese Vision zu verwirklichen, indem sie mit der Entwicklung von Java die nächste Welle der Datenverarbeitung durch die Verbindung von Verbrauchergeräten und Computern einleitete. Dieses Team von Sun-Ingenieuren war seiner Zeit etwas voraus, da sie sich zunächst auf interaktives Fernsehen konzentrierten und die Sprache dieses Projekts ursprünglich Oak genannt wurde, nach dem Baum vor Goslings Büro, bevor sie nach dem Java-Kaffee in Java umbenannt wurde.
Während Java dem interaktiven Fernsehen voraus war, entstand es zur gleichen Zeit, als das Internet seinen Siegeszug antrat, und passte perfekt zu dieser neuen Technologie. 1995 wurde angekündigt, dass der Internet-Browser Netscape Navigator die Java-Technologie enthalten würde, und seither haben die wichtigsten Web-Browser die Fähigkeit zur Ausführung von Java-Applets integriert.
Wie bei den meisten Programmiersprachen wurde die Entwicklung von Java von einer Reihe von Grundsätzen geleitet, die die Entstehung und Weiterentwicklung von Java beeinflussten:
- Es muss „einfach, objektorientiert und vertraut“ sein.
- Es muss „robust und sicher“ sein.
- Es muss „architekturneutral und portabel“ sein.
- Es muss mit „hoher Leistung“ ausgeführt werden.
- Es muss „interpretiert, mit Threads versehen und dynamisch“ sein.
Große Java-Frameworks und ihre Sicherheitsrisiken:
Struts
Struts ist ein freies, aktionsbasiertes Open-Source-Framework für Model-View-Controller (MVC), das zur Entwicklung von Java EE-Webanwendungen verwendet wird. Struts wurde im Mai 2000 veröffentlicht, von Craig McClanahan geschrieben und an die Apache Foundation gespendet. Das Hauptziel hinter Struts ist die Trennung des Modells (Anwendungslogik, die mit einer Datenbank interagiert) von der Ansicht (HTML-Seiten, die dem Client präsentiert werden) und dem Controller (Instanz, die Informationen zwischen Ansicht und Modell weitergibt).
Ein großes Sicherheitsproblem bei Anwendungen, die mit Struts erstellt wurden, ist die Remote-Code-Ausführung. Im Jahr 2010 wurde Struts2, ein beliebtes Struts-Framework, über 1 Million Mal von mehr als 18.000 Unternehmen heruntergeladen und enthielt eine einzigartige Klasse von Schwachstellen, die es
Böswilligen ermöglichte, beliebigen Code auf jeder Struts2-Webanwendung auszuführen.
Spring MVC
Spring MVC ist ein Spring-Anwendungsframework, das von Spring-Entwicklern als Antwort auf die ihrer Meinung nach bestehenden Designfehler in anderen populären Frameworks geschrieben wurde, wie z. B. die unzureichende Trennung zwischen der Präsentations- und der Anfragebearbeitungsschicht sowie zwischen der Anfragebearbeitungsschicht und dem Modell. Wie Struts ist auch Spring MVC ein aktionsbasiertes Framework. Im Jahr 2011 galt Spring MVC zusammen mit Struts als eine der am häufigsten heruntergeladenen anfälligen Bibliotheken aufgrund von CVE-2012-3451. Diese Version wurde zwischen 2011 und 2012 über 18 Millionen Mal von über 43.000 Organisationen heruntergeladen
Google Web Toolkit (GWT)
Als Open-Source-Toolset, das es Entwicklern ermöglicht, komplexe JavaScript-Frontend-Anwendungen in Java zu erstellen und zu pflegen, ist Google Web Toolkit (GWT) kostenlos und wird sowohl von Google als auch von Tausenden von Entwicklern weltweit genutzt. GWT wurde entwickelt, um die produktive Entwicklung hochleistungsfähiger Webanwendungen zu ermöglichen, ohne dass der Programmierer fortgeschrittene Kenntnisse über Browser-Macken, XMLHttpRequest und JavaScript haben muss. Da GWT JavaScript-Code erzeugt, müssen GWT-Anwendungen gegen alle Bedrohungen geschützt werden, denen JavaScript-Anwendungen ausgesetzt sind.
Hibernate
Hibernate ORM, auch einfach Hibernate genannt, ist ein objekt-relationales Mapping-Framework für die Sprache Java. Es wurde entwickelt, um Java-Klassen auf Datenbanktabellen abzubilden und Java-Datentypen auf SQL-Datentypen abzubilden. Anwendungen, die Hibernate enthalten, können durch SQL-Injektionen bedroht sein, wenn SQL- oder HQL-Abfragen durch die Verkettung von Zeichenketten erzeugt werden. Eine Möglichkeit, sich dagegen zu schützen, ist die Verwendung von benannten Parametern in jeder SQL- oder HQL-Anfrage.
OWASP ESAPI
OWASP ESAPI, die OWASP Enterprise Security API, ist eine freie, quelloffene Bibliothek zur Kontrolle der Sicherheit von Webanwendungen, die es Entwicklern erleichtert, Anwendungen mit geringerem Risiko zu schreiben, während die ESAPI-Bibliotheken darauf ausgelegt sind, Programmierern das nachträgliche Hinzufügen von Sicherheit in bestehende Anwendungen zu erleichtern.
Java Server Faces (JSF)
Java Server Faces (JSF) ist eine Java-Spezifikation für die Erstellung komponentenbasierter Benutzeroberflächen für Webanwendungen, die durch den Java Community Process als Standard festgelegt wurde. Laut OWASP „implementiert JSF kein eigenes Sicherheitsmodell, sondern stützt sich auf die Standard-JEE-Sicherheit. Das bedeutet, dass sowohl das Sicherheitsmodell des Anwendungsservers als auch JAAS oder andere ACL-Implementierungen ohne Integrationsaufwand mit dem JSF-Framework verwendet werden können.“ Ein Sicherheitsproblem für Anwendungen, die JSF implementieren, sind Fragen der Zugriffskontrolle und Autorisierung.
JSP
JavaServer Pages (JSP) baut auf der Servlet-API auf und ermöglicht die Einbettung von Java-Code, der kompiliert und dann ausgeführt wird, wenn eine Anfrage eingeht. Eine häufige Bedrohung für JSP-Code ist Cross-Site Scripting (XSS).
Java-Sicherheitslücken
Während die Java-Plattform zahlreiche Funktionen enthält, die die Sicherheit von Java-Anwendungen verbessern sollen, ist es für Entwickler von entscheidender Bedeutung, sicherzustellen, dass ihr Java-Code in den frühesten Stadien des Lebenszyklus der Softwareentwicklung frei von Sicherheitslücken ist. Die Vermeidung von Java-Sicherheitsfehlern, wie z. B. die Nichtbeschränkung des Zugriffs auf Klassen und Variablen, das Nichtfinalisieren von Klassen, das Verlassen auf Package Scoop und andere, ist der beste Ausgangspunkt für die Absicherung von Java-Code. Außerdem ist es für Entwickler wichtig, sich mit den gängigen Sicherheitsbedrohungen für Java-Code und Java-Frameworks vertraut zu machen. Weitere Informationen zur Absicherung von Java-Code während der Entwicklung finden Sie hier: 9 Sicherheitsfehler, die jeder Java-Entwickler vermeiden muss.
Hochriskante Java-Sicherheitslücken:
Da über 95 % aller Unternehmens-Desktops weltweit mit Java arbeiten, hat es schwerwiegende Folgen, wenn Schwachstellen im Java-Code in die Produktion gelangen und von böswilligen Parteien ausgenutzt werden. Im Folgenden werden einige der risikoreichen Bedrohungen aufgeführt, denen in Java geschriebene Anwendungen ausgesetzt sind:
- 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, eine statische Code-Analyse-Lösung, hebt sich unter den Java-Testlösungen nicht nur als die Lösung hervor, die Ihren Java-Code frei von Sicherheits- und Compliance-Problemen hält, sondern auch als das Tool, das zum Fortschritt Ihrer Organisation in Bezug auf die Reife der Anwendungssicherheit beiträgt.
CxSAST arbeitet mit den Tools, die Ihre Entwickler bereits verwenden, da es sich nahtlos in die meisten gängigen Entwicklungsprogramme integriert, die in jeder Phase des SDLC verfügbar sind. Die Funktionen von CxSAST, wie das inkrementelle Scannen von Code und die Ermittlung der besten Fehlerbehebungsposition, machen es ideal für jede CICD-Umgebung (Continuous Integration Continuous Development).
Wenn Schwachstellen im Java-Code entdeckt werden, ermittelt CxSAST nicht nur die beste Fehlerbehebungsposition, sondern bietet dem Entwickler auch Ressourcen, um zu verstehen, wie der Angriffsvektor funktioniert, sowie Ratschläge zur Fehlerbehebung, die ihm helfen, ähnliche Fehler in Zukunft zu vermeiden.