Detecting race condition vulnerabilities in computer software applications
Abstract
Testing computer software applications is performed by identifying first and second executable portions of the computer software application, where the portions are configured to access a data resource, and where at least one of the portions is configured to write to the data resource, instrumenting the computer software application by inserting one or more instrumentation instructions into one or both of the portions, where the instrumentation instruction is configured to cause execution of the portion being instrumented to be extended by a randomly-determined amount of time, and testing the computer software application in multiple iterations, where the computer software application is executed in multiple parallel execution threads, where the portions are independently executed at least partially in parallel in different threads, and where the computer software application is differently instrumented in each of the iterations.
Claims
exact text as granted — not AI-modifiedWhat is claimed is:
1 . A method for testing computer software applications, the method comprising:
identifying a first executable portion of a computer software application and a second executable portion of the computer software application, wherein the first and second executable portions are configured to access a data resource, and wherein at least one of the first and second executable portions is configured to write to the data resource; instrumenting the computer software application, the instrumenting comprising inserting at least one instrumentation instruction into at least one of the first and second executable portions, wherein the instrumentation instruction is configured to cause execution of the portion being instrumented to be extended by a randomly-determined amount of time; and testing the computer software application in each of a plurality of iterations,
wherein the computer software application is executed in multiple parallel execution threads,
wherein the first and second executable portions are independently executed at least partially in parallel in different ones of the threads, and
wherein the computer software application is differently instrumented in each of the iterations.
2 . The method according to claim 1 wherein the identifying comprises identifying at least one of the first and second executable portions is configured to read the data resource.
3 . The method according to claim 1 wherein the instrumenting comprises configuring the instrumentation instruction to perform an operation for the duration of the randomly-determined amount of time.
4 . The method according to claim 1 wherein the instrumenting comprises inserting the instrumentation instruction proximate to a location where the data resource is accessed.
5 . The method according to claim 1 and further comprising identifying a race condition vulnerability associated with the computer software application if different values of the data resource are detected after different ones of the iterations.
6 . The method according to claim 1 and further comprising identifying a race condition vulnerability associated with the computer software application if during one of the iterations the first executable portion writes to the data resource before the second executable portion accesses the data resource, and during a different one of the iterations the second executable portion accesses the data resource before the first executable portion writes to the data resource.
7 . The method according to claim 1 wherein the identifying, instrumenting, and testing steps are implemented in any of
computer hardware configured to perform the steps, and
computer software configured to perform the steps and embodied in a computer-readable storage medium.
8 . A system for testing computer software applications, the system comprising:
a static analyzer configured to identify a first executable portion of a computer software application and a second executable portion of the computer software application, wherein the first and second executable portions are configured to access a data resource, and wherein at least one of the first and second executable portions is configured to write to the data resource; an instrumentation manager configured to instrument the computer software application by inserting at least one instrumentation instruction into at least one of the first and second executable portions, wherein the instrumentation instruction is configured to cause execution of the portion being instrumented to be extended by a randomly-determined amount of time; and a software tester configured to test the computer software application in each of a plurality of iterations, wherein the computer software application is executed in multiple parallel execution threads, wherein the first and second executable portions are independently executed at least partially in parallel in different ones of the threads, and wherein the computer software application is differently instrumented in each of the iterations.
9 . The system according to claim 8 wherein at least one of the first and second executable portions is configured to read the data resource.
10 . The system according to claim 8 wherein the instrumentation instruction causes an operation to be performed for the duration of the randomly-determined amount of time.
11 . The system according to claim 8 wherein the instrumentation manager is configured to insert the instrumentation instruction proximate to a location where the data resource is accessed.
12 . The system according to claim 8 wherein the software tester is configured to identify a race condition vulnerability associated with the computer software application if different values of the data resource are detected after different ones of the iterations.
13 . The system according to claim 8 wherein the software tester is configured to identify a race condition vulnerability associated with the computer software application if
during one of the iterations the first executable portion writes to the data resource before the second executable portion accesses the data resource, and
during a different one of the iterations the second executable portion accesses the data resource before the first executable portion writes to the data resource.
14 . The system according to claim 8 wherein the static analyzer, instrumentation manager, and software tester are implemented in either of
computer hardware, and
computer software embodied in a non-transitory, computer-readable storage medium.
15 . A computer program product for testing computer software applications, the computer program product comprising:
a non-transitory, computer-readable storage medium; and computer-readable program code embodied in the computer-readable storage medium, wherein when executed by a computer, the computer-readable program code is configured to identify a first executable portion of a computer software application and a second executable portion of the computer software application, wherein the first and second executable portions are configured to access a data resource, and wherein at least one of the first and second executable portions is configured to write to the data resource, instrument the computer software application by inserting at least one instrumentation instruction into at least one of the first and second executable portions, wherein the instrumentation instruction is configured to cause execution of the portion being instrumented to be extended by a randomly-determined amount of time, and test the computer software application in each of a plurality of iterations, wherein the computer software application is executed in multiple parallel execution threads, wherein the first and second executable portions are independently executed at least partially in parallel in different ones of the threads, and wherein the computer software application is differently instrumented in each of the iterations.
16 . The computer program product according to claim 15 wherein at least one of the first and second executable portions is configured to read the data resource.
17 . The computer program product according to claim 15 wherein the instrumentation instruction causes an operation to be performed for the duration of the randomly-determined amount of time.
18 . The computer program product according to claim 15 wherein the computer-readable program code is configured to insert the instrumentation instruction proximate to a location where the data resource is accessed.
19 . The computer program product according to claim 15 wherein the computer-readable program code is configured to identify a race condition vulnerability associated with the computer software application if different values of the data resource are detected after different ones of the iterations.
20 . The computer program product according to claim 15 wherein the computer-readable program code is configured to identify a race condition vulnerability associated with the computer software application if
during one of the iterations the first executable portion writes to the data resource before the second executable portion accesses the data resource, and
during a different one of the iterations the second executable portion accesses the data resource before the first executable portion writes to the data resource.Join the waitlist — get patent alerts
Track US2015095894A1 — get alerts on status changes and closely related new filings.
We store only your email — no account needed. See our privacy policy.