Frage

Ist Java haben Buffer-Overflow? Wenn ja können Sie mir Szenarien?

War es hilfreich?

Lösung

Da Java Strings basiert auf char-Arrays und Java überprüft automatisch Feldgrenzen, Pufferüberlauf nur möglich sind, in ungewöhnlichen Szenarien:

  1. Wenn Sie rufen nativen Code über JNI
  2. In der JVM selbst (in der Regel in C ++ geschrieben)
  3. Der Interpreter oder JIT-Compiler nicht richtig funktioniert (Java Bytecode beauftragt Grenzen Kontrollen)

Andere Tipps

Managed Sprachen wie Java und C # nicht über diese Probleme, aber die spezifischen virtuellen Maschinen (JVM / CLR / etc), die tatsächlich den Code ausführen kann.

Für alle Absichten und Zwecke, Nr.

Java hat Array die Überprüfung der Grenzen , die diese Daten überprüfen wird nicht außerhalb des von den Bereich zugegriffen werden Array zugeordnet. Wenn man versucht, Bereich zuzugreifen, die über die Größe des Arrays ist, ein ArrayOutOfBounds Ausnahme wird geworfen werden.

Wenn es einen Puffer-Überlauf, ist es wahrscheinlich von einem Fehler in der Java Virtual Machine ist, und ist, meines Wissens, nicht das gewünschte Verhalten, die in der Programmiersprache Java Spezifikationen noch die Java Virtual Machine Spezifikationen geschrieben wird.

Ein Pufferüberlauf im engeren Sinne des Stapels überschreiben oder selbst Heap erfordern würde entweder:

  1. Ein Fehler im Rahmen (diese haben in der Vergangenheit bestanden und kann auch wieder)
  2. Die Verwendung von JNI (im Wesentlichen nicht mehr verwalteten Code verwenden)

Ein Pufferüberlauf in dem Sinne, dass Sie Code unter Verwendung eines Puffers und Ihren Code haben, ist verantwortlich für die es richtig Parsen aber nicht so tun, ist möglich. Zum Beispiel könnten Sie einen XML-Parser schreiben und jemand könnte man mit einer fehlerhaften (oder legitim, aber selten) Anfrage zur Verfügung stellen, die auf die Gestaltung Ihrer Parser aufgrund überschreibt zuvor Daten mit einiger Nutzlast validiert, die Ihre Anwendung verursachen würden schlecht benehmen.

Diese letztere Form ist weniger wahrscheinlich, aber eine schlecht geschriebene SQL-String Reinigungsfunktion weit verbreitet, dass ein Problem hatte, wie dies wäre ein einladendes Ziel sein.

Ja und nein. Nein, dass kann man wirklich nicht schaffen versehentlich öffnen sich zu einem Pufferüberlauf, weil es eine verwaltete Speichermodell ist. Allerdings kann es in der JVM und JDK Pufferüberlauf-Schwachstellen sein. Sehen Sie diese Secunia Advisory:

http://secunia.com/advisories/25295

oder diese alten Advisories auf mehreren früheren JDK und JRE Schwachstellen finden Sie unter:

  • Integer und Pufferüberlauf Schwachstellen in der Java Runtime Environment (JRE) "unpack200" JAR Auspacken Utility Erhöhung von Berechtigungen können dazu führen https://download.oracle.com/sunalerts/1020225.1.html

      

    Integer und Pufferüberlauf-Schwachstellen in dem Java-Runtime   Environment (JRE) mit dem Auspacken Applets und Java Web Start   Anwendungen, die das „unpack200“ JAR Auspacken Dienstprogramm einer möglicherweise erlauben   nicht vertrauenswürdige Applets oder Anwendungen Rechte ausweiten. Zum Beispiel,   ein nicht vertrauenswürdiges Applet kann selbst Berechtigungen erteilen lesen und schreiben   lokale Dateien oder führen Sie lokale Anwendungen, die auf die zugegriffen werden kann   Benutzer, die nicht vertrauenswürdigen Applet ausgeführt wird.

         

    Sun erkennt mit Dank „Regenrecht“ der Arbeit mit dem iDefense   VCP ( http://labs.idefense.com/vcp/ ) und Chris Evans von Google für   bringen diese Fragen zu unserer Aufmerksamkeit.

  • Mehrere Schwachstellen wurden in Sun Java Development Kit (JDK) und Java Runtime Environment (JRE) identifiziert haben. https://security.gentoo.org/glsa/200705-23

      

    Eine nicht näher beschriebene Schwachstelle eine „falsche Verwendung des Systems beteiligt   Klassen“wurden von dem Fujitsu-Security-Team berichtet. Zusätzlich   Chris Evans vom Google Security Team verzeichnete einen Integer-Überlauf   was zu einem Pufferüberlauf in dem ICC-Parser JPG oder BMP verwendet   Dateien und ein falscher open () Aufruf von / dev / tty bei der Verarbeitung   bestimmte BMP-Dateien.

Java (und .Net) virtuelle Maschinen fangen Code, der außerhalb des reservierten Speichers zu schreiben versucht. Anwendungen, die dies nicht korrekt verarbeiten können immer noch Sicherheitsprobleme verursachen. Wenn böswillige Benutzer Ausnahme durch Eingabe eines ungültige Eingabe auslösen können sie zum Beispiel Denial-of-Service-Attacken tun.

Wie bereits darauf hingewiesen, Java hat, als eine Sprache, die Überprüfung Schranken für alle Speicherzugriff, und wenn es hier einen Fehler ist, bei Störung die JVM und nicht das Programm. Doch was sollte beachtet werden, die ein ähnliches Argument zu Speicherlecks in Java; während nicht möglich, den Stapel, eine ArrayOutOfBoundsException an der falschen Stelle zerschlagen, die nicht richtig behandelt wird, kann immer noch das System am Ende zu vermasseln.

Es ist möglich, dass ein Verfahren in gültige Einträge eines Arrays zu schreiben, dass es nicht die Absicht, zu, in der Regel durch Ganzzahlüberlauf.

Zum Beispiel folgende Angaben nicht ausreichend ist, Grenzen zu überprüfen:

/* !! WRONG !! */ 0 <= off && 0 <= len && off+len <= buff.length /* !! WRONG !! */

IIRC, StringBuffer hatte einmal einen Fehler wie das, aber es war nichts Interessantes Sie damit machen können.

Sie können eventuell einen Pufferüberlauf in einem Java-Programm führen, wenn Sie das Java Native Interace (JNI) -Anlage wurden unter Verwendung von externen Code aufzurufen, und der externe Code hatte eine ausnutzbare Problem. Das ist ziemlich ungewöhnlich, da die meisten Anwendungen vermeiden, mit JNI, soweit möglich.

Eine der wichtigsten Funktionen von JAVA ist die Sicherheit. Programme in interpretierten Sprachen geschrieben sind in den Pufferüberlauf ausnutzen nicht anfällig, aber man kann immer einen Pufferüberlauf in Interpreter selbst verursachen. Obwohl es schwierig sein wird. Ähnlich auch Python ist eine interpretierte Sprache und ist sicher vor Pufferüberlauf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top