Projekte in AVSV

Cross-Language Library-Aware Security Analysis of Complex Software Systems

Aktuelle Softwaresysteme bestehen aus verschiedenen Programmiersprachen und Softwarebibliotheken von Drittanbietern. Alle Systemkomponenten können dabei in verschiedene Binärformate kompiliert werden. Infolgedessen ist das System nicht länger mit einem Analyseframework analysierbar, das nur ein Format unterstützt. Aus diesem Grund entwickeln wir Sicherheitsanalysen über Sprachgrenzen hinweg, um multilinguale Softwaresysteme analysieren zu können. Allerdings bedeutet das Entwickeln von multilingualen Analysen von Grund auf einen erheblichen Aufwand. Deshalb ist das erste Ziel unserer Arbeit die Entwicklung multilingualer Analysen durch die Wiederverwendung und Integration bestehender einsprachiger Analysen. Dieser Ansatz reduziert den benötigten Implementierungsaufwand und stellt sicher, dass multilinguale Analysen direkt von Weiterentwicklungen der integrierten einsprachigen Analysen profitieren.

Zudem adressieren wir die systematischen Sicherheitsrisiken von Softwarebibliotheken, in dem wir effektive Methoden entwickeln, um Softwarebibliotheken in bekannten Binärformaten zu identifizieren und sie nach Verwundbarkeiten zu durchsuchen.

Zunächst konzipieren wir eine generische Architektur für die Entwicklung multilingualer Analysen durch die Wiederverwendung existierender einsprachiger Analysen. Diese Architektur ist unabhängig von der analysierten Sprache, der Analyse und dem Analyseframework sein. Im Anschluss daran verwenden wir diese Architektur zur Entwicklung einer sprachübergreifenden Informationsflussanalyse für multilinguale Android-Applikationen, die in den Sprachen Java, JavaScript und WebAssembly geschrieben sind. Diese Informationsflussanalyse kann zum Erkennen von Lecks privater Daten in Android-Applikationen genutzt werden. Zudem erweitern wir die Informationsfluss-Analyse, um von Softwarebibliotheken ausgehende Sicherheitsrisiken zu erkennen, wie z.B. noch nicht behobene Schwachstellen. Zuletzt werden wir unsere Analyse für eine großangelegte Studie zur Sicherheit in komplexen Softwaresystemen verwenden mit dem Focus auf dem Finden sprachübergreifender Schwachstellen und Sicherheitsrisiken aufgrund der extensiven Verwendung von Softwarebibliotheken. Somit tragen wir signifikant zur Sicherheitsanalyse von Applikationen bei, die in mehreren Programmiersprachen geschrieben sind und Softwarebibliotheken verwenden.


Enhanced Vulnerability Detection

Werkzeuge zur automatischen Erkennung von Sicherheitslücken in Software arbeiten derzeit mit manuell definierten Schwachstellenmustern. Diese beziehen sich immer auf eine niedrige technische Ebene, z.B. API-Calls oder Datenflüsse. Diese Muster müssen ständig aktualisiert werden, um neue Bibliotheken zu unterstützen oder weitere Varianten desselben Fehlers einzupflegen.
In diesem Projekt sollen solche Fehlermuster automatisiert aus generischen Beschreibungen von Sicher­heits­eigen­schaften, z.B. „krypto­grafische Schlüssel dürfen nicht im Code hinterlegt werden“ abgeleitet werden. Hierdurch wird aus Sicht des menschlichen Analysten von den konkreten Codezeilen und API-Calls abstrahiert, wodurch sich der Analyst besser auf die Semantik seiner Sicherheitsfrage konzentrieren kann. Die Ableitung von generischen Eigenschaften auf Codeebene übernimmt eine KI. Zudem soll eine plattformübergreifende Sicherheitsanalyse ermöglicht werden.


Hybrid Fuzzing for Apps and Web Applications

Kritische Softwaresysteme in nahezu allen Anwendungsdomänen fallen regelmäßig durch schwerwiegende Sicherheitslücken auf. Zur Identifikation von Schwachstellen gibt es im Kontext der automatischen Programmanalyse sowohl statische, wie auch dynamische Verfahren, die jeweils ihre Vor- und Nachteile mit sich bringen. Ein häufig eingesetztes dynamisches Analyseverfahren ist das Fuzzing. In diesem Projekt soll diese Testmethodik weiterentwickelt werden, um die Effizienz und Effektivität bei der Identifikation von Sicherheitslücken zu steigern. Insbesondere soll untersucht werden, ob eine Kombination aus statischer und dynamischer Codeanalyse rentabel ist. Um eine vollständige hybride Analysemaschine zu erstellen, wird ein neuer Fuzzer in das Analysewerkzeug VUSC integriert. Die Forschung konzentriert sich dabei auf Java-basierte Anwendungen, wie Web- und Android-Anwendungen.


Visual and User-Centric Support for Verifying and Avoiding Vulnerabilities

Software ist in vielen Lebensbereichen weit verbreitet, aber kann Fehler oder Schwachstellen enthalten. Software-Schwachstellen sollten so früh wie möglich während der Entwicklung behoben werden. Um Entwickler zu unterstützen, können automatisierte Scanner Anwendungen analysieren, aber es gibt viele Gründe, warum diese Scanner derzeit in der Praxis nicht eingesetzt werden. Eine Möglichkeit, die Schnittstelle zwischen menschlichem Experten und dem Scanner zu verbessern, ist die Visualisierung von Daten. Dazu gehören Methoden zur effizienten visuellen Darstellung von Daten, um die Benutzer bei ihren Aufgaben zu unterstützen, z.B. bei der Triage von Sicherheitslücken. Mit Hilfe der Visualisierung von Softwareschwachstellen sollen so benutzbare und verständliche Anwendungen für Softwareentwickler entwickelt werden.


Vergangene Forschungsprojekte

Automatic Vulnerability Scanner for Mobile Applications

Im Rahmen dieses Projekts wird der Schwachstellenscanner VUSC entwickelt, der vollautomatisch Sicherheitslücken in mobilen Apps und den zugehörigen Backend-Diensten identifizieren kann. Mit VUSC können Unternehmen nicht nur ihre eigenen Ent­wicklungen prüfen, sondern auch eingekaufte Anwendungen oder Module, für die sie keinen Quellcode besitzen. Für die Analyse ist nur die binäre Anwendung erforderlich, wie sie auf dem Zielgerät installiert wird. Somit müssen sich Anwender nicht mehr auf die Aussagen der jeweiligen Hersteller verlassen, sondern können diese effizient überprüfen. Kern von VUSC ist die Verwendung plattformspezifischer semantischer Modelle. Statt einfache Muster zu erkennen, soll der Scanner die spezifische Semantik einer Android-App, einer iOS-App, eines Java EE-Webservices erkennen, und auf dieser Grundlage den Code beurteilen. Dieser Ansatz ermöglicht es, die Falschmeldungen des Scanners zu minimieren. Statt hunderte Meldungen zeitaufwendig manuell nachvollziehen und überprüfen zu müssen, können sich Analysten mit VUSC auf die realen Probleme konzentrieren. Zudem extrahiert der Scanner zu jeder Schwachstelle Detailinformationen: Mit welchem Server wird kommuniziert, welche Daten werden übertragen, welcher Algorithmus wird für die Transportverschlüsselung eingesetzt? Das Projekt stellt einen wichtigen Schritt dar, um von Coding Practices und Fehlermustern zu einer Risikobewertung zu gelangen. Mit den von VUSC ermittelten Detaildaten kann der Analyst viel leichter einschätzen, welche Schwachstellen relevant sind und priorisiert behoben werden müssen.

Mehr Informationen zum Codescanner VUSC


Automatic Vulnerability Verification

Automatisierte Schwachstellenscans bedeuten derzeit trotz aller damit einhergehenden Vorteile einen signifikanten zusätzlichen Aufwand für Entwicklungsteams. Die vom Scanner gefundenen potentiellen Lücken müssen manuell überprüft werden, um Falschmeldungen und auszusortieren und die Relevanz des Problems für eine priorisierte Behebung einzuschätzen. Viele gemeldete Lücken erweisen sich als irrelevant, z.B. wenn sich eine Lücke in einer Funktion befindet, die nur mit umfangreichen Benutzerberechtigungen überhaupt zur Verfügung steht. In diesem Fall würde ein Angreifer durch die Lücke keine zusätzlichen Zugriffsmöglichkeiten gewinnen, die er nicht ohnehin schon besitzt. In diesem Projekt sollen Verfahren entwickelt werden, um Lücken automatisch einzuschätzen. Dazu soll der Scanner versuchen, den betroffenen Code auszuführen und die Lücke auszulösen. Gelingt dies, wird die entsprechend Lücke für die sofortige Behebung priorisiert. Andernfalls ist zwar nicht ausgeschlossen, dass die Lücke dennoch existiert, doch sollten die nachweisbar vor­handenen und relevanten Lücken bei begrenzten Ressourcen Vorrang genießen. So lässt sich das Sicherheitsniveau steigern, ohne Entwicklungsprozesse zusätzlich zu verlangsamen.


Foundational models for secure software development

Während traditionell die Erkennung von Schwachstellen in Code durch statische oder dynamische Analysen erfolgte, verwenden moderne Ansätze Machine-Learning Methoden. Plattformen wie GitHub und Stack Overflow enthalten große Mengen an Code, welche als Datenquelle für Machine-Learning Modelle dienen. Insbesondere zeigten Deep Learning und Transformer als nützlich, um Code zu synthetisieren und sicherheitsrelevanten Missbrauch zu erkennen. Obwohl Projekte wie GitHub von Copilot das Potential von Maschine-Learning basierten Methoden demonstriert haben, zeigen jüngste Studien, dass ein erheblicher Teil des generierten Codes anfällig für Angriffe ist. Des weiteren behandeln Transformer Code als syntaktisch formatierten Text und ignorieren semantische Informationen wie Kontroll- und Datenfluss. Um diese Probleme zu lösen, wurden Knowledge Graphen adaptiert, die die Zusammenhänge textueller Daten in Programmen erfassen, welche aus Foren wie Stack Overflow und Programmdokumentation extrahiert werden.
Im Rahmen dieses Projekts werden wir eine Architektur für anpassbare Code Transformer entwickeln, in der Komponenten modular eingesetzt werden können um semantische Programminformationen in Code Knowledge Graphen einzufügen.


Further development of the CogniCrypt Assistant to ensure the correct use of crypto libraries

Kryptografische APIs unterstützen Entwickler bei der Durchführung von Aufgaben, die Daten schützen, wie Verschlüsselung oder Passwortverwaltung. Frühere Forschungen haben gezeigt, dass die Verwendung solcher APIs schwierig ist. CogniCrypt, das an der TU Darmstadt entwickelt wurde, hilft Entwicklern dabei, solche Missbräuche zu vermeiden. Es hilft Entwicklern mit zwei Komponenten. Die Code-Generator-Komponente stellt Vorlagen für die Verwendung von krypto­grafischen Aufgaben zur Verfügung, die als Ausgangspunkt dienen, da sich in Online-Foren bereitgestellter Code als fehlerhaft erwiesen hat. Die Komponente zur statischen Analyse verwendet Spezifikationen, die in einer Sprache namens Crysl geschrieben sind, um auf Fehler in der API-Nutzung hinzuweisen. Das Ziel dieses Projekts ist es, CogniCrypt zu professionalisieren, indem eine Open-Source-Gemeinschaft um es herum aufgebaut wird und professionelle Praktiken wie nächtliche Builds und kontinuierliche Integrationen eingebaut werden. Als Teil des Projekts soll CogniCrypt über Java und JCA hinaus erweitert werden, um andere Sprachen und Bibliotheken zu unterstützen. Darüber hinaus werden Ansätze untersucht, wie die Spezifikationssprache Crysl die Herausforderungen durch sich entwickelnde APIs und Standards unterstützt werden können.


Machine Learning for Vulnerability Detection

Um auf bestimmte Schwachstellen von Softwarecode zu prüfen, werden im klassischen Ansatz Fakten extrahiert, z. B. welche API-Funktionen mit welchen Werten aufgerufen werden, welche Datenflüsse im analysierten Programm existieren oder welche Einstellungen in Konfigurationsdateien des Zielprogramms vorgenommen wurden. Ein Regel- oder Machine-Learning-Modell kann dann unerwünschte Kombinationen dieser Fakten beschreiben. Im Gegensatz dazu zielt die ATHENE-Forschung auf einen ganzheitlichen Ansatz ab, der flexibel mit heterogenen Daten aus unterschiedlichen Quellen umgehen kann. Zu diesem Zweck wird die tiefe probabilistische Programmierung eingesetzt, die es dem Benutzer erlaubt, (tiefe) generative probabilistische Modelle als High-Level-Programme zu spezifizieren und diese Modelle dann in Inferenzprozeduren "herunter zu kompilieren". Probabilistische Regeln und tiefe Netze werden verwendet, um Schwachstellen in Softwareanwendungen zu identifizieren und anspruchsvolle Beziehungen zwischen den Entitäten von Softwareanwendungen zu extrahieren sowie Inferenzen über Fakten zu machen, die diese Entitäten betreffen. Insgesamt entsteht so die erste flexible Plattform für die schnelle Erstellung, Modellierung und Verwaltung von Trainingsdaten und Machine-Learning-Modellen für die Erkennung von Anwendungsschwachstellen.


User-centric visualization of security problems

Heutige Softwaresysteme werden durch Soft­ware­ent­wicklungs­prozesse erstellt, die nicht vor Fehlern gefeit sind, welche von Angreifern ausgenutzt werden können. Automatische Softwarescanner ermöglichen es Entwicklern, Sicherheitsanalysten und Datenschutzbeauftragten, ihre Anwendung zu analysieren, um Schwachstellen oder Datenschutzverstöße zu erkennen. Dennoch können diese Benutzergruppen nicht als homogene Gruppe betrachtet werden, da sie über unterschiedliches technisches Wissen verfügen. Auch sind Sicherheitsberichte von Softwarescannern durch viele False-Positive Meldungen oder die schiere Anzahl von Sicherheitslücken oft schwer zu verstehen.
Das Ziel dieses Projekts ist daher die Entwicklung von Visualisierungen in einem benutzerzentrierten Ansatz für diese Benutzergruppen. Damit ist es möglich auf den genauen Nutzungskontext sowie die Anforderungen und Ziele der Benutzergruppen einzugehen. Dazu gehören beispielsweise die Ermittlung des Sicherheitszustands einer Applikation, der Überblick über Software-Schwachstellen oder der Triage Prozess. Interaktive Visualisierungen ermöglichen es Nutzern auf diese Weise, fundiertere Entscheidungen für Privatsphäre und Cybersicherheit zu treffen.


Vulnerability Detection for Hybrid Apps using Generic Analyses

Moderne Anwendungen enthalten eine Vielzahl von Sicherheitslücken. Solche Schwachstellen führen u. a. zu Datenlecks und legen Code so offen, dass Angreifer ihn für böswillige Zwecke ausnutzen können. Die statische Codeanalyse kann helfen, solche Bedenken zu zerstreuen, indem sie Schwachstellen aufdeckt. Tools für die statische Analyse können alle Codepfade untersuchen, sind aber anfällig für False Positives und unpräzise, was die Praxistauglichkeit beeinträchtigt. Außerdem sind sie nicht in der Lage, mit verschleiertem Code umzugehen, was laut einer früheren Studie unseres Teams weit verbreitet ist. Aktuelle statische Analyseansätze zielen auf eine Sprache ab. In der Praxis kommt es jedoch häufig vor, dass eine einzelne Anwendung gleichzeitig Java und JavaScript verwendet; JavaScript vor allem zur Erstellung von Benutzeroberflächen oder Web-Clients. Das Ziel dieses Projekts ist es, skalierbare und präzise generische statische Analysen für hybride Anwendungen zu entwickeln. Der Ansatz wird zunächst Code mit Hilfe des bestehenden Prototyps StringHound entschleiern und dann die hauseigene skalierbare Datenflussanalyse in Kombination mit modernster JavaScript-Typanalyse anwenden. Dabei wird das modulare, erweiterbare Framework OPAL als Basis verwendet.