IP Library Granted Patent US 8,555,269
Granted Patent B2
US 8,555,269 · App. 12/850,817 · Granted Oct 8, 2013

System and method for securing web application code and verifying correctness of software

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,555,269
App. No.
12/850,817
Granted
Oct 8, 2013
Kind
B2
Abstract

Methods, software tools and systems for analyzing software applications, e.g., Web applications, are described. A software application to be analyzed is transformed into an abstract representation which preserves its information flow properties. The abstract interpretation is evaluated to identify vulnerabilities using, for example, type qualifiers to associate security levels with variables and/or functions in the application being analyzed and typestate checking. Runtime guards are inserted into the application to secure identified vulnerabilities.

Claims (65)

1. A method for statically analyzing a software application performed by at least one processor comprising the steps of:

statically generating an abstract interpretation of said software application which approximates runtime states of said software application, wherein said abstract interpretation preserves said software application's information flow properties;

verifying a correctness of safety states of the abstract interpretation;

identifying vulnerabilities in said software application; and

securing said vulnerabilities in said software application,

wherein said step of verifying the correctness of safety states further comprises the step of:

using bounded model checking to verify said correctness of said safety states, and

further wherein said step of using bounded model checking to verify said correctness of said safety states further comprises the steps of:

generating an assertion based on said abstract interpretation; testing said assertion to identify counterexamples; and

negating counterexamples until said assertion becomes unsatisfiable.

2. The method of claim 1 , wherein said step of generating an abstract interpretation further comprises the steps of:

providing a type qualifier for each variable associated with at least one function within said software application; and

providing a precondition for each of said at least one function within said software application.

3. The method of claim 2 , wherein said step of verifying said correctness of safety states further comprises the step of:

evaluating said type qualifiers and said preconditions to identify vulnerabilities in said software application.

4. The method of claim 2 , wherein said type qualifier associates a security class with each corresponding variable.

5. The method of claim 1 , further comprising the step of:

inserting statements into, or modifying existing statements within, said software application to secure vulnerabilities which are identified as a result of said verifying step.

6. The method of claim 5 , wherein said step of inserting or modifying statements further comprises the step of:

inserting at least one of said statements at each location associated with an insecure variable.

7. The method of claim 5 , wherein said step of inserting or modifying statements further comprises the step of:

inserting at least one of said statements at a subset of locations associated with an insecure variable.

8. The method of claim 7 , wherein said subset of locations is determined by:

determining a minimum fixing set associated with vulnerabilities identified by said verifying step.

9. The method of claim 1 , wherein said at least one function includes sensitive functions in said software application.

10. The method of claim 9 , wherein said software application is a Personal Home Page (PHP) application and said sensitive functions include an exec( ) function, which executes system commands, and an echo( ) function, which generates outputs.

11. The method of claim 1 wherein said steps of generating and verifying are performed without running said software application.

12. A non-transitory computer-readable medium containing program instructions which, when executed by at least one processor, perform the steps of:

statically generating an abstract interpretation of a software application which approximates runtime states of said software, wherein said abstract interpretation preserves said software application's information flow properties;

verifying a correctness of safety states of the abstract interpretation;

identifying vulnerabilities in said software application; and

securing said vulnerabilities in said software application,

wherein said step of verifying the correctness of safety states further comprises the step of:

using bounded model checking to verify said correctness of said safety states, and

further wherein said step of using bounded model checking to verify said correctness of said safety states further comprises the steps of:

generating an assertion based on said abstract interpretation; testing said assertion to identify counterexamples; and

negating counterexamples until said assertion becomes unsatisfiable.

13. The non-transitory computer-readable medium of claim 12 , wherein said step of generating an abstract interpretation further comprises the steps of:

providing a type qualifier for each variable associated with at least one function within said software application; and

providing a precondition for each of said at least one function within said software application.

14. The non-transitory computer-readable medium of claim 13 , wherein said step of verifying said correctness of safety states further comprises the step of:

evaluating said type qualifiers and said preconditions to identify vulnerabilities in said software application.

15. The non-transitory computer-readable medium of claim 13 , wherein said type qualifier associates a security class with each corresponding variable.

16. The non-transitory computer-readable medium of claim 12 , further comprising the step of:

inserting statements into, or modifying statements within, said software application to secure vulnerabilities which are identified as a result of said verifying step.

17. The non-transitory computer-readable medium of claim 16 , wherein said step of inserting or modifying statements further comprises the step of:

inserting at least one of said statements at each location associated with an insecure variable.

18. The non-transitory computer-readable medium of claim 16 , wherein said step of inserting or modifying statements further comprises the step of:

inserting at least one of said statements at a subset of locations associated with an insecure variable.

19. The non-transitory computer-readable medium of claim 18 , wherein said subset of locations is determined by:

determining a minimum fixing set associated with vulnerabilities identified by said verifying step.

20. The non-transitory computer-readable medium of claim 12 , wherein said at least one function includes sensitive functions in said software application.

21. The non-transitory computer-readable medium of claim 20 , wherein said software application is a Personal Home Page (PHP) application and said sensitive functions include an exec( ) function, which executes system commands, and an echo( ) function, which generates outputs.

22. A method for analyzing a software application performed by at least one processor comprising the steps of:

generating type qualifiers and preconditions for variables and functions, respectively, within said software application;

identifying insecure information flows using said type qualifiers and preconditions;

calculating counterexample traces for the identified insecure information flows;

determining root causes of errors using said counterexample traces; and

determining patching points for said software application based on said root causes of errors.

23. A non-transitory computer-readable medium device that contains program instructions stored thereon which, when executed by at least one processor, perform the steps of:

generating a representation of a target software program which is an approximation of runtime states of said target software program which impact security of said target software program;

wherein said representation includes type qualifiers which represent variables in said target software program and preconditions which represent functions in said target software program;

wherein each of said type qualifiers associates a security class with a corresponding variable in said target software program;

verifying a correctness associated with at least some of said runtime states of said target software program using a bounded model checking technique; and

outputting information associated with security vulnerability in said target software program based on said verifying step.

Assignments (5)
SECOND LIEN INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Dec 8, 2025
From: PROOFPOINT, INC.
To: U.S. BANK TRUST COMPANY, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 073889/0677 →
RELEASE OF SECOND LIEN SECURITY INTEREST IN INTELLECTUAL PROPERTY Recorded Mar 21, 2024
From: GOLDMAN SACHS BANK USA, AS AGENT
To: PROOFPOINT, INC.
Reel/Frame 066865/0648 →
FIRST LIEN INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Aug 31, 2021
From: PROOFPOINT, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 057389/0615 →
SECOND LIEN INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Aug 31, 2021
From: PROOFPOINT, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 057389/0642 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 29, 2013
From: ARMORIZE TECHNOLOGIES, INC.
To: PROOFPOINT, INC.
Reel/Frame 031692/0257 →