Wenn Sie wie etwa 10 Millionen andere Java-Entwickler sind, möchten Sie wahrscheinlich wissen, wie Sie Java-Code sicher aufbewahren. Entwickler müssen immer über Tipps und Best Practices informiert sein, um Java-Sicherheitsprobleme anzugehen.
Java ist heute die beliebteste Programmiersprache, und das aus gutem Grund. Java-Code ist plattformübergreifend. Java-Programmierung ist weit verbreitet in der Universität Informatik Abteilungen gelehrt. So viele eifrige Programmierer gehen in ihre ersten Jobs, die bereit sind, in Java zu programmieren. Und Javas objektorientiertes Design macht es einfach, Code wiederzuverwenden.
Doch trotz der Popularität von Java, würden Sie hart gedrückt werden, jemanden zu finden, der Java argumentieren würde, ist die sicherste Programmiersprache da draußen. Java-Sicherheitsprobleme sind real. Java wurde entwickelt, um so sicher wie die meisten anderen gängigen Programmiersprachen zu sein, und es bietet Funktionen wie SecurityManager, um die Sicherheit in bestimmten Kontexten zu verbessern. Java-Anwendungen unterliegen jedoch einer Reihe potenzieller Sicherheitslücken, einschließlich, aber nicht beschränkt auf verschiedene Injection-Angriffe.
Für Java-Entwickler und -Administratoren ist es wichtig, beim Schreiben und Bereitstellen von Java-Anwendungen gängige Java-Sicherheitslücken zu berücksichtigen. Security-First-Programmierung ist besonders wichtig im Fall von Java, weil die Cross-Plattform-Natur von Java-Code bedeutet, dass OS-Level-Sicherheits-Frameworks können nicht immer vertraut werden, um Anwendungen sicher zu halten.
Sie sollten auch nicht erwarten, dass Endbenutzer in der Lage sind, Java-Sicherheitsbedrohungen effektiv zu verwalten. Sicher, Sie können Ihre Benutzer dafür verantwortlich machen, dass sie nicht vertrauenswürdigen Java-Code ausführen oder automatische Updates für ihre Java-Laufzeiten deaktivieren, aber letztendlich liegt die Last, sichere Java-Anwendungen zu schreiben und Code in einer Java-Umgebung zu isolieren, die möglicherweise nicht sicher ist, bei den Entwicklern.
Häufige Java-Sicherheitsprobleme
Java-Programmierer sollten die folgenden Sicherheitsherausforderungen berücksichtigen, wenn sie Java-Anwendungen entwerfen und schreiben.
SQL-Injections
SQL-Injections treten auf, wenn ein Angreifer bösartigen SQL-Abfragecode in ein Formular einfügt. Wenn die Anwendung den Schadcode nicht erkennt und an eine Datenbank weiterleitet, kann die Datenbank auf schädliche Weise geändert oder sensible Daten Unbefugten zugänglich gemacht werden.Die Verbreitung automatisierter Tools für SQL-Injections macht SQL-Injection-Angriffe zu einer weit verbreiteten Sicherheitsherausforderung für Java-Anwendungen und praktisch jede andere Art von Anwendung, die heute eine Verbindung zu einer Datenbank herstellen kann.
Die Lösung für SQL-Injection-Angriffe in Java ist einfach genug: Stellen Sie sicher, dass Ihre App die Eingabe ordnungsgemäß validiert und verhindert, dass bösartiger Code an Daten angehängt wird, die bereits in einem Formular akzeptiert wurden. Vermeiden Sie in der Regel und nach Möglichkeit dynamische Abfragen, um das Risiko von SQL-Injections in Java-Anwendungen zu verringern. Die PreparedStatement-Klasse von Java kann auch hilfreich sein, um SQL-Angriffe zu verhindern.
Java LDAP Injections
Injection-Angriffe, die LDAP-Anweisungen (Lightweight Directory Access Protocol) ausnutzen, stellen einen weiteren häufigen Angriff auf Java-Anwendungen dar. Auch hier ist die Eingabevalidierung der Schlüssel zur Verhinderung von Angriffen.
Insbesondere Java-Entwickler können die meisten Arten von LDAP-Injection-Angriffen vereiteln, wenn sie LDAP-Sonderzeichen umgehen.
Andere Arten von Java-Injection-Angriffen
Wir haben bereits SQL-Injections und LDAP-Injections behandelt, aber Injection-Angriffe in Java-Anwendungen enden nicht dort. Verbindungszeichenfolgeninjektionen, Cross-Site-Scripting (XSS) -Injektionen und andere Arten von Angriffen sind möglich.
Diese Arten von Angriffen gelten nicht für alle Java-Anwendungen – XSS ist beispielsweise nur bei Webanwendungen ein ernstes Risiko -, aber sie erinnern erneut daran, warum die Eingabevalidierung so wichtig ist.
SecurityManager Schwachstellen
SecurityManager wurde entwickelt, damit Sie nicht vertrauenswürdigen Bytecode sicher in Java-Anwendungen ausführen können. SecurityManager Sandboxes den Bytecode, um Angriffe zu verhindern.
Dies macht SecurityManager zu einer großartigen Ressource für Java-Sicherheit – vorausgesetzt natürlich, dass es korrekt funktioniert. Das Hauptrisiko von SecurityManager ist die Historie von Sicherheitslücken, die in SecurityManager selbst aufgetreten sind. Diese Sicherheitsanfälligkeiten ermöglichen es manchmal, dass isolierter Code aus der Sandbox ausbricht und Angriffe ausführt.
In gewissem Maße ist die Verwaltung von SecurityManager- und Java-Sicherheitsproblemen nicht für Entwickler, sondern für Systemadministratoren ein Problem, die Java-Laufzeiten auf dem neuesten Stand halten müssen. Entwickler können jedoch ihren Teil dazu beitragen und Sandboxen nach Möglichkeit vermeiden. Mit anderen Worten, vertrauen Sie SecurityManager nicht blind. Wenn Sie es in einer Anwendung verwenden müssen, verwenden Sie es. Aber wenn Sie die Funktionalität, die Sie benötigen, ohne sie erreichen können, mindern Sie Java-Sicherheitsrisiken und vermeiden Sie sie.
Bösartige JARs
Wenn eine Java-Anwendung JARs zur Laufzeit lädt, kann ein Hacker die Anwendung manchmal dazu verleiten, bösartige JARs zu verknüpfen. Dies ist ein altes Sicherheitsproblem, und Java hat im Laufe der Jahre eine Reihe von Überprüfungen eingeführt, um dies zu verhindern.
Einige dieser Angriffsminderungsfunktionen funktionieren von selbst, aber Entwickler können sie voll ausnutzen, indem sie JARs signieren. Auf diese Weise werden Signaturen zur Laufzeit überprüft und verhindern Eindringlinge. Programmierer können die Bedrohung durch bösartige JARS auch verringern, indem sie die Zugriffsrechte bestimmter Klassen einschränken, sodass natürliche Sicherheitsrichtlinien den Schaden begrenzen, den bösartiger Code anrichten kann, wenn bösartiger Code geladen wird.