{"id":393,"date":"2022-07-12T06:49:41","date_gmt":"2022-07-12T13:49:41","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/?p=393"},"modified":"2022-07-18T13:57:21","modified_gmt":"2022-07-18T20:57:21","slug":"microsoft-open-sources-software-bill-of-materials-sbom-generation-tool","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/microsoft-open-sources-software-bill-of-materials-sbom-generation-tool\/","title":{"rendered":"Microsoft open sources its software bill of materials (SBOM) generation tool"},"content":{"rendered":"<p>We are excited and proud to open source our software bill of materials (SBOM) generation tool. A key requirement of the <a href=\"https:\/\/www.whitehouse.gov\/briefing-room\/presidential-actions\/2021\/05\/12\/executive-order-on-improving-the-nations-cybersecurity\/\">Executive Order on Improving the Nation&#8217;s Cybersecurity<\/a>, SBOMs are lists of ingredients that make up software components, providing software transparency so organizations have insight into their supply chain dependencies.<\/p>\n<p>Our SBOM tool is a general purpose, enterprise-proven, build-time SBOM generator. It works across platforms including Windows, Linux, and Mac, and uses the standard <a href=\"https:\/\/spdx.dev\/\">Software Package Data Exchange (SPDX)<\/a> format. (To see the previous announcement about our SBOM tool, please read <a href=\"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/generating-software-bills-of-materials-sboms-with-spdx-at-microsoft\/\">Generating Software Bills of Materials (SBOMs) with SPDX at Microsoft<\/a>.)<\/p>\n<p>It can be easily integrated into and auto-detects NPM, NuGet, PyPI, CocoaPods, Maven, Golang, Rust Crates, RubyGems, Linux packages within containers, Gradle, Ivy, GitHub public repositories, and more. As we add more detectors to Component Detection, it will improve our SBOM tool as well.<\/p>\n<p><a href=\"https:\/\/github.com\/microsoft\/sbom-tool\/blob\/main\/samples\/manifest.spdx.json\">SBOM<\/a>s generated by our tool contain four main sections based on the SPDX specification:<\/p>\n<ol>\n<li><strong>Document creation information: <\/strong>General information about the SBOM document, such as software name, SPDX license, SPDX version, who created the document, when it was created, etc.<\/li>\n<li><strong>Files section: <\/strong>A list of files that compose the piece of software. Each file has some properties including the hashes of its content (SHA-1, SHA-256).<\/li>\n<li><strong>Packages section: <\/strong>A list of packages used when building the software. Each package has additional properties such as name, version, supplier, hashes (SHA-1, SHA-256) and a Package URL (<a href=\"https:\/\/github.com\/package-url\/purl-spec\">purl<\/a>) software identifier.<\/li>\n<li><strong>Relationships section: <\/strong>A list of relationships between the different elements of the SBOM, such as files and packages.<\/li>\n<\/ol>\n<p>It can also reference other SBOM documents for capturing a full dependency tree. This is an important capability for including dependency references to SBOM documents, or SBOM documents from predecessor builds that are consumed into a subsequent build, shown below.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-content\/uploads\/sites\/72\/2022\/07\/SALUS-layered-build-process.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-394\" src=\"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-content\/uploads\/sites\/72\/2022\/07\/SALUS-layered-build-process.png\" alt=\"Image SALUS layered build process\" width=\"977\" height=\"300\" srcset=\"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-content\/uploads\/sites\/72\/2022\/07\/SALUS-layered-build-process.png 977w, https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-content\/uploads\/sites\/72\/2022\/07\/SALUS-layered-build-process-300x92.png 300w, https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-content\/uploads\/sites\/72\/2022\/07\/SALUS-layered-build-process-768x236.png 768w\" sizes=\"(max-width: 977px) 100vw, 977px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>The resulting SBOM document references are added to the <em>Document Creation Information<\/em> section, with an example shown below.<\/p>\n<pre>\"externalDocumentRefs\": [\r\n\r\n{\r\n\r\n\"externalDocumentId\": \"DocumentRef-Demo-861-71558f43fca51a285338834fb9b3c7c14a78cd77\",\r\n\r\n\"spdxDocument\": \"https:\/\/sbom.microsoft\/1:VF6zo7ndBEakT2mCbPwGug:j5h1PLm-TkijVnfDJD_CCA\/7:861\/MMerAxYfQkOTN4dWqqlV-A\",\r\n\r\n\"checksum\": {\r\n\r\n\"algorithm\": \"SHA1\",\r\n\r\n\"checksumValue\": \"71558f43fca51a285338834fb9b3c7c14a78cd77\u201c\r\n\r\n}\r\n\r\n},<\/pre>\n<p>Open sourcing our SBOM tool is an important step towards fostering collaboration and innovation within our community, and we believe this will enable more organizations to generate SBOMs as well as contribute to its development.<\/p>\n<p>Ready to get started? Please read the <a href=\"https:\/\/github.com\/microsoft\/sbom-tool#Contributing\">guidelines<\/a> to learn more about contributing and follow these <a href=\"https:\/\/github.com\/microsoft\/sbom-tool#installation\">instructions<\/a> to generate an SBOM. If you want to share any feedback and\/or report any bugs, please feel free to do so via <a href=\"https:\/\/github.com\/microsoft\/sbom-tool\/discussions\">discussions<\/a> and <a href=\"https:\/\/github.com\/microsoft\/sbom-tool\/issues\">issues<\/a>. Your feedback will help shape the future of our SBOM tool and ensure supply chain security for all. If you find the tool useful, we\u2019d love a star on the <a href=\"https:\/\/github.com\/microsoft\/sbom-tool\">microsoft\/sbom-tool GitHub repo<\/a>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are excited and proud to open source our software bill of materials (SBOM) generation tool. A key requirement of the Executive Order on Improving the Nation&#8217;s Cybersecurity, SBOMs are lists of ingredients that make up software components, providing software transparency so organizations have insight into their supply chain dependencies. Our SBOM tool is a [&hellip;]<\/p>\n","protected":false},"author":95563,"featured_media":170,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[4,13,15,12,2,14],"class_list":["post-393","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering-at-microsoft","tag-1es","tag-devsecops","tag-sbom","tag-secure-supply-chain","tag-security","tag-software-bill-of-materials"],"acf":[],"blog_post_summary":"<p>We are excited and proud to open source our software bill of materials (SBOM) generation tool. A key requirement of the Executive Order on Improving the Nation&#8217;s Cybersecurity, SBOMs are lists of ingredients that make up software components, providing software transparency so organizations have insight into their supply chain dependencies. Our SBOM tool is a [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/posts\/393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/users\/95563"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/comments?post=393"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/posts\/393\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/media\/170"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/media?parent=393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/categories?post=393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/engineering-at-microsoft\/wp-json\/wp\/v2\/tags?post=393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}