Home
Softono
i

in-toto

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
2

Software by in-toto

in-toto
Open Source

in-toto

# in-toto ![Build](https://github.com/in-toto/in-toto/workflows/Run%20in-toto%20tests%20and%20linter/badge.svg) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1523/badge)](https://bestpractices.coreinfrastructure.org/projects/1523) [![Documentation Status](https://readthedocs.org/projects/in-toto/badge/?version=latest)](https://in-toto.readthedocs.io/en/latest/?badge=latest) in-toto provides a framework to protect the integrity of the software supply chain. It does so by verifying that each task in the chain is carried out as planned, by authorized personnel only, and that the product is not tampered with in transit. in-toto requires a **project owner** to create a **layout**. A layout lists the sequence of **steps** of the software supply chain, and the **functionaries** authorized to perform these steps. When a functionary performs a step in-toto gathers information about the used command and the related files and stores it in a **link** metadata file. As a consequence link files provide the required evidence to establish a continuous chain that can be validated against the steps defined in the layout. The layout, signed by the project owners, together with the links, signed by the designated functionaries, are released as part of the final product, and can be validated manually or via automated tooling in, e.g. a package manager. ## Getting Started ### Installation in-toto is available on [PyPI](https://pypi.org/project/in-toto/) and can be installed via [`pip`](https://pypi.org/project/pip/). See [in-toto.readthedocs.io](https://in-toto.readthedocs.io/en/latest/installing.html) to learn about system dependencies and installation alternatives and recommendations. ```shell pip install in-toto ``` ### Create layout, run supply chain steps and verify final product #### Layout The in-toto software supply chain layout consists of the following parts: - **expiration date** - **readme** (an optional description of the supply chain) - **functionary keys** (public keys, used to verify link metadata signatures) - **signatures** (one or more layout signatures created with the project owner key(s)) - **software supply chain steps** correspond to steps carried out by a functionary as part of the software supply chain. The steps defined in the layout list the functionaries who are authorized to carry out the step (by key id). Steps require a unique name to associate them (upon verification) with link metadata that is created when a functionary carries out the step using the `in-toto` tools. Additionally, steps must have material and product rules which define the files a step is supposed to operate on. Material and product rules are described in the section below. - **inspections** define commands to be run during the verification process and can also list material and product rules. Take a look at the [demo layout creation example](https://in-toto.readthedocs.io/en/latest/layout-creation-example.html) for further information on how to create an in-toto layout. #### Artifact Rules A software supply chain usually operates on a set of files, such as source code, executables, packages, or the like. in-toto calls these files artifacts. A material is an artifact that will be used when a step or inspection is carried out. Likewise, a product is an artifact that results from carrying out a step. The in-toto layout provides a simple rule language to authorize or enforce the artifacts of a step and to chain them together. This adds the following guarantees for any given step or inspection: - Only artifacts **authorized** by the project owner are created, modified or deleted, - each defined creation, modification or deletion is **enforced**, and also - restricted to the scope of its definition, which **chains** subsequent steps and inspections together. Note that it is up to you to properly secure your supply chain, by authorizing, enforcing and chaining materials and products using any and usually multiple of the following rules: - `CREATE <pattern>` - `DELETE <pattern>` - `MODIFY <pattern>` - `ALLOW <pattern>` - `DISALLOW <pattern>` - `REQUIRE <file>` - `MATCH <pattern> [IN <source-path-prefix>] WITH (MATERIALS|PRODUCTS) [IN <destination-path-prefix>] FROM <step>` *Rule arguments specified as `<pattern>` allow for Unix shell-style wildcards as implemented by Python's [`fnmatch`](https://docs.python.org/3/library/fnmatch.html).* in-toto's Artifact Rules, by default, allow artifacts to exist if they are not explicitly disallowed. As such, a `DISALLOW *` invocation is recommended as the final rule for most step definitions. To learn more about the different rule types, their guarantees and how they are applied, take a look at the [Artifact Rules](https://github.com/in-toto/docs/blob/master/in-toto-spec.md#433-artifact-rules) section of the in-toto specification. #### Carrying out software supply chain steps ##### in-toto-run `in-toto-run` is used to execute a step in the software supply chain. This can be anything relevant to the project such as tagging a release with `git`, running a test, or building a binary. The relevant step name and command are passed as arguments, along with materials, which are files required for that step's command to execute, and products which are files expected as a result of the execution of that command. These, and other relevant details pertaining to the step are stored in a link file, which is signed using the functionary's key. If materials are not passed to the command, the link file generated just doesn't record them. Similarly, if the execution of a command via `in-toto-run` doesn't result in any products, they're not recorded in the link file. Any files that are modified or used in any way during the execution of the command are not recorded in the link file unless explicitly passed as artifacts. Conversely, any materials or products passed to the command are recorded in the link file even if they're not part of the execution of the command. See [this simple usage example from the demo application for more details](https://github.com/in-toto/demo). For a detailed list of all the command line arguments, run `in-toto-run --help` or look at the [online documentation](https://in-toto.readthedocs.io/en/latest/command-line-tools/in-toto-run.html). ##### in-toto-record `in-toto-record` works similar to `in-toto-run` but can be used for multi-part software supply chain steps, i.e. steps that are not carried out by a single command. Use `in-toto-record start ...` to create a preliminary link file that only records the *materials*, then run the commands of that step or edit files manually and finally use `in-toto-record stop ...` to record the *products* and generate the actual link metadata file. For a detailed list of all command line arguments and their usage, run `in-toto-record start --help` or `in-toto-record stop --help`, or look at the [online documentation](https://in-toto.readthedocs.io/en/latest/command-line-tools/in-toto-record.html). #### Release final product In order to verify the final product with in-toto, the verifier must have access to the layout, the `*.link` files, and the project owner's public key(s). #### Verification Use `in-toto-verify` on the final product to verify that - the layout was signed with the project owner's private key(s), - has not expired, - each step was performed and signed by the authorized functionary, - the functionaries used the commands, they were supposed to use, - materials and products of each step were in place as defined by the rules, and - run the defined inspections For a detailed list of all command line arguments and their usage, run `in-toto-verify --help` or look at the [online documentation](https://in-toto.readthedocs.io/en/latest/command-line-tools/in-toto-verify.html). #### Signatures `in-toto-sign` is a metadata signature helper tool to add, replace, and verify signatures within in-toto Link or Layout metadata, with options to: - replace (default) or add signature(s), with layout metadata able to be signed by multiple keys at once while link metadata can only be signed by one key at a time - write signed metadata to a specified path (if no output path is specified, layout metadata is written to the path of the input file while link metadata is written to `<name>.<keyid prefix>.link`) - verify signatures This tool serves well to re-sign test and demo data. For example, it can be used if metadata formats or signing routines change. For a detailed list of all command line arguments and their usage, run `in-toto-sign --help` or look at the [online documentation](https://in-toto.readthedocs.io/en/latest/command-line-tools/in-toto-sign.html). ## in-toto demo You can try in-toto by running the [demo application](https://github.com/in-toto/demo). The demo basically outlines three users viz., Alice (project owner), Bob (functionary) and Carl (functionary) and how in-toto helps to specify a project layout and verify that the layout has been followed in a correct manner. ## Specification You can read more about how in-toto works by taking a look at the [specification](https://github.com/in-toto/docs/blob/master/in-toto-spec.md). ## Security Issues and Bugs See [SECURITY.md](SECURITY.md). ## Governance and Contributing For information about in-toto's governance and contributing guidelines, see [GOVERNANCE.md](GOVERNANCE.md) and [CONTRIBUTING.md](doc/source/CONTRIBUTING.md). ## Acknowledgments This project is managed by Prof. Santiago Torres-Arias at Purdue University. It is worked on by many folks in academia and industry, including members of the [Secure Systems Lab](https://ssl.engineering.nyu.edu/) at NYU and the [NJIT Cybersecurity Research Center](https://centers.njit.edu/cybersecurity). This research was supported by the Defense Advanced Research Projects Agency (DARPA), the Air Force Research Laboratory (AFRL), and the US National Science Foundation (NSF). Any opinions, findings, and conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of DARPA, AFRL, and NSF. The United States Government is authorized to reproduce and distribute reprints notwithstanding any copyright notice herein.

Security Compliance & Governance
1K Github Stars
witness
Open Source

witness

# Witness [![Go Reference](https://pkg.go.dev/badge/github.com/in-toto/witness.svg)](https://pkg.go.dev/github.com/in-toto/witness) [![Go Report Card](https://goreportcard.com/badge/github.com/in-toto/witness)](https://goreportcard.com/report/github.com/in-toto/witness) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8164/badge)](https://www.bestpractices.dev/projects/8164) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/in-toto/witness/badge)](https://securityscorecards.dev/viewer/?uri=github.com/in-toto/witness) [![FOSSA Status](https://app.fossa.com/api/projects/custom%2B41709%2Fgithub.com%2Fin-toto%2Fwitness.svg?type=shield&issueType=license)](https://app.fossa.com/projects/custom%2B41709%2Fgithub.com%2Fin-toto%2Fwitness?ref=badge_shield&issueType=license) Witness originated at **[TestifySec](https://www.testifysec.com)** and was later donated to the CNCF in-toto ecosystem. It is now maintained by the open community. <center> **[DOCS](https://witness.dev) • [CONTRIBUTING](/CONTRIBUTING.md) • [LICENSE](https://github.com/in-toto/witness/blob/main/LICENSE)** `bash <(curl -s https://raw.githubusercontent.com/in-toto/witness/main/install-witness.sh)` </center> <img src="https://raw.githubusercontent.com/in-toto/witness/main/docs/assets/logo.png" align="right" alt="Witness project logo" width="200"></img> ### What does Witness do? ✏️ **Attests** - <span class="tip-text">Witness is a dynamic CLI tool that integrates into pipelines and infrastructure to create an audit trail for your software's entire journey through the software development lifecycle (SDLC) using the in-toto specification.</span> **🧐 Verifies** - <span class="tip-text">Witness also features its own policy engine with embedded support for OPA Rego, so you can ensure that your software was handled safely from source to deployment.</span> ### What can you do with Witness? - Verify how your software was produced and what tools were used - Ensure that each step of the supply chain was completed by authorized users and machines - Detect potential tampering or malicious activity - Distribute attestations and policy across air gaps ### Key Features - Integrations with GitLab, GitHub, AWS, and GCP. - Designed to run in both containerized and non-containerized environments **without** elevated privileges. - Implements the in-toto specification (including ITE-5, ITE-6 and ITE-7) - An embedded OPA Rego policy engine for policy enforcement - Keyless signing with Sigstore and SPIFFE/SPIRE - Integration with RFC3161 compatible timestamp authorities - Process tracing and process tampering prevention (Experimental) - Attestation storage with [Archivista](https://github.com/in-toto/archivista) ### Demo ![Demo][demo] ## Quick Start ### Installation To install Witness, all you will need is the Witness binary. You can download this from the [releases](https://github.com/in-toto/witness/releases) page or use the install script to download the latest release: ``` bash <(curl -s https://raw.githubusercontent.com/in-toto/witness/main/install-witness.sh) ``` If you want install it manually and verify its integrity follow the instructions in the [INSTALL.md](./INSTALL.md). ### Tutorials Check out our Tutorials: - [Getting Started](docs/tutorials/getting-started.md) - [Verify an Artifact Policy](docs/tutorials/artifact-policy.md) - [Using Fulcio as a Key Provider](docs/tutorials/artifact-policy.md) ## Media Check out some of the content out in the wild that gives more detail on how the project can be used. ##### [Blog/Video - Generating and Verifying Attestations With Witness](https://www.testifysec.com/blog/attestations-with-witness/) ##### [Blog - What is a supply chain attestation, and why do I need it?](https://www.testifysec.com/blog/what-is-a-supply-chain-attestation/) ##### [Talk - Securing the Software Supply Chain with the in-toto & SPIRE projects](https://www.youtube.com/watch?v=4lFbdkB62QI) ##### [Talk - Securing the Software Supply Chain with SBOM and Attestation](https://www.youtube.com/watch?v=wX6aTZfpJv0) ## Get Involved with the Community! Join the [CNCF Slack](https://slack.cncf.io/) and join the `#in-toto-witness` channel. You might also be interested in joining the `#in-toto` channel for more general in-toto discussion, as well as the `#in-toto-archivista` channel for discussion regarding the [Archivista](https://github.com/in-toto/archivista) project. ## Community & Commercial Support - **Community channels** – Slack, GitHub Issues, and bi-weekly office hours are free and open to all contributors. - **Commercial platform & SLAs** – [TestifySec](https://www.testifysec.com) offers managed Witness/Archivista hosting, and 24 × 7 support. <sup>(These commercial services are provided by TestifySec and are not part of the CNCF sponsorship of Witness.)</sup> [demo]: https://raw.githubusercontent.com/in-toto/witness/main/docs/assets/demo.gif "Demo"

Security Compliance & Governance
534 Github Stars