IP Library Granted Patent US 8,924,782
Granted Patent B2
US 8,924,782 · App. 12/523,989 · Granted Dec 30, 2014

Systems, methods, and media for recovering an application from a fault or attack

Inventors: Michael E. Locasto (Springfield, VA); Angelos D. Keromytis (New York, NY); Angelos Stavrou (Springfield, VA); Gabriela F. Ciocarlie (New York, NY)
Assignee: The Trustees of Columbia University in the City of New York
G06F11/3672
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,924,782
App. No.
12/523,989
Granted
Dec 30, 2014
Kind
B2
Abstract

Systems, methods, and media for recovering an application from a fault or an attack are disclosed herein. In some embodiments, a method is provided for enabling a software application to recover from a fault condition. The method includes specifying constrained data items and assigning a set of repair procedures to the constrained data items. The method further includes detecting a fault condition on the constrained data items during execution of the software application, which triggers at least one repair procedure. The triggered repair procedures are executed and the execution of the software application is restored. In some embodiments, the restoring comprises providing memory rollback to a point of execution of the software application before the fault condition was detected.

Claims (84)

1. A method for enabling a software application to recover from a fault condition, the method comprising:

specifying, using at least one hardware processor, memory locations within said software application;

assigning, using at least one hardware processor, a set of repair procedures to said memory locations, wherein a first repair procedure is assigned to a first memory location and a second repair procedure is assigned to a second memory location, wherein the first repair procedure corresponds to a first value, wherein the second repair procedure corresponds to a second value, and wherein the first memory location and the second memory location are different memory locations;

detecting, using at least one hardware processor, a fault condition on said memory locations during execution of said software application, said fault condition triggering at least one of the assigned first repair procedure and the assigned second repair procedure of said set of repair procedures;

maintaining, using at least one hardware processor, a memory log of changes to memory during the execution of the software application; and

executing, using at least one hardware processor, said triggered repair procedure, wherein, upon the fault condition triggering the first repair procedure, the execution comprises identifying a first address of the memory associated with the first memory location, assigning the first value to the first address of the memory associated with the first memory location, and restoring the execution of the software application based on the memory log, and

wherein, upon the fault condition triggering the second repair procedure, the execution comprises identifying a second address of the memory associated with the second memory location, assigning the second value to the second address of the memory associated with the second memory location, and restoring the execution of the software application based on the memory log.

2. The method of claim 1 , wherein source code of said software application is not modified.

3. A method for enabling a software application to recover from a fault condition, the method comprising:

receiving, using at least one hardware processor, input data from an external entity using a virtual input proxy;

sending, using at least one hardware processor, output data to the external entity using a virtual output proxy;

specifying, using at least one hardware processor, memory locations within said software application;

assigning, using at least one hardware processor, a set of repair procedures to said memory locations, wherein a first repair procedure is assigned to a first memory location and a second repair procedure is assigned to a second memory location, wherein the first repair procedure corresponds to a first value, wherein the second repair procedure corresponds to a second value, and wherein the first memory location and the second memory location are different memory locations;

detecting, using at least one hardware processor, a fault condition on said memory locations during execution of said software application, said fault condition triggering at least one of the assigned first repair procedure and the assigned second repair procedure of said set of repair procedures;

maintaining, using at least one hardware processor, a memory log of changes to memory during the execution of the software application; and

executing, using at least one hardware processor, said triggered repair procedure, wherein, upon the fault condition triggering the first repair procedure, the execution comprises identifying a first address of the memory associated with the first memory location, assigning the first value to the first address of the memory associated with the first memory location, and restoring the execution of the software application based Oil the memory log, and

wherein, upon the fault condition triggering the second repair procedure, the execution comprises identifying a second address of the memory associated with the second memory location, assigning the second value to the second address of the memory associated with the second memory location, and restoring the execution of the software application based on the memory log.

4. The method of claim 3 , wherein source code sa software application is not modified.

5. The method of claim 3 , further comprising providing memory rollback to a point of execution of said software application before said fault condition was detected.

6. The method of claim 3 , wherein said triggered repair procedure uses portions of said software application's code.

7. The method of claim 6 , further comprising:

specifying ways to indicate specific portions of said portions from said software application's code to he used by said triggered repair procedure; and

specifying ways said specific portions are to be used as part of said triggered repair procedure.

8. The method of claim 3 , further comprising buffering said output data until input data are expected from said external entity.

9. The method of claim 3 , wherein the fault condition comprises an incorrect function return value.

10. The method of claim 3 , wherein the fault condition comprises an anomalous function call.

11. The method of claim 3 , wherein detecting the fault condition further comprises detecting, using a shadow stack, integrity violations of at least one of a return address and other stack frame information.

12. A system for enabling a software application to recover from a fault condition, the system comprising:

an interface in communication with a network;

a memory; and

a processor in communication with the memory and the interface, wherein the processor:

specifies memory locations within said software application;

assigns a set of repair procedures to said memory locations, wherein a first repair procedure is assigned to a first memory location and a second repair procedure is assigned to a second memory location, wherein the first repair procedure corresponds to a first value, wherein the second repair procedure corresponds to a second value, and wherein the first memory location and the second memory location are different memory locations;

detects a fault condition on said memory locations during execution of said software application, said fault condition triggering at least one of the assigned first repair procedure and the assigned second repair procedure of said set of repair procedures;

maintains a memory log of changes to the memory during the execution of the software application; and

executes said triggered repair procedure, wherein, upon the fault condition triggering the first repair procedure, the execution comprises identifying a first address of the memory associated with the first memory location, assigning the first value to the first address of the memory associated with the first memory location, and restoring the execution of the software application based on the memory log, and wherein, upon the fault condition triggering the second repair procedure, the execution comprises identifying a second address of the memory associated with the second memory location, assigning the second value to the second address of the memory associated with the second memory location, and restoring the execution of the software application based on the memory log.

13. The system of claim 12 , wherein source code of said software application is not modified.

14. The system of claim 12 , wherein said processor provides memory rollback to a point of execution of said software application before said fault condition was detected.

15. The system of claim 12 , wherein said triggered repair procedure uses portions of said software application's code.

16. The system of claim 15 , wherein said processor further:

specifies ways to indicate specific portions of said portions from said software application's code to he used by said triggered repair procedure; and

specifies ways said specific portions are to he used as part of said triggered repair procedure.

17. The system of claim 12 , wherein the software application receives input data from an external entity using a virtual input proxy.

18. The system of claim 12 , wherein the software application sends output data to an external entity using a virtual output proxy.

19. The system of claim 18 , wherein said output data are buffered until input data are expected from said external entity.

20. The system of claim 12 , wherein the fault condition comprises an incorrect function return value.

21. The system of claim 12 , wherein the fault condition comprises an anomalous function call.

22. The system of claim 12 , wherein detecting the fault condition further comprises detecting, using a shadow stack, integrity violations of at least one of a return address and other stack frame information.

23. A non-transitory computer-readable medium containing computer-executable instructions that, when executed by a processor, cause the processor to perform a method for enabling a software application to recover from a fault condition, the instructions implementing the method comprising:

specifying memory locations within said software application;

assigning a set of repair procedures to said memory locations, wherein a first repair procedure is assigned to a first memory location and a second repair procedure is assigned to a second memory location, wherein the first repair procedure corresponds to a first value, wherein the second repair procedure corresponds to a second value, and wherein the first memory location and the second memory location are different memory locations;

detecting a fault condition on said memory locations during execution of said software application, said fault condition triggering at least one of the assigned first repair procedure and the assigned second repair procedure of said set of repair procedures;

maintaining a memory log of changes to memory during the execution of the software application; and

executing said triggered repair procedure, wherein, upon the fault condition triggering the first repair procedure, the execution comprises identifying a first address of the memory associated with the first memory location, assigning the first value to the first address of the memory associated with the first memory location, and restoring the execution of the software application based on the memory log, and wherein, upon the fault condition triggering the second repair procedure, the execution comprises identifying a second address of the memory associated with the second memory location, assigning the second value to the second address of the memory associated with the second memory location, and restoring the execution of the software application based on the memory log.

24. The medium of claim 23 , wherein source code of said software application is not modified.

25. The medium of claim 23 , wherein the method further comprises providing memory rollback t a point of execution of said software application before said fault condition was detected.

26. The medium of claim 23 , wherein said triggered repair procedure uses portions of said software application's code.

27. The medium of claim 26 , said method further comprising:

specifying ways to indicate specific portions of said portions from said software applications code to he used by said triggered repair procedure; and

specifying ways said specific portions are to be used as part of said triggered repair procedure.

28. The medium of claim 23 , wherein the software application receives input data from an external entity using a virtual input proxy.

29. The medium of claim 23 , wherein the software application sends output data to an external entity using a virtual output proxy.

30. The medium of claim 29 , wherein said output data are buffered until input data are expected from said external entity.

31. The medium of claim 23 , wherein the fault condition comprises an incorrect function return value.

32. The medium of claim 23 , wherein the fault condition comprises an anomalous function call.

33. The medium of claim 23 , wherein detecting the fault condition further comprises detecting, using a shadow stack, integrity violations of at least one of a return address and other stack frame information.

34. A system for enabling a software application to recover from a fault condition, the system comprising:

means for specifying memory locations within said software application;

means for assigning a set of repair procedures to said memory, wherein a first repair procedure is assigned to a first memory location and a second repair procedure is assigned to a second memory location, wherein the first repair procedure corresponds to a first value, wherein the second repair procedure corresponds to a second value, and wherein the first memory location and the second memory location are different memory locations;

means for detecting a fault condition on said memory locations during execution of said software application, said fault condition triggering at least one of the assigned first repair procedure and the assigned second repair procedure of said set of repair procedures;

means for maintaining a memory log of changes to memory during the execution of the software application; and

means for executing said triggered repair procedure, wherein, upon the fault condition triggering the first repair procedure, the means for executing comprises means for identifying a first address of the memory associated with the first memory location, means for assigning the first value to the first address of the memory associated with the first memory location, and means for restoring the execution of the software application based on the memory log, and wherein, upon the fault condition triggering the second repair procedure, the means for executing comprises means for identifying a second address of the memory associated with the second memory location, means for assigning the second value to the second address of the memory associated with the second memory location, and means for restoring the execution of the software application based on the memory log.

35. The system of claim 34 , wherein source code of said software application is not modified.

36. The system of claim 34 , wherein the system further comprises means for providing memory rollback to a point of execution of said software application before said fault condition was detected.

37. The system of claim 34 , wherein said triggered repair procedure uses portions of said software application's code.

38. The system of claim 37 , further comprising:

means for specifying ways to indicate specific portions of said portions from said software application's code to be used by said triggered repair procedure; and

means for specifying ways said specific portions are to be used as part of said triggered repair procedure.

39. The system of claim 34 , wherein the software application receives input data from an external entity using a virtual input proxy.

40. The system of claim 34 , wherein the software application sends output data to an external entity using a virtual output proxy.

41. The system of claim 40 , wherein said output data are buffered until input data are expected from said external entity.

42. The system of claim 34 , wherein the fault condition comprises an incorrect function return value.

43. The system of claim 34 , wherein the fault condition comprises an anomalous function call.

44. The system of claim 34 , wherein the means for detecting the fault condition further comprises means for detecting, using a shadow stack, integrity violations of at least one of a return address and other stack frame information.

Assignments (3)
CONFIRMATORY LICENSE Recorded May 17, 2010
From: COLUMBIA UNIVERSITY NEW YORK MORNINGSIDE
To: NATIONAL SCIENCE FOUNDATION
Reel/Frame 024391/0997 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 5, 2010
From: LOCASTO, MICHAEL E.; KEROMYTIS, ANGELOS D.; STAVROU, ANGELOS; CIOCARLIE, GABRIELA F.
To: THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK
Reel/Frame 024341/0547 →
CONFIRMATORY LICENSE Recorded Jan 27, 2010
From: COLUMBIA UNIVERSITY
To: AFRL/RIJ
Reel/Frame 023856/0812 →
Continuity (2)
Provisional Application 60897571 · Jan 26, 2007
Related Publication 20100293407A1 · Nov 18, 2010