Simple Science

Hochmoderne Wissenschaft einfach erklärt

# Computerwissenschaften# Software-Entwicklung

Neues Tool PilaiPidi erkennt Buffer Overflow Sicherheitslücken

PilaiPidi hilft dabei, Bufferüberlauf-Probleme in Java- und C/C++-Anwendungen zu finden.

― 8 min Lesedauer


PilaiPidi findetPilaiPidi findetBuffer-Schwachstellenmehrsprachigen Apps wird einfacher.Das Erkennen von Pufferüberläufen in
Inhaltsverzeichnis

Viele Apps heute nutzen mehr als eine Programmiersprache. Das wird oft gemacht, um die Stärken jeder Sprache auszunutzen, wie zum Beispiel bessere Leistung oder den Zugang zu speziellen Bibliotheken. Wenn verschiedene Sprachen kombiniert werden, kann es aber schwieriger sein, Bugs zu finden. Ein häufiges Problem, das auftreten kann, ist ein Buffer Overflow, was ein Fehler ist, der auftritt, wenn ein Programm mehr Daten in einen Puffer (eine Speicherstelle) schreibt, als dieser halten kann. Das kann zu Abstürzen oder sogar zu Sicherheitsproblemen führen.

In diesem Artikel sprechen wir über ein neues Tool namens PilaiPidi. Dieses Tool hilft Entwicklern, Buffer Overflow-Schwachstellen in Anwendungen zu finden, die sowohl Java als auch C/C++ verwenden. Unser Ansatz zur Lösung dieses Problems unterscheidet sich von bestehenden Methoden, da er sich auf die Analyse des Quellcodes statt des Binärcodes konzentriert.

Hintergrund

Buffer Overflow

Ein Puffer ist ein festgelegter Speicherplatz, um Daten zu speichern. Wenn ein Programm mehr Daten in einen Puffer schreibt, als dieser halten kann, kann das zu einem Buffer Overflow führen. Das kann zu verschiedenen Problemen führen, einschliesslich Programmabstürzen oder unbefugtem Zugriff auf Systemressourcen.

Buffer Overflows sind in Sprachen wie C und C++ häufig, weil diese Sprachen nicht automatisch überprüfen, ob ein Puffer genug Platz hat, bevor Daten geschrieben werden. Es liegt am Programmierer, sicherzustellen, dass der Puffer korrekt angesprochen wird. Leider können Programmierer die Grösse falsch berechnen oder Daten nicht korrekt verarbeiten, was zu Überlauf-Fehlern führen kann.

Cross-Language-Anwendungen

Viele Android-Anwendungen nutzen sowohl Java als auch C/C++. Java wird oft für die Hauptanwendungslogik verwendet, während C/C++ für leistungsrelevante Aufgaben oder zur Nutzung spezifischer Bibliotheken eingesetzt wird. Diese beiden Sprachen interagieren über ein Mechanismus namens Java Native Interface (JNI).

Die Verwendung mehrerer Sprachen ermöglicht es Entwicklern, effiziente Anwendungen zu erstellen, bringt jedoch auch Herausforderungen mit sich. Bugs können auftreten, wenn Daten von einer Sprache zur anderen fliessen. Zum Beispiel, wenn eine Java-Methode Daten an eine C/C++-Funktion sendet, können diese Daten zu einem Buffer Overflow auf der C/C++-Seite führen, wenn sie nicht richtig behandelt werden.

Aktuelle Herausforderungen

Bestehende Tools zur Fehlersuche in mehrsprachigen Anwendungen konzentrieren sich oft nur auf eine Sprache oder verfolgen den Datenfluss zwischen den Sprachen nicht richtig. Einige Methoden suchen möglicherweise separat nach Bugs in Java oder C/C++, kämpfen jedoch damit, Probleme zu identifizieren, die auftreten, wenn Daten die Sprachgrenzen überschreiten.

In früheren Studien haben Forscher verschiedene Techniken ausprobiert, um den Datenfluss in mehrsprachigen Anwendungen zu analysieren, aber viele haben Einschränkungen. Einige Methoden konzentrieren sich auf kompilierte Codes (binär), was es schwierig macht, Buffer Overflows zu finden, da sie die Details auf Quellcode-Ebene nicht berücksichtigen.

Das PilaiPidi-Tool

Wir haben PilaiPidi entwickelt, um die Herausforderungen beim Erkennen von Buffer Overflow-Schwachstellen in Java- und C/C++-Anwendungen zu adressieren. Unser Tool analysiert den Quellcode von Anwendungen, um die Datenflüsse zwischen diesen beiden Sprachen zu verfolgen.

Überblick über PilaiPidi

PilaiPidi funktioniert, indem es den Quellcode von Java und C/C++ in ein gemeinsames Format konvertiert. Dieses Format ermöglicht es uns, die Datenflüsse innerhalb und zwischen den beiden Sprachen zu analysieren. Die Hauptschritte unseres Tools sind wie folgt:

  1. AST-Repräsentationsgenerator: Der Quellcode wird in ein Abstract Syntax Tree (AST)-Format konvertiert, das alle ursprünglichen Informationen bewahrt.

  2. Symbol Finder: In dieser Phase werden die Typen der Variablen, Funktionen und Klassen im Code identifiziert, was für eine korrekte Typüberprüfung notwendig ist.

  3. Slice-Profil-Generator: Diese Komponente erstellt Slice-Profile für jede Variable im Quellcode und erfasst Informationen darüber, wo jede Variable definiert und verwendet wird.

  4. Datenflussgenerator: Das Tool kombiniert die AST-Repräsentation und die Slice-Profile, um ein Datenflussdiagramm zu erstellen, das potenzielle Quellen und Senken im Code identifiziert.

  5. Source-to-Sink-Pfadfinder: In dieser Phase werden Pfade von den Datenquellen (Benutzereingaben und Funktionsaufrufen) zu den Senken (Pufferzugriffen) gesucht, die zu Buffer Overflows führen können.

  6. Pufferzugriffsanalysator: Der letzte Schritt überprüft, ob ordnungsgemässe Grenzprüfungen entlang der identifizierten Datenfluss-Pfade vorhanden sind.

Erfolge von PilaiPidi

Mit PilaiPidi haben wir erfolgreich 23 Buffer Overflow-Schwachstellen in sechs bekannten Android-Anwendungen gefunden. Davon haben Entwickler 11 Schwachstellen in drei verschiedenen Anwendungen bestätigt.

Technische Details

Abstract Syntax Tree (AST)-Repräsentation

Der erste Schritt unseres Tools ist die Umwandlung des Quellcodes in ein AST-Format. Das AST bietet eine strukturierte Darstellung des Codes, die wichtige Informationen behält, wie die Beziehungen zwischen verschiedenen Komponenten (Klassen, Methoden und Variablen).

Durch die Verwendung eines Open-Source-Tools namens srcML haben wir AST-Darstellungen sowohl von Java- als auch von C/C++-Code generiert. Dadurch konnten wir den Code analysieren, ohne den Kontext oder wichtige Details zu verlieren.

Symbol Finder

Die Phase zur Symbolfindung sammelt Typinformationen für alle Konstrukte im Code. Sie sucht nach den Typen von Variablen, Funktionen und Klassen und erstellt ein Modell der Code-Struktur. Diese Informationen sind entscheidend, um zu verstehen, wie Datenflüsse zu Schwachstellen führen können.

Die Ausgabe beinhaltet eine Hierarchie von Symbolen, wobei jedes Symbol seinen Namen, Typ und alle übergeordneten Symbole enthält. Diese strukturierte Information ist notwendig, um später Slice-Profile zu erstellen.

Slice-Profil-Generator

In dieser Phase analysieren wir die AST-Repräsentation, um Slice-Profile für jede Variable zu erstellen. Ein Slice-Profil enthält Informationen darüber, wo jede Variable definiert ist, wo sie verwendet wird und welche abhängigen Variablen es gibt. Durch das Erfassen dieser Informationen können wir den Datenfluss durch das Programm verfolgen.

Jedes Slice-Profil enthält auch die Grösse oder den Wert der Variable, was entscheidend ist, um Buffer Overflows zu identifizieren.

Datenflussgenerator

Der Datenflussgenerator kombiniert die AST-Repräsentation und die Slice-Profile, um ein Datenflussdiagramm zu erstellen. Dieses Diagramm identifiziert, wie Daten durch die Anwendung fliessen, von Quellen (wie Benutzereingaben) zu Senken (wie Pufferzugriffen).

Während dieser Phase identifizieren wir Funktionsaufrufe und stellen sicher, dass sie den erwarteten Parametern entsprechen, was die Chancen auf falsche Positivmeldungen in unseren Ergebnissen verringert.

Source-to-Sink-Pfadfinder

Sobald wir das Datenflussdiagramm haben, konzentrieren wir uns darauf, potenzielle Pfade von Quellen zu Senken zu finden. Der Source-to-Sink-Pfadfinder identifiziert, wo Benutzereingaben zu Pufferzugriffen führen können, was entscheidend für die Erkennung von Schwachstellen ist.

Wir verwenden ein maschinelles Lernmodell, um Funktionen im Android SDK als Quellen oder Senken zu klassifizieren. Diese Klassifizierung hilft uns, potenzielle Einstiegspunkte für bösartige Daten und mögliche Missbrauchsstellen zu identifizieren.

Pufferzugriffsanalysator

In der letzten Phase überprüfen wir, ob Grenzprüfungen für die identifizierten Pfade vorhanden sind. Das ist wichtig, um festzustellen, ob eine Buffer Overflow-Schwachstelle existiert. Wenn wir irgendwelche Pfade finden, bei denen auf einen Puffer ohne ordnungsgemässe Grenzprüfungen zugegriffen wird, markieren wir diese als potenzielle Schwachstellen.

Real-World-Evaluation

Um die Wirksamkeit von PilaiPidi zu bewerten, haben wir es auf mehrere bekannte Android-Anwendungen angewendet. Unser Tool hat 23 potenzielle Buffer Overflow-Schwachstellen erkannt, und wir haben 11 davon mit Hilfe der Entwickler bestätigt.

Als wir die Ergebnisse von PilaiPidi mit anderen Tools verglichen haben, stellten wir fest, dass bestehende Tools nicht die gleichen Schwachstellen erkennen konnten. Flawfinder und Cppcheck, die sich ausschliesslich auf C/C++ konzentrieren, berichteten zwar über viele Probleme, aber nicht über die bestätigten Schwachstellen, die von PilaiPidi gefunden wurden.

Vorteile von PilaiPidi

Frühe Erkennung von Schwachstellen

Durch die Analyse des Quellcodes in einem frühen Stadium ermöglicht PilaiPidi Entwicklern, Buffer Overflow-Schwachstellen zu identifizieren, bevor die Anwendung bereitgestellt wird. Das kann Zeit und Ressourcen sparen im Vergleich zu Fehlerbehebungen nach der Bereitstellung.

Analyse über Sprachgrenzen hinweg

Die Fähigkeit, Datenflüsse zwischen Java und C/C++ zu analysieren, ist ein grosser Vorteil von PilaiPidi. Viele bestehende Tools können keine übergreifenden Sprachschwächen behandeln und lassen Entwickler damit ein Risiko, kritische Probleme zu übersehen.

Kontextuelles Bewusstsein

PilaiPidi bietet kontextuelle Informationen darüber, wie Daten durch die Anwendung fliessen. Das bedeutet, dass Entwickler besser verstehen können, unter welchen Bedingungen Schwachstellen entstehen, was ihnen hilft, sichereren Code zu schreiben.

Zukünftige Arbeiten

Obwohl PilaiPidi ein vielversprechendes Tool ist, gibt es noch Verbesserungsmöglichkeiten. Zukünftige Arbeiten könnten die Erweiterung der Arten von Schwachstellen beinhalten, die wir erkennen können, und die Verfeinerung der Analyse zur weiteren Reduzierung von Fehlalarmen.

Ausserdem können wir die Fähigkeiten des Tools verbessern, um Prüfungen auf der Java-Seite der Anwendung durchzuführen, da der aktuelle Fokus stark auf der C/C++-Seite liegt.

Fazit

Zusammengefasst ist PilaiPidi ein innovatives Tool zur Erkennung von Buffer Overflow-Schwachstellen in mehrsprachigen Android-Anwendungen. Durch die Analyse des Quellcodes bietet es Entwicklern wertvolle Einblicke in Datenflüsse und potenzielle Risiken.

Mit seinem einzigartigen Ansatz ist PilaiPidi ein Schritt nach vorne zur Verbesserung der Sicherheit von Anwendungen, die mehrere Programmiersprachen verwenden, und stellt sicher, dass Entwickler sicherere und zuverlässigere Software erstellen können.

Originalquelle

Titel: Statically Detecting Buffer Overflow in Cross-language Android Applications Written in Java and C/C++

Zusammenfassung: Many applications are being written in more than one language to take advantage of the features that different languages provide such as native code support, improved performance, and language-specific libraries. However, there are few static analysis tools currently available to analyse the source code of such multilingual applications. Existing work on cross-language (Java and C/C++) analysis fails to detect buffer overflow vulnerabilities that are of cross-language nature. In this work, we are addressing how to do cross-language analysis between Java and C/C++. Specifically, we propose an approach to do data flow analysis between Java and C/C++ to detect buffer overflow. We have developed PilaiPidi, a tool that can automatically analyse the data flow in projects written in Java and C/C++. Using our approach, we were able to detect 23 buffer overflow vulnerabilities, which are of cross-language nature, in six different well-known Android applications, and out of these, developers have confirmed 11 vulnerabilities in three applications.

Autoren: Kishanthan Thangarajah, Noble Mathews, Michael Pu, Meiyappan Nagappan, Yousra Aafer, Sridhar Chimalakonda

Letzte Aktualisierung: 2023-05-17 00:00:00

Sprache: English

Quell-URL: https://arxiv.org/abs/2305.10233

Quell-PDF: https://arxiv.org/pdf/2305.10233

Lizenz: https://creativecommons.org/licenses/by/4.0/

Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.

Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.

Mehr von den Autoren

Ähnliche Artikel