DE102021206045A1 - Computer-implemented method and device for detecting code deficits in a program code of a software - Google Patents

Computer-implemented method and device for detecting code deficits in a program code of a software Download PDF

Info

Publication number
DE102021206045A1
DE102021206045A1 DE102021206045.5A DE102021206045A DE102021206045A1 DE 102021206045 A1 DE102021206045 A1 DE 102021206045A1 DE 102021206045 A DE102021206045 A DE 102021206045A DE 102021206045 A1 DE102021206045 A1 DE 102021206045A1
Authority
DE
Germany
Prior art keywords
code
deficit
deficits
functions
methods
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
DE102021206045.5A
Other languages
German (de)
Inventor
Hans LOEHR
Anupam Sarkar
Christopher Huth
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 DE102021206045.5A priority Critical patent/DE102021206045A1/en
Publication of DE102021206045A1 publication Critical patent/DE102021206045A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Abstract

Die Erfindung betrifft ein computer-implementiertes Verfahren zum Auffinden von Code-Defiziten eines zu untersuchenden Programmcodes (1), mit folgenden Schritten:- Bereitstellen (S1) eines Code Property Graphen (3) für den zu untersuchenden Programmcode (1);- Abfragen (S3) des Code Property Graphen (3) mit einer oder mehreren Suchabfragen, um sensitive Code-Positionen als potenzielle Code-Defizite (4) aufzufinden;- Bestimmen (S4) einer oder mehrerer Funktionen und/oder Methoden, die die sensitiven Code-Positionen enthalten, und einer oder mehrerer Eingangsvariablen, die einen Einfluss auf das Vorliegen der potenziellen Code-Defizite (4) haben;- Jeweiliges Ausführen (S10) eines Symbolic Execution-Verfahrens (5) auf jeweils die eine oder die mehreren bestimmten Funktionen und/oder Methoden, wobei jeweils die eine oder die mehreren bestimmten Eingangsvariablen symbolisch angenommen werden, wobei das Symbolic Execution-Verfahren (5) ausgeführt wird, um jeweils eine oder mehrere vorgegebene Defizit-Eigenschaften oder eine oder mehrere vorgegebene Defizit-Bedingungen zu überprüfen;- Wenn die eine oder die mehreren vorgegebenen Defizit-Eigenschaften oder die eine oder die mehreren vorgegebenen Defizit-Bedingungen erfüllt sind, Angeben (S6) des entsprechenden Code-Defizits (6) und eines Werts der jeweiligen einen oder mehreren Eingangsvariablen der betrachteten Funktion oder Methode, die die eine oder die mehreren Defizit-Eigenschaften oder die eine oder die mehreren vorgegebenen Defizit-Bedingungen erfüllen, als Ergebnis des jeweiligen Symbolic Execution-Verfahrens (5).The invention relates to a computer-implemented method for finding code deficits in a program code (1) to be examined, having the following steps: - providing (S1) a code property graph (3) for the program code (1) to be examined; - queries ( S3) of the code property graph (3) with one or more search queries in order to find sensitive code positions as potential code deficits (4);- determining (S4) one or more functions and/or methods that identify the sensitive code positions contain, and one or more input variables that have an influence on the existence of the potential code deficits (4); - respective execution (S10) of a symbolic execution method (5) on each of the one or more specific functions and/or Methods, in each case the one or more specific input variables are assumed symbolically, the symbolic execution method (5) being carried out in order to in each case have one or more predetermined ones checking deficit properties or one or more predetermined deficit conditions;- if the one or more predetermined deficit properties or one or more predetermined deficit conditions are met, indicating (S6) the corresponding code deficit (6) and a value of the respective one or more input variables of the considered function or method, which meet the one or more deficit properties or the one or more predetermined deficit conditions, as a result of the respective symbolic execution method (5).

Description

Technisches Gebiettechnical field

Die Erfindung betrifft Verfahren zum automatischen Auffinden von Code-Defiziten, wie beispielsweise Schwachstellen, Angriffsmöglichkeiten und Fehlern in einem Softwarecode.The invention relates to methods for automatically finding code deficits, such as weak points, possible attacks and errors in a software code.

Technischer HintergrundTechnical background

Code Property Graphs (CPG) dienen dazu, Eigenschaften eines Programmcodes in einer Graphendatenstruktur abzubilden. Sie werden durch Analysieren des Programmcodes gebildet, indem ein abstrakter Syntaxbaum, ein Steuerflussgraph und ein Programmabhängigkeitsgraph in einem gemeinsamen Graphen gespeichert werden. Ein CPG wird in einer Graphendatenbank gespeichert und kann durch Suchabfragen in einer dafür ausgelegten Suchsprache untersucht werden. Diese Suchsprache ermöglicht das Suchen nach Mustern in dem Graphen, wie z. B. Datenflüsse von Eingangsvariablen zu Ausdrücken einer bestimmten Syntax. Dies kann zum Auffinden von potenziellen Code-Defiziten der Software verwendet werden, wie aus F. Yamaguchi et al., „Modeling and discovering vulnerabilities with code property graphs“, In Proceedings of the 35th IEEE Symposium on Security and Privacy (S&P), 2014. bekannt ist.Code Property Graphs (CPG) are used to map properties of a program code in a graph data structure. They are formed by analyzing the program code by storing an abstract syntax tree, a control flow graph and a program dependency graph in a common graph. A CPG is stored in a graph database and can be examined by searching queries in a dedicated search language. This search language allows searching for patterns in the graph, such as B. Data flows from input variables to expressions of a specific syntax. This can be used to find potential code vulnerabilities in the software, as per F. Yamaguchi et al., "Modeling and discovering vulnerabilities with code property graphs", In Proceedings of the 35th IEEE Symposium on Security and Privacy (S&P), 2014 .is known.

Offenbarung der ErfindungDisclosure of Invention

Erfindungsgemäß sind ein Verfahren zum Auffinden von Code-Defiziten eines Programmcodes gemäß Anspruch 1 sowie eine entsprechende Vorrichtung gemäß dem nebengeordneten Anspruch vorgesehen.According to the invention, a method for finding code deficits in a program code according to claim 1 and a corresponding device according to the independent claim 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 Auffinden von Code-Defiziten eines zu untersuchenden Programmcodes vorgesehen, mit folgenden Schritten:

  • - Bereitstellen eines Code Property Graphen für den zu untersuchenden Programmcode;
  • - Abfragen des Code Property Graphen mit einer oder mehreren Suchabfragen, um sensitive Code-Positionen als potenzielle Code-Defizite aufzufinden;
  • - Bestimmen einer oder mehrerer Funktionen und/oder Methoden, die die sensitiven Code-Positionen enthalten, und einer oder mehrerer Eingangsvariablen, die einen Einfluss auf das Vorliegen der potenziellen Code-Defizite haben;
  • - jeweiliges Ausführen eines Symbolic Execution-Verfahrens auf jeweils die eine oder die mehreren bestimmten Funktionen und/oder Methoden, wobei jeweils die eine oder die mehreren bestimmten Eingangsvariablen symbolisch angenommen werden, wobei das Symbolic Execution-Verfahren ausgeführt wird, um jeweils eine oder mehrere vorgegebene Defizit-Eigenschaften oder eine oder mehrere vorgegebene Defizit-Bedingungen zu überprüfen;
  • - wenn die eine oder die mehreren vorgegebenen Defizit-Eigenschaften oder die eine oder die mehreren vorgegebenen Defizit-Bedingungen erfüllt sind, Angeben des entsprechenden Code-Defizits und eines Werts der jeweiligen einen oder mehreren Eingangsvariablen der betrachteten Funktion oder Methode, die die eine oder die mehreren Defizit-Eigenschaften oder die eine oder die mehreren vorgegebenen Defizit-Bedingungen erfüllen, als Ergebnis des jeweiligen Symbolic Execution-Verfahrens.
According to a first aspect, a computer-implemented method for finding code deficits in a program code to be examined is provided, with the following steps:
  • - Providing a code property graph for the program code to be examined;
  • - Query the code property graph with one or more search queries to find sensitive code positions as potential code deficits;
  • - determining one or more functions and/or methods that contain the sensitive code positions and one or more input variables that have an impact on the existence of the potential code deficits;
  • - respective execution of a symbolic execution method on each of the one or more specific functions and/or methods, the one or more specific input variables being assumed symbolically, the symbolic execution method being executed for one or more specified ones verify deficit properties or one or more predetermined deficit conditions;
  • - if the one or more predetermined deficit properties or the one or more predetermined deficit conditions are met, specifying the corresponding code deficit and a value of the respective one or more input variables of the considered function or method that the one or the multiple deficit properties or satisfying one or more predetermined deficit conditions as a result of the respective symbolic execution procedure.

Insbesondere können bei dem jeweiligen Ausführen des Symbolic Execution-Verfahrens auf jeweils die eine oder die mehreren bestimmten Funktionen und/oder Methoden nur genau diejenige oder diejenigen bestimmten Eingangsvariablen symbolisch angenommen werden, die einen Einfluss auf das Vorliegen der potenziellen Code-Defizite haben.In particular, when the symbolic execution method is executed in each case for the one or more specific functions and/or methods, only precisely that or those specific input variables that have an influence on the presence of the potential code deficits can be symbolically accepted.

Grundsätzlich besteht ein hoher Bedarf darin, Code-Defizite in einem Softwarecode zu ermitteln und zu lokalisieren. Derartige Code-Defizite entsprechen Code-Positionen, d. h. Positionen im Programmcode, an denen unzulässige Operationen, wie z.B. Positionen von möglichen Divisionen durch Null, unzulässige Aufrufe von externen Code-Komponenten, wie beispielsweise unzulässige SQL-Aufrufe, und dergleichen erfolgen. Es ist wünschenswert, dass solche Code-Defizite in einem Programmcode in automatisierter Weise erkannt werden können.Basically, there is a great need to determine and localize code deficits in a software code. Such code deficits correspond to code positions, i. H. Positions in the program code where illegal operations, such as positions of possible divisions by zero, illegal calls to external code components, such as illegal SQL calls, and the like take place. It is desirable that such code deficits in a program code can be detected in an automated manner.

Eine gebräuchliche Möglichkeit, Code-Defizite zu ermitteln, besteht darin, ein Symbolic Execution-Verfahren zu verwenden. Symbolic Execution ist eine Code-Analysetechnik, bei der der Programmcode für ausgewählte Variablen symbolisch ausgeführt wird. Bei der symbolischen Programmcode-Ausführung werden den Variablen, die als Symbole betrachtet werden, nicht konkrete Werte zugeordnet, sondern diese werden symbolisch als algebraische Variablen angenommen und in Berechnungsformeln verwendet.A common way to find code deficits is to use a symbolic execution technique. Symbolic execution is a code analysis technique in which program code is executed symbolically for selected variables. In symbolic program code execution, variables that are considered symbols are not assigned concrete values, but are symbolically assumed to be algebraic variables and used in calculation formulas.

Die Werte, die diese symbolischen Variablen annehmen sollten, um bestimmte Codeteile zu erreichen, können dann durch Lösen dieser Formen ermittelt werden. Somit werden, anstatt konkrete Werte für die Variablen anzunehmen, diese als Symbole betrachtet, und das Code-Segment, das die Symbole verwendet, als ein oder mehrere Defizit-Eigenschaften und/oder ein oder mehrere Defizit-Bedingungen insbesondere in Form von Satisfiability Modulo Theory (SMT)-Abfragen bzw. Formeln modelliert. Diese Formeln werden dann mithilfe eines SMT-Solvers gelöst, um einen oder mehrere konkrete Werte zu bestimmen, die ein bestimmtes Code-Segment triggern, in dem ein Code-Defizit enthalten sein kann. Die eine oder die mehreren vorgegebenen Defizit-Eigenschaften oder die eine oder die mehreren vorgegebenen Defizit-Bedingungen können als Kriterien verstanden werden, die zu einer fehlerhaften Ausführung des Programmcodes führen.The values that these symbolic variables should take on to achieve specific pieces of code can then be found by solving for these shapes. Thus, instead of assuming concrete values for the variables, they are treated as symbols, and the code segment that uses the Symbols used, modeled as one or more deficit properties and/or one or more deficit conditions, in particular in the form of Satisfiability Modulo Theory (SMT) queries or formulas. These formulas are then solved using an SMT solver to determine one or more concrete values that trigger a particular code segment that may contain a code deficit. The one or more predetermined deficit properties or the one or more predetermined deficit conditions can be understood as criteria that lead to an incorrect execution of the program code.

Grundsätzlich eignet sich das Symbolic Execution-Verfahren sehr gut, Code-Defizite aufzudecken, insbesondere wenn alle Eingangsvariablen symbolisch betrachtet werden. Jedoch besteht ein Nachteil des Symbolic Execution-Verfahrens darin, dass das Verfahren sehr rechenaufwendig wird, wenn die Anzahl der Eingangsvariablen, die als Symbole betrachtet werden, sehr groß wird.In principle, the symbolic execution method is very well suited to uncovering code deficits, especially when all input variables are considered symbolically. However, a disadvantage of the symbolic execution method is that the method becomes very computationally expensive when the number of input variables that are considered as symbols becomes very large.

Daher wird das Symbolic Execution-Verfahren in der Regel so verwendet, dass nur ein Teil der Eingangsvariablen als Symbole betrachtet werden. Diese werden in der Regel manuell von einem Experten ausgewählt, und es benötigt somit einen Nutzereingriff bzw. Nutzerbeitrag, um Code-Defizite zu detektieren. Dabei besteht die Gefahr, dass relevante Eingangsvariablen, die nicht symbolisch betrachtet werden, übersehen werden.Therefore, the Symbolic Execution method is usually used in such a way that only part of the input variables are considered as symbols. These are usually selected manually by an expert, and thus user intervention or user contribution is required to detect code deficits. There is a risk that relevant input variables that are not considered symbolically will be overlooked.

Code Property Graphs (CPG) können ebenfalls verwendet werden, um Datenflüsse aufzufinden. CPGs entsprechen Datenstrukturen, die ausgelegt sind, um große Programmcodes nach Code-Mustern zu durchsuchen. Diese Code-Muster können dazu in einer Domänen-spezifischen Sprache (domain-specific language, DSL) basierend auf Scala beschrieben sein. CPG dient als eine gemeinsame Zwischen-Programm-Repräsentation über eine Vielzahl von Programmiersprachen. CPGs sind eine generische Abstraktion eines ProgrammCodes und setzen sich zusammen aus Knoten, die Programmkonstrukte (Methoden, Variablen und Steuerstrukturen) darstellen, und deren Knotentypen, mit Labeln versehenen Kanten, die Beziehungen zwischen den Programmkonstrukten, d.h. zwischen jeweils zwei miteinander in Beziehung stehenden Knoten, darstellen, wobei das Label die Art der Beziehung angibt, sowie Schlüssel-Werte-Paare, die als Attribute den Knoten zugeordnet sind und die vom Knotentyp abhängen.Code Property Graphs (CPG) can also be used to find data flows. CPGs are data structures designed to search large program code for code patterns. To this end, these code patterns can be described in a domain-specific language (DSL) based on Scala. CPG serves as a common inter-program representation across a variety of programming languages. CPGs are a generic abstraction of program code and are composed of nodes that represent program constructs (methods, variables and control structures) and their node types, labeled edges, the relationships between the program constructs, i.e. between any two related nodes, where the label indicates the type of relationship, as well as key-value pairs that are assigned to the nodes as attributes and that depend on the node type.

CPGs haben den Nachteil, dass diese Codepfad-Bedingungen oder den Wertebereich, den eine betrachtete Variable annehmen kann, an einer bestimmten Code-Position nicht berücksichtigen können. Dies führt bei der Nutzung von CPG zum Auffinden von Code-Defiziten zu der Ermittlung von False Positives.CPGs have the disadvantage that these code path conditions or the range of values that a considered variable can assume at a specific code position cannot be taken into account. This leads to the detection of false positives when using CPG to find code deficits.

Gemäß dem obigen Verfahren wird der Programmcode mithilfe von CPG analysiert, um Code-Positionen aufzufinden, die problematisch sein können und ein Code-Defizit enthalten können. Der CPG wird durch Analysieren des Programmcodes ermittelt, wobei die resultierenden Graphen in einer Graphendatenbank gespeichert werden.According to the above method, the program code is analyzed using CPG to find code positions that may be problematic and may contain a code deficit. The CPG is determined by analyzing the program code, with the resulting graphs being stored in a graph database.

Das CPG wird dann mithilfe von vorgegebenen Suchabfragen nach potenziellen Code-Defiziten in dem Programmcode durchsucht. Die Suchabfragen resultieren in potenziellen Code-Defiziten, die Code-Positionen, wie z. B. Code-Zeilen und Variablen, angeben, an denen ein Fehler auftreten kann, wie beispielsweise ein arithmetischer Ausdruck, der eine Division beinhaltet, und eine Variable, die zu einer Division durch Null führt. Da bei der Nutzung von CPG zum Auffinden von Code-Positionen häufig False Positives ermittelt werden, wird ein Überprüfungsverfahren angewendet, das auf dem Symbolic Execution-Verfahren basiert.The CPG is then searched for potential code deficits in the program code using predefined search queries. The search queries result in potential code deficits, the code positions, such as e.g. B. Lines of code and variables where an error may occur, such as an arithmetic expression that involves division and a variable that results in division by zero. Since false positives are often determined when using CPG to find code positions, a verification procedure based on the symbolic execution procedure is used.

Das Symbolic Execution-Verfahren überprüft die potenziellen Code-Defizite in Form der Code-Positionen und Variablen als Eingangsgrößen, um festzustellen, ob das potenzielle Code-Defizit tatsächlich einem Code-Defizit entspricht. Dazu wird das Symbolic Execution-Verfahren nur auf den Teil des Programmcodes angewendet, der das potenzielle Code-Defizit enthält, üblicherweise auf die Funktion oder die Methode, die die Code-Position des potenziellen Code-Defizits enthält.The Symbolic Execution method checks the potential code deficits in the form of the code positions and variables as input variables to determine whether the potential code deficit actually corresponds to a code deficit. To do this, the symbolic execution method is only applied to the part of the program code that contains the potential code deficit, usually to the function or method that contains the code position of the potential code deficit.

Der Nachweis, dass ein Code-Defizit in der betrachteten Funktion oder Methode vorliegt, erfolgt basierend auf der Art des zu überprüfenden potenziellen Code-Defizits, das der Auswahl der betrachteten Funktion oder Methode zugrunde liegt, und den diesen zugeordneten Defizit-Eigenschaften und/oder Defizit-Bedingungen. Wenn beispielsweise in der Funktion eine Division durch einen Ausdruck mit einer Variable enthalten ist, stellt diese eine potenzielle Code-Defizit dar, da der Ausdruck mit der Variablen möglicherweise den Wert Null annehmen kann. Die Defizit-Bedingung, die sich dann aus diesem potenziellen Code-Defizit ergibt, entspricht dann der Bedingung, dass der Ausdruck mit der Variablen den Wert Null annimmt.Evidence that a code deficit exists in the considered function or method is based on the nature of the potential code deficit to be checked, which underlies the selection of the considered function or method, and the deficit properties associated with it and/or deficit conditions. For example, if the function involves division by an expression involving a variable, this represents a potential code deficit because the expression involving the variable can potentially be null. The deficit condition, which then results from this potential code deficit, then corresponds to the condition that the expression with the variable assumes the value zero.

Wenn als weiteres Beispiel eine Codezeile einen Zugriff auf eine Array-Datenstruktur mittels einer Indexvariable enthält, liegt ein Code-Defizit vor, wenn die Indexvariable kleiner als 0 ist, oder größer als die alloziierte Größe des Arrays. As another example, if a line of code contains an access to an array data structure using an index variable, there is a code deficit if the index variable is less than 0, or greater than the allocated size of the array.

Die Defizit-Bedingung entspricht dann der Bedingung, dass die Indexvariable kleiner 0 oder größer der Größe des Arrays ist.The deficit condition then corresponds to the condition that the index variable is less than 0 or greater than the size of the array.

Wenn als weiteres Beispiel eine Codezeile einen Referenzzugriff auf ein Objekt oder ein Recordset (Datenstrukturen) enthält, liegt ein Code-Defizit vor, wenn die Speicherstelle, auf die verwiesen wurde, zuvor freigegeben wurde, kein Objekt des erwarteten Typs enthält, oder auf „Null“ zeigt. Entsprechend definiert die Defizit-Bedingung, dass die Speicherstelle, auf die referenziert wird, kein gültiges Objekt oder Recordset enthält.As another example, if a line of code contains a reference access to an object or recordset (data structures), there is a code deficit if the referenced location was previously freed, does not contain an object of the expected type, or is set to "Null " indicates. Similarly, the deficit constraint defines that the memory location being referenced does not contain a valid object or recordset.

Wenn das Symbolic Execution-Verfahren nachweisen kann, dass das Code-Defizit nicht vorliegt, entspricht das durch die Analyse der CPGs aufgefundene Code-Defizit einem False Positive und kann verworfen werden.If the symbolic execution procedure can prove that the code deficit does not exist, the code deficit found by analyzing the CPGs corresponds to a false positive and can be discarded.

Anderenfalls, d.h. ein Code-Defizit wurde erkannt, kann das Symbolic Execution-Verfahren auf den nächstgrößeren Teil des Programmcodes angewendet werden, d. h. das Symbolic Execution-Verfahren wird auf die übergeordneten Funktionen, die die zuvor untersuchten Funktionen oder Methoden aufrufen, angewendet werden. Mit anderen Worten können die eine oder die mehreren Funktionen und /oder Methoden, die die sensitiven Code-Positionen enthalten, weiterhin eine oder mehrere Funktionen und /oder Methoden umfassen, die die eine oder die mehreren Funktionen und /oder Methoden aufrufen, in denen ein Code-Defizit festgestellt wurde.Otherwise, i.e. a code deficit was detected, the symbolic execution method can be applied to the next larger part of the program code, i. H. the Symbolic Execution technique will be applied to the higher-level functions that call the previously examined functions or methods. In other words, the one or more functions and / or methods that contain the sensitive code positions, further include one or more functions and / or methods that call the one or more functions and / or methods in which a code deficit was detected.

Dies wird fortgesetzt, bis entweder das potenzielle Code-Defizit als False Positive identifiziert ist oder Programmpfadbedingungen für die Variablen, die das Code-Defizit als tatsächliches Code-Defizit identifizieren, ermittelt werden. Im einfachsten Fall endet die Analyse, wenn der Programmeinstiegspunkt, also die Funktion „main“, erreicht wird, und das Code-Defizit nicht als False Positive erkannt wird. Ist das Programm, das analysiert wird, eine Programmbibliothek, dann existiert die Funktion „main“ nicht. In diesem Fall wird das Verfahren beendet, wenn eine Funktion analysiert wurde, die von der Bibliothek an ein nutzendes Programm angeboten wird (z.B. in Java Methoden, die als „public“ markiert sind, in C Funktionen, die in Headerdateien beschrieben werden).This continues until either the potential code deficit is identified as a false positive or program path conditions are determined for the variables that identify the code deficit as actual code deficit. In the simplest case, the analysis ends when the program entry point, i.e. the "main" function, is reached and the code deficit is not recognized as a false positive. If the program being analyzed is a program library, then the "main" function does not exist. In this case, the procedure is terminated when a function has been analyzed that is offered by the library to a using program (e.g. in Java methods marked as "public", in C functions described in header files).

Werden durch das Symbolic Execution-Verfahren Programmpfadbedingungen für die Variablen, die das Code-Defizit als tatsächliches Code-Defizit identifizieren, ermittelt, so werden entsprechend Eingangsgrößen generiert, die das fehlerhafte Verhalten auslösen. Als Ergebnis des Verfahrens können bestätigte Code-Defizite zusammen mit Pfadbedingungen und/oder Werten von Eingangsgrößen, die das fehlerhafte Verhalten demonstrieren, ausgegeben werden.If the symbolic execution method is used to determine program path conditions for the variables that identify the code deficit as an actual code deficit, then corresponding input variables are generated that trigger the erroneous behavior. As a result of the method, confirmed code deficiencies can be output together with path conditions and/or values of input quantities demonstrating the erroneous behavior.

Die Hauptidee des obigen Verfahrens besteht darin, Datenflüsse zu Code-Positionen, die möglicherweise Code-Defizite enthalten, zu finden und die relevanten Variablen im Programmcode zu identifizieren. Diese Variablen können dann als symbolische Variablen für das Symbolic Execution-Verfahren auf den Programmcode angewendet werden.The main idea of the above method is to find data flows to code positions that may contain code deficits and to identify the relevant variables in the program code. These variables can then be applied to the program code as symbolic variables for the symbolic execution method.

Das obige Verfahren ermöglicht es so, ein vollständig automatisiertes Verfahren zum Auffinden von tatsächlichen Code-Defiziten bereitzustellen, bei dem mithilfe von CPGs diejenigen Variablen bestimmt werden, die als symbolische Variablen in einem nachfolgenden Symbolic Execution-Verfahren verwendet werden. Somit kann das Symbolic Execution-Verfahren zielgerichtet auf zu untersuchende Teile des Programmcodes angewendet werden und nur relevante Variablen als symbolische Variablen verwendet werden. Dadurch bleibt der Zustandsraum für die Anwendung des Symbolic Execution-Verfahrens beschränkt, was die Ausführung des Verfahrens effizienter macht, als das Symbolic Execution-Verfahren auf alle Variablen als symbolische Variablen anzuwenden. Durch die Kombination des Auffindens von potenziellen Code-Defiziten mit dem Symbolic Execution-Verfahren kann somit zum einen die Rechenzeit erheblich verkürzt werden und zum anderen auch das Gesamtverfahren automatisiert durchgeführt werden.The above method thus makes it possible to provide a fully automated method for finding actual code deficiencies using CPGs to determine those variables that will be used as symbolic variables in a subsequent Symbolic Execution method. Thus, the symbolic execution method can be applied in a targeted manner to parts of the program code to be examined and only relevant variables can be used as symbolic variables. This keeps the state space for applying the symbolic execution technique limited, making the execution of the method more efficient than applying the symbolic execution technique to all variables as symbolic variables. By combining the detection of potential code deficits with the symbolic execution method, the computing time can be significantly reduced on the one hand and the entire method can be carried out automatically on the other.

Figurenlistecharacter list

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

  • 1 eine schematische Darstellung einer Blockdarstellung eines Verfahrens zum Ermitteln von Code-Defiziten in einem Programmcode; und
  • 2 ein Flussdiagramm zur Veranschaulichung eines beispielhaften Verfahrens zum Ermitteln von Code-Defiziten in einem Programmcode.
Embodiments are explained in more detail below with reference to the accompanying drawings. Show it:
  • 1 a schematic representation of a block representation of a method for determining code deficits in a program code; and
  • 2 a flowchart to illustrate an exemplary method for determining code deficits in a program code.

Beschreibung von AusführungsformenDescription of Embodiments

1 veranschaulicht das grundlegende Verfahren zum automatisierten Erkennen von Code-Defiziten in einem Programmcode 1. Der Programmcode wird mithilfe von geeigneten Tools 2, wie z.B. joern von ShiftLeft. in einen Code Property Graph 3 umgesetzt und dieser durch geeignete Abfragen nach sensitiven Code-Positionen durchsucht. Als Ergebnis erhält man potenzielle Code-Defizite 4, die den sensitiven Code-Positionen des Suchergebnisses entsprechen. 1 illustrates the basic procedure for the automated detection of code deficits in a program code 1. The program code is created using suitable tools 2, such as joern from ShiftLeft. converted into a Code Property Graph 3 and searched through suitable queries for sensitive code positions. The result is potential code deficits 4 that correspond to the sensitive code positions of the search result.

Das Ermitteln der Code-Positionen, an denen potenzielle Code-Defizite vorliegen, kann mithilfe einer Syntaxsuche und einem Identifizieren von Variablen, die in den betrachteten Syntaxsuchen verwendet werden, erfolgen. Die durch die Syntaxsuche ermittelten Code-Positionen werden als die sensitiven Code-Positionen bestimmt, wenn Eingabegrößen des Programmcodes diese sensitiven Code-Positionen modifizieren können. Dazu wird für jede sensitive Code-Position eine Datenflussabfrage vorgenommen, um zu überprüfen, ob eine Eingangsvariable Einfluss auf die entsprechende Code-Position hat. Wenn ein Datenfluss gefunden wird, ergibt sich eine Abfolge aus allen Programmbefehlen von der Eingabequelle zur Ziel-Code-Position, die die Daten an der Zielposition beeinflussen, d. h. die betrachtete Variable beeinflussen.Determining the code positions where potential code deficits exist can be done using a syntax search and identifying variables used in the considered syntax searches. The code positions determined by the syntax search are determined as the sensitive code positions if input quantities of the program code can modify these sensitive code positions. For this purpose, a data flow query is carried out for each sensitive code position in order to check whether an input variable has an influence on the corresponding code position. When a data flow is found, the result is a sequence of all program instructions from the input source to the target code position that affect the data at the target position, ie affect the variable under consideration.

Beispiele für sensitive Positionen als potenzielle Code-Defizite 4 sind beispielsweise Funktionen, die Speicherzugriffe beinhalten, wie beispielsweise MEMCPYoder STRNCPYin der Programmiersprache C, Feld (Array)-Zugriffe, die durch Variablen indiziert sind, Aufrufe mit nicht konstanten Argumenten von externen Komponenten, wie beispielsweise von SQL-Datenbanken, und Divisionen durch Variablen, die möglicherweise den Wert Null annehmen können. Examples of sensitive positions as potential code deficits 4 are, for example, functions that involve memory accesses, such as MEMCPY or STRNCPY in the C programming language, field (array) accesses that are indexed by variables, calls with non-constant arguments from external components, such as of SQL databases, and divisions by variables that can potentially take on the value zero.

Hieraus ergeben sich potenzielle Code-Defizite 4, die Positionen im Programmcode entsprechen, an denen sich potenziell ein Fehler, eine Unsicherheit oder eine sonstige Schwachstelle befindet.This results in potential code deficits 4, which correspond to positions in the program code where there is potentially an error, an uncertainty or another weak point.

Aus den potenziellen Code-Defiziten 4 ergeben sich diejenigen Variablen, die als symbolische Variablen in einem Symbolic Execution-Verfahren 5 näher untersucht werden sollen, um das Vorliegen eines tatsächlichen Code-Defizits 6 an der entsprechenden Code-Position zu bestätigen.The potential code deficits 4 result in those variables which are to be examined more closely as symbolic variables in a symbolic execution method 5 in order to confirm the presence of an actual code deficit 6 at the corresponding code position.

In 2 ist ein beispielhaftes Verfahren anhand eines Flussdiagramms ausführlich beschrieben.In 2 an exemplary method is described in detail using a flowchart.

In Schritt S1 wird zunächst ein zu analysierender Programmcode vorgegeben. Der Programmcode kann in einer beliebigen Programmiersprache, aber auch als Byte- oder Maschinencode vorgegeben sein. Dieser Programmcode wird als Code Property Graphen (CPG) bereitgestellt.In step S1, a program code to be analyzed is first specified. The program code can be specified in any programming language, but also as byte or machine code. This program code is provided as Code Property Graphs (CPG).

In Schritt S2 wird eine Defizitliste als leere Liste vorgegeben. Die Defizitliste entspricht allgemein einer Liste von potenziellen Code-Defiziten und Eingabegrößen, die diese Code-Defizite hervorrufen.In step S2, a deficit list is specified as an empty list. The deficit list generally corresponds to a list of potential code deficits and inputs that cause those code deficits.

In Schritt S3 wird zunächst eine Anzahl von vorgegebenen Syntax-Abfragen in dem Code Property-Graphen vorgenommen, um als Suchtreffer potenzielle Code-Positionen aufzufinden, an denen ein Code-Defizit vorliegen könnte. Diese Abfragen entsprechen, wie oben beschrieben, den Abfragen nach den sensitiven Code-Positionen.In step S3, a number of predefined syntax queries are first made in the code property graph in order to find potential code positions as search hits, at which a code deficit could be present. As described above, these queries correspond to the queries for the sensitive code positions.

In Schritt S4 werden in einer Funktionen-Liste entsprechend der potenziellen Code-Position die Funktionen und/oder Methoden eingeschrieben, in denen sich die potenziellen Code-Positionen befinden.In step S4, the functions and/or methods in which the potential code positions are located are written into a function list according to the potential code position.

Weiterhin werden den identifizierten Funktionen und Methoden des Programmcodes die jeweiligen Code-Positionen der potenziellen Code-Defizite zugeordnet.Furthermore, the respective code positions of the potential code deficits are assigned to the identified functions and methods of the program code.

In Schritt S5 wird überprüft, ob die Funktionen-Liste leer ist. Ist dies der Fall (Alternative: Ja), wird im Schritt S6 die Defizitliste mit den aufgefundenen Code-Defiziten ausgegeben und anschließend das Verfahren beendet. Wird in Schritt S5 festgestellt, dass die Funktionenliste nicht leer ist (Alternative: Nein), wird das Verfahren mit Schritt S7 fortgesetzt.In step S5 it is checked whether the function list is empty. If this is the case (alternative: yes), the deficit list with the code deficits found is output in step S6 and the method is then terminated. If it is determined in step S5 that the function list is not empty (alternative: no), the method continues with step S7.

In Schritt S7 wird einer der Einträge der Funktionsliste ausgewählt und in Schritt S8 die ausgewählte Funktion bzw. das ausgewählte Merkmal aus der Funktionsliste entfernt.In step S7 one of the entries in the function list is selected and in step S8 the selected function or the selected feature is removed from the function list.

In Schritt S9 wird eine Abfrage in den Code Property-Graphen ausgeführt, um eine oder mehrere der Eingangsvariable der ausgewählten Funktion bzw. der ausgewählten Methode aufzufinden, die auf die sensitive Code-Position, mit dem potenziellen Code-Defizit, Einfluss haben.In step S9, a query is carried out in the code property graph in order to find one or more of the input variables of the selected function or the selected method that have an influence on the sensitive code position with the potential code deficit.

In Schritt S10 wird anschließend bezüglich der in Schritt S9 ermittelten Eingangsvariablen ein Symbolic Execution-Verfahren ausgeführt, in dem alle aufgefundenen Eingangsvariablen der ausgewählten Funktion bzw. der ausgewählten Methode als Symbole betrachtet werden.In step S10, a symbolic execution method is then carried out with respect to the input variables determined in step S9, in which all input variables found for the selected function or the selected method are regarded as symbols.

In Schritt S11 wird überprüft gemäß vordefinierten Defizit-Eigenschaft und Bedingungen, ob durch die Ausführung des Symbolic Execution-Verfahrens ein Code-Defizit gefunden wurde. Ist dies der Fall (Alternative. Ja), so wird das Verfahren mit Schritt S12 fortgesetzt, anderenfalls (Alternative: Nein) wird zu Schritt S5 zurückgesprungen.In step S11 it is checked according to predefined deficit properties and conditions whether a code deficit was found by executing the symbolic execution method. If this is the case (alternative: yes), the method is continued with step S12, otherwise (alternative: no) a jump is made back to step S5.

Für generische Defizit-Eigenschaften (z.B. Division durch 0) werden die Bedingungen programmunabhängig in einem Katalog manuell definiert (die geschieht einmalig für „Division durch 0“ und kann in beliebigen Analysen wiederverwendet werden.) Diese generische Defizit-Bedingung wird dann entweder beim Erzeugen der Formel im Rahmen des Symbolic-Execution Verfahrens zur erzeugten Formel hinzugefügt, oder das Programm wird zu Analysezwecke um eine Codezeile ergänzt, die diese Bedingung programmatisch enthält (z.B. ein assert(x != 0)). Beide Verfahren sind im Ergebnis äquivalent. Je nach Tool, das zur symbolischen Ausführung verwendet wird, gibt es noch andere Möglichkeiten (z.B. speziell gekennzeichnete Kommentare in Java), die allerdings im Kern mit den gleichen Mechanismen arbeiten.For generic deficit properties (e.g. division by 0), the conditions are defined manually in a catalog independently of the program (this happens once for "division by 0" and can be reused in any analysis.) This generic deficit condition is then either created when the formula in the frame ment of the symbolic execution method is added to the generated formula, or the program is supplemented with a line of code for analysis purposes that programmatically contains this condition (eg an assert(x != 0)). The results of both methods are equivalent. Depending on the tool that is used for symbolic execution, there are other options (eg specially marked comments in Java), which, however, essentially work with the same mechanisms.

In Schritt S12 wird die Code-Defizitliste um das aufgefundene Code-Defizit und die Eingangsvariablen, die dieses Code-Defizit verursachen, ergänzt. Hierzu wird für die entsprechenden Eingangsvariablen jeweils ein konkreter Wert angegeben, der zu dem fehlerhaften Verhalten des Programmcodes führt.In step S12, the code deficit list is supplemented by the code deficit found and the input variables that cause this code deficit. For this purpose, a specific value is specified for the corresponding input variable, which leads to the faulty behavior of the program code.

In einem nachfolgenden Schritt S13 werden für die Funktion, in denen ein fehlerhaftes Verhalten ermittelt worden ist, übergeordnete Funktionen ermittelt, mithilfe einer Code Property Graph-Abfrage, die die zuvor aufgefundene fehlerhafte Funktion aufrufen und diese einer Liste von zusätzlichen Funktionen hinzugeführt.In a subsequent step S13, superordinate functions are determined for the function in which faulty behavior has been determined, using a Code Property Graph query, which call up the previously found faulty function and add this to a list of additional functions.

In Schritt S14 wird überprüft, ob die Liste zusätzlicher Funktionen leer ist. Ist dies der Fall (Alternative: Ja), so wird das Verfahren mit Schritt S5 fortgesetzt, anderenfalls wird die Funktionenliste um die Liste zusätzlicher Funktionen ergänzt und anschließend zu Schritt S5 zurückgesprungen.In step S14 it is checked whether the list of additional functions is empty. If this is the case (alternative: yes), the method is continued with step S5, otherwise the list of additional functions is added to the function list and a jump is then made back to step S5.

Das Verfahren arbeitet somit alle Funktionen mit potenziellen Code-Defiziten mit einem separaten Symbolic Execution-Verfahren ab, das lediglich auf einen Teil des Programmcodes mit nur ausgewählten Variablen, die symbolisch betrachtet werden, ausgeführt wird. Durch die sukzessive Berücksichtigung von jeweils übergeordneten Funktionen und Methoden können auch Abhängigkeiten zwischen den Funktionen und/oder Methoden untersucht werden.The method thus processes all functions with potential code deficits using a separate symbolic execution method, which is only executed on part of the program code with only selected variables that are considered symbolically. By successively considering higher-level functions and methods, dependencies between the functions and/or methods can also be examined.

Claims (8)

Computer-implementiertes Verfahren zum Auffinden von Code-Defiziten eines zu untersuchenden Programmcodes (1), mit folgenden Schritten: - Bereitstellen (S1) eines Code Property Graphen (3) für den zu untersuchenden Programmcode (1); - Abfragen (S3) des Code Property Graphen (3) mit einer oder mehreren Suchabfragen, um sensitive Code-Positionen als potenzielle Code-Defizite (4) aufzufinden; - Bestimmen (S4) einer oder mehrerer Funktionen und/oder Methoden, die die sensitiven Code-Positionen enthalten, und einer oder mehrerer Eingangsvariablen, die einen Einfluss auf das Vorliegen der potenziellen Code-Defizite (4) in der einen oder den mehreren Funktionen und/oder Methoden haben; - Jeweiliges Ausführen (S10) eines Symbolic Execution-Verfahrens (5) auf jeweils die eine oder die mehreren bestimmten Funktionen und/oder Methoden, wobei jeweils die eine oder die mehreren bestimmten Eingangsvariablen symbolisch angenommen werden, wobei das Symbolic Execution-Verfahren (5) ausgeführt wird, um jeweils eine oder mehrere vorgegebene Defizit-Eigenschaften oder eine oder mehrere vorgegebene Defizit-Bedingungen zu überprüfen; - Wenn die eine oder die mehreren vorgegebenen Defizit-Eigenschaften oder die eine oder die mehreren vorgegebenen Defizit-Bedingungen erfüllt sind, Angeben (S6) des entsprechenden Code-Defizits (6) und eines Werts der jeweiligen einen oder mehreren Eingangsvariablen der betrachteten Funktion oder Methode, die die eine oder die mehreren Defizit-Eigenschaften oder die eine oder die mehreren vorgegebenen Defizit-Bedingungen erfüllen, als Ergebnis des jeweiligen Symbolic Execution-Verfahrens (5).Computer-implemented method for finding code deficits in a program code to be examined (1), with the following steps: - Providing (S1) a code property graph (3) for the program code (1) to be examined; - Queries (S3) of the code property graph (3) with one or more search queries in order to locate sensitive code positions as potential code deficits (4); - Determine (S4) one or more functions and/or methods containing the sensitive code positions and one or more input variables that have an impact on the existence of the potential code deficits (4) in the one or more functions and /or have methods; - Respective execution (S10) of a symbolic execution method (5) on each of the one or more specific functions and/or methods, the one or more specific input variables being assumed symbolically, the symbolic execution method (5) is executed to check one or more predetermined deficit properties or one or more predetermined deficit conditions, respectively; - If the one or more predetermined deficit properties or the one or more predetermined deficit conditions are met, specifying (S6) the corresponding code deficit (6) and a value of the respective one or more input variables of the function or method considered , which meet the one or more deficit properties or the one or more predetermined deficit conditions, as a result of the respective symbolic execution method (5). Verfahren nach Anspruch 1, wobei die eine oder die mehreren vorgegebenen Defizit-Eigenschaften oder die eine oder die mehreren vorgegebenen Defizit-Bedingungen Kriterien darstellen, die zu einer fehlerhaften Ausführung des Programmcodes führen.procedure after claim 1 , wherein the one or more predetermined deficit properties or the one or more predetermined deficit conditions represent criteria that lead to incorrect execution of the program code. Verfahren nach Anspruch 1 oder 2, wobei die eine oder die mehreren Funktionen und /oder Methoden, die die sensitiven Code-Positionen enthalten, weiterhin eine oder mehrere Funktionen und /oder Methoden umfassen, die die eine oder die mehreren Funktionen und /oder Methoden aufrufen, in denen ein Code-Defizit festgestellt wurde.procedure after claim 1 or 2 , wherein the one or more functions and/or methods containing the sensitive code locations further comprise one or more functions and/or methods that call the one or more functions and/or methods in which a code deficit was identified. Verfahren nach einem der Ansprüche 1 bis 3, wobei die potenziellen Code-Defizite (4) mindestens eine der folgenden Funktionen oder Funktionsteile umfassen: eine Funktion, die einen Speicherzugriff beinhaltet, eine Funktion, die einen Feld (Array)-Zugriff beinhaltet, die durch eine Variable indiziert ist, einen Aufruf einer externen Komponente mit einem nicht konstanten Argument und eine Division durch eine Variable, die möglicherweise den Wert Null annehmen kann, umfassen.Procedure according to one of Claims 1 until 3 , where the potential code deficits (4) include at least one of the following functions or function parts: a function involving memory access, a function involving array access indexed by a variable, a call to a external component with a non-constant argument and a division by a variable that can possibly be zero. Verfahren nach einem der Ansprüche 1 bis 4, wobei bei dem jeweiligen Ausführen (S10) des Symbolic Execution-Verfahrens (5) auf jeweils die eine oder die mehreren bestimmten Funktionen und/oder Methoden nur diejenige oder diejenigen bestimmten Eingangsvariablen symbolisch angenommen werden, die einen Einfluss auf das Vorliegen der potenziellen Code-Defizite (4) haben.Procedure according to one of Claims 1 until 4 , wherein in the respective execution (S10) of the symbolic execution method (5) on the one or more specific functions and/or methods, only that or those specific input variables are symbolically accepted that have an influence on the presence of the potential code have deficits (4). Vorrichtung zur Durchführung eines der Verfahren nach einem der vorangehenden Ansprüche.Device for carrying out one of the methods according to one of the preceding claims. Computerprogrammprodukt, umfassend Befehle, die bei der Ausführung des Programms durch einen Computer diesen veranlassen, die Schritte des Verfahrens nach einem der Ansprüche 1 bis 5 auszuführen.Computer program product, comprising instructions which, when the program is executed by a computer, cause the latter to carry out the steps of the method according to one of Claims 1 until 5 to execute. Maschinenlesbares Speichermedium, umfassend Befehle, die bei der Ausführung durch einen Computer diesen veranlassen, die Schritte des Verfahrens nach einem der Ansprüche 1 bis 5 auszuführen.A machine-readable storage medium comprising instructions which, when executed by a computer, cause the computer to perform the steps of the method of any one of Claims 1 until 5 to execute.
DE102021206045.5A 2021-06-14 2021-06-14 Computer-implemented method and device for detecting code deficits in a program code of a software Pending DE102021206045A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE102021206045.5A DE102021206045A1 (en) 2021-06-14 2021-06-14 Computer-implemented method and device for detecting code deficits in a program code of a software

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102021206045.5A DE102021206045A1 (en) 2021-06-14 2021-06-14 Computer-implemented method and device for detecting code deficits in a program code of a software

Publications (1)

Publication Number Publication Date
DE102021206045A1 true DE102021206045A1 (en) 2022-12-15

Family

ID=84192165

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021206045.5A Pending DE102021206045A1 (en) 2021-06-14 2021-06-14 Computer-implemented method and device for detecting code deficits in a program code of a software

Country Status (1)

Country Link
DE (1) DE102021206045A1 (en)

Similar Documents

Publication Publication Date Title
DE102014204830A1 (en) Computer-implemented systems and methods for comparing and associating objects
DE102014204834A1 (en) Computer-implemented systems and methods for comparing and associating objects
DE102007038763A1 (en) Method and device for securing a program against a control flow manipulation and against a faulty program sequence
DE102011014830A1 (en) METHOD AND DEVICE FOR ANALYZING SOFTWARE
DE112010003979T5 (en) System and method for the static recognition and categorization of information flow downgraders
DE102014102551A1 (en) Machine and method for evaluating failed software programs
DE112014001997T5 (en) Identify client states
DE102011014831A1 (en) METHOD AND DEVICE FOR ANALYZING SOFTWARE WITH A CALIBRATED VALUE
EP3232327B1 (en) Method for testing a control program of a control unit in a simulation environment on a computer
DE112018002316T5 (en) CODE COVERAGE TRACKING FOR A MICROCONTROLLER PROGRAM
DE202016008006U1 (en) Generation of integration tests on a small scale
DE102020213890A1 (en) Computer-implemented method and device for selecting a fuzzing method for testing a program code
DE102021206045A1 (en) Computer-implemented method and device for detecting code deficits in a program code of a software
EP2924522B1 (en) Method for influencing a control program
EP2990941B1 (en) Computer-implemented method for generating a control device program codes and related report management environment
DE112018006331B4 (en) Test case generation device, test case generation method and test case generation program
DE102020205540A1 (en) Method and device for testing a technical system
EP3173928A1 (en) Method and device for checking a component error tree
WO2011038864A2 (en) Method and device for testing the configuration of a computer system
Pruthviraj Fine Grained Statistical Debugging for the Identification of Multiple Bugs
DE102018127910A1 (en) Circuit verification methods and apparatus
DE102020208543A1 (en) Method and device for performing a dynamic security check of software programs
DE102022210264A1 (en) Method for detecting potential data exfiltration attacks in at least one software package
DE102021202335A1 (en) Method and device for testing a technical system
DE102020211519A1 (en) EVALUATION OF ALERT MESSAGES IN STATIC CODE ANALYSIS