US20160283346A1 - Methods and systems for providing feedback and suggested programming methods - Google Patents

Methods and systems for providing feedback and suggested programming methods Download PDF

Info

Publication number
US20160283346A1
US20160283346A1 US15/059,947 US201615059947A US2016283346A1 US 20160283346 A1 US20160283346 A1 US 20160283346A1 US 201615059947 A US201615059947 A US 201615059947A US 2016283346 A1 US2016283346 A1 US 2016283346A1
Authority
US
United States
Prior art keywords
software application
target software
application
code
best practices
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.)
Abandoned
Application number
US15/059,947
Inventor
Mark Kriegsman
Brian Black
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.)
Veracode Inc
Original Assignee
Veracode Inc
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 Veracode Inc filed Critical Veracode Inc
Priority to US15/059,947 priority Critical patent/US20160283346A1/en
Assigned to VERACODE, INC. reassignment VERACODE, INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: BLACK, BRIAN, KRIEGSMAN, MARK
Publication of US20160283346A1 publication Critical patent/US20160283346A1/en
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/77Software metrics

Definitions

  • This invention relates generally to the field of computer programming, and more specifically to the assessment of programming techniques and adherence to programming standards for secure system design and application execution.
  • the report can provide detailed results (e.g., program names, line numbers, variable names, data connections, etc.) as well as a summary of the results.
  • the report may be a conventional document such as a text file or a structured XML file.
  • best practices are typically published as documents, text books, wiki pages or other reference materials.
  • the best practices can include, for example, adherence to certain secure coding standards, use of enhanced-security code libraries, avoidance of code constructs or libraries known to be risky, etc.
  • FIG. 1 is a block diagram of a software security assessment platform according to an embodiment of the invention.
  • FIG. 2 is a flow chart depicting steps performed in software security analysis according to an embodiment of the invention.
  • software applications may include (but are not necessarily limited to) any sort of instructions for a machine, including, for example, without limitation, a component, a class, a library, an script, an applet, a logic table, a data block, or any combination or collection of one or more of any one or more of these.
  • FIG. 1 illustrates, in a broad overview, a representative software security assessment platform 105 for implementing the techniques described herein.
  • FIG. 1 depicts, in a broad overview, a representative software security assessment platform 105 for implementing the techniques described herein.
  • the diagrams depict components as functionally separate, such depiction is merely for illustrative purposes. It will be apparent that the components portrayed in this figure can be arbitrarily combined or divided into separate software, firmware and/or hardware components. Furthermore, it will also be apparent that such components, regardless of how they are combined or divided, can execute on the same host or multiple hosts, and wherein the multiple hosts can be connected by one or more networks.
  • the platform 105 receives and reports on software applications 110 from multiple entities, while monitoring numerous sources 115 of external threats for up-to-date libraries of malware and application and environmental vulnerabilities.
  • the platform 105 includes a communications server 120 and an analysis engine 125 .
  • the term engine refers to software, firmware, hardware, or other component that is used to effectuate a purpose.
  • the engine will typically include software instructions that are stored in non-volatile memory (also referred to as secondary memory).
  • non-volatile memory also referred to as secondary memory
  • the software instructions are executed, at least a subset of the software instructions is loaded into memory (also referred to as primary memory) by a processor.
  • the processor then executes the software instructions in memory.
  • the processor may be a shared processor, a dedicated processor, or a combination of shared or dedicated processors.
  • a typical program will include calls to hardware components (such as I/O devices), which typically requires the execution of drivers.
  • the drivers may or may not be considered part of the engine, but the distinction is not critical.
  • the communications server 120 provides the conduit through which the platform interacts with external systems.
  • the communications server 120 may utilize conventional data-communications protocols such as TCP/IP, HTTP and others to query application servers for updated application programs, download updated programs, post analysis results, and send and receive messages from users. More specifically, in a server-based implementation, the communications server 120 may act as an interface between the platform 105 and external entities that submit software applications for assessment or review assessment results.
  • the communications server 120 may act as a conduit through which other external data such as updated threat information (in the form of malware definition files, for example) are received for storage in the security threat database 150 .
  • the security assessment platform 105 may be configured as a distributed platform, in which one or more components (e.g., testing modules, threat-assessment agents, secure communication devices, databases, etc.) are duplicated and/or distributed among multiple computers located remotely from each other but, for example, co-located with users of the platform.
  • components e.g., testing modules, threat-assessment agents, secure communication devices, databases, etc.
  • communications server application platforms providing such features include the Apache HTTP Web Server supplied by the Apache Software Foundation and the WebSphere HTTP Server supplied by IBM Corporation.
  • the analysis engine 125 receives application code and programs of a target software application 110 from users, either via the communications server 120 or directly from customers using the platform 105 as a subscription service.
  • the application (or portions of the application) may be received from developers working within a development group, on a development team, or as part of a community of otherwise unrelated programmers.
  • the platform 105 may be implemented within a large organization and used to scan software code as it is developed, checked in to a code repository, and/or put into production.
  • the platform 105 may be used as part of a check-in or posting process by a so-called “open soure” project, thus allowing the project administrator to suggest best practice coding techniques to project contributors.
  • various embodiments of the analysis engine 125 provide a software system and methods of using the system that examine code of the target software application received and identify specific application security best practices that are applicable to the target software application. The analysis engine 125 then identifies locations in the target application's code where the various best practices ought to be implemented and determines for each location whether the relevant best practices appear to have been implemented. At each location, the analysis engine 125 determines to what extent the relevant best practices appear to have been implemented correctly, and to what extent they may be implemented incompletely or incorrectly and provides positive feedback to the developers for what appears to be their correct implementation of best practices.
  • the analysis engine 125 interacts with various testing engines and code review modules, as well with assessment and threat databases, and includes benchmarking and reporting capabilities for comparing assessment results among applications, developers, teams and/or organizations.
  • the analysis engine 125 interacts with a dynamic testing engine 130 , a static testing engine 135 , a pen testing engine 140 and a module for performing manual code review 145 .
  • the dynamic analysis engine 130 interacts with the target software application 110 as an external entity and executes the application 110 in a manner that mirrors or emulates the runtime environment in which it operates.
  • the dynamic analysis engine 130 receives a description of the interfaces to the application 110 , sends test and/or simulation data to the application via the interfaces, and analyzes the received responses.
  • the test data may be application-specific (e.g., provided with the application as a library, data file, or structured input) or application-agnostic, such as data and/or scripts known to exploit application vulnerabilities.
  • the dynamic analysis engine 130 determines whether any security defects exist in the application 110 and the extent to which it may be vulnerable to certain threats. The defects and best practices may be reported in real-time (e.g., via the communications server 120 ) and/or stored in a database for subsequent analysis and reporting.
  • the static analysis engine 135 receives a binary or bytecode version of the target software application 110 as input.
  • a high-level semantic model of the application 10 is created containing control-flow and data-flow graphs of the application 110 , and this model then analyzed for the use of best practices and/or quality defects, including security flaws, by a set of analysis scans.
  • the pen testing engine 140 performs penetration testing of the application 110 .
  • Penetration testing includes, for example, simulating and analyzing various web-based interactions between a client and the server on which the application 110 operates. This includes executing standard HTTP commands such as GET and POST, analyzing FORM elements and scripting elements (both client and server-side), and manipulating inputs to elicit known vulnerabilities.
  • the analysis engine 125 may also receive input from manual review processes executed using a manual code review module 145 .
  • Manual review processes typically include a human operator visually reviewing source code to determine if proper coding form and standards have been followed, and looking for “extra” functions often left in applications such as trap doors, Easter eggs, and similar undocumented functionality.
  • the data, scripts and functions used to identify the best practices and operate the various testing engines and the analysis engine 125 may be stored in a security-threat database 150 .
  • the database 150 may be operated as a stand-alone server or as part of the same physical server on which the analysis engine 125 operates. Portions of the threat database 150 may, in some cases, be provided by entities other than the entity operating the platform 105 on a subscription basis, allowing the database 150 to be kept up to date as threats and malware evolve over time.
  • the results of each test and the overall analysis process may be stored in an assessment-results database 155 .
  • the applications and analysis results are stored in an encrypted format using a unique key provided to the owner of the analyzed application 110 such that only it can access and review the results of the analysis. In such cases, decryption of the analysis is limited to authorized personnel and all traces of the analysis are deleted from memory (other than the database 155 ) following completion.
  • database applications that may provide the necessary features and services include the MySQL Database Server by Sun Microsystems, the PostgreSQL Database Server by the PostgreSQL Global Development Group of Berkeley, Calif., or the ORACLE Database Server offered by ORACLE Corp. of Redwood Shores, Calif.
  • the examination of the target application by the analysis engine 125 can be done through parsing of the application source code, or the compiled bytecode (as in Java, .NET, and others) or binary executable code (e.g. a compiled C/C++ application).
  • the analysis engine 125 examines the application through a combination of source code and binary code parsing.
  • the analysis engine 125 constructs control-flow and data-flow graphs that represent the behavior of the program.
  • the analysis engine 125 may identify which best practices might or should apply to a particular target application in a number of ways.
  • the mapping of the best practices that apply to an application may be expressed by the analysis engine 125 as a series of IF-THEN rules, such as “IF the target application communicates with a database, THEN the database security rules apply.”
  • the rules may relate to the technical architecture or environment of the application (e.g., the operating system used, the communication protocol(s) used, whether encryption is used, etc.) and/or the business implementation of the application.
  • certain rules may be used to identify good coding practices for consumer-facing financial transaction systems (ecommerce, banking, etc.) whereas others may be used for less risky back office applications such as document management, workflow processing, inventory control, etc.
  • the use profile of an application may trigger the application of certain rules.
  • the rules may be applied by the analysis engine 125 in a “forward-chaining” approach, a hierarchical approach, or a multi-path approach such that the applicability of certain rules may be dependant upon the evaluation of other higher-order rules.
  • the analysis engine 125 identifies locations in the target application where the certain best practices might be applied. While there may be numerous methods for identifying the locations, the analysis engine 125 may adopt one method, which uses a series of pattern-matching rules, such as “At every location ‘L’ in the target application where the target application sends a command string ‘S’ to a database, and where the command string ‘S’ could potentially include data from an untrusted source ‘U’, a best practice dictates that a known-good ‘cleanser function’ ‘F’ be applied to the command string ‘S’ at a point in the dataflow between the untrusted source ‘U’ and the location ‘L’ where the command string ‘S’ is sent to the database. Furthermore, no additional untrusted data, whether from ‘U’ or otherwise, should be allowed to enter the command string ‘S’ between when it is cleansed and when it is sent to the database.”
  • the above-described application can be modeled as:
  • a database command string ‘S’ is prepared, including data from ‘U1’
  • the analysis engine 125 can determine whether the relevant best practices appear to have been implemented. Again, the approach depends on the particular best practice in question. Taking the example above, the analysis engine 125 may scan the code of the target software application for the presence of the cleanser function ‘F’ in the sections of code ‘between’ (in a data-flow and control-flow sense, not merely in terms of physical code layout) Code ⁇ A where the untrusted data ‘U1’ enters the system, and Code ⁇ C where the database command string ‘S’ is assembled. In this case, the presence of the cleanser function ‘F’ might indicate that the developer had attempted to implement the relevant “best practice.”
  • the analysis engine 125 scans the code of the target software application for common errors of correctness or completeness, such as (1) additional untrusted data ‘U2’ being added to the command string ‘S’, or (2) control flow paths in the target application that cause execution to jump from Code ⁇ A to Code ⁇ C, therefore bypassing execution of the cleanser function ‘F’.
  • the analysis engine 125 flags the implementation of the best practice using a moniker such as P+OK, “apparently present” (P) and “apparently correct” (OK). If implementation errors are detected, the implementation of the best practice may be flagged as P+Err, “apparently present” (P) and “incorrect” (Err), or as P+Inc, “apparently present” (P), and “incomplete” (Inc), or as P+Err+Inc, a combination of incorrect and incomplete implementation.
  • a moniker such as P+OK, “apparently present” (P) and “apparently correct” (OK). If implementation errors are detected, the implementation of the best practice may be flagged as P+Err, “apparently present” (P) and “incorrect” (Err), or as P+Inc, “apparently present” (P), and “incomplete” (Inc), or as P+Err+Inc, a combination of incorrect and incomplete implementation.
  • the analysis engine 125 provides positive feedback to developers for apparently complete and correct implementation of a “best practice.” Certain locations are flagged as P-OK (implementation apparently present and apparently correct and complete) and communicated to the developers, either as individual locations, or in aggregate, depending on the particular “best practice,” the number of instances occurring in the target application, and possibly other factors.
  • the analysis engine 125 provides mixed positive and negative feedback to the developers for locations where it appears that the developers attempted to implement a certain best practice, but the implementation of the best practice is either incomplete or incorrect. Reports are provided the analysis engine 125 by identifying locations flagged as P+Err, P+Inc, P+Err+Inc, or P+Mis to the developers, either as individual locations or in aggregate, depending on the particular best practice, the number of instances occurring in the target application, and possibly other factors. In effect, this informs the developer that they have used correct security and coding practices but the code needs additional work to implement these features in a manner that they have their full and intended effect.
  • Reporting to the developer may take many forms.
  • the results may be reported in separate documents, emails, web pages, or other messages to the developer.
  • the report may take the form of visual indicators added into the developer's development environment such as green indicators or icons next to the lines of code where a best practice has been completely and accurately utilized, or shading the background of the “good” code light green.
  • Other colors may be used to indicate or highlight code that used the best practices but needs additional attention, or places where no attempt was made to implement the best practices.
  • the analysis engine 125 may explicitly excludes several particular situations. In particular, the analysis engine 125 may not give positive feedback in situations where there is no need for implementation of a best practice. If there is no actual security threat in a particular area of the code, there is no feedback given there, regardless of what the developer has implemented.
  • FIG. 2 is a flowchart illustrating a process 400 to implement and support software security analysis. Although this figure depicts functional steps in a particular order for purposes of illustration, the process is not limited to any particular order or arrangement of steps. One skilled in the relevant art will appreciate that the various steps portrayed in this figure could be omitted, rearranged, combined and/or adapted in various ways.
  • the flowchart 200 starts at block 202 where technical characteristics of a target software application and business context information relating to the target software application are received.
  • the flowchart 200 continues to block 204 where code of the target software application received is examined and specific application security best practices that apply to the target software application are identified.
  • the flowchart 200 continues to block 206 where locations in the code of the target application where the identified best practices ought to be implemented are identified and whether the relevant best practices appear to have been implemented is determined for each of the locations.
  • the flowchart 200 continues to block 208 where whether the relevant best practices appear to have been implemented correctly and to what extent they have been implemented incompletely or incorrectly are determined at each of the locations.
  • the flowchart 200 ends at block 210 where positive feedback for what appears to be their correct implementation of the best practices are provided to developer of the target software application.
  • the analysis engine 125 may “package” or “bound” the security analysis and vulnerability testing results to the actual software they describe.
  • “software” may refer to a single program, a component, a page of mark-up language (e.g., HTML), a server instance (either actual or virtual), a script, a collection of programs, or an entire application.
  • the software may be a commercially-available product delivered via traditional methods such as CD-ROM or download, whereas in other cases the software may be a website or collection of websites that provide the software and/or services over the Internet, commonly referred to as software as a service, or “SaaS”.
  • software may refer to a collective of otherwise unrelated applications and services available over the internet, each performing separate functions for one or more enterprises, (i.e., “cloud” computing).
  • cloud computing
  • downstream users of the software can access information about the software, make informed decisions about implementation of the software, and analyze the security risk across an entire system by accessing all (or most) of the reports associated with the executables running on the system and summarizing the risks identified in the reports.
  • the platform 105 may be implemented as a collection of data processing modules for ingesting, reviewing, and attacking software applications, a module for producing the security report, and a data storage appliance (or series of appliances) to store the reports.
  • the platform 105 may in some cases also include a digital rights management module that creates, certifies and confirms hash values, secure keys, and other user and use-based restrictive elements that ensure the authenticity of the users and that the reports are bound to the correct software components.
  • the module may set aside portions of a computer as random access memory to provide control logic that affects the processes described above.
  • the program may be written in any one of a number of high-level languages, such as FORTRAN, PASCAL, C, C++, C#, Java, Tcl, or BASIC. Further, the program can be written in a script, macro, or functionality embedded in commercially available software, such as EXCEL or VISUAL BASIC. Additionally, the software could be implemented in an assembly language directed to a microprocessor resident on a computer. For example, the software can be implemented in Intel 80x86 assembly language if it is configured to run on an IBM PC or PC clone.
  • the software may be embedded on an article of manufacture including, but not limited to, a computer-readable program means such as a floppy disk, a hard disk, an optical disk, a magnetic tape, a PROM, an EPROM, or CD-ROM, appliances, partitions (either physical or virtual) of single appliances, or combinations of the two.
  • a computer-readable program means such as a floppy disk, a hard disk, an optical disk, a magnetic tape, a PROM, an EPROM, or CD-ROM, appliances, partitions (either physical or virtual) of single appliances, or combinations of the two.

Abstract

The techniques and supporting systems described herein provide a comprehensive and customizable approach to identifying the use of best practices during the design and development of software applications, as well as recommending additional enhancements or courses of action that may be implemented to further improve the application. Target software application code is received specific application security best practices applicable to the target software application are identified. Locations in the code where the various best practices ought to be implemented are then identified, and a determination is made whether the relevant best practices are implemented for each location. Finally, positive feedback is provided to the developers for what appears to be their correct implementation of best practices.

Description

    CROSS-REFERENCE TO RELATED APPLICATIONS
  • This application claims priority to and the benefit of U.S. provisional patent application Ser. No. 61/601,720, filed on Feb. 22, 2012, the entire disclosure of which is incorporated herein by reference.
  • FIELD OF THE INVENTION
  • This invention relates generally to the field of computer programming, and more specifically to the assessment of programming techniques and adherence to programming standards for secure system design and application execution.
  • BACKGROUND
  • There are a myriad of testing and assessment techniques for validating various properties of software applications and network implementations. However, one of the most critical processes for ensuring that the deployment of software does not expose an organization to unacceptable risks is security and vulnerability testing. Some of the conventional techniques used to perform such testing includes static analysis (automated code review), dynamic analysis (automated penetration testing) and manual analyses such as code review, design review, and manual penetration testing. All of these analysis techniques are aimed at finding security weaknesses and vulnerabilities in an application and typically provided in report format to the programmers, product managers and quality assurance (QA) staff. The report can provide detailed results (e.g., program names, line numbers, variable names, data connections, etc.) as well as a summary of the results. The report may be a conventional document such as a text file or a structured XML file.
  • To assist developers in steering clear of many of the well-know pitfalls, system security professionals have developed, over time, a number of best practices. These best practices are typically published as documents, text books, wiki pages or other reference materials. The best practices can include, for example, adherence to certain secure coding standards, use of enhanced-security code libraries, avoidance of code constructs or libraries known to be risky, etc.
  • There are a number of tools that attempt to identify potential or actual security problems in application code, thus providing “negative feedback” to the developers on suspect and, in some cases, suggesting potential steps to improve the code. However, to date there have not existed any automated mechanisms for explicitly identifying the developer's affirmative use of more-secure best practices, or of providing “positive feedback” to the developer on their coding. As such, developers who implement certain well-designed coding or design techniques may not fully benefit from a comprehensive knowledge base regarding particular best practices.
  • The foregoing examples of the related art and limitations related therewith are intended to be illustrative and not exclusive. Other limitations of the related art will become apparent upon a reading of the specification and a study of the drawings.
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • In the drawings, like reference characters generally refer to the same parts throughout the different views. Also, the drawings are not necessarily to scale, emphasis instead generally being placed upon illustrating the principles of the invention
  • FIG. 1 is a block diagram of a software security assessment platform according to an embodiment of the invention.
  • FIG. 2 is a flow chart depicting steps performed in software security analysis according to an embodiment of the invention.
  • DESCRIPTION OF THE INVENTION
  • The techniques and supporting systems described herein provide a comprehensive and customizable approach to identifying certain best practices used during the design and development of software applications, as well as recommending additional enhancements or courses of action that may be implemented to further improve the application. As referred to hereinafter, software applications may include (but are not necessarily limited to) any sort of instructions for a machine, including, for example, without limitation, a component, a class, a library, an script, an applet, a logic table, a data block, or any combination or collection of one or more of any one or more of these.
  • The appropriate type of software security analysis and best practice implementation depends on many factors, including (but not necessarily limited to) the technical details of an application (e.g., the language in which it is written and the platform on which is to be deployed) as well as the business context in which the application operates. For a non-limiting example, an application that is “customer-facing” and facilitates high-volume, secure transactions such as banking or ecommerce will require rigorous testing to ensure that customer data is not jeopardized. Conversely, applications such as document-control systems or desktop applications that are implemented entirely within an organization and operated behind secure firewalls require less stringent testing. Therefore, balancing the added costs for executing additional security assessments and testing with the risks of potential for losses is critical.
  • FIG. 1 illustrates, in a broad overview, a representative software security assessment platform 105 for implementing the techniques described herein. Although the diagrams depict components as functionally separate, such depiction is merely for illustrative purposes. It will be apparent that the components portrayed in this figure can be arbitrarily combined or divided into separate software, firmware and/or hardware components. Furthermore, it will also be apparent that such components, regardless of how they are combined or divided, can execute on the same host or multiple hosts, and wherein the multiple hosts can be connected by one or more networks.
  • In the example of FIG. 1, the platform 105 receives and reports on software applications 110 from multiple entities, while monitoring numerous sources 115 of external threats for up-to-date libraries of malware and application and environmental vulnerabilities. The platform 105 includes a communications server 120 and an analysis engine 125. As used herein, the term engine refers to software, firmware, hardware, or other component that is used to effectuate a purpose. The engine will typically include software instructions that are stored in non-volatile memory (also referred to as secondary memory). When the software instructions are executed, at least a subset of the software instructions is loaded into memory (also referred to as primary memory) by a processor. The processor then executes the software instructions in memory. The processor may be a shared processor, a dedicated processor, or a combination of shared or dedicated processors. A typical program will include calls to hardware components (such as I/O devices), which typically requires the execution of drivers. The drivers may or may not be considered part of the engine, but the distinction is not critical.
  • In the example of FIG. 1, the communications server 120 provides the conduit through which the platform interacts with external systems. For a non-limiting example, the communications server 120 may utilize conventional data-communications protocols such as TCP/IP, HTTP and others to query application servers for updated application programs, download updated programs, post analysis results, and send and receive messages from users. More specifically, in a server-based implementation, the communications server 120 may act as an interface between the platform 105 and external entities that submit software applications for assessment or review assessment results. In addition, the communications server 120 may act as a conduit through which other external data such as updated threat information (in the form of malware definition files, for example) are received for storage in the security threat database 150. In some implementations, the security assessment platform 105 may be configured as a distributed platform, in which one or more components (e.g., testing modules, threat-assessment agents, secure communication devices, databases, etc.) are duplicated and/or distributed among multiple computers located remotely from each other but, for example, co-located with users of the platform. Examples of communications server application platforms providing such features include the Apache HTTP Web Server supplied by the Apache Software Foundation and the WebSphere HTTP Server supplied by IBM Corporation.
  • In the example of FIG. 1, the analysis engine 125 receives application code and programs of a target software application 110 from users, either via the communications server 120 or directly from customers using the platform 105 as a subscription service. In other implementations, the application (or portions of the application) may be received from developers working within a development group, on a development team, or as part of a community of otherwise unrelated programmers. For example, the platform 105 may be implemented within a large organization and used to scan software code as it is developed, checked in to a code repository, and/or put into production. In some cases, the platform 105 may be used as part of a check-in or posting process by a so-called “open soure” project, thus allowing the project administrator to suggest best practice coding techniques to project contributors.
  • In general, various embodiments of the analysis engine 125 provide a software system and methods of using the system that examine code of the target software application received and identify specific application security best practices that are applicable to the target software application. The analysis engine 125 then identifies locations in the target application's code where the various best practices ought to be implemented and determines for each location whether the relevant best practices appear to have been implemented. At each location, the analysis engine 125 determines to what extent the relevant best practices appear to have been implemented correctly, and to what extent they may be implemented incompletely or incorrectly and provides positive feedback to the developers for what appears to be their correct implementation of best practices.
  • In some embodiments, the analysis engine 125 interacts with various testing engines and code review modules, as well with assessment and threat databases, and includes benchmarking and reporting capabilities for comparing assessment results among applications, developers, teams and/or organizations.
  • In one embodiment, for a non-limiting example, the analysis engine 125 interacts with a dynamic testing engine 130, a static testing engine 135, a pen testing engine 140 and a module for performing manual code review 145. In some embodiments, the dynamic analysis engine 130 interacts with the target software application 110 as an external entity and executes the application 110 in a manner that mirrors or emulates the runtime environment in which it operates. In some embodiments, the dynamic analysis engine 130 receives a description of the interfaces to the application 110, sends test and/or simulation data to the application via the interfaces, and analyzes the received responses. The test data may be application-specific (e.g., provided with the application as a library, data file, or structured input) or application-agnostic, such as data and/or scripts known to exploit application vulnerabilities. Based on the responses, the dynamic analysis engine 130 determines whether any security defects exist in the application 110 and the extent to which it may be vulnerable to certain threats. The defects and best practices may be reported in real-time (e.g., via the communications server 120) and/or stored in a database for subsequent analysis and reporting.
  • In some embodiments, the static analysis engine 135 receives a binary or bytecode version of the target software application 110 as input. For example, a high-level semantic model of the application 10 is created containing control-flow and data-flow graphs of the application 110, and this model then analyzed for the use of best practices and/or quality defects, including security flaws, by a set of analysis scans.
  • In some embodiments, the pen testing engine 140 performs penetration testing of the application 110. Penetration testing includes, for example, simulating and analyzing various web-based interactions between a client and the server on which the application 110 operates. This includes executing standard HTTP commands such as GET and POST, analyzing FORM elements and scripting elements (both client and server-side), and manipulating inputs to elicit known vulnerabilities.
  • In some embodiments, the analysis engine 125 may also receive input from manual review processes executed using a manual code review module 145. Manual review processes typically include a human operator visually reviewing source code to determine if proper coding form and standards have been followed, and looking for “extra” functions often left in applications such as trap doors, Easter eggs, and similar undocumented functionality.
  • In some embodiments, the data, scripts and functions used to identify the best practices and operate the various testing engines and the analysis engine 125 may be stored in a security-threat database 150. The database 150 may be operated as a stand-alone server or as part of the same physical server on which the analysis engine 125 operates. Portions of the threat database 150 may, in some cases, be provided by entities other than the entity operating the platform 105 on a subscription basis, allowing the database 150 to be kept up to date as threats and malware evolve over time. Likewise, the results of each test and the overall analysis process may be stored in an assessment-results database 155. In some embodiments, the applications and analysis results are stored in an encrypted format using a unique key provided to the owner of the analyzed application 110 such that only it can access and review the results of the analysis. In such cases, decryption of the analysis is limited to authorized personnel and all traces of the analysis are deleted from memory (other than the database 155) following completion. Non-limiting examples of database applications that may provide the necessary features and services include the MySQL Database Server by Sun Microsystems, the PostgreSQL Database Server by the PostgreSQL Global Development Group of Berkeley, Calif., or the ORACLE Database Server offered by ORACLE Corp. of Redwood Shores, Calif.
  • In some embodiments, the examination of the target application by the analysis engine 125 can be done through parsing of the application source code, or the compiled bytecode (as in Java, .NET, and others) or binary executable code (e.g. a compiled C/C++ application). In one non-limiting instantiation, the analysis engine 125 examines the application through a combination of source code and binary code parsing. In addition to parsing the structure of the program, the analysis engine 125 constructs control-flow and data-flow graphs that represent the behavior of the program. These “deep analyses” allow the analysis engine 125 to analyze the intended and actual behavior of even complex, object-oriented programs.
  • In some embodiments, the analysis engine 125 may identify which best practices might or should apply to a particular target application in a number of ways. In one particular embodiment, the mapping of the best practices that apply to an application may be expressed by the analysis engine 125 as a series of IF-THEN rules, such as “IF the target application communicates with a database, THEN the database security rules apply.” The rules may relate to the technical architecture or environment of the application (e.g., the operating system used, the communication protocol(s) used, whether encryption is used, etc.) and/or the business implementation of the application. For a non-limiting example, certain rules may be used to identify good coding practices for consumer-facing financial transaction systems (ecommerce, banking, etc.) whereas others may be used for less risky back office applications such as document management, workflow processing, inventory control, etc. In another embodiment, the use profile of an application (heavy transactional versus content delivery, mobile application etc.) may trigger the application of certain rules. The rules may be applied by the analysis engine 125 in a “forward-chaining” approach, a hierarchical approach, or a multi-path approach such that the applicability of certain rules may be dependant upon the evaluation of other higher-order rules.
  • Once a set of rules has been identified that apply to a particular application, the analysis engine 125 identifies locations in the target application where the certain best practices might be applied. While there may be numerous methods for identifying the locations, the analysis engine 125 may adopt one method, which uses a series of pattern-matching rules, such as “At every location ‘L’ in the target application where the target application sends a command string ‘S’ to a database, and where the command string ‘S’ could potentially include data from an untrusted source ‘U’, a best practice dictates that a known-good ‘cleanser function’ ‘F’ be applied to the command string ‘S’ at a point in the dataflow between the untrusted source ‘U’ and the location ‘L’ where the command string ‘S’ is sent to the database. Furthermore, no additional untrusted data, whether from ‘U’ or otherwise, should be allowed to enter the command string ‘S’ between when it is cleansed and when it is sent to the database.” The above-described application can be modeled as:
  • Location ‘L1’:
  • Code §A. Untrusted data ‘U1’ enters the system
  • Code §B. . . . (cleanser function ‘F’ MUST be applied here) . . .
  • Code §C. A database command string ‘S’ is prepared, including data from ‘U1’
  • Code §D. . . . (NO further untrusted data ‘U2’ may be allowed to enter ‘S’)
  • Code §E. The command string ‘S’ is sent to the database
  • Based on the results of the evaluation of the rules, the analysis engine 125 can determine whether the relevant best practices appear to have been implemented. Again, the approach depends on the particular best practice in question. Taking the example above, the analysis engine 125 may scan the code of the target software application for the presence of the cleanser function ‘F’ in the sections of code ‘between’ (in a data-flow and control-flow sense, not merely in terms of physical code layout) Code §A where the untrusted data ‘U1’ enters the system, and Code §C where the database command string ‘S’ is assembled. In this case, the presence of the cleanser function ‘F’ might indicate that the developer had attempted to implement the relevant “best practice.”
  • To determine to what extent the relevant best practices appear to have been correctly and completely implemented may also depend on the particular best practice in question. Taking the same example above again, the analysis engine 125 scans the code of the target software application for common errors of correctness or completeness, such as (1) additional untrusted data ‘U2’ being added to the command string ‘S’, or (2) control flow paths in the target application that cause execution to jump from Code §A to Code §C, therefore bypassing execution of the cleanser function ‘F’.
  • In one embodiment of the methodology, if no implementation errors are detected, the analysis engine 125 flags the implementation of the best practice using a moniker such as P+OK, “apparently present” (P) and “apparently correct” (OK). If implementation errors are detected, the implementation of the best practice may be flagged as P+Err, “apparently present” (P) and “incorrect” (Err), or as P+Inc, “apparently present” (P), and “incomplete” (Inc), or as P+Err+Inc, a combination of incorrect and incomplete implementation. If the wrong best practice for the particular situation appears to have been implemented (e.g., cleanser function ‘F1’ is required, but cleanser function ‘F2’ is found instead), the implementation may be flagged as P+Mis, “apparently present”, and “mismatched for the situation” (Mis).
  • Once completed with the scan and analysis, the analysis engine 125 provides positive feedback to developers for apparently complete and correct implementation of a “best practice.” Certain locations are flagged as P-OK (implementation apparently present and apparently correct and complete) and communicated to the developers, either as individual locations, or in aggregate, depending on the particular “best practice,” the number of instances occurring in the target application, and possibly other factors.
  • In some embodiments, the analysis engine 125 provides mixed positive and negative feedback to the developers for locations where it appears that the developers attempted to implement a certain best practice, but the implementation of the best practice is either incomplete or incorrect. Reports are provided the analysis engine 125 by identifying locations flagged as P+Err, P+Inc, P+Err+Inc, or P+Mis to the developers, either as individual locations or in aggregate, depending on the particular best practice, the number of instances occurring in the target application, and possibly other factors. In effect, this informs the developer that they have used correct security and coding practices but the code needs additional work to implement these features in a manner that they have their full and intended effect.
  • Reporting to the developer may take many forms. As one non-limiting example, the results may be reported in separate documents, emails, web pages, or other messages to the developer. In some cases, however, the report may take the form of visual indicators added into the developer's development environment such as green indicators or icons next to the lines of code where a best practice has been completely and accurately utilized, or shading the background of the “good” code light green. Other colors (yellow, red, etc.) may be used to indicate or highlight code that used the best practices but needs additional attention, or places where no attempt was made to implement the best practices.
  • So as not to generate a surfeit of gratuitous positive feedback, and thus dilute the value of a small amount of well-deserved positive feedback, the analysis engine 125 may explicitly excludes several particular situations. In particular, the analysis engine 125 may not give positive feedback in situations where there is no need for implementation of a best practice. If there is no actual security threat in a particular area of the code, there is no feedback given there, regardless of what the developer has implemented.
  • FIG. 2 is a flowchart illustrating a process 400 to implement and support software security analysis. Although this figure depicts functional steps in a particular order for purposes of illustration, the process is not limited to any particular order or arrangement of steps. One skilled in the relevant art will appreciate that the various steps portrayed in this figure could be omitted, rearranged, combined and/or adapted in various ways.
  • In the example of FIG. 2, the flowchart 200 starts at block 202 where technical characteristics of a target software application and business context information relating to the target software application are received. The flowchart 200 continues to block 204 where code of the target software application received is examined and specific application security best practices that apply to the target software application are identified. The flowchart 200 continues to block 206 where locations in the code of the target application where the identified best practices ought to be implemented are identified and whether the relevant best practices appear to have been implemented is determined for each of the locations. The flowchart 200 continues to block 208 where whether the relevant best practices appear to have been implemented correctly and to what extent they have been implemented incompletely or incorrectly are determined at each of the locations. The flowchart 200 ends at block 210 where positive feedback for what appears to be their correct implementation of the best practices are provided to developer of the target software application.
  • Using various embodiments, the analysis engine 125 may “package” or “bound” the security analysis and vulnerability testing results to the actual software they describe. As used herein, “software” may refer to a single program, a component, a page of mark-up language (e.g., HTML), a server instance (either actual or virtual), a script, a collection of programs, or an entire application. In some cases, the software may be a commercially-available product delivered via traditional methods such as CD-ROM or download, whereas in other cases the software may be a website or collection of websites that provide the software and/or services over the Internet, commonly referred to as software as a service, or “SaaS”. In still other cases, software may refer to a collective of otherwise unrelated applications and services available over the internet, each performing separate functions for one or more enterprises, (i.e., “cloud” computing). By linking the report to the software itself, downstream users of the software can access information about the software, make informed decisions about implementation of the software, and analyze the security risk across an entire system by accessing all (or most) of the reports associated with the executables running on the system and summarizing the risks identified in the reports.
  • The methods and techniques describe above may be implemented in hardware and/or software and realized as a system for producing, storing, retrieving and analyzing security and vulnerability reports for software applications. For example, the platform 105 may be implemented as a collection of data processing modules for ingesting, reviewing, and attacking software applications, a module for producing the security report, and a data storage appliance (or series of appliances) to store the reports. The platform 105 may in some cases also include a digital rights management module that creates, certifies and confirms hash values, secure keys, and other user and use-based restrictive elements that ensure the authenticity of the users and that the reports are bound to the correct software components. In some embodiments the module may set aside portions of a computer as random access memory to provide control logic that affects the processes described above. In such an embodiment, the program may be written in any one of a number of high-level languages, such as FORTRAN, PASCAL, C, C++, C#, Java, Tcl, or BASIC. Further, the program can be written in a script, macro, or functionality embedded in commercially available software, such as EXCEL or VISUAL BASIC. Additionally, the software could be implemented in an assembly language directed to a microprocessor resident on a computer. For example, the software can be implemented in Intel 80x86 assembly language if it is configured to run on an IBM PC or PC clone. The software may be embedded on an article of manufacture including, but not limited to, a computer-readable program means such as a floppy disk, a hard disk, an optical disk, a magnetic tape, a PROM, an EPROM, or CD-ROM, appliances, partitions (either physical or virtual) of single appliances, or combinations of the two.
  • One skilled in the art will realize the invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. The foregoing embodiments are therefore to be considered in all respects illustrative rather than limiting of the invention described herein.

Claims (34)

What is claimed is:
1. A software security assessment platform, comprising:
a communications server, which in operation, receives technical characteristics of a target software application and business context information relating to the target software application;
an analysis engine, which in operation:
examines code of the target software application received and identifies specific application security best practices that are applicable to the target software application;
identifies locations in the code of the target application where the identified best practices ought to be implemented and determines for each of the locations whether the relevant best practices appear to have been implemented;
determines at each of the locations whether the relevant best practices appear to have been implemented correctly and to what extent they have been implemented incompletely or incorrectly; and
provides positive feedback to developer of the target software application for what appears to be their correct implementation of the best practices.
2. The platform of claim 1 further comprising a dynamic analysis engine that executes the target software application in a manner that mirrors or emulates the runtime environment in which it operates.
3. The platform of claim 1 further comprising a static analysis engine that receives a binary or bytecode version of the target software application as input and creates a high-level semantic model of the application containing control-flow and data-flow graphs of the application for analysis.
4. The platform of claim 1 further comprising a pen testing engine that performs penetration testing of the target software application.
5. The platform of claim 1 further comprising a manual code review module that receives input from manual review processes including a human operator visually reviewing the code of the target software application to determine if proper coding form and standards have been followed, and looking for “extra” functions often left in the application.
6. The platform of claim 1 further comprising a benchmarking and reporting module that compares assessment results among applications, developers, teams and/or organizations.
7. The platform of claim 1 further comprising a digital rights management engine that applies a digital rights management process against application assessment input data, thereby limiting distribution and use of the vulnerability test results to specified users.
8. The platform of claim 1 wherein the analysis engine provides mixed positive and negative feedback to the developers for locations where it appears that the developers attempted to implement a certain best practice, but the implementation is incomplete or incorrect.
9. The platform of claim 1 wherein the analysis engine examines the target software application through parsing of one or more of the source code, the compiled bytecode, and binary executable code of the target software application.
10. The platform of claim 1 wherein the analysis engine maps the best practices that are applicable to the target software application as a series of IF-THEN rules, wherein the rules are applied in a “forward-chaining” approach, a hierarchical approach, or a multi-path approach such that the applicability of certain rules is dependent upon the evaluation of other higher-order rules.
11. The platform of claim 1 wherein the analysis engine identifies locations in the code of the target application where the identified best practices ought to be implemented by using a series of pattern-matching rules.
12. The platform of claim 1 wherein the analysis engine determines at each of the locations whether the relevant best practices appear to have been implemented by scanning the code of the target software application for the presence of cleanser functions.
13. The platform of claim 1 wherein the analysis engine determines at each of the locations to what extent the relevant best practices have been implemented incompletely or incorrectly by scanning the code of the target software application for common errors of correctness or completeness.
14. The platform of claim 1 wherein the analysis engine provides positive feedback to developers of the target software application by flagging the implementation of the best practices based on whether or not implementation errors are detected.
15. The platform of claim 1 wherein the analysis engine provides mixed positive and negative feedback to the developers for locations where it appears that the developers attempted to implement a certain best practice, but the implementation of the best practice is either incomplete or incorrect.
16. The platform of claim 1 wherein the analysis engine does not provide positive feedback in situations where there is no need for implementation of a “best practice.”
17. The platform of claim 1 wherein the analysis engine does not provide any feedback if there is no actual security threat in a particular area of the code regardless of what the developer has implemented.
18. A method for software security assessment, comprising:
receiving technical characteristics of a target software application and business context information relating to the target software application;
examining code of the target software application received and identifying specific application security best practices that are applicable to the target software application;
identifying locations in the code of the target application where the identified best practices ought to be implemented and determining for each of the locations whether the relevant best practices appear to have been implemented;
determining at each of the locations whether the relevant best practices appear to have been implemented correctly and to what extent they have been implemented incompletely or incorrectly; and
providing positive feedback to developer of the target software application for what appears to be their correct implementation of the best practices.
19. The method of claim 18 further comprising executing the target software application in a manner that mirrors or emulates the runtime environment in which it operates.
20. The method of claim 18 further comprising receiving a binary or bytecode version of the target software application as input and creating a high-level semantic model of the application containing control-flow and data-flow graphs of the application for analysis.
21. The method of claim 18 further comprising performing penetration testing of the target software application.
22. The method of claim 18 further comprising receiving input from manual review processes including a human operator visually reviewing the code of the target software application to determine if proper coding form and standards have been followed, and looking for “extra” functions often left in the application.
23. The method of claim 18 further comprising comparing assessment results among applications, developers, teams and/or organizations.
24. The method of claim 18 further comprising applying a digital rights management process against application assessment input data, thereby limiting distribution and use of the vulnerability test results to specified users.
25. The method of claim 18 further comprising providing mixed positive and negative feedback to the developers for locations where it appears that the developers attempted to implement a certain best practice, but the implementation is incomplete or incorrect.
26. The method of claim 18 further comprising examining the target software application through parsing of one or more of the source code, the compiled bytecode, and binary executable code of the target software application.
27. The method of claim 18 further comprising mapping the best practices that are applicable to the target software application as a series of IF-THEN rules, wherein the rules are applied in a “forward-chaining” approach, a hierarchical approach, or a multi-path approach such that the applicability of certain rules is dependent upon the evaluation of other higher-order rules.
28. The method of claim 18 further comprising identifying locations in the code of the target application where the identified best practices ought to be implemented by using a series of pattern-matching rules.
29. The method of claim 18 further comprising determining at each of the locations whether the relevant best practices appear to have been implemented by scanning the code of the target software application for the presence of cleanser functions.
30. The method of claim 18 further comprising determining at each of the locations to what extent the relevant best practices have been implemented incompletely or incorrectly by scanning the code of the target software application for common errors of correctness or completeness.
31. The method of claim 18 further comprising providing positive feedback to developers of the target software application by flagging the implementation of the best practices based on whether or not implementation errors are detected.
32. The method of claim 18 further comprising providing mixed positive and negative feedback to the developers for locations where it appears that the developers attempted to implement a certain best practice, but the implementation of the best practice is either incomplete or incorrect.
33. The method of claim 18 further comprising not providing positive feedback in situations where there is no need for implementation of a “best practice.”
34. The method of claim 18 further comprising not providing any feedback if there is no actual security threat in a particular area of the code regardless of what the developer has implemented.
US15/059,947 2012-02-22 2016-03-03 Methods and systems for providing feedback and suggested programming methods Abandoned US20160283346A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US15/059,947 US20160283346A1 (en) 2012-02-22 2016-03-03 Methods and systems for providing feedback and suggested programming methods

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261601720P 2012-02-22 2012-02-22
US13/770,487 US9286063B2 (en) 2012-02-22 2013-02-19 Methods and systems for providing feedback and suggested programming methods
US15/059,947 US20160283346A1 (en) 2012-02-22 2016-03-03 Methods and systems for providing feedback and suggested programming methods

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US13/770,487 Continuation US9286063B2 (en) 2012-02-22 2013-02-19 Methods and systems for providing feedback and suggested programming methods

Publications (1)

Publication Number Publication Date
US20160283346A1 true US20160283346A1 (en) 2016-09-29

Family

ID=49004726

Family Applications (2)

Application Number Title Priority Date Filing Date
US13/770,487 Active US9286063B2 (en) 2012-02-22 2013-02-19 Methods and systems for providing feedback and suggested programming methods
US15/059,947 Abandoned US20160283346A1 (en) 2012-02-22 2016-03-03 Methods and systems for providing feedback and suggested programming methods

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US13/770,487 Active US9286063B2 (en) 2012-02-22 2013-02-19 Methods and systems for providing feedback and suggested programming methods

Country Status (1)

Country Link
US (2) US9286063B2 (en)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11150898B1 (en) * 2020-06-15 2021-10-19 Capital One Services, Llc Methods and systems for monitoring contributor performance for source code programming projects
US20220027134A1 (en) * 2019-11-06 2022-01-27 Google Llc Automatically Generating Machine Learning Models for Software Tools That Operate on Source Code
WO2023122451A1 (en) * 2021-12-20 2023-06-29 Tactical Computing Laboratories, LLC Systems and methods for application performance profiling and improvement
US11726776B2 (en) 2022-01-19 2023-08-15 Microsoft Technology Licensing, Llc Super-app extension discovery and configuration via source code management platform comments

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9286063B2 (en) * 2012-02-22 2016-03-15 Veracode, Inc. Methods and systems for providing feedback and suggested programming methods
US10783254B2 (en) 2014-10-02 2020-09-22 Massachusetts Institute Of Technology Systems and methods for risk rating framework for mobile applications
US10229273B2 (en) * 2015-02-25 2019-03-12 Veracode, Inc. Identifying components for static analysis of software applications
CN106713215B (en) * 2015-07-14 2020-12-15 腾讯科技(深圳)有限公司 Information processing method, terminal and server
US10095869B2 (en) * 2015-09-24 2018-10-09 International Business Machines Corporation Machine learning statistical methods estimating software system's security analysis assessment or audit effort, cost and processing decisions
US11531538B2 (en) 2015-10-28 2022-12-20 Qomplx, Inc. Meta-indexing, search, compliance, and test framework for software development using smart contracts
US10740096B2 (en) 2015-10-28 2020-08-11 Qomplx, Inc. Meta-indexing, search, compliance, and test framework for software development
US11531539B2 (en) 2015-10-28 2022-12-20 Qomplx, Inc. Automated compliance and testing framework for software development
US10419582B2 (en) 2016-06-30 2019-09-17 International Business Machines Corporation Processing command line templates for database queries
US10379992B2 (en) 2016-10-25 2019-08-13 International Business Machines Corporation Adaptive dynamic code analysis
US10769183B2 (en) 2017-05-05 2020-09-08 Microsoft Technology Licensing, Llc Identifying resources in user interfaces for feedback
US10686821B2 (en) * 2017-11-28 2020-06-16 Sap Se Analysis of mobile applications
CN109508204B (en) * 2018-11-15 2021-08-06 四川长虹电器股份有限公司 Front-end code quality detection method and device
US11403392B2 (en) * 2020-01-06 2022-08-02 International Business Machines Corporation Security handling during application code branching
US11782687B1 (en) * 2022-10-21 2023-10-10 Aurora Labs Ltd. Shrinking executable files based on function analysis

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6609128B1 (en) * 1999-07-30 2003-08-19 Accenture Llp Codes table framework design in an E-commerce architecture
US6631473B2 (en) * 1998-08-05 2003-10-07 Sun Microsystems, Inc. Adaptive countermeasure selection method and apparatus
US6820256B2 (en) * 2000-12-13 2004-11-16 Microsoft Corporation System and method for whole-system program analysis
US6980927B2 (en) * 2002-11-27 2005-12-27 Telos Corporation Enhanced system, method and medium for certifying and accrediting requirements compliance utilizing continuous risk assessment
US7284274B1 (en) * 2001-01-18 2007-10-16 Cigital, Inc. System and method for identifying and eliminating vulnerabilities in computer software applications
US7389208B1 (en) * 2000-06-30 2008-06-17 Accord Solutions, Inc. System and method for dynamic knowledge construction
US20100281248A1 (en) * 2007-02-16 2010-11-04 Lockhart Malcolm W Assessment and analysis of software security flaws
US20110173693A1 (en) * 2007-02-16 2011-07-14 Wysopal Christopher J Assessment and analysis of software security flaws
US20120072968A1 (en) * 2007-02-16 2012-03-22 Wysopal Christopher J Assessment and analysis of software security flaws in virtual machines
US20130097706A1 (en) * 2011-09-16 2013-04-18 Veracode, Inc. Automated behavioral and static analysis using an instrumented sandbox and machine learning classification for mobile security
US8819772B2 (en) * 2012-06-25 2014-08-26 Appthority, Inc. In-line filtering of insecure or unwanted mobile device software components or communications
US9286063B2 (en) * 2012-02-22 2016-03-15 Veracode, Inc. Methods and systems for providing feedback and suggested programming methods

Family Cites Families (107)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4533997A (en) 1972-08-25 1985-08-06 Westinghouse Electric Corp. Computer monitored or controlled system which may be modified and de-bugged on-line by one not skilled in computer programming
US4527237A (en) 1979-10-11 1985-07-02 Nanodata Computer Corporation Data processing system
US4931928A (en) 1988-11-09 1990-06-05 Greenfeld Norton R Apparatus for analyzing source code
US5325531A (en) 1989-06-30 1994-06-28 Digital Equipment Corporation Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5263162A (en) 1990-11-07 1993-11-16 Hewlett-Packard Company Method of validating a label translation configuration by parsing a real expression describing the translation configuration
US5481708A (en) 1992-06-05 1996-01-02 Borland International, Inc. System and methods for optimizing object-oriented compilations
US6151701A (en) 1997-09-30 2000-11-21 Ahpah Software, Inc. Method for reconstructing debugging information for a decompiled executable file
US5432942A (en) 1993-06-10 1995-07-11 The United States Of America As Represented By The Secretary Of The Navy Data structure extraction, conversion and display tool
US6064819A (en) 1993-12-08 2000-05-16 Imec Control flow and memory management optimization
US5937190A (en) 1994-04-12 1999-08-10 Synopsys, Inc. Architecture and methods for a hardware description language source level analysis and debugging system
US5694539A (en) 1994-08-10 1997-12-02 Intrinsa Corporation Computer process resource modelling method and apparatus
US5586328A (en) 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US5715403A (en) 1994-11-23 1998-02-03 Xerox Corporation System for controlling the distribution and use of digital works having attached usage rights where the usage rights are defined by a usage rights grammar
US5590330A (en) 1994-12-13 1996-12-31 International Business Machines Corporation Method and system for providing a testing facility in a program development tool
US5892900A (en) 1996-08-30 1999-04-06 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
CA2171570C (en) 1995-03-29 1999-09-21 Swee Boon Lim Compiler with generic front end and dynamically loadable back ends
US5862382A (en) 1995-05-08 1999-01-19 Kabushiki Kaisha Toshiba Program analysis system and program analysis method
US5918035A (en) 1995-05-15 1999-06-29 Imec Vzw Method for processor modeling in code generation and instruction set simulation
US5793374A (en) 1995-07-28 1998-08-11 Microsoft Corporation Specialized shaders for shading objects in computer generated images
US5875334A (en) 1995-10-27 1999-02-23 International Business Machines Corporation System, method, and program for extending a SQL compiler for handling control statements packaged with SQL query statements
GB9600823D0 (en) 1996-01-16 1996-03-20 British Telecomm Distributed processing
US6021469A (en) 1996-01-24 2000-02-01 Sun Microsystems, Inc. Hardware virtual machine instruction processor
US5854929A (en) 1996-03-08 1998-12-29 Interuniversitair Micro-Elektronica Centrum (Imec Vzw) Method of generating code for programmable processors, code generator and application thereof
US5864871A (en) 1996-06-04 1999-01-26 Multex Systems Information delivery system and method including on-line entitlements
US5854924A (en) 1996-08-08 1998-12-29 Globetrotter Software, Inc. Static debugging tool and method
FR2754367B1 (en) 1996-10-09 1999-01-22 Bull Sa METHOD FOR ANALYZING COMPLEX STRUCTURES AND SYSTEM FOR CARRYING OUT SUCH A METHOD
US5881290A (en) 1996-12-09 1999-03-09 Allen-Bradley Company, Llc Industrial controller decompiler accommodating an expandable instruction set
US5819097A (en) 1996-12-09 1998-10-06 Allen Bradley Company, Llc Industrial controller compiler with expandable instruction set
DE69804708T2 (en) 1997-03-29 2002-11-14 Imec Vzw Method and device for size optimization of storage units
US6009256A (en) 1997-05-02 1999-12-28 Axis Systems, Inc. Simulation/emulation system and method
US6668325B1 (en) 1997-06-09 2003-12-23 Intertrust Technologies Obfuscation techniques for enhancing software security
US6014518A (en) 1997-06-26 2000-01-11 Microsoft Corporation Terminating polymorphic type inference program analysis
US5933635A (en) 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
WO1999030229A1 (en) 1997-12-11 1999-06-17 Digits Corp. Object code analysis and remediation system and method
US6175948B1 (en) 1998-02-05 2001-01-16 Motorola, Inc. Method and apparatus for a waveform compiler
US6311327B1 (en) 1998-03-02 2001-10-30 Applied Microsystems Corp. Method and apparatus for analyzing software in a language-independent manner
US6249910B1 (en) 1998-05-04 2001-06-19 Hewlett-Packard Company Apparatus and method for incrementally update static single assignment form for cloned variable name definitions
US6151706A (en) 1998-06-16 2000-11-21 Silicon Graphics, Inc. Method, system, and computer program product for extending sparse partial redundancy elimination to support speculative code motion within an optimizing compiler
US6240376B1 (en) 1998-07-24 2001-05-29 Mentor Graphics Corporation Method and apparatus for gate-level simulation of synthesized register transfer level designs with source-level debugging
US6336087B2 (en) 1998-07-24 2002-01-01 Luc M. Burgun Method and apparatus for gate-level simulation of synthesized register transfer level design with source-level debugging
US6230313B1 (en) 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
US6457172B1 (en) 1999-04-13 2002-09-24 International Business Machines Corporation Compiler for supporting multiple runtime data representations
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6412106B1 (en) 1999-06-16 2002-06-25 Intervoice Limited Partnership Graphical system and method for debugging computer programs
US6381738B1 (en) 1999-07-16 2002-04-30 International Business Machines Corporation Method for optimizing creation and destruction of objects in computer programs
US7430670B1 (en) 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6779114B1 (en) 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
US6560774B1 (en) 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6892303B2 (en) 2000-01-06 2005-05-10 International Business Machines Corporation Method and system for caching virus-free file certificates
US7577834B1 (en) 2000-05-09 2009-08-18 Sun Microsystems, Inc. Message authentication using message gates in a distributed computing environment
WO2001086427A2 (en) 2000-05-09 2001-11-15 Sun Microsystems, Inc. Transformation of objects between a computer programming language and a data representation language
US6807569B1 (en) 2000-09-12 2004-10-19 Science Applications International Corporation Trusted and anonymous system and method for sharing threat data to industry assets
US6925638B1 (en) 2000-09-21 2005-08-02 International Business Machines Corporation Mutability analysis in Java
CA2445195A1 (en) 2001-04-24 2002-10-31 Wvhtc Foundation Software suitability testing system
US7315903B1 (en) 2001-07-20 2008-01-01 Palladia Systems, Inc. Self-configuring server and server network
US6928638B2 (en) 2001-08-07 2005-08-09 Intel Corporation Tool for generating a re-generative functional test
US7376939B1 (en) 2002-02-07 2008-05-20 Xilinx, Inc. System for architecture and resource specification and methods to compile the specification onto hardware
US6941467B2 (en) 2002-03-08 2005-09-06 Ciphertrust, Inc. Systems and methods for adaptive message interrogation through multiple queues
US7930753B2 (en) 2002-07-01 2011-04-19 First Data Corporation Methods and systems for performing security risk assessments of internet merchant entities
US7155708B2 (en) 2002-10-31 2006-12-26 Src Computers, Inc. Debugging and performance profiling using control-dataflow graph representations with reconfigurable hardware emulation
US7140008B2 (en) 2002-11-25 2006-11-21 Microsoft Corporation Dynamic temporal optimization framework
US7051322B2 (en) 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
EP1627319A4 (en) 2003-05-01 2009-11-11 Samsung Electronics Co Ltd Authenticating method and apparatus
US7185323B2 (en) 2003-05-16 2007-02-27 Sun Microsystems, Inc. Using value speculation to break constraining dependencies in iterative control flow structures
US7162473B2 (en) 2003-06-26 2007-01-09 Microsoft Corporation Method and system for usage analyzer that determines user accessed sources, indexes data subsets, and associated metadata, processing implicit queries based on potential interest to users
US7707566B2 (en) 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7840951B1 (en) 2003-08-22 2010-11-23 Oracle America, Inc. Reducing the overhead involved in executing native code in a virtual machine through binary reoptimization
US7856624B2 (en) 2003-09-15 2010-12-21 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US7266813B2 (en) 2003-09-30 2007-09-04 International Business Machines Corporation Determining how many class-type checks to inline
US20050138426A1 (en) 2003-11-07 2005-06-23 Brian Styslinger Method, system, and apparatus for managing, monitoring, auditing, cataloging, scoring, and improving vulnerability assessment tests, as well as automating retesting efforts and elements of tests
US7437764B1 (en) 2003-11-14 2008-10-14 Symantec Corporation Vulnerability assessment of disk images
US20060136424A1 (en) 2004-03-25 2006-06-22 Jayasimha Nuggehalli Approach for collecting and reporting status data from network devices
US8171553B2 (en) 2004-04-01 2012-05-01 Fireeye, Inc. Heuristic based capture with replay to virtual machine
US20070180490A1 (en) 2004-05-20 2007-08-02 Renzi Silvio J System and method for policy management
EP1612509A1 (en) 2004-07-01 2006-01-04 Sick IVP AB Optical profilometer
US7594269B2 (en) 2004-10-29 2009-09-22 Intel Corporation Platform-based identification of host software circumvention
WO2006101549A2 (en) 2004-12-03 2006-09-28 Whitecell Software, Inc. Secure system for allowing the execution of authorized computer program code
US7840845B2 (en) 2005-02-18 2010-11-23 Intel Corporation Method and system for setting a breakpoint
US7458067B1 (en) 2005-03-18 2008-11-25 Sun Microsystems, Inc. Method and apparatus for optimizing computer program performance using steered execution
US8225409B2 (en) 2005-03-23 2012-07-17 Belarc, Inc. Security control verification and monitoring subsystem for use in a computer information database system
US7874001B2 (en) 2005-07-15 2011-01-18 Microsoft Corporation Detecting user-mode rootkits
US8272058B2 (en) 2005-07-29 2012-09-18 Bit 9, Inc. Centralized timed analysis in a network security system
US8161548B1 (en) 2005-08-15 2012-04-17 Trend Micro, Inc. Malware detection using pattern classification
US7779472B1 (en) 2005-10-11 2010-08-17 Trend Micro, Inc. Application behavior based malware detection
US7743336B2 (en) 2005-10-27 2010-06-22 Apple Inc. Widget security
US20070261061A1 (en) 2005-11-26 2007-11-08 Staniford Stuart G System and method of aggregating and consolidating security event data
WO2007117585A2 (en) 2006-04-06 2007-10-18 Smobile Systems Inc. System and method for managing malware protection on mobile devices
US8161464B2 (en) 2006-04-11 2012-04-17 International Business Machines Corporation Compiling source code
US7937693B2 (en) 2006-04-26 2011-05-03 9Rays.Net, Inc. System and method for obfuscation of reverse compiled computer code
US7891003B2 (en) 2006-06-14 2011-02-15 Microsoft Corporation Enterprise threat modeling
US8136104B2 (en) 2006-06-20 2012-03-13 Google Inc. Systems and methods for determining compute kernels for an application in a parallel-processing computer system
GB2459629A (en) 2007-02-16 2009-11-04 Veracode Inc Assessment and analysis of software security flaws
US8281290B2 (en) 2007-06-22 2012-10-02 Alcatel Lucent Software diversity using context-free grammar transformations
US8806619B2 (en) 2007-12-20 2014-08-12 Cybernet Systems Corporation System and methods for detecting software vulnerabilities and malicious code
US8719936B2 (en) 2008-02-01 2014-05-06 Northeastern University VMM-based intrusion detection system
US20100031353A1 (en) 2008-02-04 2010-02-04 Microsoft Corporation Malware Detection Using Code Analysis and Behavior Monitoring
US20100058475A1 (en) 2008-08-26 2010-03-04 Nec Laboratories America, Inc. Feedback-guided fuzz testing for learning inputs of coma
US20100058474A1 (en) 2008-08-29 2010-03-04 Avg Technologies Cz, S.R.O. System and method for the detection of malware
US8347386B2 (en) 2008-10-21 2013-01-01 Lookout, Inc. System and method for server-coupled malware prevention
US8087067B2 (en) 2008-10-21 2011-12-27 Lookout, Inc. Secure mobile platform system
US8984628B2 (en) 2008-10-21 2015-03-17 Lookout, Inc. System and method for adverse mobile application identification
US9367680B2 (en) 2008-10-21 2016-06-14 Lookout, Inc. System and method for mobile communication device application advisement
US8108933B2 (en) 2008-10-21 2012-01-31 Lookout, Inc. System and method for attack and malware prevention
US8181251B2 (en) 2008-12-18 2012-05-15 Symantec Corporation Methods and systems for detecting malware
IL197477A0 (en) 2009-03-08 2009-12-24 Univ Ben Gurion System and method for detecting new malicious executables, based on discovering and monitoring of characteristic system call sequences
US8756691B2 (en) 2010-11-10 2014-06-17 Symantec Corporation IP-based blocking of malware
US8832836B2 (en) 2010-12-30 2014-09-09 Verisign, Inc. Systems and methods for malware detection and scanning

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6631473B2 (en) * 1998-08-05 2003-10-07 Sun Microsystems, Inc. Adaptive countermeasure selection method and apparatus
US6609128B1 (en) * 1999-07-30 2003-08-19 Accenture Llp Codes table framework design in an E-commerce architecture
US7389208B1 (en) * 2000-06-30 2008-06-17 Accord Solutions, Inc. System and method for dynamic knowledge construction
US6820256B2 (en) * 2000-12-13 2004-11-16 Microsoft Corporation System and method for whole-system program analysis
US7284274B1 (en) * 2001-01-18 2007-10-16 Cigital, Inc. System and method for identifying and eliminating vulnerabilities in computer software applications
US6980927B2 (en) * 2002-11-27 2005-12-27 Telos Corporation Enhanced system, method and medium for certifying and accrediting requirements compliance utilizing continuous risk assessment
US20100281248A1 (en) * 2007-02-16 2010-11-04 Lockhart Malcolm W Assessment and analysis of software security flaws
US20110173693A1 (en) * 2007-02-16 2011-07-14 Wysopal Christopher J Assessment and analysis of software security flaws
US20120072968A1 (en) * 2007-02-16 2012-03-22 Wysopal Christopher J Assessment and analysis of software security flaws in virtual machines
US20130097706A1 (en) * 2011-09-16 2013-04-18 Veracode, Inc. Automated behavioral and static analysis using an instrumented sandbox and machine learning classification for mobile security
US9286063B2 (en) * 2012-02-22 2016-03-15 Veracode, Inc. Methods and systems for providing feedback and suggested programming methods
US8819772B2 (en) * 2012-06-25 2014-08-26 Appthority, Inc. In-line filtering of insecure or unwanted mobile device software components or communications

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220027134A1 (en) * 2019-11-06 2022-01-27 Google Llc Automatically Generating Machine Learning Models for Software Tools That Operate on Source Code
US11150898B1 (en) * 2020-06-15 2021-10-19 Capital One Services, Llc Methods and systems for monitoring contributor performance for source code programming projects
WO2023122451A1 (en) * 2021-12-20 2023-06-29 Tactical Computing Laboratories, LLC Systems and methods for application performance profiling and improvement
US11922148B2 (en) 2021-12-20 2024-03-05 Tactical Computing Laboratories, LLC Systems and methods for application performance profiling and improvement
US11726776B2 (en) 2022-01-19 2023-08-15 Microsoft Technology Licensing, Llc Super-app extension discovery and configuration via source code management platform comments

Also Published As

Publication number Publication date
US20130227516A1 (en) 2013-08-29
US9286063B2 (en) 2016-03-15

Similar Documents

Publication Publication Date Title
US9286063B2 (en) Methods and systems for providing feedback and suggested programming methods
Mai et al. Modeling security and privacy requirements: a use case-driven approach
Almorsy et al. Automated software architecture security risk analysis using formalized signatures
US20130339930A1 (en) Model-based test code generation for software testing
US11762717B2 (en) Automatically generating testing code for a software application
US9892263B2 (en) System, method and apparatus to visually configure an analysis of a program
US20100083240A1 (en) Locating security vulnerabilities in source code
Zech et al. Knowledge-based security testing of web applications by logic programming
Ernst et al. Boolean formulas for the static identification of injection attacks in Java
Pérez et al. Lapse+ static analysis security software: Vulnerabilities detection in java ee applications
Nguyen-Duc et al. On the adoption of static analysis for software security assessment–A case study of an open-source e-government project
Homaei et al. Athena: A framework to automatically generate security test oracle via extracting policies from source code and intended software behaviour
Martínez et al. Model-based analysis of Java EE web security misconfigurations
Tuma et al. Checking security compliance between models and code
Engström et al. Automated Security Assessments of Amazon Web Services Environments
Daoudagh et al. An automated framework for continuous development and testing of access control systems
Herda et al. Using dependence graphs to assist verification and testing of information-flow properties
Zhou et al. DAppHunter: Identifying Inconsistent Behaviors of Blockchain-based Decentralized Applications
Abeyrathna et al. A framework for secure software engineering: A knowledge modeling based approach for inferring association between source code and software design artifacts
Pieczul Analysis and detection of security vulnerabilities in contemporary software
Dimov et al. Classification of software security tools
Di Stasio Evaluation of Static Security Analysis Tools on Open Source Distributed Applications
Hersén Measuring Coverage of Attack Simulations on MAL Attack Graphs
Azad Protecting Web Applications Via Software Debloating
Mutai Hybrid Multi-Agents System Vulnerability Scanner For Detecting SQL Injection Attacks In Web Applications

Legal Events

Date Code Title Description
AS Assignment

Owner name: VERACODE, INC., MASSACHUSETTS

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:KRIEGSMAN, MARK;BLACK, BRIAN;SIGNING DATES FROM 20130502 TO 20140327;REEL/FRAME:037923/0622

STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION