IP Library Granted Patent US 8,990,785
Granted Patent B2
US 8,990,785 · App. 13/812,404 · Granted Mar 24, 2015

System and method for efficiently deploying massively diverse program instances to resist differential attacks

Inventors: Robert Durand (Gatineau, CA); Clifford Liem (Ottawa, CA); Philip Allan Eisen (Ottawa, CA)
G06F8/30G06F8/61G06F21/14
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,990,785
App. No.
13/812,404
Granted
Mar 24, 2015
Kind
B2
Abstract

A system and method for producing a massive number of diverse program instances so as to deter differential attacks, collusion, and similar hostile actions. Code portions are shown to be defined in various manners, instantiated, and aggregated. The system and method establishes a very large number of program instances that may be deployed. Furthermore, testing is accomplished over a minimal set of instances to provide for high test coverage and high confidence over the fully deployed in stance set without incurring a high penalty.

Claims (66)

1. A method executed by one or more computing devices for providing build-time diversity in computer software source code, said method comprising:

partitioning, by at least one of the one or more computing devices, the code into code portions;

identifying, by at least one of the one or more computing devices, code portion interfaces of the code portions based at least in part on external dependencies of one or more of the code portions, wherein code portion interfaces comprise inter-dependencies of a code portion which allow the code portion to be compatible with one or more other code portions;

generating, by at least one of the one or more computing devices, diverse code portion instances from the code portions;

generating, by at least one of the one or more computing devices, interface instances from the code portion interfaces, wherein the interface instances comprise one or more of duplicate code portion interfaces and diverse instances of code portion interfaces;

creating, by at least one of the one or more computing devices, test instances from the diverse code portion instances and the interface instances, wherein the test instances are created using a covering array which covers all possible instance groupings of a predetermined size in the diverse code portion instances and the interface instances; and

generating, by at least one of the one or more computing devices, deployment instances using varied combinations of the diverse code portion instances and the interface instances, wherein the number of deployment instances is greater than the number of test instances and wherein operability of all the deployment instances is assured by confirming operability of the test instances.

2. The method as claimed in claim 1 , wherein partitioning comprises physically partitioning the code.

3. The method as claimed in claim 2 , wherein the physical partitioning is based upon compilation units and the code portion interfaces include all global data and function dependencies outside of the compilation units.

4. The method as claimed in claim 2 , wherein the physical partitioning is based upon function definitions and the code portion interfaces include a function signature related to a corresponding one of the function definitions, all global variables, and all sub-functions on which the corresponding one of the function definitions depends.

5. The method as claimed in claim 1 , wherein partitioning comprises program flow partitioning the code.

6. The method as claimed in claim 5 , wherein the program flow partitioning is based upon function call sub-graphs wherein each one of the sub-graphs forms an instance of the code portions.

7. The method as claimed in claim 5 , wherein the program flow partitioning is based upon basic blocks of the code.

8. The method as claimed in claim 1 , wherein partitioning comprises data flow partitioning the code.

9. The method as claimed in claim 8 , wherein the data flow partitioning is based upon data encodings of the code.

10. The method as claimed in claim 1 , wherein generating diverse code portion instances further comprises aggregating a plurality of diverse code portion instances into a mega-set of instantiated code portions.

11. The method as claimed in claim 10 , wherein generating diverse code portion instances further comprises selecting the diverse code portions instances from said the mega-set of instantiated code portions based upon user criteria.

12. The method of claim 1 , wherein the predetermined size is two and wherein the covering array covers all possible pairs of the diverse code portion instances and the interface instances.

13. An apparatus for providing build-time diversity in computer software source code, the apparatus comprising:

one or more processors; and

one or more memories operatively coupled to at least one of the one or more processors and having instructions stored thereon that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to:

partition the code into code portions;

identify code portion interfaces of the code portions based at least in part on external dependencies of one or more of the code portions, wherein code portion interfaces comprise inter-dependencies of a code portion which allow the code portion to be compatible with one or more other code portions;

generate diverse code portion instances from the code portions;

generate interface instances from the code portion interfaces, wherein the interface instances comprise one or more of duplicate code portion interfaces and diverse instances of code portion interfaces;

create test instances from the diverse code portion instances and the interface instances, wherein the test instances are created using a covering array which covers all possible instance groupings of a predetermined size in the diverse code portion instances and the interface instances; and

generate deployment instances using varied combinations of the diverse code portion instances and the interface instances, wherein the number of deployment instances is greater than the number of test instances and wherein operability of all the deployment instances is assured by confirming operability of the test instances.

14. The apparatus of claim 13 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to partition the code further cause at least one of the one or more processors to:

physically partition the code.

15. The apparatus of claim 14 , wherein the physical partitioning is based upon compilation units and the code portion interfaces include all global data and function dependencies outside of the compilation units.

16. The apparatus of claim 14 , wherein the physical partitioning is based upon function definitions and the code portion interfaces include a function signature related to a corresponding one of the function definitions, all global variables, and all sub-functions on which the corresponding one of the function definitions depends.

17. The apparatus of claim 13 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to partition the code further cause at least one of the one or more processors to:

program flow partition the code.

18. The apparatus of claim 17 , wherein the program flow partitioning is based upon function call sub-graphs wherein each one of the sub-graphs forms an instance of the code portions.

19. The apparatus of claim 17 , wherein the program flow partitioning is based upon basic blocks of the code.

20. The apparatus of claim 13 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to partition the code further cause at least one of the one or more processors to:

data flow partition the code.

21. The apparatus of claim 20 , wherein the data flow partitioning is based upon data encodings of the code.

22. The apparatus of claim 13 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to generate diverse code portion instances further cause at least one of the one or more processors to:

aggregate a plurality of diverse code portion instances into a mega-set of instantiated code portions.

23. The apparatus of claim 22 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to generate diverse code portion instances further cause at least one of the one or more processors to

select the diverse code portions instances from the mega-set of instantiated code based upon user criteria.

24. The apparatus of claim 13 , wherein the predetermined size is two and wherein the covering array covers all possible pairs of the diverse code portion instances and the interface instances.

25. At least one non-transitory computer-readable medium storing computer-readable instructions that, when executed by one or more computing devices, cause at least one of the one or more computing devices to:

partition the code into code portions;

identify code portion interfaces of the code portions based at least in part on external dependencies of one or more of the code portions, wherein code portion interfaces comprise inter-dependencies of a code portion which allow the code portion to be compatible with one or more other code portions;

generate diverse code portion instances from the code portions;

generate interface instances from the code portion interfaces, wherein the interface instances comprise one or more of duplicate code portion interfaces and diverse instances of code portion interfaces;

create test instances from the diverse code portion instances and the interface instances, wherein the test instances are created using a covering array which covers all possible instance groupings of a predetermined size in the diverse code portion instances and the interface instances; and

generate deployment instances using varied combinations of the diverse code portion instances and the interface instances, wherein the number of deployment instances is greater than the number of test instances and wherein operability of all the deployment instances is assured by confirming operability of the test instances.

26. The at least one non-transitory computer-readable medium of claim 25 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to partition the code further cause at least one of the one or more computing devices to:

physically partition the code.

27. The at least one non-transitory computer-readable medium of claim 26 wherein the physical partitioning is based upon compilation units and the code portion interfaces include all global data and function dependencies outside of the compilation units.

28. The at least one non-transitory computer-readable medium of claim 26 wherein the physical partitioning is based upon function definitions and the code portion interfaces include a function signature related to a corresponding one of the function definitions, all global variables, and all sub-functions on which the corresponding one of the function definitions depends.

29. The at least one non-transitory computer-readable medium of claim 25 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to partition the code further cause at least one of the one or more computing devices to:

program flow partition the code.

30. The at least one non-transitory computer-readable medium of claim 29 wherein the program flow partitioning is based upon function call sub-graphs wherein each one of the sub-graphs forms an instance of the code portions.

31. The at least one non-transitory computer-readable medium of claim 29 , wherein the program flow partitioning is based upon basic blocks of the code.

32. The at least one non-transitory computer-readable medium of claim 25 wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to partition the code further cause at least one of the one or more computing devices to:

data flow partition the code.

33. The at least one non-transitory computer-readable medium of claim 32 wherein the data flow partitioning is based upon data encoding of the code.

34. The at least one non-transitory computer-readable medium of claim 25 wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to generate diverse code portion instances further cause at least one of the one or more computing devices to:

aggregate a plurality of diverse code portion instances into a mega-set of instantiated code portions.

35. The at least one non-transitory computer-readable medium of claim 34 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to generate diverse code portion instances further cause at least one of the one or more computing devices to:

select the diverse code portions instances from the mega-set of instantiated code portions based upon user criteria.

36. The at least one non-transitory computer-readable medium of claim 25 , wherein the predetermined size is two and wherein the covering array covers all possible pairs of the diverse code portion instances and the interface instances.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 12, 2015
From: IRDETO CANADA CORPORATION
To: IRDETO B.V.
Reel/Frame 035186/0825 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 24, 2015
From: DURAND, ROBERT; LIEM, CLIFFORD; EISEN, PHILIP ALLAN
To: IRDETO CANADA CORPORATION
Reel/Frame 035019/0326 →
Continuity (1)
Related Publication 20130125090A1 · May 16, 2013