Secretless Security

Protection of Secretless Broker credential resolution is based on industry-standard practices of keeping the data for the minimal duration needed and hardening of the execution environment. This is ensured by various strategies listed below.

Hardened container

Limited user

Our Docker container not only runs within an isolated Docker environment but it also runs within a limited-user context. This ensures a layered system of proven SECCOMP kernel security on top of Linux standard user privilege context limitations.

Minimal container runtime

Our container is also based on Alpine Linux, which has an extremely limited amount of built-in tools making it much harder for malware to operate in such an environment. Combined with the limited-user scope, the processes within this environment are unable to add additional packages to the container without circumventing Linux "ring" isolation.

Minimal credential retention

One of the most significant security risks caused by an application occurs when credentials persist longer than they are needed. Secretless Broker centralizes the credential management functionality so that the application no longer has to manage secret values and in doing so, ensures that credentials are stored in memory for the minimal amount of time needed to open a new connection. Each Service Connector is responsible for its own credential lifecycle.

Following are summaries of the credential lifecycles for each of the built-in Service Connectors:

Service Connector

Description

http Service Connector fetches the credentials on each request and they are stored only for the duration of an individual connection authentication, after which they are zeroized. 
mysql Credentials are loaded for each connection and then garbage-collected after connecting to the backend.
pg Credentials are loaded for each connection and then garbage-collected after connecting to the backend.
ssh Loaded on each new ssh connection and only stored for the duration of the individual connection.
ssh-agent Loaded at Service Connector instantiation time.

Hardened networking

You can use both localhost listening address and/or socket files to exchange information between the applications and the Secretless Broker, which provides a communication channel that does not leave the host/pod. By having an isolated communication channel between them, you can limit access to the Secretless Broker in a granular way. Additionally, more security layers can be added to this system (e.g., encrypted overlay network or Kubernetes pod collocation) for improvement. Since these additional improvements are specific to individual infrastructure deployments, they are currently outside the scope of this document.

Regardless of the connection strategy, the operating system provides security between the client and Secretless. It is very important to configure the OS properly so that unauthorized processes and clients can't connect to Secretless:

  • With Unix domain sockets, operating system file permissions should be used to protect the socket.

  • With TCP connections, Secretless should be configured to listen only on localhost.

Plugin checksum verification

We provide an optional SHA256SUM text file of plugin library hashes to verify that there are not any unexpected or modified plugins that the broker will try to load.

Plugin checksum verification eliminates:

  • Plugin library code injections

  • Drive-by plugin content modifications

  • Addition of malicious plugins

  • Plugin corruption

  • Modification of plugins when they are mounted from other locations

Future work

We continue to investigate ways to make Secretless Broker even more secure. Please check the changelog and this page for updates on additional safeguards as we implement them.