Wie sicher ist Java im Vergleich zu anderen Sprachen?

Wie bei anderen Aspekten der Cybersicherheit hängt die Sicherheit der Programmiersprache davon ab, was wir unter "sicher" verstehen. Es ist wahr, dass Java weniger identifizierte Schwachstellen aufweist als einige andere häufig verwendete Sprachen. Es ist auch wahr, dass einige neuere Sprachen zumindest auf den ersten Blick sicherer erscheinen als Java.

Viele der Sicherheitslücken, die in Java gefunden wurden, sind das Ergebnis seiner Popularität. Die weit verbreitete Verwendung bedeutet, dass Tausende von Bug-Jägern sich der Suche nach Schwachstellen in der Java-Sprache widmen, was Java in diesem Bereich einen unfairen "Vorteil" verschafft. Ebenso könnte die implizite Sicherheit einiger neuerer Sprachen wie Ruby ihre Nischennutzung mehr widerspiegeln als ihre Integrität.  

[Auch auf JavaWorld: Es gibt einige Anzeichen dafür, dass Java-Entwickler die Sicherheit verbessern.] 

In diesem Artikel werden wir uns ansehen, wie die am häufigsten verwendeten Programmiersprachen in Bezug auf die Sicherheit rangieren. Ich werde einige Faktoren erläutern, die eine Sprache weniger sicher machen als eine andere, und warum identifizierte Schwachstellen in den letzten Jahren so stark zugenommen haben. Abschließend möchte ich einige Möglichkeiten vorschlagen, wie Java-Entwickler Schwachstellen im Code reduzieren können.  

Fazit: Aus Sicherheitsgründen sind uns bekannte Sicherheitslücken besser als solche, die wir nicht kennen. 

Wie sicher ist Java?

Jüngste Untersuchungen zu den Schwachstellen der am häufigsten verwendeten Programmiersprachen stammen von WhiteSource, einer Open-Source-Plattform für Sicherheit und Lizenzkonformität. WhiteSource befasste sich mit sieben der beliebtesten Open-Source-Programmiersprachen: C, Java, JavaScript, Python, Ruby, PHP und C ++. Die Analysten verwendeten dann verschiedene Quellen, um die Sprachen nach ihrer Anzahl identifizierter Schwachstellen zu ordnen.

Warum Open Source?

Die Entscheidung, Open Source-Sprachen zu bewerten, ist kein Zufall. Viele proprietäre Sprachen - einschließlich proprietärer Implementierungen von Open Source-Sprachen - sind in Bezug auf Sicherheitslücken weitaus weniger transparent. Für ein privates Unternehmen ist es wirtschaftlich nicht sinnvoll, Sicherheitslücken in seinem Produkt zu veröffentlichen. Daher bleiben wir hinsichtlich der Sicherheitsanfälligkeit dieser Sprachen weitgehend im Dunkeln. Fehler, die wir kennen, sind weitaus besser zu handhaben als solche, die wir nicht kennen.

Basierend auf der WhiteSource-Studie war C mit 47% der gemeldeten Sicherheitslücken die mit Abstand anfälligste Programmiersprache . Dieses Ranking wird erfahrene Programmierer nicht überraschen, aber andere Ergebnisse könnten es sein. PHP kam mit 17% auf einen entfernten zweiten Platz, gefolgt von Java mit 12% und JavaScript, das die Top 4 mit 11% abrundet. Diesen "Führern" folgten Python, C ++ und Ruby. 

Grundlegendes zur Sicherheit von Programmiersprachen

Als nächstes sollten wir uns fragen, warum einige Programmiersprachen anfälliger sind als andere. Basierend auf den von mir zitierten Untersuchungen könnten Sie den Schluss ziehen, dass C eine enorme Sicherheitsbedrohung darstellt. Bedenken Sie jedoch, dass C schon viel länger verwendet wird als jede andere Sprache auf der Liste. Stephen Turner, der im Journal of Technology Research schreibt, sagt: "Programmiersprachen sind insofern wie Genetik, als es einige Vorfahren mit gemeinsamen Merkmalen gibt, die sich vermehrt haben." 

Als älteste Sprache auf der Liste wurde C in einer völlig anderen Bedrohungsumgebung entwickelt als relativ neuere Sprachen wie Java und Ruby. Wie WhiteSource hervorhebt, bedeutet das relative Alter von C, dass es ein entsprechend höheres Volumen an geschriebenem Code hat. C ist auch eine der Sprachen, die für wichtige Infrastrukturen wie OpenSSL und den Linux-Kernel verwendet werden. Diese Kombination aus Volumen und Zentralität kann zu einer höheren Anzahl bekannter Open Source-Schwachstellen führen.

Obwohl Java in dieser Analyse eine gute Leistung erbringt, heben die Autoren zwei Arten von Sicherheitslücken hervor, die sich insbesondere auf Java auswirken. Erstens stellen sie fest, dass US-CERT uns lange vor der Anfälligkeit von Java für Protokollinjektionsangriffe gewarnt hat, hauptsächlich über Webbrowser. Solche Angriffe können durch Validierung oder Authentifizierung der übermittelten Eingaben abgewendet werden. Entwickler sind jedoch häufig zurückhaltend, Eingaben gründlich zu validieren, aus Angst, dass dies ihre Apps weniger benutzerfreundlich machen könnte. 

Zweitens ist Java besonders anfällig für Vertrauens-Exploits, die auf Sicherheitslücken bei der Zugriffskontrolle folgen. Obwohl sich die Zertifizierungsprozesse seit 2013 verbessert haben, verlassen sich viele Entwickler auf Zertifikate von Behörden, die nicht zuverlässig sind. Es ist möglich, ein Zertifikat zu erhalten, das weniger streng ist als es sein sollte. US-CERT, zitiert im Journal of Technology Research, warnt vor dieser offenen Tür für Angreifer, die beliebigen Code ausführen.

Die relativ geringe Sicherheitsanfälligkeit von Java bietet einen interessanten Kontrast zu C. Java wurde lange nach C in einer Umgebung entwickelt, in der das Bedrohungsbewusstsein viel höher war. Daher ist es nicht verwunderlich, dass Java weitaus sicherer ist. Auch wenn Ruby sicherer zu sein scheint als Java, könnte dies durch die relative Jugend der Sprache und ihre Nischenanwendung erklärt werden.

Sicherheitslücken nehmen zu - sozusagen

WhiteSource meldet einen "erheblichen Anstieg der Anzahl bekannter Open Source-Sicherheitslücken in allen Sprachen in den letzten zwei Jahren". Obwohl die Gesamtzahl der Sicherheitslücken in Java seit 2015 stetig zurückgegangen ist, bedarf der jüngste Anstieg der Anzahl der Sicherheitslücken einer Erklärung. Wir können diesen Anstieg auf zwei Faktoren zurückführen.  

Erstens gibt es Bug Bounties, ein relativ neuer Trend, bei dem Tausende von Tech-Profis eine Sprache durchsuchen, um Schwachstellen zu finden. Diese machen zumindest einen Teil der Zunahme von Open Source-Sicherheitslücken aus. Darüber hinaus wird allgemein angenommen, dass Bedrohungsjäger alle Sprachen gleichermaßen scannen, aber das stimmt nicht. Als eine der am häufigsten verwendeten Sprachen in der Webentwicklung ist Java ein wichtiges Ziel für Bedrohungsjäger. In diesem Zusammenhang sieht Javas drittplatziertes Ranking für bekannte Sicherheitslücken ziemlich niedrig aus.

Softwaresysteme sind auch um eine Größenordnung komplizierter als vor 10 Jahren, was ein weiterer wichtiger Faktor für die zunehmende Anzahl von Sicherheitslücken in Java und anderen Sprachen ist. In einer Welt, in der Smartphone-Apps eine Infektionsquelle sein können und in der jedes Unternehmen eine JavaScript-fähige Website haben muss, ist es keine Überraschung, dass die Anzahl der Sicherheitslücken auf Websites exponentiell gestiegen ist. Hinzu kommt der langfristige Mangel an Fachleuten für Cybersicherheit, und die Zukunft der Cybersicherheit sieht düster aus. 

So vermeiden Sie Sicherheitslücken in Java

Wenn Sie die Forschung zu Sicherheitslücken lesen, schlägt Ihr Herz möglicherweise schneller, aber keine Angst: Java-Entwickler sind in Bezug auf die Anwendungssicherheit in einer starken Position. Mit Tausenden von Profis, die die Sprache nach Schwachstellen durchsuchen, besteht eine gute Chance, dass wir einen guten Anteil der Schwachstellen in der Sprache kennen. Dieses Wissen ist Macht.

Ein kürzlich veröffentlichter JavaWorld-Artikel enthielt 13 Regeln für die Entwicklung sicherer Java-Anwendungen. Sie finden auch zahlreiche Artikel und Whitepaper zur sicheren Implementierung von Java in bestimmten Umgebungen, z. B. Cloud-Sicherheit für Java und Webanwendungssicherheit für Java. Betrachten wir einige Möglichkeiten, um Schwachstellen zu reduzieren, die Sie möglicherweise übersehen haben.

Wechseln Sie zu einem DevSecOps-Workflow

Eine Möglichkeit, Schwachstellen in Java-Code zu reduzieren, besteht darin, zu einem DevSecOps-Workflow zu wechseln. Diese Art von Workflow macht die Sicherheit in allen Phasen des Entwicklungsprozesses zu einem vorrangigen Anliegen. Als Entwickler vergessen wir oft, dass unsere Software von allen Teilen der Organisation, für die wir arbeiten, verwendet (und manchmal angepasst) wird. Es ist nicht gut, Ihre Web-Apps gegen Eindringen zu schützen, wenn Ihr Marketing-Team entschlossen ist, Ihre Bemühungen zu untergraben. Beziehen Sie alle Ihre Teams in den Entwicklungsprozess ein und stellen Sie sicher, dass die Sicherheit für jeden Aspekt des Projekts eine Rolle spielt.

Bewerten Sie die Workflow-Sicherheit

Sie sollten sich auch die Sicherheit Ihres eigenen Workflows genau ansehen. Ihre Web-Apps sind zwar an sich sicher, aber eine der am schnellsten wachsenden Schwachstellenquellen für Entwickler ist das Entwicklungssystem selbst. Wenn Ihr Entwicklungssystem gehackt wird, wird es zu einem Portal zum Einfügen von Schadcode in Ihre Software. Um dies zu vermeiden, stellen Sie sicher, dass Sie ein VPN verwenden, um Ihre gesamte interne Kommunikation zu verschlüsseln. Stellen Sie außerdem sicher, dass Sie einen verschlüsselten Datenspeicher implementieren.

Fazit

Obwohl Untersuchungen ergeben haben, dass Java weniger sicher ist als einige andere Sprachen, sollten Entwickler diese Erkenntnis mit einer Prise Salz nehmen. Neuere und weniger häufig verwendete Sprachen scheinen sicherer zu sein, aber das liegt wahrscheinlich daran, dass viele ihrer Schwachstellen noch nicht entdeckt wurden - oder schlimmer noch, sie wurden gefunden, aber nicht gemeldet.

Während Sie die Risiken kennen und alle angemessenen Vorkehrungen treffen sollten, um Ihre Java-Apps zu sichern, sollten Sie sich nicht zu viele Sorgen um die Rangliste machen. Als Java-Entwickler wissen Sie zumindest, was Sie erwartet.

Diese Geschichte: "Wie sicher ist Java im Vergleich zu anderen Sprachen?" wurde ursprünglich von JavaWorld veröffentlicht.