IP Library Granted Patent US 12,373,558
Granted Patent B1
US 12,373,558 · App. 17/650,346 · Granted Jul 29, 2025

Computer-based system to validate build integrity of software products

Inventor: Jeremy W. Long (Herndon, VA)
Assignee: Wells Fargo Bank, N.A.
G06F21/563G06F2221/033
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 12,373,558
App. No.
17/650,346
Granted
Jul 29, 2025
Kind
B1
Abstract

Techniques are described for validating build integrity of software products, such as applications or containers. More specifically, this disclosure describes a build integrity validation system that analyzes build artifacts resulting from a software build process to create source code assertions, and compares the assertions against the source code from which the build artifacts were produced. The build integrity validation system validates that a particular build artifact is producible by the source code to ensure that no additional code was introduced during the build process. The build integrity validation system may also reverse the analysis to validate that the source code is able to produce the build artifacts to ensure that no code was removed or modified during the build process. The build integrity validation system identifies and reports identified discrepancies between the source code and the build artifacts resulting from the software build process of the source code.

Claims (66)

1. A method comprising:

creating, by a computing system, a data file based on information extracted from at least one build artifact resulting from a software build process of source code, wherein the data file includes one or more assertions with respect to one or more definitions of software components expected to be included in the source code in order to produce the at least one build artifact;

comparing, by the computing system, the one or more assertions in the data file and definitions of software components in the actual data of the source code;

identifying, by the computing system and based on the comparison, whether at least one discrepancy occurs between the one or more assertions in the data file and the actual data of the source code, wherein identifying that the at least one discrepancy occurs comprises identifying at least one assertion created from the at least one build artifact that is not included in the actual data of the source code such that the at least one build artifact is not producible by the actual data of the source code; and

in response to identifying the at least one discrepancy, generating, by the computing system, a report indicating the at least one discrepancy between the at least one build artifact and the source code.

2. The method of claim 1 , wherein generating the report comprises generating a notification indicating that additional data was potentially introduced during the software build process of the source code that produced the at least one build artifact.

3. The method of claim 1 , wherein the source code is compiled into the at least one build artifact by a build server, and wherein the build server is independent from the computing system.

4. The method of claim 1 , wherein the source code comprises source code of a software application and the at least one build artifact comprises at least one build artifact of a plurality of build artifacts resulting from the software build process of the source code,

wherein creating the data file comprises:

extracting one or more software components from the at least one build artifact, and

creating one or more source code assertions that the source code is expected to include the one or more definitions of the one or more software components extracted from the at least one build artifact; and

wherein comparing the one or more assertions in the data file and the definitions of the software components in the actual data of the source code comprises comparing each source code assertion of the one or more source code assertions against one or more definitions of the definitions of the software components in the actual data of the source code.

5. The method of claim 4 , wherein identifying that the at least one discrepancy occurs comprises identifying at least one source code assertion created from the at least one build artifact that does not match the one or more definitions of software components in the actual data of the source code such that the at least one build artifact is not producible by the actual data of the source code.

6. The method of claim 4 , wherein identifying whether the at least one discrepancy occurs comprises identifying whether at least one first discrepancy occurs based on a first comparison between the one or more source code assertions and the definitions of the software components in the actual data of the source code, and wherein in response to identifying no first discrepancy between the one or more source code assertions and the definitions of the software components in the actual data of the source code, the method further comprises:

creating one or more build artifact assertions based on the definitions of the software components in the actual data extracted from the source code;

comparing the one or more build artifact assertions and the plurality of build artifacts resulting from the software build process of the source code as a second comparison; and

identifying, based on the second comparison, whether at least one second discrepancy occurs between the one or more build artifact assertions and the plurality of build artifacts, wherein identifying that the at least one second discrepancy occurs comprises identifying at least one build artifact assertion created from the source code that is not included in the plurality of build artifacts resulting from the software build process of the source code such that the actual data of the source code is unable to produce the plurality of build artifacts.

7. The method of claim 6 , wherein creating the one or more build artifact assertions comprises:

extracting one or more definitions of the definitions of the software components from the source code; and

creating the one or more build artifact assertions that the plurality of build artifacts is expected to include one or more software components of the one or more definitions extracted from the source code.

8. The method of claim 6 , wherein generating the report comprises generating a notification indicating that a portion of the actual data of the source code was potentially removed or modified during the software build process of the source code that produced the plurality of build artifacts.

9. The method of claim 1 , wherein the source code comprises a container source file of a software container and the at least one build artifact comprises a container image resulting from the software build process of the container source file,

wherein creating the data file comprises:

extracting a history of one or more commands executed to build the container image during the software build process of the container source file, and

creating a container image history file including one or more source code assertions that the container source file is expected to include the one or more commands extracted from the container image; and

wherein comparing the one or more assertions in the data file and the definitions of the software components in the actual data of the source code comprises comparing each source code assertion of the one or more source code assertions in the container image history file against one or more commands in the actual data of the container source file.

10. The method of claim 9 , wherein identifying that the at least one discrepancy occurs comprises identifying at least one source code assertion in the container image history file created from the container image that does not match the one or more commands in the actual data of the container source file such that the container image is not producible by the actual data of the container source file.

11. The method of claim 9 , wherein comparing each source code assertion in the container image history file against the one or more commands in the actual data of the container source file comprises comparing each source code assertion of the one or more source code assertions read entry-by-entry from top-down in the container image history file against each command of the one or more commands read entry-by-entry from bottom-up in the container source file.

12. The method of claim 11 , further comprising, when a source code assertion of the one or more source code assertions at a given entry in the container image history file does not match a command at a corresponding entry in the actual data of the container source file:

determining that the corresponding step in the actual data of the container source file comprises a reference to a second container image;

accessing the second container image;

creating a second container image history file including one or more commands executed to build the second container image; and

comparing the source code assertion at the given entry in the container image history file against the one or more commands in the second container image history file of the second container image.

13. The method of claim 12 , wherein identifying that the at least one discrepancy occurs comprises identifying that the source code assertion at the given entry in the container image history file created from the container image does not match the one or more commands in the second container image history file created from the second container image such that the container image is not producible by the actual data of the container source file including the reference to the second container image.

14. A computing system comprising:

a memory; and

one or more processors in communication with the memory, the one or more processors configured to:

create a data file based on information extracted from at least one build artifact resulting from a software build process of source code, wherein the data file includes one or more assertions with respect to one or more definitions of software components expected to be included in the source code in order to produce the at least one build artifact;

compare the one or more assertions in the data file and definitions of software components in the actual data of the source code;

identifying, based on the comparison, whether at least one discrepancy occurs between the one or more assertions in the data file and the actual data of the source code, wherein identifying that the at least one discrepancy occurs comprises identifying at least one assertion created from the at least one build artifact that is not included in the actual data of the source code such that the at least one build artifact is not producible by the actual data of the source code; and

in response to identifying the at least one discrepancy, generate a report indicating the at least one discrepancy between the at least one build artifact and the source code.

15. The computing system of claim 14 , wherein to generate the report, the one or more processors are configured to generate a notification indicating that additional data was potentially introduced during the software build process of the source code that produced the at least one build artifact.

16. The computing system of claim 14 , wherein the source code comprises source code of a software application and the at least one build artifact comprises at least one build artifact of a plurality of build artifacts resulting from the software build process of the source code,

wherein to create the data file, the one or more processors are configured to:

extract one or more software components from the at least one build artifact, and

create one or more source code assertions that the source code is expected to include the one or more definitions of the one or more software components extracted from the at least one build artifact; and

wherein to compare the one or more assertions in the data file and the definitions of the software components in the actual data of the source code, the one or more processors are configured to compare each source code assertion of the one or more source code assertions against one or more definitions of the definitions of the software components in the actual data of the source code.

17. The computing system of claim 16 , wherein to identify whether the at least one discrepancy occurs the one or more processors are configured to identify whether at least one first discrepancy occurs based on a first comparison between the one or more source code assertions and the definitions of the software components in the actual data of the source code, and wherein in response to identifying no first discrepancy between the one or more source code assertions and the definitions of the software components in the actual data of the source code, the one or more processors are further configured to:

create one or more build artifact assertions based on the definitions of the software components in the actual data extracted from the source code;

compare the one or more build artifact assertions and the plurality of build artifacts resulting from the software build process of the source code as a second comparison; and

identify, based on the second comparison, whether the at least one second discrepancy occurs between the one or more build artifact assertions and the plurality of build artifacts, wherein to identify that the at least one second discrepancy occurs, the one or more processors are configured to identify at least one build artifact assertion created from the source code that is not included in the plurality of build artifacts resulting from the software build process of the source code such that the actual data of the source code is unable to produce the plurality of build artifacts.

18. The computing system of claim 14 , wherein the source code comprises a container source file of a software container and the at least one build artifact comprises a container image resulting from the software build process of the container source file,

wherein to create the data file, the one or more processors are configured to:

extract a history of one or more commands executed to build the container image during the software build process of the container source file, and

create a container image history file including one or more source code assertions that the container source file is expected to include the one or more commands extracted from the container image; and

wherein to compare the one or more assertions in the data file and the definitions of the software components in the actual data of the source code, the one or more processors are configured to compare each source code assertion of the one or more source code assertions in the container image history file against one or more commands in the actual data of the container source file.

19. The computing system of claim 18 , wherein the one or more processors are configured to, when a source code assertion of the one or more source code assertions at a given entry in the container image history file does not match a command at a corresponding entry in the actual data of the container source file:

determine that the corresponding step in the actual data of the container source file comprises a reference to a second container image;

access the second container image;

create a second container image history file including one or more commands executed to build the second container image; and

compare the source code assertion at the given entry in the container image history file against the one or more commands in the second container image history file of the second container image.

20. A computer-readable storage medium comprising instructions that, when executed, cause one or more processors to:

create a data file based on information extracted from at least one build artifact resulting from a software build process of source code, wherein the data file includes one or more assertions with respect to one or more definitions of software components expected to be included in the source code in order to produce the at least one build artifact;

compare the one or more assertions in the data file and definitions of software components in the actual data of the source code;

identify, based on the comparison, whether at least one discrepancy occurs between the one or more assertions in the data file and the actual data of the source code, wherein identifying that the at least one discrepancy occurs comprises identifying at least one assertion created from the at least one build artifact that is not included in the actual data of the source code such that the at least one build artifact is not producible by the actual data of the source code; and

in response to identifying the at least one discrepancy, generate a report indicating the at least one discrepancy between the at least one build artifact and the source code.

Assignments (2)
REQUEST FOR ADDRESS CHANGE Recorded Dec 5, 2025
From: WELLS FARGO BANK, N.A.
To: WELLS FARGO BANK, N.A.
Reel/Frame 073895/0426 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 10, 2022
From: LONG, JEREMY W.
To: WELLS FARGO BANK, N.A.
Reel/Frame 059228/0358 →
Continuity (1)
Provisional Application 63147646 · Feb 9, 2021
References Cited (48)
US 6536037B1 · Guheen · 2003 [cited by examiner]
US 8407800B2 · Schloegel et al. · 2013 [cited by applicant]
US 8429628B2 · Spurlin · 2013 [cited by applicant]
US 8949788B2 · Bonnet · 2015 [cited by applicant]
US 9063672B2 · Madl et al. · 2015 [cited by applicant]
US 10691810B1 · Freitag et al. · 2020 [cited by applicant]
US 11055077B2 · Krishnamoorthy · 2021 [cited by examiner]
US 11055418B2 · McDuff · 2021 [cited by examiner]
US 11151024B2 · Hwang et al. · 2021 [cited by applicant]
US 11494493B1 · Baird · 2022 [cited by examiner]
US 11640282B2 · Giltner · 2023 [cited by examiner]
US 20060110043A1 · Reissman · 2006 [cited by examiner]
US 20100246827A1 · Lauter et al. · 2010 [cited by applicant]
US 20140282403A1 · Frenkiel · 2014 [cited by examiner]
US 20160179502A1 · Cawley · 2016 [cited by applicant]
US 20160321089A1 · Sandlin et al. · 2016 [cited by applicant]
US 20170169229A1 · Brucker et al. · 2017 [cited by applicant]
US 20190361680A1 · Sanchez et al. · 2019 [cited by applicant]
US 20200004519A1 · Ryall · 2020 [cited by examiner]
US 20200125344A1 · Varghese et al. · 2020 [cited by applicant]
US 20210042217A1 · Hwang et al. · 2021 [cited by applicant]
US 20210334363A1 · Kim · 2021 [cited by applicant]
US 20220058011A1 · Scheinkman · 2022 [cited by examiner]
US 20220164171A1 · Johnson · 2022 [cited by examiner]
US 20220300280A1 · Rafey · 2022 [cited by applicant]
US 20220398308A1 · Zerah · 2022 [cited by examiner]
CN 103559125A · 2014 [cited by applicant]
CN 110263539A · 2019 [cited by applicant]
JP 2013152559A · 2013 [cited by applicant]
JP 2019220110A · 2019 [cited by applicant]
WO 2020240830A1 · 2020 [cited by applicant]
“Binary Authorization for Borg: how Google verifies code provenance and implements code identity”, Google Cloud, accessed on Feb. 8, 2022, Retrieved from: https://cloud.google.com/security/binary-authorization-for-borg/… [cited by applicant]
“Chapter 4. The class File Format”, Oracle, accessed on Feb. 8, 2022, Retrieved from: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html. [cited by applicant]
“Image Layer Details—owasp/dependency-check:6.2.2”, Dockerhub, Accessed on Feb. 8, 2022, Retrieved from: https://hub.docker.com/layers/owasp/dependency-check/6.2.2/images/sha256-4c02a0955cc085b10d6360063eeb78486bfc19782… [cited by applicant]
“JAR File Specification”, Oracle, accessed on Feb. 8, 2022, Retrieved from: https://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html, 14 pp. [cited by applicant]
“Linux Foundation Announces Free sigstore Signing Service to Confirm Origin and Authenticity of Software”, Linux, Mar. 9, 2021, 3 pp. [cited by applicant]
“Sample application”, Docker Doc, Accessed on Feb. 8, 2022, Retrieved from: https://docs.docker.com/get-started/02_our_app/, 4 pp. [cited by applicant]
“Sunspot: An Implant in the Build Process”, CrowdStrike Intelligence Team, Jan. 11, 2021, 8 pp. [cited by applicant]
Long, “DependencyCheck/Dockerfile”, Github, Accessed on Feb. 8, 2022, Retrieved from: https://github.com/jeremylong/DependencyCheck/blob/v6.2.2/Dockerfile, 2 pp. [cited by applicant]
Ramakrishna, “New Findings From Our Investigation of Sunburst”, Jan. 11, 2021, 5 pp. [cited by applicant]
Thompson, “Reflections on Trusting Trust”, Turing Award Lecture, vol. 27, No. 8, Aug. 1984, 3 pp. [cited by applicant]
Wheeler, “. David A. Wheeler's Page on Fully Countering Trusting Trust through Diverse Double-Compiling (DDC)—Countering Trojan Horse attacks on Compilers”, accessed on Jan. 25, 2021, retrieved from https://dwheeler.com… [cited by applicant]
Bhardwaj et al., “Reverse Engineering—A Method for Analyzing Malicious Code Behavior”, 2021 International Conference on Advances in Computing, Communication, and Control, Dec. 3, 2021, 5 pp., URL: https://ieeexplore.iee… [cited by applicant]
Marklodato, “in-toto/attestation”, GitHub, 8 pp., Retrieved from the Internet on Oct. 17, 2022 from URL: https://github.com/in-toto/attestation/tree/v0.1.0#readme. [cited by applicant]
Shi et al., “Reverse Engineering of Design Patterns from Java Source Code”, 21st IEEE/ACM International Conference on Automated Software Engineering, IEEE, Sep. 18, 2006, pp. 123-134, URL: https://ieeexplore.ieee.org/ab… [cited by applicant]
Notice of Allowance from U.S. Appl. No. 18/055,684 dated Sep. 11, 2024, 9 pp. [cited by applicant]
Corrected Notice of Allowance from U.S. Appl. No. 18/055,684 dated Dec. 20, 2024, 5 pp. [cited by applicant]
Notice of Allowance from U.S. Appl. No. 18/055,684 dated Dec. 18, 2024, 8 pp. [cited by applicant]
Cited By (3)
US 12,530,452 US 12,596,537 US 12,596,622