Method and system for detecting vulnerabilities in source code
AssigneeOunce Labs, Inc.
InventorsRyan J. Berg, Larry Rose, John Peyton, John J. Danahy, Robert Gottlieb, Chris Rehbein
Life of this patent
Estimating the term…
Abstract
A method and system of detecting vulnerabilities in source code. Source code is parsed into an intermediate representation. Models (e.g., in the form of lattices) are derived for the variables in the code and for the variables and/or expressions used in conjunction with routine calls. The models are then analyzed in conjunction with pre-specified rules about the routines to determine if the routine call posses one or more of pre-selected vulnerabilities.
Claims15
A computer implemented method of detecting vulnerabilities in a pre-existing source code listing, said source code listing having a listed sequence of expressions, each expression including a set of operands and operators to transform values of the operands, said listed sequence of expressions having an inherent control flow indicative of the run-time execution of the expressions and an inherent data flow indicative of the run-time transformations of operand values, said source code listing being expressed in multiple programming languages, said source code listing further having routine calls including arguments with which to invoke a routine, said source code listing being stored in a computer-readable medium, said computer implemented method comprising the acts of:
- executing computer instructions to create a single intermediate representation of said source code listing regardless of programming language by parsing said source code listing;
- executing computer instructions to provide a database having computer-readable records associated with pre-identified routines, each record specifying an argument vulnerability condition for arguments of said corresponding pre-identified routine, that, if satisfied, presents a vulnerability during execution of said routine;
- executing computer instructions to statically analyze said intermediate representation of said source code listing to create computer models of the operands, said models representing expected transformation of the operands from run time execution of a computer program created by compilation of said source code listing, said models being stored in computer memory;
- executing computer instructions said operand models to create models of said arguments to routine calls, said argument models being stored in computer memory;
- executing computer instructions to retrieve, from said database, a record corresponding to routine calls represented in said intermediate representation;
- executing computer instructions to compare said argument models with said condition specified in the retrieved record to determine whether the routine call possesses vulnerabilities as a consequence of the arguments;
- and
- generating a report that identifies detected vulnerabilities, said report being viewable by a developer-user, so the developer-user may address the vulnerabilities identified in the report by modifying the source code listing if necessary.
Dependencies are inferred from the claim text.