DE102020208543A1 - Method and device for performing a dynamic security check of software programs - Google Patents

Method and device for performing a dynamic security check of software programs Download PDF

Info

Publication number
DE102020208543A1
DE102020208543A1 DE102020208543.9A DE102020208543A DE102020208543A1 DE 102020208543 A1 DE102020208543 A1 DE 102020208543A1 DE 102020208543 A DE102020208543 A DE 102020208543A DE 102020208543 A1 DE102020208543 A1 DE 102020208543A1
Authority
DE
Germany
Prior art keywords
program
input
fuzzing
input sequence
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102020208543.9A
Other languages
German (de)
Inventor
Hans LOEHR
Anupam Sarkar
Rakshith Amarnath
Simon Greiner
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Robert Bosch GmbH
Original Assignee
Robert Bosch GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Robert Bosch GmbH filed Critical Robert Bosch GmbH
Priority to DE102020208543.9A priority Critical patent/DE102020208543A1/en
Priority to CN202110766802.3A priority patent/CN113918446A/en
Publication of DE102020208543A1 publication Critical patent/DE102020208543A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Die Erfindung betrifft ein computer-implementiertes Verfahren zum Testen eines Programmcodes (p) mithilfe von Fuzzing, wobei zustandsbehaftete Fuzzing-Prozesse für den zu testenden Programmcode (p) jeweils mit einer variierenden Eingabesequenz (i1...in) aus einem oder mehreren Eingabeelementen (i) durchgeführt werden, wobei jeder zustandsbehaftete Fuzzing-Prozess eine Programmausführung mit den nacheinander zugeführten Eingabeelementen (i) der Eingabesequenz (i1...in) durchführt und nach Ausführung mit dem jeweils zugeführten Eingabeelement (i) eine Programmablaufbeobachtung (obs) speichert, die angibt, ob ein Programmausführungsfehler aufgetreten ist oder welche Programmpfade des Programmcodes (p) durchlaufen worden sind, wobei die Zuführung der Eingabeelemente (i) der Eingabesequenz (i1...in) zu dem ausgeführten Programmcode ohne Rücksetzen eines Programmzustands des Programmcodes (p) auf einen vorgegebenen Programmzustand erfolgt.The invention relates to a computer-implemented method for testing a program code (p) using fuzzing, with stateful fuzzing processes for the program code (p) to be tested each having a varying input sequence (i1...in) made up of one or more input elements ( i) are carried out, with each stateful fuzzing process carrying out a program execution with the successively supplied input elements (i) of the input sequence (i1...in) and, after execution with the input element (i) supplied in each case, storing a program flow observation (obs) which indicates whether a program execution error has occurred or which program paths of the program code (p) have been run through, the supply of the input elements (i) of the input sequence (i1...in) to the executed program code without resetting a program state of the program code (p). a predetermined program state occurs.

Description

Technisches Gebiettechnical field

Die Erfindung betrifft Verfahren zum Testen eines Programmcodes durch sogenanntes Fuzzing-Testen. Die vorliegende Erfindung betrifft insbesondere Maßnahmen zur Effizienzsteigerung von Fuzzing-Testverfahren.The invention relates to methods for testing a program code by so-called fuzzing testing. The present invention relates in particular to measures for increasing the efficiency of fuzzing test methods.

Technischer HintergrundTechnical background

Ein herkömmliches Verfahren zur Detektion von Fehlern in einer auf einem Computersystem ausgeführten Programmcode, der in Software oder Hardware implementiert sein kann, besteht darin, dieses mithilfe eines Fuzzing-Testverfahrens auf Programmausführungsfehler oder Systemabstürze zu untersuchen. Dabei werden die sogenannten Fuzzing-Eingabeelemente für das Computersystem generiert, einen zu testenden Programmcode mit den Eingabeelementen ausgeführt und die Funktion des Algorithmus des Programmcodes überwacht. Die Überwachung der Ausführung des Programmcodes umfasst das Feststellen, ob der Ablauf des Algorithmus zu einem Programmausführungsfehler, d.h. z.B. einem Systemabsturz oder unerwarteten Ausführungsstopp, führt.A conventional method for detecting errors in a program code executed on a computer system, which can be implemented in software or hardware, consists in examining this for program execution errors or system crashes using a fuzzing test method. The so-called fuzzing input elements for the computer system are generated, a program code to be tested is executed with the input elements and the function of the algorithm of the program code is monitored. Monitoring the execution of the program code includes determining whether the execution of the algorithm leads to a program execution error, i.e. e.g. a system crash or an unexpected execution stop.

Während des Ausführens des Programms wird das interne Verhalten des Programmablaufs überwacht, insbesondere hinsichtlich der durch den Programmcode ausgeführten Programmablaufpfade. Dieser Vorgang wird mit unterschiedlichen Eingabeelementen wiederholt, um eine Information über das Verhalten des Programmcodes für eine große Bandbreite an Eingabeelementen zu erhalten. Ziel der Programmcode-Überwachung besteht darin, die Eingabeelemente so zu generieren, dass eine möglichst große Überdeckung der Programmablaufpfade erreicht wird, d.h. es wird eine möglichst große Zahl an Programmablaufpfaden während der wiederholten Variation der Eingabeelemente durchlaufen.While the program is being executed, the internal behavior of the program flow is monitored, in particular with regard to the program flow paths executed by the program code. This process is repeated with different input elements in order to obtain information about the behavior of the program code for a wide range of input elements. The aim of program code monitoring is to generate the input elements in such a way that the greatest possible overlap of the program flow paths is achieved, i.e. the largest possible number of program flow paths is run through during the repeated variation of the input elements.

Tritt während einer Ausführung eines Programmcodes ein Fehler bzw. ein unerwartetes Verhalten auf, wird dies durch das Fuzzing-Werkzeug erkannt und entsprechende Informationen, die angeben, welche Fuzzing- Eingabeelemente zu dem Fehler geführt hat, signalisiert. Beispiele für derartige Fuzzing-Werkzeuge sind American Fuzzing Lop, libFuzz oder honggfuzz.If an error or unexpected behavior occurs during the execution of a program code, this is recognized by the fuzzing tool and appropriate information is signaled which specifies which fuzzing input elements led to the error. Examples of such fuzzing tools are American Fuzzing Lop, libFuzz or honggfuzz.

Offenbarung der ErfindungDisclosure of Invention

Erfindungsgemäß sind ein Verfahren zum Durchführen eines Fuzzing-Testverfahrens für einen Software-Algorithmus gemäß Anspruch 1 sowie durch die Vorrichtung und das Fuzzing-Testsystem gemäß den nebengeordneten Ansprüchen vorgesehen.According to the invention, a method for carrying out a fuzzing test method for a software algorithm according to claim 1 and by the device and the fuzzing test system according to the independent claims are provided.

Weitere Ausgestaltungen sind in den abhängigen Ansprüchen angegeben.Further developments are specified in the dependent claims.

Gemäß einem ersten Aspekt ist ein computer-implementiertes Verfahren zum Testen eines Programmcodes mithilfe von Fuzzing, wobei zustandsbehaftete Fuzzing-Prozesse für den zu testenden Programmcode jeweils mit einer variierenden Eingabesequenz aus einem oder mehreren Eingabeelementen durchgeführt werden, wobei jeder zustandsbehaftete Fuzzing-Prozess eine Programmausführung mit den nacheinander zugeführten Eingabeelementen der Eingabesequenz durchführt und nach Ausführung mit dem jeweils zugeführten Eingabeelement eine Programmablaufbeobachtung speichert, die angibt, ob ein Programmausführungsfehler aufgetreten ist oder welche Programmpfade des Programmcodes durchlaufen worden sind, wobei die Zuführung der Eingabeelemente der Eingabesequenz zu dem ausgeführten Programmcode ohne Rücksetzen eines Programmzustands des Programmcodes auf einen vorgegebenen Programmzustand erfolgt.According to a first aspect, a computer-implemented method for testing a program code using fuzzing, wherein stateful fuzzing processes for the program code to be tested are each performed with a varying input sequence of one or more input elements, each stateful fuzzing process having a program execution the successively supplied input elements of the input sequence and, after execution, stores a program flow observation with the respectively supplied input element, which indicates whether a program execution error has occurred or which program paths of the program code have been run through, the supply of the input elements of the input sequence to the executed program code without resetting a Program status of the program code takes place on a predetermined program status.

Während herkömmliche Fuzzing-Tools auf die Vorgabe eines einzelnen Eingabeelements zur Ausführung ausgehend von einem definierten Anfangszustand begrenzt ist, ermöglicht es das Protokoll-Fuzzing, einen Software-Algorithmus eines Programmcodes durch Vorgabe von Eingabesequenzen zu testen. Dabei wird ausgehend von einem definierten Anfangszustand sukzessive eine Reihe von Eingabeelementen für die Ausführung des Software-Programms generiert und ein nächstes Eingabeelement an das die Software ausführende Computersystem übergeben, wenn durch das vorangegangene Eingabeelement ein entsprechender Zustand erreicht worden ist. Die Eingabesequenz wird jedoch bislang unabhängig von einer Überwachung des Programmablaufs bereitgestellt, da die Berücksichtigung des internen Verhaltens des Programmablaufs bei Eingabesequenzen nicht möglich ist. Dagegen können herkömmliche Fuzzing-Tools den Programmcode nur durch ein einzelnes Eingabeelement testen, wobei das Eingabeelement jedoch die Berücksichtigung des Programmablaufs ermöglicht.While conventional fuzzing tools are limited to specifying a single input element for execution starting from a defined initial state, protocol fuzzing makes it possible to test a software algorithm of a program code by specifying input sequences. Starting from a defined initial state, a series of input elements for the execution of the software program are successively generated and a next input element is transferred to the computer system executing the software when a corresponding state has been reached by the previous input element. However, the input sequence has hitherto been provided independently of a monitoring of the program flow, since it is not possible to take into account the internal behavior of the program flow in the case of input sequences. In contrast, conventional fuzzing tools can use the Pro test program code only through a single input element, but the input element allows the program flow to be taken into account.

Ein Programmcode wird hierin in einem weiten Sinne verstanden und umfasst herkömmliche auf einem Computersystem ausführbare Software sowie in Hardware implementierte Algorithmen in Computersystemen oder sonstigen Datenverarbeitungseinrichtungen.A program code is understood herein in a broad sense and includes conventional software executable on a computer system as well as algorithms implemented in hardware in computer systems or other data processing devices.

Das obige Verfahren ermöglicht es, eine Eingabesequenz für ein Fuzzing bereitzustellen, die ein internes Verhalten des zu überprüfenden Software-Algorithmus berücksichtigt. Die Eingabesequenzen sind aus Eingabeelementen zusammengesetzt, die jeweils ein Zeichen oder eine Zeichenkette aus mehreren Zeichen, eine Code-Folge oder dergleichen bestehen können. Insbesondere werden Eingabesequenzen, die zu vorbestimmten internen Zuständen des Programmcodes führen, systematisch gesucht und dann eine weitere Analyse ausgehend von diesem bestimmten Zustand wiederaufgenommen. Der Begriff Zustand bezeichnet hierin eine Reihe von ausgeführten Programmpfaden, im Weiteren auch als Programmablaufbeobachtungen bezeichnet. Dadurch wird die Überdeckung des zu testenden Zustandsraums eines Programmcodes, d. h. die durchlaufenen Programmablaufpfade während des Testens, verbessert.The above method makes it possible to provide an input sequence for fuzzing that takes into account an internal behavior of the software algorithm to be checked. The input sequences are composed of input elements, each of which can consist of a character or a character string made up of several characters, a code sequence or the like. In particular, input sequences leading to predetermined internal states of the program code are systematically searched for and then further analysis is resumed starting from that particular state. Here, the term state designates a series of executed program paths, also referred to below as program flow observations. As a result, the coverage of the state space of a program code to be tested, i. H. the program flow paths run through during testing are improved.

Im Gegensatz zu herkömmlichem Protokoll-Fuzzing wird entsprechend obigem Verfahren der interne Zustand eines Programmcodes über mehrere Eingabeelemente einer Eingabesequenz beobachtet und im Weiteren die Analyse entsprechend des internen Verhaltens des Programmcodes, d. h. die Überdeckung des Programmablaufpfads, optimiert.In contrast to conventional protocol fuzzing, the internal state of a program code is observed over several input elements of an input sequence according to the above method and the analysis is then carried out according to the internal behavior of the program code, i. H. the coverage of the program flow path, optimized.

Es kann vorgesehen sein, dass die Eingabesequenz vor jeder Ausführung eines zustandsbehafteten Fuzzing-Prozesses generiert wird, wobei das Generieren der Eingabesequenz ein Ersetzen oder ein Einfügen eines insbesondere von einem Fuzzing-Tool gemäß einer Heuristik abhängig von den Ergebnissen vorangegangener Programmausführungen generierten Eingabeelements umfasst, das von einer oder mehreren letzten Ausführungen des Programmcodes abhängt.It can be provided that the input sequence is generated before each execution of a stateful fuzzing process, wherein the generation of the input sequence includes replacing or inserting an input element generated in particular by a fuzzing tool according to a heuristic depending on the results of previous program executions, which depends on one or more recent executions of the program code.

So kann abhängig von einer ermittelten Eingabesequenzmenge eine Hilfs-Eingabesequenz ermittelt werden, wobei die Einzeleingabe an einer vorgegebenen Position der Hilfs-Eingabesequenz eingefügt wird, um eine nächste zu testende Eingabesequenz zu erhalten.An auxiliary input sequence can thus be determined as a function of a determined input sequence set, with the individual input being inserted at a predetermined position in the auxiliary input sequence in order to obtain a next input sequence to be tested.

Weiterhin können eine oder mehrere Eingabesequenzen für die zustandsbehafteten Fuzzing-Prozesse durch Aufteilen von Eingabeelementen der Eingabesequenzmenge generiert werden.Furthermore, one or more input sequences for the stateful fuzzing processes can be generated by dividing input elements of the input sequence set.

Es kann vorgesehen sein, dass die Eingabesequenz vor jeder Ausführung eines Fuzzing-Prozesses generiert wird, wobei das Generieren der Eingabesequenz ein Ersetzen oder ein Einfügen eines insbesondere von einem Fuzzing-Tool gemäß einer Heuristik abhängig von den Ergebnissen vorangegangener Programmausführungen generierten Eingabeelements umfasst, das von einer oder mehreren letzten Ausführungen des Programmcodes abhängt.Provision can be made for the input sequence to be generated before each execution of a fuzzing process, with the generation of the input sequence comprising replacing or inserting an input element which is generated in particular by a fuzzing tool according to a heuristic depending on the results of previous program executions one or more last executions of the program code.

Bei üblichen Fuzzing Werkzeugen wird dem Fuzzing-Tool zu Beginn entweder eine Menge von Eingabeelementen vorgegeben oder es erzeugt diese Menge von Eingabeelementen zufällig. Während der Ausführung des zu testenden Programms mit einem dieser Eingabeelemente beobachtet das Fuzzing-Tool, welche Programmpfade ausgeführt werden und merkt sich diese Ausgaben. Anschließend modifiziert das Fuzzing-Tool dieses Eingabeelement durch Einfügen, Weglassen oder Abändern von Teilen des Eingabeelements. Bei wiederholter Ausführung mit einem neuen Eingabeelement erkennt das Fuzzing-Tool, welche Teile des Eingabeelements zu welchen Veränderungen im ausgeführten Programmpfad führen. Mit diesem Wissen kann nach der Ausführung von vielen verschiedenen Eingabeelementen, sowie der Beobachtung der Änderungen in der Programmausführung das Fuzzing-Tool gezielt nach Eingabeelementen suchen, die zu Ausführungspfaden führen, die bisher noch nicht beobachtet wurden.With conventional fuzzing tools, the fuzzing tool is either given a set of input elements at the beginning or it randomly generates this set of input elements. While executing the program to be tested with one of these input elements, the fuzzing tool observes which program paths are executed and notes these outputs. Then the fuzzing tool modifies this input element by inserting, omitting or changing parts of the input element. With repeated execution with a new input element, the fuzzing tool recognizes which parts of the input element lead to which changes in the executed program path. With this knowledge, after executing many different input elements and observing the changes in program execution, the fuzzing tool can specifically search for input elements that lead to execution paths that have not been observed before.

Alternativ kann die Eingabesequenz vor jeder Ausführung eines der Fuzzing-Prozesse abhängig von einer Hilfs-Eingabesequenz generiert werden, wobei die Hilfs-Eingabesequenz abhängig von einem Unterschied zwischen Programmablaufbeobachtungen mit zwei Eingabesequenzen, die aus einer Eingabesequenzmenge generiert werden, generiert wird, wobei insbesondere eine der Eingabesequenzen eine Reihe von Eingabeelementen aufweist, die Bestandteil der anderen der Eingabesequenzen ist.Alternatively, the input sequence can be generated before each execution of one of the fuzzing processes as a function of an auxiliary input sequence, with the auxiliary input sequence being generated as a function of a difference between program flow observations with two input sequences that are generated from an input sequence set, with one of the Input sequences has a number of input elements that is part of the other input sequences.

Gemäß einer weiteren Alternative kann die Eingabesequenz vor jeder Ausführung eines der Fuzzing-Prozesse abhängig von einer Hilfs-Eingabesequenz generiert werden, wobei die Hilfs-Eingabesequenz abhängig von einem Programmzustand, den der Programmcode nach einer Ausführung mit der Eingabesequenz aufweist, generiert wird.According to a further alternative, the input sequence can be generated before each execution of one of the fuzzing processes as a function of an auxiliary input sequence, the auxiliary input sequence is generated depending on a program state that the program code has after execution with the input sequence.

Weiterhin kann die Eingabesequenz vor jeder Ausführung eines der Fuzzing-Prozesse abhängig von einer Hilfs-Eingabesequenz generiert werden, wobei die Hilfs-Eingabesequenz abhängig von dem Ergebnis einer statischen Programmanalyse abhängig von einem vorgegebenen Programmzustand ermittelt wird, wobei für die Fuzzing-Prozesse verschiedene Programmzustände vorgegeben werden.Furthermore, the input sequence can be generated before each execution of one of the fuzzing processes as a function of an auxiliary input sequence, the auxiliary input sequence being determined as a function of the result of a static program analysis as a function of a specified program state, with different program states being specified for the fuzzing processes will.

Gemäß einem weiteren Aspekt ist eine Vorrichtung zum Testen eines Programmcodes mithilfe von Fuzzing vorgesehen, wobei die Vorrichtung ausgebildet ist, um zustandsbehaftete Fuzzing-Prozesse für den zu testenden Programmcode jeweils mit einer variierenden Eingabesequenz aus einem oder mehreren Eingabeelementen durchzuführen, wobei jeder zustandsbehaftete Fuzzing-Prozess eine Programmausführung mit den nacheinander zugeführten Eingabeelementen der Eingabesequenz durchführt und nach Ausführung mit dem jeweils zugeführten Eingabeelement eine Programmablaufbeobachtung speichert, die angibt, ob ein Programmausführungsfehler aufgetreten ist oder welche Programmpfade des Programmcodes durchlaufen worden sind, wobei die Zuführung der Eingabeelemente der Eingabesequenz zu dem ausgeführten Programmcode ohne Rücksetzen eines Programmzustands des Programmcodes auf einen vorgegebenen Programmzustand erfolgt.According to a further aspect, a device for testing a program code using fuzzing is provided, the device being designed to carry out stateful fuzzing processes for the program code to be tested, each with a varying input sequence of one or more input elements, each stateful fuzzing process carries out a program execution with the successively supplied input elements of the input sequence and, after execution with the respectively supplied input element, stores a program flow observation which indicates whether a program execution error has occurred or which program paths of the program code have been run through, the supply of the input elements of the input sequence to the executed program code takes place without resetting a program state of the program code to a predetermined program state.

Figurenlistecharacter list

Ausführungsformen werden nachfolgend anhand der beigefügten Zeichnungen näher erläutert. Es zeigen:

  • 1 ein Flussdiagramm und ein Pseudocode zur Veranschaulichung eines Verfahrens zum Durchführen eines Fuzzing-Testverfahrens,
  • 2 ein Flussdiagramm zur Veranschaulichung eines Unterprogramms für den Ablaufplan der 1;
  • 3 ein Pseudocode zum Erzeugen einer zu testenden Eingabesequenz;
  • 4 ein Pseudocode zum Erzeugen einer zu testenden Eingabesequenz;
  • 5a ein Pseudocode zum Erzeugen einer Hilfs-Eingabesequenz für den Pseudocode der 4;
  • 5b ein Pseudocode zum Erzeugen einer Hilfs-Eingabesequenz für den Pseudocode der 4;
  • 5c ein Pseudocode zum Erzeugen einer Hilfs-Eingabesequenz für den Pseudocode der 4;
  • 5d ein Pseudocode zum Erzeugen einer Hilfs-Eingabesequenz für den Pseudocode der 4;
Embodiments are explained in more detail below with reference to the accompanying drawings. Show it:
  • 1 a flowchart and pseudocode to illustrate a method for performing a fuzzing test method,
  • 2 a flowchart illustrating a subprogram for the flowchart 1 ;
  • 3 pseudocode for generating an input sequence to be tested;
  • 4 pseudocode for generating an input sequence to be tested;
  • 5a a pseudocode for generating an auxiliary input sequence for the pseudocode of 4 ;
  • 5b a pseudocode for generating an auxiliary input sequence for the pseudocode of 4 ;
  • 5c a pseudocode for generating an auxiliary input sequence for the pseudocode of 4 ;
  • 5d a pseudocode for generating an auxiliary input sequence for the pseudocode of 4 ;

Beschreibung von AusführungsformenDescription of Embodiments

Im Folgenden werden Verfahrensabläufe anhand von Flussdiagrammen und Pseudo-Codes dargestellt.In the following, procedures are presented using flowcharts and pseudo-codes.

1 zeigt ein Flussdiagramm und einen entsprechenden Pseudo-Code zum Durchführen eines Ablaufs eines Fuzzing-Testverfahrens mit einem zustandsbehafteten Programmcode (stateful program) p für eine vorgegebene Eingabesequenzmenge (set of interesting) und einer Länge n (int: ganzzahlig) der Eingabesequenz. Die Eingabesequenzmenge enthält eine Eingabesequenz aus einer Reihe von Eingabeelementen und dazugehöriger Programmablaufbeobachtungen. Die Eingabesequenz kann einem Code, einem Zeichen oder einer Zeichenkette entsprechen. 1 shows a flow chart and a corresponding pseudo-code for performing a flow of a fuzzing test method with a stateful program code (stateful program) p for a predetermined set of input sequences (set of interesting) and a length n (int: integer) of the input sequence. The input sequence set contains an input sequence made up of a number of input elements and associated program flow observations. The input sequence can be a code, a character, or a string.

Der Programmcode p enthält eine Menge von Programmpfaden, die je nach vorgegebenem Eingabeelement bei der Ausführung des Programmcodes p durchlaufen werden.The program code p contains a number of program paths that are run through depending on the given input element when the program code p is executed.

In Schritt S1 wird zunächst eine Fehlermenge (set of crashes) initialisiert. Diese gibt an, welche Eingabesequenz(en) zu einem Programmausführungsfehler geführt haben. Anfänglich ist die Fehlermenge leer (Zeile 1).In step S1, a set of errors (set of crashes) is first initialized. This indicates which input sequence(s) led to a program execution error. Initially, the error set is empty (line 1).

Anschließend wird in Schritt S2 aus der vorgegebenen Eingabesequenzmenge (set of interesting) eine Eingabesequenz i1,...,in mit der Funktion create erzeugt bzw. ausgewählt. Die Auswahl erfolgt basierend auf den Eingabesequenzen der Eingabesequenzmenge nebst jeweils zugeordneten Programmablaufbeobachtungen. Die Programmablaufbeobachtungen können die durch die jeweilige Eingabesequenz durchlaufenen Programmablaufpfade umfassen.Then, in step S2, an input sequence i1,...,in is generated or selected from the predefined set of input sequences (set of interesting) using the create function. The selection is based on the input sequences of the set of input sequences together with the associated program flow observations. The program flow observations can include the program flow paths run through by the respective input sequence.

Die erzeugte Eingabesequenz i1,...,in wird in Schritt S3 genutzt, um den vorgegebenen Programmcode zu überprüfen/testen. Dies erfolgt durch den Aufruf eines Unterprogramms StatefulExecution (Zeile 4), das nachstehend in Verbindung mit dem Flussdiagramm und Pseudocode der 2 beschrieben wird. Als Ergebnis r erhält man entweder eine Fehlerangabe mit der Eingabesequenz i1, ...,ij, die zu einem Programmausführungsfehler geführt hat, oder eine Beobachtungsmenge obs, in der die Eingabesequenz i1,... in und die durchlaufenen Programmpfade hinterlegt ist, wenn kein Programmausführungsfehler aufgetreten ist.The generated input sequence i1,...,in is used in step S3 to check/test the specified program code. This is done by calling a StatefulExecution subroutine (line 4) described below in conjunction with the flow chart and pseudocode of the 2 is described. The result r is either an error statement with the input sequence i1,...,ij, which led to a program execution error, or an observation set obs, in which the input sequence i1,...in and the program paths run through are stored, if none Program execution error occurred.

In Schritt S4 wird überprüft (Zeile 5), ob die Ausführung mit der ausgewählten Eingabesequenz zu einem Programmausführungsfehler geführt hat. Ist dies der Fall (Alternative: ja) wird in Schritt S5 der Teil der Eingabesequenz bis zu dem Auftreten des Programmausführungsfehler der Fehlermenge hinzugefügt (Zeile 6). Anderenfalls (Alternative: Nein) wird in Schritt S6, wenn die Beobachtungsmenge obs sich als interessant erweist, die entsprechende Eingabesequenz einschließlich der Programmpfade der Eingabesequenzmenge (set of interesting) hinzugefügt.In step S4 it is checked (line 5) whether the execution with the selected input sequence has led to a program execution error. If this is the case (alternative: yes), in step S5 the part of the input sequence up to the occurrence of the program execution error is added to the error set (line 6). Otherwise (alternative: no), in step S6, if the observation set obs proves to be interesting, the corresponding input sequence including the program paths of the input sequence set (set of interesting) is added.

Anschließend wird in Schritt S7 überprüft, ob ein Abbruchkriterium für den Fuzzing-Prozess erreicht worden ist. Ist dies der Fall (Alternative: Ja), wird das Verfahren beendet und die Fehlermenge set of crashes ausgegeben, andernfalls (Alternative: Nein) wird zu Schritt S2 zurückgesprungen.Then, in step S7, it is checked whether a termination criterion for the fuzzing process has been reached. If this is the case (alternative: yes), the method is ended and the error quantity set of crashes is output, otherwise (alternative: no) the system jumps back to step S2.

Das Abbruchkriterium kann eine entsprechende Benutzereingabe, ein Überdeckungskriterium entsprechend der Anzahl der durchlaufenen Programmablaufpfade, ein Fortschrittskriterium, das von der Fehlermenge und/oder der Eingabesequenzmenge abhängt, oder andere Kriterien, wie Ablauf einer vorbestimmten Testzeit und dergleichen, umfassen.The termination criterion may include a corresponding user input, a coverage criterion corresponding to the number of program flow paths traversed, a progress criterion dependent on the amount of errors and/or the amount of input sequences, or other criteria such as expiry of a predetermined test time and the like.

Das obige Testverfahren ermöglicht das Testen von Eingabesequenzen, ohne vor jedem Anwenden eines Eingabeelements den Zustand des Programmcodes auf einen Anfangszustand zurückzusetzen.The above test method enables the testing of input sequences without resetting the state of the program code to an initial state before each use of an input element.

In 2 ist ein Flussdiagramm und ein Pseudocode für das Unterprogramm des Schritts S3 dargestellt. Darin wird in Schritt S11 zunächst eine Beobachtungsmenge obs als leere Menge initialisiert (Zeile 1).In 2 A flow chart and pseudo code for the sub-program of step S3 is shown. In step S11, an observation set obs is first initialized as an empty set (line 1).

In Schritt S12 wird der Programmcode p mit einem Eingabeelement i aus der Eingabesequenz beginnend mit dem ersten Eingabeelement i1 der Eingabesequenz ausgeführt und der Programmablauf o beobachtet (Zeilen 3 - 4). Der Programmablauf enthält die Beobachtungen, insbesondere die durch das betreffende Eingabeelement erreichten bzw. durchlaufenen Programmpfade.In step S12, the program code p is executed with an input element i from the input sequence, beginning with the first input element i1 of the input sequence, and the program flow o is observed (lines 3-4). The program flow contains the observations, in particular the program paths reached or traversed by the relevant input element.

Anschließend wird in Schritt S13 nach der Ausführung des Programmcodes p mit dem jeweiligen Eingabeelement das Resultat des Programmablaufs o untersucht, ob es einen Programmausführungsfehler angibt (Zeile 6). Gibt der Programmablauf o einen Programmausführungsfehler crash an (Alternative: Ja), so wird in Schritt S14 dieser Programmausführungsfehler mit der bis dahin ausgeführten Sequenz an Eingabeelementen i1,..., ij dem Hauptprogramm zurückgegeben (Zeile 7).Then, in step S13, after the execution of the program code p with the respective input element, the result of the program flow o is examined to determine whether it indicates a program execution error (line 6). If the program flow o indicates a program execution error crash (alternative: yes), then in step S14 this program execution error is returned to the main program with the sequence of input elements i 1 , . . . , i j executed up to that point (line 7).

Andernfalls (Alternative: Nein) wird in Schritt S15 der Programmablauf o der Beobachtungsmenge obs hinzugefügt (Zeile 9).Otherwise (alternative: no), in step S15 the program flow o is added to the observation set obs (line 9).

In Schritt S16 wird nach Abarbeiten aller Eingabeelemente der Eingabesequenz i1, ...., in die Ausführung des Programmcodes p abgebrochen (Zeile 12) und der Programmzustand auf einen Initialzustand zurückgesetzt.In step S16, after processing all the input elements of the input sequence i 1, ...., i, the execution of the program code n p terminated (line 12) and the program state to an initial state.

In Schritt S17 wird die Beobachtungsmenge obs mit den Beobachtungsmenge einschließlich der hinzugefügten Programmabläufe o dem Hauptprogramm zurückgegeben (Zeile 13).In step S17, the observation set obs with the observation set including the added program flows o is returned to the main program (line 13).

Die Programmabläufe o der Beobachtungsmenge obs können interne Angaben zu dem Programmablauf während des Testens enthalten, wie beispielsweise die Programmpfade, die für jedes der Eingabeelemente ausgeführt worden sind, mit den zugeführten Eingabeelementen zugeordneten Merkmalen oder anderen während des Programmablaufs aufgezeichneten Merkmalen. Bei einem Programmausführungsfehler crash, d.h. wenn die Programmausführung hängt oder die Programmausführung unerwartet beendet wird, wird die Eingabesequenz, die zu dem Programmausführungsfehler geführt hat, der Fehlermenge hinzugefügt. Solange die Programmausführung keinen Programmausführungsfehler aufweist, werden die Eingabesequenzen und die entsprechenden Programmabläufe o der Beobachtungsmenge obs hinzugefügt.The program runs o of the observation set obs can contain internal information about the program run during testing, such as the program paths that have been executed for each of the input elements, with the supplied input elements associated features or other features recorded during the program run. In the event of a program execution error crash, ie if program execution hangs or program execution is terminated unexpectedly, the input sequence that led to the program execution error is added to the error set adds. As long as the program execution does not show any program execution errors, the input sequences and the corresponding program flows o are added to the observation set obs.

Der Eingabesequenzmenge set of interesting wird dann in Schritt S6 um die Beobachtungsmenge obs ergänzt.The input sequence set set of interesting is then supplemented by the observation set obs in step S6.

Das Generieren der Eingabesequenzen aus der Eingabesequenzmenge set of interesting des Schritts S2 kann gemäß einem der nachfolgend beschriebenen Verfahren durchgeführt werden.The generation of the input sequences from the input sequence set set of interesting of step S2 can be carried out according to one of the methods described below.

Wie in der Subroutine create des Pseudocodes der 3 gezeigt, wird gemäß einer ersten Alternative ein Eingabeelement input durch ein herkömmliches Fuzzing-Tool, der genau ein Eingabeelement erzeugt, in einem Fuzzing-Tool internen Prozess getlnputFromFuzzer generiert. Herkömmliche Fuzzing-Tools können beispielsweise LibFuzz, AFL-Fuzz oder Honggfuzz umfassen. Ein herkömmliches Fuzzing-Tool generiert in an sich bekannter Weise ein oder mehrere Eingabeelemente input abhängig von zuvor verwendeten Eingabeelementen und Programmausführungen im Rahmen der Ausführung der Fuzzing-Subroutine StatefulExecution sowie einer vorgegebenen Eingabesequenzmenge, die als interessant erachtet worden ist. Üblicherweise verwenden herkömmliche Software-Fuzzing-Tools die den jeweiligen Eingabesequenzen zugeordneten Programmablaufbeobachtungen, insbesondere die ausgeführten Programmablaufpfade, die während der vorhergehenden Ausführungen der Fuzzing-Subroutine StatefulExecution durchlaufen worden sind, als zusätzliche Kriterien. Die Reihe von Eingabeelementen input wird dann in eine Eingabesequenz i1, ..., in mit einer vorgegebenen Länge n durch die Funktion split aufgeteilt.As in the create subroutine of the pseudocode of the 3 shown, according to a first alternative, an input element input is generated by a conventional fuzzing tool, which generates exactly one input element, in a fuzzing tool-internal process getlnputFromFuzzer. Traditional fuzzing tools may include LibFuzz, AFL-Fuzz, or Honggfuzz, for example. A conventional fuzzing tool generates, in a manner known per se, one or more input elements input depending on previously used input elements and program executions within the framework of the execution of the fuzzing subroutine StatefulExecution as well as a predetermined set of input sequences which has been considered interesting. Conventional software fuzzing tools usually use the program flow observations associated with the respective input sequences, in particular the executed program flow paths that have been run through during the previous executions of the fuzzing subroutine StatefulExecution, as additional criteria. The series of input elements input is then divided into an input sequence i 1, ..., in with a given length n by the function split.

Die Funktion split(input) kann beispielsweise einen String input, wie z.B. ein Eingabeelement, entsprechend einer Vorgabe in n Anschnitte unterteilen, wie folgt:

                  l=length(input)/n

                  for (k=1; k<=n; k++) do 

                  ik=substring(input, (k-1)*|,k*|-1)

wobei substring(a,b,c) für eine Zeichenkette a die Teilzeichenkette zurückgibt, bei beim Zeichen an Stelle b beginnt und bei dem Zeichen an Stelle c endet.For example, the split(input) function can split a string input, such as an input element, into n slices according to a specification, like this:
 l=length(input)/n

                  for (k=1; k<=n; k++) do 

                  ik=substring(input, (k-1)*|,k*|-1)

where substring(a,b,c) for a string a returns the substring starting at the character at position b and ending at the character at position c.

Üblicherweise verwenden herkömmliche Software-Fuzzing-Tools Beobachtungen von vorangegangenen Programmausführungen sowie von vorangegangenen Eingabeelementen und eine Eingabesequenzmenge. Eine in einem übergeordneten Prozess ermittelte Hilfs-Eingabesequenzen l1... ln werden dabei modifiziert mit einer Die dazu generierten Eingabesequenzen werden unterteilt (Zeile 2), so dass diese in Eingabesequenzen i1,...,in gleicher oder unterschiedlicher Länge aufgeteilt werden, abhängig von beispielsweise dem Wert des ersten Bytes des Eingabeelements oder dergleichen.Traditional software fuzzing tools typically use observations from previous program executions, as well as from previous input elements and an input sequence set. An auxiliary input sequences l 1 ... l n determined in a higher-level process are modified with a The input sequences generated for this purpose are subdivided (line 2) so that they are divided into input sequences i 1, ..., i n of the same or different length be divided depending on, for example, the value of the first byte of the input element or the like.

Wie in der Sub-Routine create des Pseudocodes der 4 als Alternative zu der Subroutine der 3 gezeigt, wird gemäß einer zweiten Alternative eine Hilfs-Eingabesequenz I1,...,If-1,If+1...,In aus n-1 Eingabeelementen vordefiniert und festgelegt, und ein weiteres Eingabeelement, deren Position in der Eingabesequenz durch einen vorgegebenen Positionsindex f vorgegeben wird, wird durch einen herkömmlichen Fuzzer in einem Fuzzer internen Prozess getlnputFromFuzzer erzeugt. Der herkömmliche Fuzzer generiert dazu in an sich bekannter Weise ein oder mehrere Eingabeelemente input abhängig von zuvor verwendeten Eingabeelementen und Programmausführungen im Rahmen der Ausführung der Fuzzing-Subroutine StatefulExecution sowie einer vorgegebenen Eingabesequenzmenge, die als interessant erachtet worden ist. Eine Kombination der vordefinierten Eingabesequenz und des erzeugten Eingabeelements wird dann als zu testende Eingabesequenz verwendet.As in the create sub-routine of the pseudocode of the 4 as an alternative to the subroutine of 3 shown, according to a second alternative, an auxiliary input sequence I 1 ,...,I f-1 ,I f + 1 ...,I n is predefined and fixed from n-1 input elements, and a further input element whose position in of the input sequence is specified by a predetermined position index f is generated by a conventional fuzzer in a fuzzer-internal process getlnputFromFuzzer. For this purpose, the conventional fuzzer generates, in a manner known per se, one or more input elements depending on previously used input elements and program executions within the framework of the execution of the fuzzing subroutine StatefulExecution as well as a predetermined set of input sequences that has been considered interesting. A combination of the predefined input sequence and the generated input element is then used as the input sequence to be tested.

Der Pseudocode der 4 sieht vor, dass zunächst ein Eingabeelement input durch das Fuzzing-Tool abhängig von den Beobachtungen der vorangegangenen Programmausführungen erzeugt wird (Zeile 1). Dann werden alle Eingabeelemente, die nicht durch den vorgegebenen Positionsindex f indiziert sind, auf ein festgelegtes Hilfs-Eingabeelement I1 ... In einer Hilfs-Eingabesequenz (Zeile 4) festgelegt. Das Eingabeelement if der Eingabesequenz der Eingabeelemente wird auf das Eingabeelement, das von dem Fuzzing-Tool generiert worden ist, festgelegt (Zeile 6). Abschließend werden die so generierten Eingabeelemente i1, ... , in der Eingabesequenz als das Ergebnis des Pseudocodes der 4 für die Eingabesequenz des Schritt S3 zurückgegeben (Zeile 8).The pseudocode of the 4 provides that first an input element is generated by the fuzzing tool depending on the observations of the previous program executions (line 1). Then all input elements not indexed by the given position index f are set to a specified auxiliary input element I1...In an auxiliary input sequence (line 4). The input element i f of the input sequence of input elements is set to the input element generated by the fuzzing tool (line 6). Finally, the input elements i 1, ... , generated in this way are used in the input sequence as the result of the pseudocode of the 4 for the input sequence of step S3 (line 8).

In mehreren Ausführungsvarianten, deren Pseudocodes in den 5a-5d dargestellt sind, wird die Ausführung des zustandsbehafteten Fuzzing in einen Gesamtprozess eines Fuzzing-Testverfahrens eingebettet. Dadurch können die Hilfs-Eingabesequenzen I1,...,In zur Verwendung in dem Pseudocode der 4 generiert werden.In several variants, the pseudocodes in the 5a-5d are shown, the execution of the stateful fuzzing is embedded in an overall process of a fuzzing test method. This allows the auxiliary input sequences I 1 ,...,I n to be used in the pseudocode of the 4 to be generated.

Die Variante der 5a beinhaltet ein metrik-basiertes zustandsbehaftetes Fuzzing, d. h. ein Fuzzing für verschiedene Systemzustände.The variant of 5a includes a metric-based stateful fuzzing, ie a fuzzing for different system states.

Zunächst wird ein zustandsbehafteter Fuzzing-Prozess sf (sf: Prozesshandler) mit n=1 (Zeile 1) gestartet. Die Ausführungen execution des Fuzzing-Prozesses sf werden einer Ausführungsmenge executions (Zeile 2) hinzugefügt. Dies dient zum Festhalten der ausgeführten Fuzzing-Prozesse StatefulFuzz, um dann Informationen von diesen Fuzzing-Prozessen auslesen zu können. Konkret werden für jede Ausführung folgende Informationen benötigt: Eingabesequenzmenge des jeweiligen Fuzzing-Prozesses, Anzahl n der Eingabeelemente in diesen Fuzzing-Prozess.First, a stateful fuzzing process sf (sf: process handler) with n=1 (line 1) is started. The executions of the fuzzing process sf are added to an execution set executions (line 2). This is used to record the executed fuzzing processes StatefulFuzz in order to then be able to read out information from these fuzzing processes. Specifically, the following information is required for each execution: input sequence set of the respective fuzzing process, number n of input elements in this fuzzing process.

Anschließend wartet das Verfahren eine bestimmte Zeit (Zeile 3), bis das Fuzzing eine der Ausführungen des Programmcodes ausgeführt hat (Zeile 3). Die Prozesse sf können parallele Prozesse sein. Es wird abgewartet, bis der Fuzzing-Prozess genügend Zeit hatte, eine erste Ausführung des zu testenden Programmcodes p durchzuführen, und die Eingabesequenzmenge zu befüllen. Solange die maximale Anzahl der parallel ausgeführten zustandsbehafteten Fuzzing-Prozesse StatefulFuzz (maxexecs) nicht erreicht ist (Zeile 4), können neue zustandsbehaftete Fuzzing-Prozesse StatefulFuzz parallel zu den bereits Ausgeführten gestartet werden (Zeilen 5 bis 18).The method then waits a specific time (line 3) until the fuzzing has executed one of the executions of the program code (line 3). The processes sf can be parallel processes. It is awaited until the fuzzing process has had enough time to carry out a first execution of the program code p to be tested and to fill the input sequence set. As long as the maximum number of stateful fuzzing processes StatefulFuzz (maxexecs) executed in parallel has not been reached (line 4), new stateful fuzzing processes StatefulFuzz can be started in parallel to those already executed (lines 5 to 18).

Zum Starten von neuen Fuzzing-Ausführungen werden zunächst eine Ausführung sf1 aus der Ausführungsmenge executions (Zeile 5) ausgewählt. Die Auswahl der Ausführungen kann iterativ eine nach der anderen anhand einer Heuristik, z.B. abhängig vom Fortschritt des Fuzzing-Prozesses StatefulFuzz, zufällig oder gemäß anderen Methoden erfolgen.To start new fuzzing executions, an execution sf1 is first selected from the execution set executions (line 5). The executions can be selected iteratively one after the other using a heuristic, e.g. depending on the progress of the fuzzing process StatefulFuzz, randomly or according to other methods.

Aus den ausgewählten Ausführungen executions wird eine Ausführung (execution) sf1 ausgewählt (Zeile 5) und in Zeile 6 wird eine Hilfs-Eingabesequenzmenge Is aus der ausgewählten Ausführung sf1 ermittelt. Die ausgewählte Ausführung sf1 ist eine Ausführung des zustandsbehafteten Fuzzing-Prozesses, die wiederum viele Ausführungen des zu testenden Programmcodes p durchführt, und so eine Eingabesequenzmenge aufbaut. Die Auswahl aus der Eingabesequenzmenge von sf1 kann wiederum auf unterschiedliche Weise geschehen: zufällig; gemäß dem neusten Eintrag in der Eingabesequenzmenge, gemäß Heuristiken z.B. bezüglich der Beobachtungsmenge obs der Einträge in der Eingabesequenzmenge und dergleichen (Zeile 6). Anschließend wird die Anzahl n der Eingabeelemente, die für die ausgewählte Ausführung sf1 ausgeführt wurden, (Zeile 7) ermittelt.From the selected executions executions an execution sf1 is selected (line 5) and in line 6 an auxiliary input sequence set Is is determined from the selected execution sf1. The selected execution sf1 is an execution of the stateful fuzzing process, which in turn performs many executions of the program code p to be tested, thus building up an input sequence set. Again, the selection from the input sequence set of sf1 can be done in different ways: randomly; according to the newest entry in the input sequence set, according to heuristics e.g. regarding the observation set obs of entries in the input sequence set and the like (line 6). Then the number n of input elements that have been executed for the selected execution sf1 (line 7) is determined.

Anschließend werden zwei Eingabesequenzen aus der Eingabesequenzmenge is ausgewählt und in i1, ..., in und in+1, ..., i2n gespeichert (Zeile 8).Two input sequences are then selected from the input sequence set is and stored in i 1, ...,in and i n+1 ,...,i 2n (line 8).

Dann wird das Programm p mit den aufeinanderfolgenden Eingabeelementen i1, ..., i2n als Eingabesequenz ausgeführt (exec), d. h. die Verbindung der zwei Eingabesequenzen i1, ..., in und in+1, ..., i2n, und die entsprechende Programmablaufbeobachtung der Ausführung in einer ersten Programmablaufbeobachtungsmenge obs1 (Zeile 9) gespeichert. Danach wird die Programmausführungsbeobachtung der Ausführung des Programms mit i1, ..., in einer zweiten Programmablaufbeobachtungsmenge obs2 (Zeile 10) gespeichert und die Programmausführungsbeobachtung der Ausführung des Programmcodes p mit in-1, ..., i2n an die zweite Programmablaufbeobachtungsmenge obs2 (Zeile 11) angehängt.Then the program p is executed (exec) with the consecutive input elements i 1, ..., i 2n as an input sequence, ie the connection of the two input sequences i 1, ..., in and i n+1 , ..., i 2n , and the corresponding program flow observation of the execution is stored in a first program flow observation set obs1 (line 9). Thereafter, the program execution observation of the execution of the program with i 1, ..., is stored in a second program flow observation set obs2 (line 10) and the program execution observation of the execution of the program code p with i n-1 , ..., i 2n to the second program flow observation set obs2 (line 11) appended.

Wenn die Programmablaufbeobachtungsmengen obs1 und obs2 voneinander abweichen, d. h. die Programmablaufbeobachtungsmenge obs1 der Hilfs-Eingabesequenzen i1, ..., i2n von der Verkettung der Programmablaufbeobachtungsmengen der separat ermittelten zwei Eingabesequenzen i1, ..., in und in+1, ..., i2n voneinander abweichen (Zeile 12), wird die Eingabesequenz i1, ..., in als die Hilfs-Eingabesequenz I1,..., In bereitgestellt (Zeile 13).If the program flow observation sets obs1 and obs2 differ from each other, ie the program flow observation set obs1 of the auxiliary input sequences i 1, ..., i 2n from the concatenation of the program flow observation sets of the separately determined two input sequences i 1, ..., in and i n+1, ..., i 2n differ (line 12), the input sequence i 1, ..., in is provided as the auxiliary input sequence I 1 ,..., I n (line 13).

Die Abweichung zwischen den Programmablaufbeobachtungsmengen obs1, obs2 wird mithilfe der Funktion difference ermittelt, die einen Unterschied zwischen den Programmablaufbeobachtungsmengen ermittelt. Der Unterschied von Programmablaufbeobachtungsmengen kann durch semantische Unterschiedsfunktionen, sogenannte String-Distance-Metriken, evaluiert werden, wie z.B. Levenshtein distance, Hamming-distance und andere.The deviation between the program flow observation sets obs1, obs2 is determined using the difference function, which determines a difference between the program flow observation sets. The difference of program flow observation sets can be evaluated by semantic difference functions, so-called string distance metrics, such as Levenshtein distance, Hamming distance and others.

In Zeile 14 wird ein zusätzlicher zustandsbehafteter Fuzzing-Prozess StatefulFuzz gestartet, der die neue Hilfs-Eingabesequenz 11, ..., I2n als fixierte Eingabeelemente für diesen neuen Fuzzing-Prozess über die Subroutine der 4 berücksichtigt. Dieser zusätzliche Fuzzing-Prozess StatefulFuzz weist eine Länge der Eingabesequenz von 2n+1 auf. Emptyset entspricht dabei einer leeren Menge, aus der in der Subroutine create eine Eingabesequenz bestimmt wird. „2n+1“ entspricht der Anzahl der Eingabeelemente für den Fuzzing-Prozess. In Zeile 7 ist die Anzahl der Eingabeelemente des Prozesses in sf1 gleich „n“. Der neu gestartete Prozess verwendet anstatt „n“ Eingabeelementen die doppelte Anzahl zuzüglich 1 (2*n+1). Dazu wird angenommen, dass dann die Programmablaufbeobachtungsmenge obs1 und die Programmablaufbeobachtungsmenge obs2 nicht voneinander abweichen. Der Start des zusätzlichen zustandsbehafteten Fuzzing-Prozesses (Zeile 14) kann parallel zu den noch aktiven Fuzzing-Prozessen erfolgen, damit die zeitaufwändigen Fuzzing-Prozesse parallel ausgewertet werden können, während der Algorithmus diese bewerten und eventuell neue Fuzzing-Prozesse starten kann.In line 14, an additional stateful fuzzing process StatefulFuzz is started, which uses the new auxiliary input sequence 11, ..., I2n as fixed input elements for this new fuzzing process via the subroutine of 4 taken into account. This additional fuzzing process StatefulFuzz has an input sequence length of 2n+1. Emptyset corresponds to an empty set from which an input sequence is determined in the create subroutine. "2n+1" corresponds to the number of input elements for the fuzzing process. In line 7, the number of input elements of the process in sf1 is equal to "n". The newly started process uses twice the number of input elements plus 1 (2*n+1) instead of "n". For this purpose, it is assumed that the observed program flow set obs1 and the observed program flow set obs2 do not differ from one another. The start of the additional stateful fuzzing process (line 14) can take place parallel to the fuzzing processes that are still active, so that the time-consuming fuzzing processes can be evaluated in parallel, while the algorithm can evaluate them and possibly start new fuzzing processes.

Die parallelen Ausführungen der Fuzzing-Prozesse StatefulFuzz werden in der Ausführungsmenge executions gespeichert (Zeile 15) und die Anzahl der parallel ausgeführten zustandsbehafteten Fuzzing-Prozesse numExecs der Zeilen 5 bis 16 inkrementiert (Zeile 16). Die Schritte der Zeilen 5 bis 16 werden entsprechend der vorgegebenen maximalen Anzahl maxexecs der parallel ausgeführten zustandsbehafteten Fuzzing-Prozesse wiederholt.The parallel executions of the fuzzing processes StatefulFuzz are stored in the execution set executions (line 15) and the number of stateful fuzzing processes numExecs of lines 5 to 16 executed in parallel is incremented (line 16). The steps of lines 5 to 16 are repeated according to the predetermined maximum number maxexecs of the stateful fuzzing processes executed in parallel.

In dem in 5a gezeigten Algorithmus entspricht das nicht festgelegte Eingabeelement dem letzten Eingabeelement für die Eingabesequenz (f=2n+1), jedoch ist es auch möglich, dass das durch das Fuzzing-Tool ermittelte Eingabeelement eine andere als das letzte Eingabeelement der Eingabesequenz sein kann, wie dies aus dem Pseudocode der 4 ersichtlich ist.in the in 5a In the algorithm shown, the unspecified input element corresponds to the last input element for the input sequence (f=2n+1), but it is also possible that the input element found by the fuzzing tool can be something other than the last input element of the input sequence, like this from the pseudo code of 4 is evident.

Die Ausführung der zustandsbehafteten Fuzzing-Prozesse in den Programmausführungen kann auch angehalten werden, wenn ein Abbruchkriterium erreicht ist. Dies ermöglicht es, weitere Kombinationen von Eingabeelementen in einem Fuzzing-Verfahren zu testen und ineffektive Fuzzing-Prozesse zu löschen.The execution of the stateful fuzzing processes in the program executions can also be stopped when a termination criterion is reached. This makes it possible to test further combinations of input elements in a fuzzing procedure and to delete ineffective fuzzing processes.

Anstelle des Vergleichens der Programmablaufbeobachtungsmenge der Ausführungen der Verkettung der Eingabesequenzen mit der Verkettung der Programmablaufbeobachtungsmenge können auch die Programmablaufbeobachtungsmenge von vorangegangen berechneten Ausführungen der Verkettung der Eingabesequenzen mit der Verkettung der Programmablaufbeobachtungsmenge verglichen werden.Instead of comparing the program flow observation set of executions of the concatenation of the input sequences with the concatenation of the program flow observation set, the program flow observation set of previously calculated executions of the concatenation of the input sequences can be compared with the concatenation of the program flow observation set.

Um die Leistungsfähigkeit des zustandsbehafteten Fuzzing-Prozesses zu erhöhen, kann der Programmzustand, der durch die Eingabesequenz i1,..., if-1, erreicht worden ist, einmal gespeichert werden und bei jeder Ausführung des zu testenden Programms wiederhergestellt werden. Insbesondere wenn f groß ist, kann dadurch das Wiederherstellen des Programmzustands signifikant schneller sein als das Ausführen des zu testenden Programmcodes durch Vorgabe der Eingabesequenz i1 ... if-1.To increase the performance of the stateful fuzzing process, the program state reached by the input sequence i 1 , ..., i f-1 , can be saved once and restored each time the program under test is executed. In particular, if f is large, this can be significantly faster than the execution of the test program code by specifying the input sequence i 1 ... i f-1 to restore the program state.

Der Pseudocode der 5b zeigt eine zweite Variante des Verfahrens zur Generierung einer Hilfs-Eingabesequenz 11, ..., In zur Verwendung in den Verfahren der 4. Darin werden verschiedene Zustände identifiziert, die durch Vergleichen der Beobachtungen, d. h. der ausgeführten Programmablaufpfade, der erreichten abstrakten Zustände und dergleichen, ermittelt werden. Es wird angenommen, dass verschiedene Beobachtungen angeben, dass verschiedene Zustände erreicht worden sind. Die zweite Variante verwendet einen direkteren Ansatz, bei dem Eigenschaften von interessanten unterschiedlichen Zuständen potenziell bekannt sind und durch Bedingungen cond1, ..., condm abgefragt werden können. Insbesondere wird bei der zweiten Variante angenommen, dass es Bedingungen gibt, die auf dem Programmzustand evaluiert werden können, die unterschiedlichen Zustände des Programms angeben.The pseudocode of the 5b shows a second variant of the method for generating an auxiliary input sequence 11, ..., In for use in the methods of FIG 4 . Various states are identified therein, which are determined by comparing the observations, ie the executed program flow paths, the abstract states reached and the like. It is assumed that different observations indicate that different states have been reached. The second variant uses a more direct approach, in which properties of interesting different states are potentially known and can be queried by conditions cond 1 , ..., cond m . In particular, the second variant assumes that there are conditions that can be evaluated on the program state that indicate different states of the program.

Wenn ein zustandsbehafteter Fuzzing-Prozess mit einer Hilfs-Eingabesequenz I1 bis In einen Programmzustand erreicht, der von den vorangegangenen gesehenen Zuständen entsprechend den Bedingungen abweicht, wird ein neuer zustandsbehafteter Fuzzing-Prozess StatefulFuzz mit I1 bis In als festgelegte Eingabeelemente gestartet. Bei dieser Variante werden eine Reihe von Bedingungen, die Boolesche Ausdrücke über den Programmzustand von p entsprechen, cond1, ..., condm über den Programmzustand von p angegeben. Programmzustand bedeutet hierin die Belegung von Programmvariablen oder der Inhalt des Speichers. Verschiedene Bewertungen der Bedingungen charakterisieren Zustände, die voneinander abweichen können. Diese Bedingungen können z. B. sein, ob Benutzer eingeloggt sind, welcher Modus p eingenommen worden ist, wie z. B. Parken, Autobahnfahrt, Rückwärtsfahrt für Automobil und weitere. Die Bewertung der Bedingungen cond1, ..., condm in einem Programmzustand entspricht einer Feldanordnung, insbesondere einer Matrix, mit Booleschen Werten mit der Länge m-1.When a stateful fuzzing process with an auxiliary input sequence I 1 to I n reaches a program state that deviates from the previously seen states according to the conditions, a new stateful fuzzing process StatefulFuzz is started with I 1 to I n as specified input elements. In this variant, a series of conditions corresponding to Boolean expressions about the program state of p, cond 1 , ..., cond m about the program state of p are specified. Here, program state means the allocation of program variables or the contents of memory. Different assessments of the conditions characterize states that can differ from each other. These conditions can e.g. be whether users are logged in, what mode p has been taken, such as e.g. B. Parking, highway driving, reversing for automobile and more. The evaluation of the conditions cond 1 , . . . , cond m in a program state corresponds to an array, in particular a matrix, with Boolean values of length m-1.

In 5b ist der Pseudocode für die zweite Variante angegeben. Zunächst werden die Bedingungen cond1, ..., condm einer vorgegebenen Bedingungsmenge auf den anfänglichen Programmzustand des zu testenden Programms ohne ein zugeführtes Eingabeelement bewertet (evaluate) (Zeile 1). Zum Beispiel können solche Bedingungen die Abfrage folgender Programmzustände umfassen: length(loggedUsers) > 2, drivingMode == Highway, und dergleichen. Das Ergebnis ist eine Liste von boolschen Werten, also Beispielsweise [true, false, true, false].In 5b the pseudo code for the second variant is given. First, the conditions cond 1 , . . . , cond m of a predetermined set of conditions are evaluated (evaluate) for the initial program state of the program to be tested without an input element being supplied (line 1). For example, such conditions may include querying the following program states: length(loggedUsers) > 2, drivingMode == Highway, and the like. The result is a list of boolean values, for example [true, false, true, false].

Anschließend wird ein Fuzzing-Prozess sf mit n=1 (Zeile 2) gestartet. Dieser kann parallel mit anderen Fuzzing-Prozessen ausgeführt werden. Die Ausführungen der Prozesse sf werden einer Ausführungsmenge executions (Zeile 3) hinzugefügt.A fuzzing process sf with n=1 (line 2) is then started. This can be executed in parallel with other fuzzing processes. The executions of the processes sf are added to an execution set executions (line 3).

Anschließend wird die Bewertung des erreichten Programmzustands mit den Bedingungen cond1, ..., condm (Zeile 4) einer Bewertungsmenge condition set hinzufügt, die die Kombinationen der Bewertungen gemäß der Bedingungen cond1, ..., condm speichert und die einen Programmzustand charakterisiert, für den ein Fuzzing-Prozess bereits ausgeführt wird.Then the evaluation of the achieved program state with the conditions cond 1 , ..., cond m (line 4) is added to an evaluation set condition set, which stores the combinations of evaluations according to the conditions cond 1 , ..., cond m and the one Characterized program state for which a fuzzing process is already running.

Wie bei der ersten Alternative werden zusätzliche Fuzzing-Prozesse gestartet, jedoch abhängig davon, ob einige der Eingabeelemente einen Programmzustand erreicht haben, für die die Bewertung der Bedingungen neu ist.As with the first alternative, additional fuzzing processes are started, but depending on whether some of the input elements have reached a program state for which the evaluation of the conditions is new.

Anschließend wartet das Verfahren eine bestimmte Zeit (Zeile 5), bis das Fuzzing mindestens eine der Ausführungen des Programmcodes ausgeführt hat (Zeile 5). Die Prozesse sf sind parallele Prozesse, die in Zeile 2 gestartet werden. Es wird abgewartet, bis der zustandsbehaftete Fuzzing Prozess StatefulFuzz genügend Zeit hatte, erste Ausführungen des zu testenden Programms durchzuführen, und die Eingabesequenzmenge zu befüllen. Solange eine vorgegebene maximale Anzahl maxexecs der (parallel) ausgeführten zustandsbehafteten Fuzzing-Prozesse nicht erreicht ist (Zeile 6), können neue zustandsbehaftete Fuzzing-Prozesse StatefulFuzz gestartet werden (Zeilen 7 bis 17).The method then waits a specific time (line 5) until the fuzzing has executed at least one of the executions of the program code (line 5). The processes sf are parallel processes that are started on line 2. It is awaited until the stateful fuzzing process StatefulFuzz has had enough time to carry out the first execution of the program to be tested and to fill the input sequence set. As long as a predetermined maximum number maxexecs of the (parallel) executed stateful fuzzing processes is not reached (line 6), new stateful fuzzing processes StatefulFuzz can be started (lines 7 to 17).

Zum Starten eines neuen Fuzzing-Prozesses wird zunächst eine Ausführung sf1 aus der Ausführungsmenge executions (Zeile 7) ausgewählt. Die Auswahl der Ausführungen kann iterativ eine nach der anderen anhand einer Heuristik, z.B. abhängig vom Fortschritt des Fuzzing Prozesses StatefulFuzz, zufällig oder gemäß anderen Methoden erfolgen. Aus den ausgewählten Ausführungen sf1 wird eine Eingabesequenzmenge is der ausgewählten Ausführung sf1 ermittelt. (Zeile 8). Anschließend werden ein oder mehrere Startparameter der ausgewählten Eingabesequenz sf1 (Zeile 9) ermittelt. Die Startparameter können Teil einer Datenstruktur sein, die zu dem Prozesshandler vorgesehen wird und die einerseits für das Starten des neuen Prozesses verantwortlich ist, andererseits aber auch weitere Informationen speichert, wie beispielsweise die Startparameter n, aber auch Informationen wie Laufzeitinformationen abgefragt werden können, wie beispielsweise die Eingabesequenzmenge set of interesting, Anzahl durchgeführter Ausführungen usw. Die Kommunikation kann praktisch auf verschiedene Art realisiert werden, z.B. Inter-Prozesskommunikation oder Kommunikation über das Dateisystem, sowie die unterschiedlichsten Abstraktionsstufen, die z.B. Cloud-Middleware Systeme oder andere Server-Client-Architekturen bereitstellen.To start a new fuzzing process, an execution sf1 is first selected from the execution set executions (line 7). The executions can be selected iteratively one after the other using a heuristic, e.g. depending on the progress of the fuzzing process StatefulFuzz, randomly or according to other methods. An input sequence set is of the selected execution sf1 is determined from the selected executions sf1. (line 8). Then one or more start parameters of the selected input sequence sf1 (line 9) are determined. The start parameters can be part of a data structure that is provided for the process handler and that is responsible for starting the new process on the one hand, but also stores other information, such as the start parameters n, but also information such as runtime information can be queried, such as the input sequence set set of interesting, number of executed executions, etc. The communication can be implemented in various ways, eg inter-process communication or communication via the file system, as well as the most diverse levels of abstraction, which provide eg cloud middleware systems or other server-client architectures .

Anschließend wird eine Eingabesequenz aus dieser Eingabesequenzmenge is ausgewählt und in i1, ..., in gespeichert (Zeile 10).An input sequence is then selected from this input sequence set is and stored in i 1, ..., in (line 10).

Danach werden die Bedingungen cond1, ..., condm in einem nach der Ausführung der Eingabesequenz i1,..., in erreichten Programmzustand bewertet (Zeile 11).Then the conditions cond 1 ,..., cond m are evaluated in a program state reached after the execution of the input sequence i1,..., in (line 11).

Wenn für diese bestimmte Kombination von bewerteten Bedingungen kein Fuzzing-Prozess bisher ausgeführt worden ist, d.h. die Kombination von Bewertungen ist nicht in der Bewertungsmenge condition set enthalten (Zeile 12), entspricht die Hilfs-Eingabesequenz I1, ..., In der Eingabesequenz i1, ..., in (Zeile 13).If no fuzzing process has yet been performed for this particular combination of evaluated conditions, ie the combination of evaluations is not included in the evaluation set condition set (line 12), the auxiliary input sequence corresponds to I 1 ,..., In the input sequence i1, ..., in (line 13).

Ein neuer Fuzzing-Prozess mit der Hilfs-Eingabesequenz I1, ..., In als erste Eingabe wird gestartet (Zeile 14) und die Kombination der bewerteten Bedingungen der Bewertungsmenge (Zeile 16) hinzugefügt.
Die parallelen Ausführungen des Fuzzing-Prozesses werden in der Ausführungsmenge executions gespeichert (Zeile 15). Eine Bewertung des erreichten Programmzustands gemäß der Bedingungen cond1, ..., condm wird durchgeführt und das Ergebnis in der Bewertungsmenge gespeichert. Anschließend wird die Anzahl numExecs der (parallel) ausgeführten zustandsbehafteten Fuzzing-Prozesse StatefulFuzz der Zeilen 6 bis 15 inkrementiert. Die Schritte der Zeilen 6 bis 15 werden entsprechend der vorgegebenen maximalen Anzahl maxExecs der parallel ausgeführten Fuzzing Prozesse StatefulFuzz wiederholt.
A new fuzzing process with the auxiliary input sequence I 1 ,...,In as first input is started (line 14) and the combination of evaluated conditions is added to the evaluation set (line 16).
The parallel executions of the fuzzing process are stored in the execution set executions (line 15). An evaluation of the program state reached according to the conditions cond 1 , . . . , cond m is carried out and the result is stored in the evaluation set. Then the number numExecs of the (parallel) executed stateful fuzzing processes StatefulFuzz of lines 6 to 15 is incremented. The steps in lines 6 to 15 are repeated according to the specified maximum number maxExecs of the fuzzing processes StatefulFuzz executed in parallel.

In 5c ist ein Pseudocode für eine weitere Variante der Erzeugung der Hilfs-Eingabesequenz 11, ..., In dargestellt. Darin werden anstelle der dynamischen Ausführung des zustandsbehafteten Programmcodes mit der Bewertung der Bedingungen cond1, ..., condm statische Programmanalysen verwendet, um Eingabeelemente zu erzeugen, die zu einem Programmzustand mit einer Bewertung der Bedingungen cond1, ..., condm führen, für die kein Fuzzing-Prozess bisher ausgeführt worden ist. In diesen statischen Programmanalysen werden Programme untersucht, um zu bestimmen, wie Eingabeelemente aussehen müssen, damit nach der Programmausführung ein bestimmter Programmzustand erreicht wird. Dafür muss das Programm nicht ausgeführt werden, sondern nur analysiert werden. Beispiele von in der Informatik bekannten Techniken umfassen: Symbolic Execution, Taint Analysis, Concolic Execution, Analysen von Programmabhängigkeitsgraphen, und dergleichen.In 5c a pseudo code for a further variant of the generation of the auxiliary input sequence 11, ..., In is shown. Therein, instead of executing the stateful program code dynamically with the evaluation of the conditions cond 1 , ..., cond m , static program analyzes are used to generate input elements leading to a program state with an evaluation of the conditions cond 1 , ..., cond m lead, for which no fuzzing process has been executed so far. In these static program analyses, programs are examined to determine what input elements must look like in order to reach a certain program state after program execution. The program does not have to be executed for this, only analyzed. Examples of techniques known in computer science include: symbolic execution, taint analysis, concolic execution, program dependency graph analysis, and the like.

Von den verschiedenen Kombinationen von möglichen Bewertungen c1,...,cm der Bedingungen cond1 bis condm wird eine Bewertung c1,... ,cm ausgewählt (Zeile 7). Anschließend wird eine statische Analysetechnik verwendet, um die Hilfs-Eingabesequenz I1,...,Ik zu erzeugen, die zu Zuständen führen, für die die Anwendung der Bedingungen zu ausgewählten Resultaten führen (Zeilen 8-10). Die Auswahl der Bewertung kann a) zufällig aus der Menge der noch nicht zuvor ausgewählten Bewertungen oder b) durch Ordnen gemäß einem Prioritätskriterium und Auswählen der ersten bisher noch nicht ausgewählten Bewertung erfolgen.A rating c1,...,cm is selected from the various combinations of possible ratings c1,...,cm of the conditions cond 1 to cond m (line 7). A static analysis technique is then used to generate the auxiliary input sequence I 1 ,...,I k leading to states for which application of the conditions leads to selected results (lines 8-10). The evaluation can be selected a) randomly from the set of evaluations that have not yet been selected or b) by ordering according to a priority criterion and selecting the first evaluation that has not yet been selected.

Potenziell anwendbare statische Analyseverfahren können Symbolic Execution, Abstract Interpretation, Theorem Proofing, Model Checking und andere umfassen.Potentially applicable static analysis techniques may include symbolic execution, abstract interpretation, theorem proofing, model checking, and others.

In Zeile 11 wird ein zusätzlicher zustandsbehafteter Fuzzing-Prozess gestartet, mit neuen Eingabesequenzen der Länge k+1. k ist die Länge der Eingabesequenz, wie sie von der Statischen Analyse der Zeile 8 ermittelt wurde.In line 11, an additional stateful fuzzing process is started, with new input sequences of length k+1. k is the length of the input sequence as determined by the static analysis of line 8.

Die Ausführungen des Fuzzing-Prozesses werden in der Ausführungsmenge executions gespeichert (Zeile 12). Ferner wird die ausgewählte Bedingung c1,...,cm der Bewertungsmenge condition set hinzugefügt. Anschließend wird die Anzahl numExecs der (parallel) ausgeführten Fuzzing Prozesse StatefulFuzz der Zeilen 6 bis 14 inkrementiert. Die Schritte der Zeilen 6 bis 14 werden entsprechend der vorgegebenen maximalen Anzahl maxExecs von Durchläufen wiederholt.The executions of the fuzzing process are stored in the execution set executions (line 12). Furthermore, the selected condition c1,...,cm is added to the evaluation set condition set. Then the number numExecs of the (parallel) executed fuzzing processes StatefulFuzz of lines 6 to 14 is incremented. The steps of lines 6 to 14 are repeated according to the specified maximum number of runs maxExecs.

In einer vierten Variante, die in dem Pseudocode in der 5d veranschaulicht ist, führt eine Kombination der Bewertungsergebnisse c1,... ,cm der Bedingungen cond1, ..., condm der Bewertungsmenge condition set aus und verwendet diese in einer statischen Analysemethode mit einer generierten Formel frm. Die Formel frm wird entsprechend der Bewertungsergebnisse c1,...,cm der abgefragten Bedingungen cond1,..., condm erstellt. Die statische Analysemethode generiert daraus in an sich bekannter Weise eine Hilfs-Eingabesequenz I1,...,Ik , so dass ein Programmzustand erreicht wird, in dem die generierte Formel nicht erfüllt ist.In a fourth variant, in the pseudocode in the 5d , executes a combination of the evaluation results c1,...,cm of the conditions cond 1 ,...,cond m of the evaluation set condition set and uses them in a static analysis method with a generated formula frm. The formula frm is created according to the evaluation results c1,...,cm of the retrieved conditions cond1,..., condm. From this, the static analysis method generates, in a manner known per se, an auxiliary input sequence I 1 ,...,I k , so that a program state is reached in which the generated formula is not fulfilled.

Somit sieht die obige Variante vor, einen Programmzustand zu erreichen, in dem die Bedingungen cond1 bis condm eine Kombination der Bewertungen ergeben, der noch in keinem Fuzzing-Prozess zuvor erreicht worden ist. Anstatt eine zuvor nicht verwendete Kombination von Bewertungen der Bedingungen cond1 bis condm wie in der Alternative des Pseudocodes der 5c auszuwählen, wird eine Formel erzeugt, die alle zuvor verwendeten Kombinationen von Bewertungen (Zeilen 8 bis 14) codiert. Dann wird eine statische Analyse verwendet, um die Eingabeelemente zu erzeugen, die zu einem Programmzustand führen, in dem diese Formel nicht erfüllt ist (Zeile 15), d. h. die Kombinationen von Bewertungen, die sich aus der Anwendung der Bedingungen cond1 bis condm ergeben. Eine Bewertung c1, ...,cm der Bedingungen cond1, ..., condm auf den Programmzustand durch die so gefundene Eingabesequenz wird ermittelt.The above variant thus provides for reaching a program state in which the conditions cond 1 to cond m result in a combination of the evaluations that has not yet been reached in any fuzzing process before. Instead of a previously unused combination of evaluations of the conditions cond 1 through cond m as in the pseudocode alternative of the 5c a formula is generated that encodes all previously used combinations of scores (rows 8 through 14). Then a static analysis is used to generate the input elements leading to a program state where this formula is not satisfied (line 15), ie the combinations of scores resulting from the application of the conditions cond 1 to cond m . An evaluation c1,...,cm of the conditions cond 1 ,...,cond m on the program state is determined by the input sequence found in this way.

Potenzielle statische Analyseverfahren, die verwendet werden können, um diese Aufgabe auszuführen, können Symbolic Execution, Abstract Interpretation, Theorem Proofing, Model Checking und andere umfassen. Diese Verfahren sind aus dem Stand der Technik bekannt, wie z.B. aus Baldoni et al, „A Survey of Symbolic Execution Techniques“, ACM Computing Surveys, May 2018, D'Silva et al, „A survey of automated techniques for formal Software verification“, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, July 2008 und Thüm et al. „A classification and survey of analyses strategies for software product lines‟, ACM Computing Surveys, June 2014 .Potential static analysis techniques that can be used to accomplish this task may include Symbolic Execution, Abstract Interpretation, Theorem Proofing, Model Checking, and others. These methods are known from the prior art, such as from Baldoni et al, A Survey of Symbolic Execution Techniques, ACM Computing Surveys, May 2018, D'Silva et al, A survey of automated techniques for formal software verification, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems , July 2008 and Thum et al. "A classification and survey of analyzes strategies for software product lines", ACM Computing Surveys, June 2014 .

Wie in der Variante der 5c wird die gefundene Eingabesequenz als Hilfseingabesequenz bereitgestellt (Zeile 17). Zudem werden die ausgewählten Bewertungen c1, ..., cm der Bedingungen cond1 bis condm, die durch die Eingabesequenz, die durch die statische Analyse ermittelt worden sind, erreicht worden sind, ermittelt (Zeile 16) und in der Bewertungsmenge condition set gespeichert (Zeile 20).As in the variant of 5c the found input sequence is provided as an auxiliary input sequence (line 17). In addition, the selected evaluations c1, ..., cm of the conditions cond 1 to cond m , which have been reached by the input sequence determined by the static analysis, are determined (line 16) and stored in the evaluation set condition set (line 20).

Ein weiterer Fuzzing-Prozess mit erhöhten Anzahlen k+1 von Eingabeelementen in der Eingabesequenzen werden gestartet und ein entsprechender Prozesshandler sf der Ausführungsmenge executions hinzugefügt (Zeile 19), und ein Fuzzing-Prozess wird gestartet (Zeile 18).Another fuzzing process with increased numbers k+1 of input elements in the input sequence is started and a corresponding process handler sf is added to the execution set executions (line 19), and a fuzzing process is started (line 18).

ZITATE ENTHALTEN IN DER BESCHREIBUNGQUOTES INCLUDED IN DESCRIPTION

Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.This list of documents cited by the applicant was generated automatically and is included solely for the better information of the reader. The list is not part of the German patent or utility model application. The DPMA assumes no liability for any errors or omissions.

Zitierte Nicht-PatentliteraturNon-patent Literature Cited

  • Baldoni et al, „A Survey of Symbolic Execution Techniques“, ACM Computing Surveys, May 2018, D'Silva et al, „A survey of automated techniques for formal Software verification“, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, July 2008 [0081]Baldoni et al, A Survey of Symbolic Execution Techniques, ACM Computing Surveys, May 2018, D'Silva et al, A survey of automated techniques for formal software verification, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems , July 2008 [0081]
  • Thüm et al. „A classification and survey of analyses strategies for software product lines‟, ACM Computing Surveys, June 2014 [0081]Thum et al. "A classification and survey of analyzes strategies for software product lines", ACM Computing Surveys, June 2014 [0081]

Claims (10)

Computer-implementiertes Verfahren zum Testen eines Programmcodes (p) mithilfe von Fuzzing, wobei zustandsbehaftete Fuzzing-Prozesse für den zu testenden Programmcode (p) jeweils mit einer variierenden Eingabesequenz (i1... in) aus einem oder mehreren Eingabeelementen (i) durchgeführt werden, wobei jeder zustandsbehaftete Fuzzing-Prozess eine Programmausführung mit den nacheinander zugeführten Eingabeelementen (i) der Eingabesequenz (i1...in) durchführt und nach Ausführung mit dem jeweils zugeführten Eingabeelement (i) eine Programmablaufbeobachtung (obs) speichert, die angibt, ob ein Programmausführungsfehler aufgetreten ist oder welche Programmpfade des Programmcodes (p) durchlaufen worden sind, wobei die Zuführung der Eingabeelemente (i) der Eingabesequenz (i1...in) zu dem ausgeführten Programmcode ohne Rücksetzen eines Programmzustands des Programmcodes (p) auf einen vorgegebenen Programmzustand erfolgt.Computer-implemented method for testing a program code (p) using fuzzing, wherein stateful fuzzing processes for the program code (p) to be tested are each performed with a varying input sequence (i 1 ... in) from one or more input elements (i). each stateful fuzzing process carries out a program execution with the successively supplied input elements (i) of the input sequence (i 1 ... i n ) and after execution with the respectively supplied input element (i) stores a program flow observation (obs) that indicates whether a program execution error has occurred or which program paths of the program code (p) have been run through, the supply of the input elements (i) of the input sequence (i 1 ... i n ) to the executed program code without resetting a program state of the program code (p) takes place on a given program state. Verfahren nach Anspruch 1, wobei die Eingabesequenz (i1... in) vor jeder Ausführung eines zustandsbehafteten Fuzzing-Prozesses generiert wird, wobei das Generieren der Eingabesequenz (i1... in) ein Ersetzen oder ein Einfügen eines insbesondere von einem Fuzzing-Tool gemäß einer Heuristik abhängig von den Ergebnissen vorangegangener Programmausführungen generierten Eingabeelements (i) umfasst, das von einer oder mehreren letzten Ausführungen des Programmcodes (p) abhängt.procedure after claim 1 , Wherein the input sequence (i 1 ... in) is generated before each execution of a stateful fuzzing process, the generation of the input sequence (i 1 ... in) replacing or inserting a particular of a fuzzing tool according to a Heuristic dependent on the results of previous program executions generated input element (i) includes, which depends on one or more recent executions of the program code (p). Verfahren nach Anspruch 1 oder 2, wobei die Eingabesequenz (is) vor jeder Ausführung des zustandsbehafteten Fuzzing-Prozesses abhängig von einer Hilfs-Eingabesequenz (I1...In) generiert wird, wobei die Hilfs-Eingabesequenz (i1...in) abhängig von einem Unterschied zwischen Programmablaufbeobachtungen (obs1, obs2) mit zwei Eingabesequenzen (i1...in), die aus einer Eingabesequenzmenge (is9 generiert werden, generiert wird, wobei insbesondere eine der Eingabesequenzen (i1...in) eine Reihe von Eingabeelementen (i) aufweist, die Bestandteil der anderen der Eingabesequenzen (i1... in) ist.procedure after claim 1 or 2 , wherein the input sequence (is) is generated before each execution of the stateful fuzzing process as a function of an auxiliary input sequence (I 1 ... I n ), the auxiliary input sequence (i 1 ... i n ) as a function of a Difference between program flow observations (obs1, obs2) with two input sequences (i 1 ... i n ), which are generated from an input sequence set (is9), in particular one of the input sequences (i 1 ... i n ) is a series of Input elements (i), which is part of the other of the input sequences (i 1 ... in). Verfahren nach Anspruch 1 oder 2, wobei die Eingabesequenz (i1... in) vor jeder Ausführung eines der Fuzzing-Prozesse abhängig von einer Hilfs-Eingabesequenz (I1...In) generiert wird, wobei die Hilfs-Eingabesequenz (I1... In) abhängig von einem Programmzustand, den der Programmcode (p) nach einer Ausführung mit der Eingabesequenz (i1... in) aufweist, generiert wird.procedure after claim 1 or 2 , where the input sequence (i 1 ... in) is generated before each execution of one of the fuzzing processes depending on an auxiliary input sequence (I 1 ...I n ), where the auxiliary input sequence (I 1 ... I n ) is generated depending on a program state that the program code (p) has after execution with the input sequence (i 1 . . . in). Verfahren nach Anspruch 1 oder 2, wobei die Eingabesequenz (i1... in) vor jeder Ausführung eines der zustandsbehafteten Fuzzing-Prozesse abhängig von einer Hilfs-Eingabesequenz (I1...In) generiert wird, wobei die Hilfs-Eingabesequenz (I1...In) abhängig von dem Ergebnis einer statischen Programmanalyse abhängig von einem vorgegebenen Programmzustand ermittelt wird, wobei für die zustandsbehafteten Fuzzing-Prozesse verschiedene Programmzustände vorgegeben werden.procedure after claim 1 or 2 , the input sequence (i 1 ... in) being generated before each execution of one of the stateful fuzzing processes depending on an auxiliary input sequence (I 1 ...I n ), the auxiliary input sequence (I 1 ... I n ) is determined as a function of the result of a static program analysis as a function of a specified program state, different program states being specified for the state-related fuzzing processes. Verfahren nach einem der Ansprüche 1 bis 5, wobei eines, mehrere oder alle der Eingabeelemente (i) einen Code, ein Zeichen oder eine Zeichenkette umfassen.Procedure according to one of Claims 1 until 5 , wherein one, several or all of the input elements (i) comprise a code, a character or a character string. Verfahren nach einem der Ansprüche 1 bis 6, wobei eine oder mehrere Eingabesequenzen (i1... in) für die zustandsbehafteten Fuzzing-Prozesse durch Aufteilen von Eingabeelementen der Eingabesequenzmenge (is) generiert werden.Procedure according to one of Claims 1 until 6 , wherein one or more input sequences (i 1 ... in) for the stateful fuzzing processes are generated by splitting input elements of the input sequence set (is). Vorrichtung zum Testen eines Programmcodes (p) mithilfe von Fuzzing, wobei die Vorrichtung ausgebildet ist, um zustandsbehaftete Fuzzing-Prozesse für den zu testenden Programmcode (p) jeweils mit einer variierenden Eingabesequenz (i1...in) aus einem oder mehreren Eingabeelementen durchzuführen, wobei jeder zustandsbehaftete Fuzzing-Prozess eine Programmausführung mit den nacheinander zugeführten Eingabeelementen der Eingabesequenz (i1...in) durchführt und nach Ausführung mit dem jeweils zugeführten Eingabeelement (i) eine Programmablaufbeobachtung (obs) speichert, die angibt, ob ein Programmausführungsfehler aufgetreten ist oder welche Programmpfade des Programmcodes durchlaufen worden sind, wobei die Zuführung der Eingabeelemente der Eingabesequenz (i1...in) zu dem ausgeführten Programmcode (p) ohne Rücksetzen eines Programmzustands des Programmcodes (p) auf einen vorgegebenen Programmzustand erfolgt.Device for testing a program code (p) using fuzzing, wherein the device is designed to stateful fuzzing processes for the program code to be tested (p) each with a varying input sequence (i 1 ... i n ) from one or more input elements to be carried out, with each stateful fuzzing process carrying out a program execution with the successively supplied input elements of the input sequence (i 1 ... i n ) and after execution with the respectively supplied input element (i) storing a program flow observation (obs) which indicates whether a A program execution error has occurred or which program paths of the program code have been run through, the input elements of the input sequence (i 1 ... i n ) being fed to the executed program code (p) without resetting a program state of the program code (p) to a predetermined program state. Computerprogramm mit Programmcodemitteln, das dazu eingerichtet ist, ein Verfahren nach einem der Ansprüche 1 bis 7 auszuführen, wenn das Computerprogramm auf einer Datenverarbeitungseinrichtung ausgeführt wird.Computer program with program code means that is set up to implement a method according to one of Claims 1 until 7 to be carried out when the computer program is executed on a data processing device. Maschinenlesbares Speichermedium mit einem darauf gespeicherten Computerprogramm nach Anspruch 9.Machine-readable storage medium with a computer program stored on it claim 9 .
DE102020208543.9A 2020-07-08 2020-07-08 Method and device for performing a dynamic security check of software programs Pending DE102020208543A1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102020208543.9A DE102020208543A1 (en) 2020-07-08 2020-07-08 Method and device for performing a dynamic security check of software programs
CN202110766802.3A CN113918446A (en) 2020-07-08 2021-07-07 Method and equipment for dynamically checking security of software program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102020208543.9A DE102020208543A1 (en) 2020-07-08 2020-07-08 Method and device for performing a dynamic security check of software programs

Publications (1)

Publication Number Publication Date
DE102020208543A1 true DE102020208543A1 (en) 2022-01-13

Family

ID=79020136

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020208543.9A Pending DE102020208543A1 (en) 2020-07-08 2020-07-08 Method and device for performing a dynamic security check of software programs

Country Status (2)

Country Link
CN (1) CN113918446A (en)
DE (1) DE102020208543A1 (en)

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Baldoni et al, „A Survey of Symbolic Execution Techniques", ACM Computing Surveys, May 2018, D'Silva et al, „A survey of automated techniques for formal Software verification", IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, July 2008
Thüm et al. „A classification and survey of analyses strategies for software product lines‟, ACM Computing Surveys, June 2014

Also Published As

Publication number Publication date
CN113918446A (en) 2022-01-11

Similar Documents

Publication Publication Date Title
DE69029983T2 (en) Performance improvement device for rule-based expert system
DE102013221057B4 (en) System and method for batch evaluation programs
DE102013221052A1 (en) System and method for batch evaluation programs
DE102012210794A1 (en) System and method for data quality monitoring
DE3911465C2 (en) Process for the automatic configuration of technical systems from components
EP2137615B1 (en) Method for the computer-aided determination of the dependencies of a plurality of modules of a technical system, especially of a software system
DE112012004331T5 (en) Use the strength of traceability links to monitor software development integrity
DE102006029138A9 (en) Method and computer program product for the detection of memory leaks
DE112011103428T5 (en) Automated analysis of composite applications
DE102014102551A1 (en) Machine and method for evaluating failed software programs
EP2800307B1 (en) Method for detecting deviations from a given standard state
EP3707854A1 (en) Method for linking a first data block to a second data block, method for checking the integrity of a blockchain structure, device and computer program product
DE112010002620T5 (en) ONTOLOGY USE FOR THE ORDER OF DATA RECORDS NACHRELEVANZ
DE10038499A1 (en) Formal verifying method for development in data processor involves executing verification algorithm using one limit of signal envelope, and limiting state-space search by using verification algorithm
EP3811263A1 (en) Cryptography module and method for operating same
DE102020208543A1 (en) Method and device for performing a dynamic security check of software programs
EP3620923A1 (en) Watchdog for monitoring a processor
WO2005109196A1 (en) Method for determining deadlocks in secondary processes
DE102021207872A1 (en) COMPOSITIONAL VERIFICATION OF EMBEDDED SOFTWARE SYSTEMS
DE102010053971A1 (en) Splitting a counted value on a task running on a multi-core processor
DE102016015755B4 (en) Method for operating a watchdog comprising pattern recognition for recurring load situations with a two-stage result memory
DE60037429T2 (en) Method for reducing finite automatic control units and corresponding computer-readable medium
DE112018006331T5 (en) Test case generation device, test case generation method and test case generation program
DE102021206045A1 (en) Computer-implemented method and device for detecting code deficits in a program code of a software
DE102008044808B4 (en) Method for generating program code in an operating system memory and an application memory of a data carrier