IP Library Granted Patent US 11,036,852
Granted Patent B2
US 11,036,852 · App. 16/353,502 · Granted Jun 15, 2021

System and method for software diversification

Inventors: David Lau (Elmhurst, IL); Greg St. Louis (Geneva, IL); Dan Wojciechowski (Aurora, IL); Gerald Thompson (Somerset, NJ)
G06F21/54G06F21/126G06F21/572G06F21/575
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 11,036,852
App. No.
16/353,502
Granted
Jun 15, 2021
Kind
B2
Abstract

The present disclosure pertains to a system configured to prepare and use prediction models for software diversification. Some embodiments may: obtain compilation data; identify a plurality of blocks from the compilation data; and pad each of one or more blocks of the plurality of blocks by a random amount such that executable instructions within the each block begin at a different location to prevent a deterministic memory addressing attack, none of the one or more blocks being a beginning block of the compilation data.

Claims (54)

1. A method for diversifying software implemented with respect to at least a computing device, comprising:

obtaining, via one or more processors, compilation data;

identifying, via one or more processors, a plurality of blocks from the compilation data;

padding, via one or more processors to generate padded data, each of one or more blocks of the plurality of blocks by a random amount such that executable instructions within the each block begin at a different location to prevent a deterministic memory addressing attack;

repeating the padding to generate other padded data, the other padded data being different than the padded data;

providing the padded data to a target device; and

providing the other padded data to another target device,

wherein the one or more blocks is arranged after a beginning block of the compilation data.

2. The method of claim 1 , further comprising:

padding another block of the plurality of blocks by a random amount such that other executable instructions within the other block begin at a different location, the other block of the plurality of blocks being the beginning block of the compilation data.

3. The method of claim 2 , further comprising:

separately storing the padded data and the other padded data in a non-transitory medium for future execution of the executable instructions of a program or application.

4. The method of claim 3 ,

wherein each of the target devices is different from a first computing device on which the compilation data is compiled and from a second computing device on which the one or more blocks are randomly padded.

5. The method of claim 3 ,

wherein at least one of the target devices is the same as a computing device on which the compilation data is compiled and on which the one or more blocks are randomly padded.

6. The method of claim 1 , further comprising:

compiling source code to generate the compilation data,

wherein the compilation data is obtained responsive to the compilation of the source code, and

wherein the one or more blocks are padded by a linker of an operating system.

7. The method of claim 1 , wherein the compilation data is obtained from non-transitory memory responsive to beginning a boot cycle or to beginning a software loading process, and

wherein the one or more blocks are padded by a loader of an operating system.

8. The method of claim 7 , further comprising:

storing the padded blocks in a transitory memory of a computing device on which the executable instructions of a program or application are to be executed.

9. The method of claim 7 , wherein the compilation data is obtained from a same computing device on which the compilation data is compiled and on which the one or more blocks are randomly padded.

10. The method of claim 7 , wherein the compilation data is obtained and the one or more blocks are randomly padded on a computing device that is different from a computing device on which the compilation data is compiled.

11. The method of claim 2 , wherein the padding of the other block by the random amount is performed by adding a first plurality of bits before the other executable instructions.

12. The method of claim 11 , further comprising:

randomly determining a value for each of the first plurality of bits.

13. The method of claim 11 , wherein the padding of the one or more blocks by the random amount is performed by adding a second plurality of bits before the executable instructions of each of the one or more blocks, the second plurality being different from the first plurality.

14. The method of claim 2 , further comprising:

randomizing, via address space layout randomization (ASLR), a starting address for the other block of the plurality of blocks.

15. The method of claim 1 , further comprising:

prior to the padding, randomizing a linking order of object files; and

linking the randomly ordered object files to generate the plurality of blocks.

16. The method of claim 1 , further comprising:

compiling source code into position-independent code to generate the compilation data.

17. An apparatus, comprising:

a non-transitory memory including instructions stored thereon for securing a networked system; and

one or more processors operably coupled to the non-transitory memory, the one or more processors being configured to execute the instructions of:

identifying a plurality of blocks from compilation data;

padding, to generate padded data, each of one or more blocks of the plurality of blocks by a random amount such that executable instructions within the each block begin at a different location to prevent a deterministic memory addressing attack;

repeating the padding to generate other padded data, the other padded data being different than the padded data;

providing the padded data to a target device; and

providing the other padded data to another target device,

wherein the one or more blocks is arranged after a beginning block of the compilation data.

18. The apparatus of claim 17 , wherein the one or more processors are further configured to execute the instructions of:

padding another block of the plurality of blocks by a random amount such that other executable instructions within the other block begin at a different location, the other block of the plurality of blocks being the beginning block of the compilation data;

and

separately storing the padded data and the other padded data in a non-transitory medium for future execution of the executable instructions of a program or application.

19. The apparatus of claim 17 , wherein the compilation data is obtained from non-transitory memory responsive to beginning a boot cycle or to beginning a software loading process,

wherein the one or more blocks are padded by a loader of an operating system, and

wherein the one or more processors are further configured to execute the instructions of:

storing the padded blocks in a transitory memory of a computing device on which the executable instructions of a program or application are to be executed.

Assignments (4)
NOTICE OF GRANT OF SECURITY INTEREST IN PATENTS Recorded Jan 22, 2025
From: CACI LGS INNOVATIONS LLC
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 069987/0444 →
CHANGE OF NAME Recorded Nov 4, 2024
From: LGS INNOVATIONS LLC
To: CACI LGS INNOVATIONS LLC
Reel/Frame 069293/0265 →
NOTICE OF GRANT OF SECURITY INTEREST IN PATENTS Recorded Dec 13, 2021
From: LGS INNOVATIONS LLC
To: BANK OF AMERICA, N.A., AS ADMINISTRATIVE AGENT
Reel/Frame 058961/0065 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 14, 2019
From: LAU, DAVID; ST. LOUIS, GREG; WOJCIECHOWSKI, DAN; THOMPSON, GERALD
To: LGS INNOVATIONS LLC
Reel/Frame 048600/0969 →