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 PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test 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
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 der1 ; -
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 der4 ; -
5b ein Pseudocode zum Erzeugen einer Hilfs-Eingabesequenz für den Pseudocode der4 ; -
5c ein Pseudocode zum Erzeugen einer Hilfs-Eingabesequenz für den Pseudocode der4 ; -
5d ein Pseudocode zum Erzeugen einer Hilfs-Eingabesequenz für den Pseudocode der4 ;
-
1 a flowchart and pseudocode to illustrate a method for performing a fuzzing test method, -
2 a flowchart illustrating a subprogram for theflowchart 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 of4 ; -
5b a pseudocode for generating an auxiliary input sequence for the pseudocode of4 ; -
5c a pseudocode for generating an auxiliary input sequence for the pseudocode of4 ; -
5d a pseudocode for generating an auxiliary input sequence for the pseudocode of4 ;
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.
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
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
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
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
Der Pseudocode der
In mehreren Ausführungsvarianten, deren Pseudocodes in den
Die Variante der
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 (
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
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
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
In dem in
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
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
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
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
In
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
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
In einer vierten Variante, die in dem Pseudocode in der
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
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
Wie in der Variante der
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)
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) |
-
2020
- 2020-07-08 DE DE102020208543.9A patent/DE102020208543A1/en active Pending
-
2021
- 2021-07-07 CN CN202110766802.3A patent/CN113918446A/en active Pending
Non-Patent Citations (2)
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 |