Giter Site home page Giter Site logo

enhancements's Introduction

Keylime

Slack CNCF chat Docs Status

Keylime

Keylime is an open-source scalable trust system harnessing TPM Technology.

Keylime provides an end-to-end solution for bootstrapping hardware rooted cryptographic trust for remote machines, the provisioning of encrypted payloads, and run-time system integrity monitoring. It also provides a flexible framework for the remote attestation of any given PCR (Platform Configuration Register). Users can create their own customized actions that will trigger when a machine fails its attested measurements.

Keylime's mission is to make TPM Technology easily accessible to developers and users alike, without the need for a deep understanding of the lower levels of a TPM's operations. Amongst many scenarios, it well suited to tenants who need to remotely attest machines not under their own full control (such as a consumer of hybrid cloud or a remote Edge / IoT device in an insecure physical tamper prone location.)

Keylime can be driven with a CLI application and a set of RESTful APIs.

Keylime consists of three main components; The Verifier, Registrar and the Agent.

  • The Verifier continuously verifies the integrity state of the machine that the agent is running on.

  • The Registrar is a database of all agents registered with Keylime and hosts the public keys of the TPM vendors.

  • The Agent is deployed to the remote machine that is to be measured or provisioned with secrets stored within an encrypted payload released once trust is established.

Rust based Keylime Agent

The verifier, registrar, and agent are all developed in Python and situated in this repository keylime. The agent was ported to the Rust programming language. The code can be found in the rust-keylime repository.

The decision was made to port the agent to Rust, as rust is a low-level performant systems language designed with security as a central tenet, by means of the rust compiler's ownership model.

Starting with the 0.1.0 release of the Rust based Keylime agent, this agent is now the official agent.

IMPORTANT: The Python version is deprecated and will be removed with the next major version (7.0.0)!

TPM Support

Keylime supports TPM version 2.0.

Keylime can be used with a hardware TPM, or a software TPM emulator for development, testing, or demonstration purposes. However, DO NOT USE Keylime in production with a TPM emulator! A software TPM emulator does not provide a hardware root of trust and dramatically lowers the security benefits of using Keylime.

A hardware TPM should always be used when real secrets and trust is required.

Table of Contents

Installation

To install Keylime refer to the instructions found in the documentation.

Usage

Configuring Keylime

Keylime puts its configuration in /etc/keylime/*.conf or /usr/etc/keylime/*.conf. It will also take an alternate location for the config in the environment var keylime_{VERIFIER,REGISTRAR,TENANT,CA,LOGGING}_CONFIG.

Those files are documented with comments and should be self-explanatory in most cases.

Running Keylime

Keylime has three major component services that run: the registrar, verifier, and the agent:

  • The registrar is a simple HTTPS service that accepts TPM public keys. It then presents an interface to obtain these public keys for checking quotes.

  • The verifier is the most important component in Keylime. It does initial and periodic checks of system integrity and supports bootstrapping a cryptographic key securely with the agent. The verifier uses mutual TLS for its control interface.

    By default, the verifier will create appropriate TLS certificates for itself in /var/lib/keylime/cv_ca/. The registrar and tenant will use this as well. If you use the generated TLS certificates then all the processes need to run as root to allow reading of private key files in /var/lib/keylime/.

  • The agent is the target of bootstrapping and integrity measurements. It puts its stuff into /var/lib/keylime/.

Provisioning

To kick everything off you need to tell Keylime to provision a machine. This can be done with the Keylime tenant.

Provisioning with keylime_tenant

The keylime_tenant utility can be used to provision your agent.

As an example, the following command tells Keylime to provision a new agent at 127.0.0.1 with UUID d432fbb3-d2f1-4a97-9ef7-75bd81c00000 and talk to a verifier at 127.0.0.1. Finally, it will encrypt a file called filetosend and send it to the agent allowing it to decrypt it only if the configured TPM policy is satisfied:

keylime_tenant -c add -t 127.0.0.1 -v 127.0.0.1 -u D432fbb3-d2f1-4a97-9ef7-75bd81c00000 -f filetosend

To stop Keylime from requesting attestations:

keylime_tenant -c delete -t 127.0.0.1 -u d432fbb3-d2f1-4a97-9ef7-75bd81c00000

For additional advanced options for the tenant utility run:

keylime_tenant -h

Documentation on how to create runtime and measured boot policies can be found in the Keylime User Guide.

Systemd service support

The directory services/ includes systemd service files for the verifier, agent and registrar.

You can install the services with the following command:

sudo ./services/installer.sh

Once installed, you can run and inspect the services keylime_verifier and keylime_registrar via systemctl. The Rust agent repository also contains a systemd service file for the agent.

Request a feature

Keylime feature requests are tracked as enhancements in the enhancements repository

The enhancement process has been implemented to provide a way to review and assess the impact(s) of significant changes to Keylime.

Security Vulnerability Management Policy

If you have found a security vulnerability in Keylime and would like to report, first of all: thank you.

Please contact us directly at [email protected] for any bug that might impact the security of this project. Do not use a Github issue to report any potential security bugs.

Project Meetings

We meet on the fourth Wednesday each month @ 15:30 GMT to 16:30. Anyone is welcome to join the meeting.

The meeting is normally announced on CNCF chat (Slack)

Meeting agenda are hosted and archived in the meetings repo as GitHub issues.

Contributing: First Timers Support

We welcome new contributors to Keylime of any form, including those of you who maybe new to working in an open source project.

So if you are new to open source development, don't worry, there are a myriad of ways you can get involved in our open source project. As a start, try exploring issues with good first issue label. We understand that the process of creating a Pull Request (PR) can be a barrier for new contributors. These issues are reserved for new contributors like you. If you need any help or advice in making the PR, feel free to jump into our chat room and ask for help there.

Your contribution is our gift to make our project even more robust. Check out CONTRIBUTING.md to find out more about how to contribute to our project.

Keylime uses Semantic Versioning. It is recommended you also read the RELEASE.md file to learn more about it and familiarise yourself with simple of examples of using it.

Testing

Please, see TESTING.md for details.

Additional Reading

Errata from the ACSAC Paper

We discovered a typo in Figure 5 of the published ACSAC paper. The final interaction between the Tenant and Cloud Verifier showed an HMAC of the node's ID using the key K_e. This should be using K_b. The paper in this repository and the ACSAC presentation have been updated to correct this typo.

The software that runs on the system with the TPM is now called the Keylime agent rather than the node. We have made this change in the documentation and code. The ACSAC paper will remain as it was published using node.

Disclaimer

DISTRIBUTION STATEMENT A. Approved for public release: distribution unlimited.

This material is based upon work supported by the Assistant Secretary of Defense for Research and Engineering under Air Force Contract No. FA8721-05-C-0002 and/or FA8702-15-D-0001. Any opinions, findings, conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the Assistant Secretary of Defense for Research and Engineering.

Keylime's license was changed from BSD Clause-2 to Apache 2.0. The original BSD Clause-2 licensed code can be found on the MIT GitHub organization.

enhancements's People

Contributors

ansasaki avatar axelsimon avatar gustavobbrand avatar kaifeng avatar kkaarreell avatar lukehinds avatar maugustosilva avatar mbestavros avatar mpeters avatar stefanberger avatar stringlytyped avatar ths-on avatar ueno avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

enhancements's Issues

[Admin] Improve README

not an enhancement

Suggesting a small rewrite of the README with the intent to make some of the language simpler, to help newcomers.

PR incoming.

TEE boot attestation

TEE boot attestation

Add boot attestation for confidential virtual machines running under CPU Trusted Execution Environment (TEE) hardware encryption.

  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR): #108
  • Primary contact (assignee): @tylerfanelli
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y): TBD
    • Beta release target (x.y): TBD
    • Stable release target (x.y): TBD

Please to keep this description up to date.

Add last successful attestation timestamp to verifier API

Enhancement Description

  • One-line enhancement description (can be used as a release note): Add last successful attestation timestamp to verifier API, because currently there is no easy way to check when a agent was last attested.
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee):
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Agent-Driven Attestation

Enhancement Description

Enable an alternative operational model in which attestations are sent on an agent-driven basis instead of being requested by the verifier

  • Keylime Enhancement Proposal: #104
  • Primary contact (assignee): @stringlytyped
  • Enhancement target (which target equals to which milestone):
    • Alpha release target: TBD
    • Beta release target: TBD
    • Stable release target: TBD

Please to keep this description up to date.

Revocation severity levels and context

Enhancement Description

  • One-line enhancement description (can be used as a release note): Adding support for severity levels and (user provided) context to revocation events.
  • Keylime Enhancement Proposal: #47
  • Primary contact (assignee): @THS-on
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Expand agent_uuid to have "kubernetes" as an option

Enhancement Description

Allow agent_uuid to have a value of "kubernetes" and to retrieve the node name from K8s APIs

  • Keylime Enhancement Proposal: TBD
  • Primary contact (assignee): @mpeters
  • Enhancement target (which target equals to which milestone):
    • Alpha release target: TBD
    • Beta release target: TBD
    • Stable release target: TBD

Right now agent_uuid in the cloud_agent section of keylime.conf can be one of: generate, hash_ek, openstack or a bare string. I'm proposing a new option kubernetes that will retrieve the target node's ID from the K8s APIs and use that as the keylime agent's UUID (similar to what openstack does for openstack hosts).

Agent-local revocation notification

Enhancement Description

  • One-line enhancement description (can be used as a release note): Adding a means to send revocation notification to agents directly through the REST protocol, instead of ZeroMQ
  • Keylime Enhancement Proposal: #54
  • Primary contact (assignee): @ueno
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Remote List Retrieval

Enhancement Description

  • One-line enhancement description (can be used as a release note): Remote List Retrieval
  • Keylime Enhancement Proposal: #16
  • Primary contact (assignee): @mpeters
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Persist verifier monitoring after agent restarts

Persist verifier monitoring after agent restarts

  • Persist verifier monitoring after agent restarts
  • Keylime Enhancement Proposal: #2
  • Primary contact (assignee): @lukehinds
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

API versioning

Enhancement Description

  • One-line enhancement description (can be used as a release note):
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee):
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Keylime allowlist signing and verification improvements

Allow more modern key types for allowlist signing, and improve allowlist verification with optional transparency log integration (for example, with Sigstore).

  • Keylime Enhancement Proposal: #65
  • Primary contact (assignee): @mbestavros
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Migrate CI to github actions

Enhancement Description

  • One-line enhancement description (can be used as a release note): Port CI to github actions
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @mbestavros
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Use a dedicated user account

Enhancement Description

  • One-line enhancement description (can be used as a release note): dedicated Keylime user account
  • Keylime Enhancement Proposal: TBC
  • Primary contact (assignee): @axelsimon
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y) TBC
    • Beta release target (x.y) TBC
    • Stable release target (x.y) TBC

Utilise signature body in allow list for attached signatures.

Utilise signature body in allow list for attached signatures

  • One-line enhancement description (can be used as a release note):
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @lukehinds
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Multi Tenancy

Multi tenancy

  • One-line enhancement description (can be used as a release note): Implement a basic foundation of multi tenancy and JWT authorization.
  • Keylime Enhancement Proposal: #12
  • Primary contact (assignee): @lukehinds
  • Enhancement target (which target equals to which milestone):
    • Stable release target (6.0)

Please to keep this description up to date.

Mutli Verfifier

Enhancement Description

  • One-line enhancement description (can be used as a release note): Multi Verifier enhancement to provide full failover resilience.
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR) #13
  • Primary contact (assignee): @lukehinds
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Add option to load EK certificate from disk

Enhancement Description

  • One-line enhancement description (can be used as a release note): Add option to load EK certificate from disk because on some devices the EK certificate is not in NVRAM
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee):
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Exposing Measured Boot and IMA parsing and validation as REST API

Enhancement Description

  • One-line enhancement description (can be used as a release note): Exposing Measured Boot and IMA parsing and validation as REST API. This allows other projects to leverage the implementation already in Keylime without needing to implement it themselves.
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @THS-on
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Let the agent provide contact IP and port

Enhancement Description

  • One-line enhancement description (can be used as a release note): Let the agent provide contact IP and port to the registrar for the verifier.
  • Keylime Enhancement Proposal: #49
  • Primary contact (assignee): @THS-on
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

GSOC 2023

I would like to work upon #61 (Enhance Web UI) for GSOC, if Keylime is taking part this season.

Encapsulate IMA policies in DSSE envelopes

Enhancement Description

  • One-line enhancement description (can be used as a release note): Encapsulate IMA policies in DSSE envelopes
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @mbestavros
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Originally suggested by @lukehinds in #77. With the emergence of upstream standards for signing envelopes, it may make more sense to use those standards instead of a Keylime-specific envelope format.

SPIRE Integration

SPIRE Integration

New APIs for Keylime to allow use as an attestation source for SPIRE (or other software)

  • Keylime Enhancement Proposal: #98
  • Primary contact (assignee): @mpeters
  • Enhancement target (which target equals to which milestone): TBD

Website Improvement

Website Improvement

The website can be improved visually which would make it look and work better. I would like to work on this and re-design the website to improve it.
Also along with that work on the performance, SEO, accessibility, best practices of the website. The current one can be seen in the screenshot below:

Screenshot 2023-01-29 at 9 05 07 PM

Produced using Lighthouse.

Allowlist management

Enhancement Description

  • Allowlist management
  • Keylime Enhancement Proposal: #39
  • Primary contact (assignee): @kaifeng
  • Enhancement target (which target equals to which milestone):
    • Alpha release target TBD
    • Beta release target TBD
    • Stable release target TBD

Please to keep this description up to date.

Merge allowlist and exclude list into ima_policy

Enhancement Description

  • One-line enhancement description (can be used as a release note): Merge the allowlist and exclude list into a field called ima_policy. Add a tool for converting the legacy format into the new one.
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @THS-on
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Improve project layout

Enhancement Description

  • Improve project layout
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @kaifeng
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Github Actions

Enhancement Description

  • One-line enhancement description (can be used as a release note): Explore where github actions can be harnessed to improve development and contributor workflows as well as improve Keylime CI.
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee):
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Support additional hash metadata in IMA policies

Enhancement Description

  • One-line enhancement description (can be used as a release note): Add support for additional hash metadata in IMA policies
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @mbestavros
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Currently (and in the future, with the new IMA policy overhaul), IMA policies function as a blanket allow/exclude policy, with little nuance allowed around specific validation requirements for particular files. Allowing for additional metadata would unlock new opportunities for deeper, more thorough validation if desired.

Enhanced Scalability for Verifier and Registrar

Enhancement Description

Enhanced Scalability for Verifier and Registrar

  • Keylime Enhancement Proposal: TBD
  • Primary contact (assignee): @mpeters
  • Enhancement target (which target equals to which milestone):
    • Alpha release target: TBD
    • Beta release target: TBD
    • Stable release target: TBD

There are currently experiments ongoing that have keylime verifying 2000+ nodes at a basic level. Take the lessons learned from these experiments and design an enhanced Scalability and High-Available design for internal keylime components as well as good documentation for how to scale it. We also want to expand beyond the basic verifications being tested and perform full allow-list verification on each node. The goal is to achieve at least a reasonable level of horizontal scalability.

Simplify TLS setup and migrate config to TOML

Enhancement Description

  • One-line enhancement description (can be used as a release note): The TLS setup is simplified to two key certificate pairs (client, server) and a list of trusted CAs per component. The keylime.conf is migrated to TOML with separation of the configs for the single components and versioning for future migrations is added.
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @THS-on
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Provide the ability to perform offline, post-facto attestation on agents (nodes) long retired

Enhancement Description

  • One-line enhancement description: provide keylime with the ability to dump all the attestation information in a time series-like datastore, which could then be used to offer proof that a certain agent was at a given state, at a given date.
  • Keylime Enhancement Proposal: TBD
  • Primary contact: @maugustosilva
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (6.4.1)
    • Beta release target (6.4.X)
    • Stable release target (TBD)

Please to keep this description up to date.

Enhanced Web UI

Enhancement Description

Redesign and Improve the current web application to make it more attractive and usable for keylime operations.

Enhanced Event Logging

Enhancement Description

Improve Keylime's logging capabilities by sending structured events to a 3rd party logging tool (like ElasticSearch) to enable better observability and searchability of past events (such as new agent registration, attestation failures, etc).

Verify initial identity quote before adding agent to verifier

Enhancement Description

The tenant should verify the initial identity quote provided by the agent before adding the agent to the verifier database.

  • One-line enhancement description (can be used as a release note): Verify identity quote before adding agent to verifier
  • Keylime Enhancement Proposal: #67
  • Primary contact (assignee): @ansasaki
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Remove requirement for atomic quotes and improve validation architecture

Enhancement Description

  • One-line enhancement description (can be used as a release note): Removal the requirement for atomic quotes (PCR values must match quote hash) and improvements to the validation architecture
  • Recommended skills: Python, Interest in TPMs
  • Keylime Enhancement Proposal: follows shortly
  • Primary contact (assignee): Thore Sommer (@THS-on )

An overview of the issue and potential fixes can be found here: https://gist.github.com/THS-on/4229ba2c8c83dc5d9726a6c62c932868

This is a potential idea for GSoC: https://github.com/cncf/mentoring/blob/main/summerofcode/2022.md

Consolidate existing policy generation tools into a single tool

Enhancement Description

  • One-line enhancement description: Consolidate existing policy generation and editing tools into a single tool
  • Keylime Enhancement Proposal: #110
  • Primary contact (assignee): @ansasaki
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Optiontal paths for IMA file measurements

Enhancement Description

  • One-line enhancement description (can be used as a release note): Ignore the full path of a file when no path is present.
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @lukehinds
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

TPM 2.0 Preboot Event log support

Enhancement Description

  • TPM 2.0 Preboot Event log support
  • Description and First PR
  • Primary contact (assignee): @maugustosilva
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (TBD)
    • Beta release target (TBD)
    • Stable release target (TBD)

Please to keep this description up to date.

Multiple AllowLists per Target

Multiple AllowLists per Target

  • A one-to-many relationship between targets and allowlists instead of the current one-to-one relationship
  • Keylime Enhancement Proposal: #69
  • Primary contact (assignee): mpeters
  • Enhancement target (which target equals to which milestone): 6.4

Make Keylime FIPS 140-3 compliant

Enhancement Description

  • One-line enhancement description (can be used as a release note): Make Keylime FIPS 140-3 compliant
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee): @ansasaki
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Support push model for agent attestation

Enhancement Description

  • One-line enhancement description (can be used as a release note): Instead of polling the agent for attestation data the agent sends the data periodically to one or more verifiers
  • Keylime Enhancement Proposal: follows after initial discussion of the draft
  • Recommended skills: Python, understanding of authentication with client side TLS
  • Primary contact (assignee): Thore Sommer @THS-on
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Initial draft and longer description of the change can be found here: https://gist.github.com/THS-on/aedfd139ac1cb012745abeb0276d5e5c

Support Agents behind firewalls and proxies

Enhancement Description

  • One-line enhancement description (can be used as a release note): Support Agents behind firewalls and proxies
  • Keylime Enhancement Proposal: (link to keylime/enhancements file, if none yet, link to PR)
  • Primary contact (assignee):
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Revocation actions without Python runtime

Enhancement Description

  • One-line enhancement description (can be used as a release note): Allows revocation actions to be any
    executable or script, not only a Python module
  • Keylime Enhancement Proposal: #56
  • Primary contact (assignee): @ueno
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Swapping boot event log parsing to pure python

Replacing the boot event log parser (a call-out to the Intel TPM2 tool kit) with native python code

  • One-line enhancement description (can be used as a release note): as the title says,
  • Keylime Enhancement Proposal: #97
  • Primary contact (assignee): @galmasi,
  • Backup: @maugustosilva
  • Known-to-be-interested parties: @THS-on @mpeters
  • Enhancement target:
    • Alpha release target (6.7.x, TBD)
    • Beta release target (6.8)
    • Stable release target (7.0)

The proposal

The gist of the proposal is to replace Keylime's reliance on the tpm2_eventlog command with native Python code.

Motivation

The current implementation of measured boot attestation in Keylime has two major drawbacks: (a) its reliance on a foreign tool to parse the binary boot event log (b) a custom-built policy engine that separates "policy" from "policy instances", with the additional awkwardness that policy is written as python code compiled into keylime and cannot be changed at runtime.

The current proposal addresses problem (a) -- the dependency on a foreign tool, and the instability that results from trying to keep up with the evolution of said tool. There are dual problems of bugs in the code as well as arbitrary changes in the output format (nominally YAML). Wide variations in accepted input files and formatted output have been observed over relatively small changes in point releases of tpm2-tools.

Is this a good thing(tm) to do?

  • Advantages: bugs get fixed in the Keylime timeline, and outcome variability driven by minor version changes in external tools disappears. Post-processing output with libefivar becomes a natural built-in element rather than an afterthought (as currently implemented).
  • Disadvantage: an extra 707 lines of code (as of writing this document), including maintenance thereof.
  • Neutral: no real performance disadvantage; the typical binary event log is ~ 15KB long and takes 1ms to parse into JSON.

The mitigation argument to counteract the disadvantage of having 700 extra lines of code to maintain is that (a) the TCG and EFI documents regarding the formatting of the boot event log are crystal clear, change slowly and are easy to implement (b) there are really only two well known implementations of the event log parser, and both of them have issues (c) the event log parser code written in Python is considerably easier to read than its equivalent in C, because of the ability to use Python class hierarchies and parse binaries with struct.

A proposal for how to proceed

The current implementation of the python event log parser is here. It has its own CI with unit tests. Following an initial discussion with @mpeters and @maugustosilva I propose to

  • move the event log parser as a new project into the keylime space
  • provide separate packaging as pypy, rpm and deb package
  • use it as a dependency in the keylime project

Adding support for IDevID and IAK

Enhancement Description

  • One-line enhancement description (can be used as a release note): Leverage the IDevID and IAK keys/certificates to register each device at the registrar service and enable attestation based on the IAK instead of using an ephemeral AK (Attestation key).
  • Keylime Enhancement Proposal: #82
  • Primary contact (assignee): @gustavobbrand
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (TBD)
    • Beta release target (TBD)
    • Stable release target (TBD)

Please to keep this description up to date.

Implement workflow automation for pull requests

Enhancement Description

  • Make use of tools developed for the Enarx project around pull request review automation
  • PR
  • Primary contact (assignee): @mbestavros
  • Enhancement target (which target equals to which milestone):
    • Alpha release target (x.y)
    • Beta release target (x.y)
    • Stable release target (x.y)

Please to keep this description up to date.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.