{"id":43157,"date":"2020-10-14T00:00:00","date_gmt":"2020-10-14T00:00:00","guid":{"rendered":"https:\/\/www.trendmicro.com\/en_us\/devops\/20\/j\/what-is-docker-content-trust.html"},"modified":"2020-10-14T00:00:00","modified_gmt":"2020-10-14T00:00:00","slug":"what-is-docker-content-trust-and-how-do-you-secure-it","status":"publish","type":"post","link":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/","title":{"rendered":"What is Docker Content Trust and How do You Secure It?"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.trendmicro.com\/content\/dam\/trendmicro\/global\/en\/devops\/20\/j\/what-is-docker-content-trust-and-how-do-you-secure-it\/what-is-docker-content-trust.jpg\"><!-- [largeHeaderBanner] --><\/p>\n<p><strong>By Brandon&nbsp;Niemczyk (Security Researcher)<\/strong><\/p>\n<p>\u201cCan they be trusted?\u201d One of the primary security problems one must solve in a container-based system is validating that your images are correct and came from the correct source (or maliciously manipulated). One of our <a href=\"https:\/\/www.trendmicro.com\/vinfo\/us\/security\/research-and-analysis\/predictions\/2020\">security predictions<\/a> for 2020 discussed how malicious container images \u2014 if trusted \u2014 could have a detrimental effect on the enterprise pipeline. We have reported on attacks that involved the abuse of container images to carry out malicious activities such as <a href=\"https:\/\/www.trendmicro.com\/vinfo\/us\/security\/news\/virtualization-and-cloud\/malicious-docker-hub-container-images-cryptocurrency-mining\">scanning for vulnerable servers<\/a> and <a href=\"https:\/\/blog.trendmicro.com\/trendlabs-security-intelligence\/exposed-docker-control-api-and-community-image-abused-to-deliver-cryptocurrency-mining-malware\/\" target=\"_blank\" rel=\"noopener\">cryptocurrency mining<\/a>.<\/p>\n<p>To help solve this, Docker provides a feature called \u201cContent Trust.\u201d It allows users to deploy images to a cluster or swarm confidently and verify that they are the images you expect them to be. What the Docker Content Trust (DCT) does not do is monitor your images across the swarm for changes or anything of that nature. It is strictly a one-time check done <strong>by the Docker client, not the server<\/strong>.<\/p>\n<p>This has implications for the usefulness of DCT as a full-on integrity monitoring system. In a previous post by my colleague Magno on <a href=\"https:\/\/www.trendmicro.com\/vinfo\/us\/security\/news\/virtualization-and-cloud\/securing-the-4-cs-of-cloud-native-systems-cloud-cluster-container-and-code\">cloud-native systems<\/a>, he mentioned using image-signing tools such as <a href=\"https:\/\/docs.docker.com\/notary\/getting_started\/\" target=\"_blank\" rel=\"noopener\">Notary<\/a> to solve the question, \u201ccan they be trusted?\u201d DCT is an attempt at providing built-in tools for Docker clients to do just that.<\/p>\n<p>This article will cover four areas:<\/p>\n<ol>\n<li>How DCT works<\/li>\n<li>How to enable DCT<\/li>\n<li>What steps can be taken to automate trust validation in the continuous integration and continuous deployment (CI\/CD) pipeline<\/li>\n<li>What are the limitations of the system<\/li>\n<\/ol>\n<p>An additional goal of this article is to provide a singular in-place tutorial on getting up and running with experimenting on DCT, especially since the existing documents appear to be spread out and not centralized.<\/p>\n<h3><strong>How does Docker Content Trust (DCT) work?<\/strong><\/h3>\n<p>At its core, Docker Content Trust is very simple. It is logic inside the Docker client that can verify images you pull or deploy from a registry server, signed on a Docker Notary server of your choosing.<\/p>\n<p>The Docker Notary tool allows publishers to digitally sign their collections while users get to verify the integrity of the content they pull. Through <a href=\"https:\/\/theupdateframework.io\/\" target=\"_blank\" rel=\"noopener\">The Update Framework (TUF)<\/a>, Notary users can provide trust over arbitrary collections of data and manage the operations necessary to ensure freshness of content. If you have not used a Notary server before, check out Docker&#8217;s introductory <a href=\"https:\/\/docs.docker.com\/notary\/getting_started\/\" target=\"_blank\" rel=\"noopener\">guide<\/a>.<\/p>\n<p>The graphic in Figure 1 shows how deploying a Docker swarm or Docker build \u2013pull allows the client to talk to the registry server to get the required images and the Notary server to see how they were signed. If you have the correct environment variables setup, it will fail to deploy unsigned images. The signing can be done on a different machine so that private keys do not need to be stored on the Docker management node used in deployment.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/documents.trendmicro.com\/images\/TEx\/articles\/docker-client-registry-server-notary-server.png\" alt width=\"1042\" height=\"625\">Figure 1. The Docker client can communicate with the registry server and Notary server<\/p>\n<h3><strong>Enabling DCT<\/strong><\/h3>\n<p>By default, DCT is disabled. We need to do a few things to set it up so that we can sign the images we want to deploy:<\/p>\n<ol>\n<li>Set up our registry<\/li>\n<li>Set up a Notary server<\/li>\n<li>Push an image to our registry server<\/li>\n<li>Sign the pushed image<\/li>\n<li>Enable DCT &#8211; Set the correct environment variables on our management host so image signatures get verified by Docker commands<\/li>\n<\/ol>\n<p><\/p>\n<h4><strong>Step 1: Setting up our registry server<\/strong><\/h4>\n<p>The easiest way to set up your registry server is to run the base registry image off Docker Hub. We can do this with a single command (see below). Make sure you expose port 5000 because this is what the registry server listens on.<\/p>\n<pre><span><b>ubuntu@ip-{BLOCKED}-20-187<\/b><\/span>:<span><b>~$ docker run -d -p 5000:5000 --restart always --name registry registry:2<\/b><\/span>\nUnable to find image 'registry:2' locally<br>2: Pulling from library\/registry\nDigest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d\nStatus: Downloaded newer image for registry:2\n5df581b6eb4186edeebb40da766e7907427005d387facdb81365df35647d952d<\/pre>\n<p>To validate that it is running:<\/p>\n<pre><span><b>ubuntu@ip-{BLOCKED}-20-187<\/b><\/span>:~$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n5df581b6eb41 registry:2 \"\/entrypoint.sh \/etc\u2026\" 4 seconds ago Up 3 seconds 0.0.0.0:5000-&gt;5000\/tcp registry<\/pre>\n<h4><strong>Step 2: Setting up a Notary server<\/strong><\/h4>\n<p>In addition to a registry server for storing our images, we need a Notary server to store our image signatures. Simply running a registry image from Docker Hub requires a lot of setting up, so let\u2019s go with the simplest way to do it: by cloning the repository from <a href=\"https:\/\/github.com\/theupdateframework\" target=\"_blank\" rel=\"noopener\">the update framework<\/a><strong>. <\/strong>&nbsp;We can then use a simple <em>docker-compose up<\/em> to deploy with their Dockerfile.<\/p>\n<pre><span><b>ubuntu@ip-{BLOCKED}-20-187<\/b><\/span>:~$ git clone https:\/\/github.com\/theupdateframework\/notary[.]git\nCloning into 'notary'...\nremote: Enumerating objects: 3, done.\nremote: Counting objects: 100% (3\/3), done.\nremote: Compressing objects: 100% (3\/3), done.\nremote: Total 26412 (delta 0), reused 1 (delta 0), pack-reused 26409\nReceiving objects: 100% (26412\/26412), 35.08 MiB | 5.32 MiB\/s, done.\nResolving deltas: 100% (16038\/16038), done.\n<span><b>ubuntu@ip-{BLOCKED}-20-187<\/b><\/span>:~$ cd notary\/<br><span><b>ubuntu@ip-{BLOCKED}-20-187<\/b><\/span>:<span><b>~\/notary<\/b><\/span>$ docker-compose up -d\n<span>WARNING:<\/span> The Docker Engine you're using is running in swarm mode. Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node. To deploy your application across the swarm, use `docker stack deploy`.\n\u2026.. Too much output \u2026 cut out \u2026.&gt;\nCreating notary_mysql_1 ... Creating notary_mysql_1 ... <span>done<\/span>\nCreating notary_signer_1 ... Creating notary_signer_1 ... <span>done<\/span>\nCreating notary_server_1 ... Creating notary_server_1 ... <span>done<\/span><\/pre>\n<p>I left the warning message about not running in swarm mode on purpose. The <em>docker-compose.yml<\/em> file provided by <a href=\"https:\/\/github.com\/theupdateframework\" target=\"_blank\" rel=\"noopener\">the update framework<\/a> is not swarm-compatible for a couple of reasons:<span><\/span><\/p>\n<ul>\n<li>It uses <em>version: &#8220;2&#8221;<\/em> \u2013 This is often fixable by just updating to version \u201c3\u201d. Other changes may be required.<\/li>\n<li><span>It uses a build: command \u2013 Swarm mode does not support the build operation. You will need to build these services separately and add them to a registry server. Since you will not have content trust signatures at this point, you\u2019ll need to ensure you are <span>not<\/span> enforcing content trust on your Docker client when deploying this service.<br \/><\/span><\/li>\n<\/ul>\n<p>As mentioned earlier, the easiest way to set up your registry server is to run the base registry image off Docker Hub with a single command. Make sure that port 5000 is open because this is what the registry server listens on.<\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~$ docker run -d -p 5000:5000 --restart always --name registry registry:2<br><\/strong>Unable to find image 'registry:2' locally<br>2: Pulling from library\/registry<br>Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d<br>Status: Downloaded newer image for registry:2<br>5df581b6eb4186edeebb40da766e7907427005d387facdb81365df35647d952d<strong><br><\/strong><\/span><\/pre>\n<p>Let&#8217;s validate that our Notary service is now up. It should also have deployed a MySQL service that it uses:<\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n6c72520afc2e notary_server \"\/usr\/bin\/env sh -c \u2026\" 12 minutes ago Up 12 minutes 0.0.0.0:4443-&gt;4443\/tcp, 0.0.0.0:32769-&gt;8080\/tcp notary_server_1\n862fea9019c9 notary_signer \"\/usr\/bin\/env sh -c \u2026\" 12 minutes ago Up 12 minutes notary_signer_1\n8c8a05af5224 mariadb:10.4 \"docker-entrypoint.s\u2026\" 12 minutes ago Up 12 minutes 3306\/tcp notary_mysql_1\n5df581b6eb41 registry:2 \"\/entrypoint.sh \/etc\u2026\" 21 minutes ago Up 21 minutes 0.0.0.0:5000-&gt;5000\/tcp registry<\/pre>\n<p>Now, we need to push an image to our repository. We do this by tagging an image with the repository URL, then calling Docker push on that tag:<\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker pull ubuntu:latest\nlatest: Pulling from library\/ubuntu\n54ee1f796a1e: Already exists f7bfea53ad12: Already exists 46d371e02073: Already exists b66c17bbf772: Already exists Digest: sha256:31dfb10d52ce76c5ca0aa19d10b3e6424b830729e32a89a7c6eee2cda2be67a5\nStatus: Downloaded newer image for ubuntu:latest\ndocker.io\/library\/ubuntu:latest\n<span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker tag ubuntu:latest localhost:5000\/ubuntu:mine\n<span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker push localhost:5000\/ubuntu:mine\nThe push refers to repository [localhost:5000\/ubuntu]\na4399aeb9a0e: Pushed 35a91a75d24b: Pushed ad44aa179b33: Pushed 2ce3c188c38d: Pushed mine: digest: sha256:6f2fb2f9fb5582f8b587837afd6ea8f37d8d1d9e41168c90f410a6ef15fa8ce5 size: 1152<\/pre>\n<p>For the Docker client to know to use this server, you will need to set an environment variable pointing to it:<\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ export DOCKER_CONTENT_TRUST_SERVER=https:\/\/localhost:4443<\/pre>\n<p>Now, let&#8217;s sign our image. There are three steps. First, we must add a key to Docker that we can use for signing. Next, we must add that key as a signer for the Notary repository for this image, then we need to sign it.<\/p>\n<p>Adding the key:<\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker trust key generate sample_signer\nGenerating key for sample_signer...\nEnter passphrase for new sample_signer key with ID f39f731: Repeat passphrase for new sample_signer key with ID f39f731: Successfully generated and loaded private key. Corresponding public key available: \/home\/ubuntu\/notary\/sample_signer.pub<\/pre>\n<p>Adding the key as a signer:<\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker trust signer add --key sample_signer.pub sample_signer localhost:5000\/ubuntu:mine\nAdding signer \"sample_signer\" to localhost:5000\/ubuntu:mine...\nInitializing signed repository for localhost:5000\/ubuntu:mine...\nYou are about to create a new root signing key passphrase. This passphrase\nwill be used to protect the most sensitive key in your signing system. Please\nchoose a long, complex passphrase and be careful to keep the password and the\nkey file itself secure and backed up. It is highly recommended that you use a\npassword manager to generate the passphrase and keep it safe. There will be no\nway to recover this key. You can find the key in your config directory.\nEnter passphrase for new root key with ID 65c87b3: Repeat passphrase for new root key with ID 65c87b3: Enter passphrase for new repository key with ID 10e5763: Repeat passphrase for new repository key with ID 10e5763: Successfully initialized \"localhost:5000\/ubuntu:mine\"\nSuccessfully added signer: sample_signer to localhost:5000\/ubuntu:mine<\/pre>\n<p>You can now do a <em>docker inspect<\/em> and see the signer you added, but notice that no tags have been signed yet:<\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker trust inspect localhost:5000\/ubuntu:mine\n[ { \"Name\": \"localhost:5000\/ubuntu:mine\", \"SignedTags\": [], \"Signers\": [ { \"Name\": \"sample_signer\", \"Keys\": [ { \"ID\": \"f39f731f1c288b66c10d70905de6d98dfa40104741c878cb2766cddc6ed52f28\" } ] } ], \"AdministrativeKeys\": [ { \"Name\": \"Root\", \"Keys\": [ { \"ID\": \"58617dd8ce70d089e7a2669bc782472e677466278d4519c2de5ec0148b681129\" } ] }, { \"Name\": \"Repository\", \"Keys\": [ { \"ID\": \"10e5763ffaaa7e1e606575005f460369f9f3ef49e553914b50589f1b822f695b\" } ] } ] }\n]<\/pre>\n<p>Finally, let&#8217;s sign our tag&nbsp;<em>:mine.<\/em><\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker trust sign localhost:5000\/ubuntu:mine\nSigning and pushing trust data for local image localhost:5000\/ubuntu:mine, may overwrite remote trust data\nThe push refers to repository [localhost:5000\/ubuntu]\na4399aeb9a0e: Layer already exists 35a91a75d24b: Layer already exists ad44aa179b33: Layer already exists 2ce3c188c38d: Layer already exists mine: digest: sha256:6f2fb2f9fb5582f8b587837afd6ea8f37d8d1d9e41168c90f410a6ef15fa8ce5 size: 1152\nSigning and pushing trust metadata\nEnter passphrase for sample_signer key with ID f39f731: Successfully signed localhost:5000\/ubuntu:mine<\/pre>\n<p>Another inspect shows that the&nbsp;<em>:mine&nbsp;<\/em>tag has been signed by&nbsp;<em>sample_signer.<\/em><\/p>\n<pre><span><strong>ubuntu@ip-{BLOCKED}-20-187<\/strong><\/span>:<span><strong>~\/notary<\/strong><\/span>$ docker trust inspect localhost:5000\/ubuntu:mine\n[ { \"Name\": \"localhost:5000\/ubuntu:mine\", <span>\"SignedTags\": [<\/span> <span>{<\/span> <span>\"SignedTag\": \"mine\",<\/span> <span>\"Digest\": <\/span><span>\"6f2fb2f9fb5582f8b587837afd6ea8f37d8d1d9e41168c90f410a6ef15fa8ce5\",<\/span> <span>\"Signers\": [<\/span> <span>\"sample_signer\"<\/span> <span>]<\/span> <span>}<\/span> ], \"Signers\": [ { \"Name\": \"sample_signer\", \"Keys\": [ { \"ID\": \"f39f731f1c288b66c10d70905de6d98dfa40104741c878cb2766cddc6ed52f28\" } ] } ], \"AdministrativeKeys\": [ { \"Name\": \"Root\", \"Keys\": [ { \"ID\": \"58617dd8ce70d089e7a2669bc782472e677466278d4519c2de5ec0148b681129\" } ] }, { \"Name\": \"Repository\", \"Keys\": [ { \"ID\": \"10e5763ffaaa7e1e606575005f460369f9f3ef49e553914b50589f1b822f695b\" } ] } ] }\n]<\/pre>\n<p>We can get the Docker client to validate that every image from your repository is signed <strong>before<\/strong> deploying by setting the environment variable <em>DOCKER_CONTENT_TRUST=1<\/em>. Remember, if you use <em>sudo<\/em> to run Docker, you\u2019ll need to use the \u2013E flag to ensure that the environment variables are preserved.<\/p>\n<h3><strong>Automate trust validation in the CI\/CD pipeline<\/strong><\/h3>\n<p>Checking if an image is signed or not (and not checking for a specific signature) does not likely solve in-house security needs. Being able to inspect signatures for any image on your repository, however, makes it possible to integrate checks into your CI\/CD pipeline. Your team can write code to make sure that specific images were signed by their owners, and only those owners would have access to the private keys.<\/p>\n<p>This is a good way to validate that the correct responsible party has signed off any image being deployed to production. This also makes it more difficult for an attacker trying to deploy a malicious image inside your swarm, whether it be through social engineering or some technical mechanism.<\/p>\n<h3><strong>A brief discussion of the limitations<\/strong><\/h3>\n<p>One of the natural applications for a feature like this is when providing continuous monitoring of an image&#8217;s integrity. It would be incredible to be able to monitor an image for \u201cunapproved\u201d changes and alert you or take action as soon as they happen. Unfortunately, this would require monitoring of the daemon, kernel, and file system level, and is simply not in the scope of what DCT does as a client-only implementation.&nbsp;<\/p>\n<p>The Trend Micro<span>\u2122<\/span> Deep Security<span>\u2122<\/span>&nbsp;solution protects hosts and provides Integrity Monitoring to provide integrity of the Docker and Kubernetes configuration files running on the same host.&nbsp;Trend Micro Cloud One<span>\u2122<\/span> \u2013 Container Security has a feature that uses its own admission controller to stop the deployment of containers based on findings from Deep Security&nbsp;Smart Check or other container configurations (like a privileged container or one running as root).<\/p>\n<div class=\"qoutebox\" readability=\"22.393665158371\">\n<p>The Trend Micro<span>\u2122<\/span>&nbsp;<a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud.html\">Hybrid Cloud Security<\/a> solution provides powerful, streamlined, and automated <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/security-teams.html\">security<\/a> within the organization\u2019s <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/development-operations.html\">DevOps pipeline<\/a> and delivers multiple <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/all-solutions.html\">XGen\u2122<\/a> threat defense techniques for protecting runtime physical, virtual, serverless, and cloud workloads. Trend Micro Cloud One is a security services platform that provides organizations a single-pane-of-glass look at their hybrid cloud environments and real-time security through <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/cloud-one-network-security.html\">Network Security<\/a>, <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/cloud-one-workload-security.html\">Workload Security<\/a>, <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/smart-check-image-scanning.html\">Container Security<\/a>, <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/cloud-one-application-security.html\">Application Security<\/a>, <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/cloud-one-file-storage-security.html\">File Storage Security<\/a>, and <a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/cloud-one-conformity.html\">Conformity<\/a> services.<\/p>\n<p>For organizations looking for runtime workload, container image, and file and object storage security as software,&nbsp;<a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/deep-security-for-cloud.html\">Deep Security<\/a>&nbsp;<a href=\"https:\/\/www.trendmicro.com\/en_us\/business\/products\/hybrid-cloud\/smart-check-image-scanning.html\">Smart Check<\/a> scans workloads and container images for malware and vulnerabilities at any interval in the development pipeline to prevent threats before they are deployed.<\/p>\n<\/div>\n<div class=\"imgAttachHolder\" readability=\"7.5\">\n<p>HIDE<\/p>\n<section class=\"p-15 \" readability=\"5\">\n<p><strong>Like it? Add this infographic to your site:<\/strong><br \/>1. Click on the box below.&nbsp;&nbsp; 2. Press Ctrl+A to select all.&nbsp;&nbsp; 3. Press Ctrl+C to copy.&nbsp;&nbsp; 4. Paste the code into your page (Ctrl+V).<\/p>\n<p>Image will appear the same size as you see above.<\/p>\n<p><textarea><\/textarea><br \/>\n<\/section>\n<\/p><\/div>\n<p> Read More <a href=\"https:\/\/www.trendmicro.com\/en_us\/devops\/20\/j\/what-is-docker-content-trust.html\">HERE<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Can your container image be trusted? Learn how Docker Content Trust (DCT) employs digital signatures for container image verification and manages trusted collections of content. Read More HERE&#8230;<\/p>\n","protected":false},"author":2,"featured_media":43158,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_layout":"default_layout","footnotes":""},"categories":[61],"tags":[9503,9575,9618],"class_list":["post-43157","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trendmicro","tag-trend-micro-devops-article","tag-trend-micro-devops-container-security","tag-trend-micro-devops-research"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What is Docker Content Trust and How do You Secure It? 2026 | ThreatsHub Cybersecurity News<\/title>\n<meta name=\"description\" content=\"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security &amp; Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is Docker Content Trust and How do You Secure It? 2026 | ThreatsHub Cybersecurity News\" \/>\n<meta property=\"og:description\" content=\"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security &amp; Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/\" \/>\n<meta property=\"og:site_name\" content=\"ThreatsHub Cybersecurity News\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-14T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2021\/10\/what-is-docker-content-trust-and-how-do-you-secure-it.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1042\" \/>\n\t<meta property=\"og:image:height\" content=\"625\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"TH Author\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@threatshub\" \/>\n<meta name=\"twitter:site\" content=\"@threatshub\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"TH Author\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/\"},\"author\":{\"name\":\"TH Author\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#\\\/schema\\\/person\\\/12e0a8671ff89a863584f193e7062476\"},\"headline\":\"What is Docker Content Trust and How do You Secure It?\",\"datePublished\":\"2020-10-14T00:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/\"},\"wordCount\":1516,\"publisher\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/what-is-docker-content-trust-and-how-do-you-secure-it.png\",\"keywords\":[\"Trend Micro DevOps : Article\",\"Trend Micro DevOps : Container Security\",\"Trend Micro DevOps : Research\"],\"articleSection\":[\"TrendMicro\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/\",\"name\":\"What is Docker Content Trust and How do You Secure It? 2026 | ThreatsHub Cybersecurity News\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/what-is-docker-content-trust-and-how-do-you-secure-it.png\",\"datePublished\":\"2020-10-14T00:00:00+00:00\",\"description\":\"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security & Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/what-is-docker-content-trust-and-how-do-you-secure-it.png\",\"contentUrl\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/what-is-docker-content-trust-and-how-do-you-secure-it.png\",\"width\":1042,\"height\":625},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/what-is-docker-content-trust-and-how-do-you-secure-it\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trend Micro DevOps : Article\",\"item\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/tag\\\/trend-micro-devops-article\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"What is Docker Content Trust and How do You Secure It?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/\",\"name\":\"ThreatsHub Cybersecurity News\",\"description\":\"%%focuskw%% Threat Intel \u2013 Threat Intel Services \u2013 CyberIntelligence \u2013 Cyber Threat Intelligence - Threat Intelligence Feeds - Threat Intelligence Reports - CyberSecurity Report \u2013 Cyber Security PDF \u2013 Cybersecurity Trends - Cloud Sandbox \u2013- Threat IntelligencePortal \u2013 Incident Response \u2013 Threat Hunting \u2013 IOC - Yara - Security Operations Center \u2013 SecurityOperation Center \u2013 Security SOC \u2013 SOC Services - Advanced Threat - Threat Detection - TargetedAttack \u2013 APT \u2013 Anti-APT \u2013 Advanced Protection \u2013 Cyber Security Services \u2013 Cybersecurity Services -Threat Intelligence Platform\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#organization\"},\"alternateName\":\"Threatshub.org\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#organization\",\"name\":\"ThreatsHub.org\",\"alternateName\":\"Threatshub.org\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Threatshub_Favicon1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Threatshub_Favicon1.jpg\",\"width\":432,\"height\":435,\"caption\":\"ThreatsHub.org\"},\"image\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/threatshub\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#\\\/schema\\\/person\\\/12e0a8671ff89a863584f193e7062476\",\"name\":\"TH Author\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g\",\"caption\":\"TH Author\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What is Docker Content Trust and How do You Secure It? 2026 | ThreatsHub Cybersecurity News","description":"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security & Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/","og_locale":"en_US","og_type":"article","og_title":"What is Docker Content Trust and How do You Secure It? 2026 | ThreatsHub Cybersecurity News","og_description":"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security & Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.","og_url":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/","og_site_name":"ThreatsHub Cybersecurity News","article_published_time":"2020-10-14T00:00:00+00:00","og_image":[{"width":1042,"height":625,"url":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2021\/10\/what-is-docker-content-trust-and-how-do-you-secure-it.png","type":"image\/png"}],"author":"TH Author","twitter_card":"summary_large_image","twitter_creator":"@threatshub","twitter_site":"@threatshub","twitter_misc":{"Written by":"TH Author","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/#article","isPartOf":{"@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/"},"author":{"name":"TH Author","@id":"https:\/\/www.threatshub.org\/blog\/#\/schema\/person\/12e0a8671ff89a863584f193e7062476"},"headline":"What is Docker Content Trust and How do You Secure It?","datePublished":"2020-10-14T00:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/"},"wordCount":1516,"publisher":{"@id":"https:\/\/www.threatshub.org\/blog\/#organization"},"image":{"@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/#primaryimage"},"thumbnailUrl":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2021\/10\/what-is-docker-content-trust-and-how-do-you-secure-it.png","keywords":["Trend Micro DevOps : Article","Trend Micro DevOps : Container Security","Trend Micro DevOps : Research"],"articleSection":["TrendMicro"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/","url":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/","name":"What is Docker Content Trust and How do You Secure It? 2026 | ThreatsHub Cybersecurity News","isPartOf":{"@id":"https:\/\/www.threatshub.org\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/#primaryimage"},"image":{"@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/#primaryimage"},"thumbnailUrl":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2021\/10\/what-is-docker-content-trust-and-how-do-you-secure-it.png","datePublished":"2020-10-14T00:00:00+00:00","description":"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security & Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.","breadcrumb":{"@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/#primaryimage","url":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2021\/10\/what-is-docker-content-trust-and-how-do-you-secure-it.png","contentUrl":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2021\/10\/what-is-docker-content-trust-and-how-do-you-secure-it.png","width":1042,"height":625},{"@type":"BreadcrumbList","@id":"https:\/\/www.threatshub.org\/blog\/what-is-docker-content-trust-and-how-do-you-secure-it\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.threatshub.org\/blog\/"},{"@type":"ListItem","position":2,"name":"Trend Micro DevOps : Article","item":"https:\/\/www.threatshub.org\/blog\/tag\/trend-micro-devops-article\/"},{"@type":"ListItem","position":3,"name":"What is Docker Content Trust and How do You Secure It?"}]},{"@type":"WebSite","@id":"https:\/\/www.threatshub.org\/blog\/#website","url":"https:\/\/www.threatshub.org\/blog\/","name":"ThreatsHub Cybersecurity News","description":"%%focuskw%% Threat Intel \u2013 Threat Intel Services \u2013 CyberIntelligence \u2013 Cyber Threat Intelligence - Threat Intelligence Feeds - Threat Intelligence Reports - CyberSecurity Report \u2013 Cyber Security PDF \u2013 Cybersecurity Trends - Cloud Sandbox \u2013- Threat IntelligencePortal \u2013 Incident Response \u2013 Threat Hunting \u2013 IOC - Yara - Security Operations Center \u2013 SecurityOperation Center \u2013 Security SOC \u2013 SOC Services - Advanced Threat - Threat Detection - TargetedAttack \u2013 APT \u2013 Anti-APT \u2013 Advanced Protection \u2013 Cyber Security Services \u2013 Cybersecurity Services -Threat Intelligence Platform","publisher":{"@id":"https:\/\/www.threatshub.org\/blog\/#organization"},"alternateName":"Threatshub.org","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.threatshub.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.threatshub.org\/blog\/#organization","name":"ThreatsHub.org","alternateName":"Threatshub.org","url":"https:\/\/www.threatshub.org\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.threatshub.org\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2025\/05\/Threatshub_Favicon1.jpg","contentUrl":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2025\/05\/Threatshub_Favicon1.jpg","width":432,"height":435,"caption":"ThreatsHub.org"},"image":{"@id":"https:\/\/www.threatshub.org\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/threatshub"]},{"@type":"Person","@id":"https:\/\/www.threatshub.org\/blog\/#\/schema\/person\/12e0a8671ff89a863584f193e7062476","name":"TH Author","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g","caption":"TH Author"}}]}},"_links":{"self":[{"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/posts\/43157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/comments?post=43157"}],"version-history":[{"count":0,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/posts\/43157\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/media\/43158"}],"wp:attachment":[{"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/media?parent=43157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/categories?post=43157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/tags?post=43157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}