事件回顾

4月25日,Docker Hub 发现一个数据库遭遇未经授权访问(官方原话是
unauthorized
access),发现问题后他们立即采取干预措施来确保网站安全。官方表示在短暂的数据库未经授权访问期间,大约
19 万个账号的敏感数据已被泄露(大约是总用户数的
5%),这些数据包括部分用户的用户名、哈希密码,以及用于自动构建 Docker
镜像的 GitHub 和 Bitbucket Token。

美国当地时间周五晚上,有开发者表示收到来自 Docker
的官方邮件,邮件内容显示由于 Docker Hub 遭受非法入侵,已导致 19
万个帐号的敏感数据被泄露,这些数据包括小部分用户的用户名和哈希密码,以及用于自动构建
Docker 镜像而授权给 Docker Hub 的 GitHub 和 Bitbucket token。

镜像构建完毕之后,我们也可以将它上传到Docker
Hub上面去,这样其他人就能使用这个镜像了。比如,我们可以在组织内共享这个镜像,或者完全公开这个镜像。

解决方案

Docker
发现问题后立即向用户告知了这一消息,并通知用户重置密码(包括使用其他使用相同用户名和密码的平台)。

此外,对于使用了自动构建服务并可能受影响的用户,Docker 已撤销他们的
GitHub token
和访问密钥,并提醒他们重新连接到存储库,然后检查安全和登录日志以查看是否发生了任何异常操作,例如是否存在通过未知的
IP 地址进行任何未经授权的访问。

Docker Hub 是 Docker 容器镜像的官方存储库,提供给 Docker
开发者用于上传/下载容器镜像。

注意Docker
Hub也提供了对私有仓库的支持,这是一个需要付费的功能,你可以将镜像存储到私有仓库中,这样只有你或者任何与你共享这个私有仓库的人才能访问该镜像。这样你就可以将机密信息或者代码放到私有镜像中,不必担心被公开访问了。
|

最新回应

今天,Docker Hub
在其官网正式回应了这一事件,表示泄露的数据来自用户的非财务性数据子集(a
subset of non-financial user data)

澳门新葡萄京官网注册 1

目前正在加强整体安全流程和审核安全策略,除此之外还增加了额外的监测工具。

最后对用户的常见问题进行了解答,摘录部分如下:

问:这次事件是否影响到 Docker
官方镜像?

没有官方镜像遭受入侵,针对官方镜像我们有提供额外的安全措施,包括 git
commit 上的 GPG
签名和 Notary 签名,以此来确保每个镜像的完整性。

问:如何判断是否受到这次事件的影响?

  • 如果收到了 Docker
    发送的关于本次事件的电子邮件,这说明可能会受到影响。
  • 如果发现从 GitHub 或 Bitbucket 到 Docker Hub
    的连接已经中断,说明也可能遭受影响。
  • 如果收到重置密码的链接,这说明帐号的哈希密码可能已经被泄露。对于存在泄露风险的密码,我们已将其作废,并向用户发送密码重置链接来作为预防措施。

问:需要做什么?

  • 对于所有 Docker Hub
    用户,不需要执行任何操作来确保安全性。因为我们已将密码重置链接发送给可能泄露哈希密码的全部用户。
  • 澳门新葡萄京官网注册,对于曾使用过自动构建服务的用户,需要重新从 GitHub 或 Bitbucket
    连接到 Docker Hub。

问:是否需要在 Docker Hub
上重置密码?

不需要。对于已泄露的哈希密码,我们已将其废弃,并通过电子邮件向发送了密码重置链接。如果没有收到密码重置链接,可访问此处以重置密码()。

问:为什么未收到通知就删除了我的
GitHub Token?

为了保护用户的数据安全,我们采取了尽快撤销 Token 的措施,同时努力采取其他措施来保护网站的安全。这些工作完成后,我们才向可能受影响的用户发去通知。

问:现在将 Docker Hub 仓库重新连接到
GitHub 仓库是否会面临风险?

 不会。重新连接会创建一个新的只读部署密钥(read-only
deploy key)。

问:目前无法登录 Docker
Hub,是因为帐号被攻击了吗?

我们已向可能泄露了哈希密码的用户发送了密码重置链接,并作废了这些密码。请检查电子邮件箱是否收到密码重置链接。如果有任何疑虑,请联系  info@docker.com

问:从未使用过 Docker Hub
自动构建功能,为什么也收到了电子邮件?

可能你曾经将 GitHub 或 Bitbucket 连接到
Docker
Hub,或者是哈希密码已经泄露。若是前者,我们已取消连接;若是后者,我们已将密码废弃并发送了密码重置链接到邮箱。

(文/开源中国)    

澳门新葡萄京官网注册 2

我们可以通过docker push命令将镜像推送到Docker Hub。

澳门新葡萄京官网注册 3

现在就让我们来试一试如何推送,如代码清单4-77所示。

Docker
方面表示,发现漏洞后已立即采取干预措施来保护数据,并尽力降低对用户造成的影响。

代码清单4-77 尝试推送root镜像

按照 Docker 的官方说法,在黑客入侵 Docker Hub
后的短时间内就发现了问题,不过仍有 19
万个帐号的数据已遭泄露,大约是总用户数的 5%。

$ sudo docker push static_web 2013/07/01 18:34:47 Impossible to push a "root" repository. Please rename your repository in <user>/<repo> (ex: jamtur01/ static_web)

Docker
发现问题后立即向用户告知了这一消息,并通知用户重置密码(包括使用其他使用相同用户名和密码的平台)。

出什么问题了?我们尝试将镜像推送到远程仓库static_web,但是Docker认为这是一个root仓库。root仓库是由Docker公司的团队管理的,因此会拒绝我们的推送请求。让我们再换一种方式试一下,如代码清单4-78所示。

此外,对于使用了自动构建服务并可能受影响的用户,Docker 已撤销他们的
GitHub token
和访问密钥,并提醒他们重新连接到存储库,然后检查安全和登录日志以查看是否发生了任何异常操作,例如是否存在通过未知的
IP 地址进行任何未经授权的访问。

代码清单4-78 推送Docker镜像

虽然受影响的用户只有
5%,看起来问题不是十分严重,但事实并非如此。要知道绝大多数 Docker Hub
用户都是大公司的内部员工,他们的帐号可能正在使用自动构建容器服务,然后在实际生产环境中部署这些容器。

$ sudo docker push jamtur01/static_web The push refers to a repository [jamtur01/static_web]  Processing checksums Sending image list Pushing repository jamtur01/static_web to registry-1.docker.io  ...

如果他们没有及时重置帐号密码,那么其帐号的自动构建服务会存在极大的安全风险 ——
被攻击者植入恶意软件。

这次我们使用了一个名为jamtur01/static_web的用户仓库,成功地将镜像推送到了Docker
Hub。我们将会使用自己的用户ID,这个ID也是我们前面创建的,并选择了一个合法的镜像名(如youruser/yourimage)。

Docker
表示目前仍在调查此事件,调查清楚后会分享详细信息。不过这起安全事件尚未在公司网站上披露,仅通过电子邮件通知用户。邮件内容如下:

我们可以在Docker Hub看到我们上传的镜像,如图4-4所示。

On Thursday, April 25th, 2019, we discovered unauthorized access to a
single Hub database storing a subset of non-financial user data. Upon
discovery, we acted quickly to intervene and secure the site.

We want to update you on what we’ve learned from our ongoing
investigation, including which Hub accounts are impacted, and what
actions users should take.

Here is what we’ve learned:

During a brief period of unauthorized access to a Docker Hub database,
sensitive data from approximately 190,000 accounts may have been
exposed (less than 5% of Hub users). Data includes usernames and
hashed passwords for a small percentage of these users, as well as
Github and Bitbucket tokens for Docker autobuilds.

Actions to Take:

– We are asking users to change their password on Docker Hub and any
other accounts that shared this password.

– For users with autobuilds that may have been impacted, we have
revoked GitHub tokens and access keys, and ask that you reconnect to
your repositories and check security logs to see if any unexpected
actions have taken place.

– You may view security actions on your GitHub or BitBucket accounts
to see if any unexpected access has occurred over the past 24 hours
-see
and

– This may affect your ongoing builds from our Automated build
service. You may need to unlink and then relink your Github and
Bitbucket source provider as described in

We are enhancing our overall security processes and reviewing our
policies. Additional monitoring tools are now in place.

Our investigation is still ongoing, and we will share more information
as it becomes available.

Thank you,

Kent Lamb Director of Docker Support info@docker.com

提示可以在
Hub的文档和更多关于功能方面的信息。

(文/开源中国)    

澳门新葡萄京官网注册 4图4-4
你在Docker Hub上的镜像

自动构建

除了从命令行构建和推送镜像,Docker Hub还允许我们定义自动构建(Automated
Builds)。为了使用自动构建,我们只需要将GitHub 或 BitBucket
中含有Dockerfile文件的仓库连接到Docker
Hub即可。向这个代码仓库推送代码时,将会触发一次镜像构建活动并创建一个新镜像。在之前该工作机制也被称为可信构建(Trusted
Build)。

{注意 }自动构建同样支持私有GitHub和BitBucket仓库。

在Docker
Hub中添加自动构建任务的第一步是将GitHub或者BitBucket账号连接到Docker
Hub。具体操作是,打开Docker
Hub,登录后单击个人信息连接,之后单击Add Repository -> Automated Build按钮,如图4-5所示。

你将会在此页面看到关于链接到GitHub或者BitBucket账号的选项,如图4-6所示。

单击GitHub
logo下面的Select按钮开始账号连接。你将会转到GitHub页面并看到Docker
Hub的账号连接授权请求,如图4-7所示。

澳门新葡萄京官网注册 5图4-5
添加仓库按钮澳门新葡萄京官网注册 6图4-6
账号连接选项澳门新葡萄京官网注册 7图4-7
链接到GitHub账号

有两个选项可以选择:Public and Private (recommended)Limited。选择Public and Private (recommended)并单击Allow Access完成授权操作。有可能会被要求输入GitHub的密码来确认访问请求。

之后,系统将提示你选择用来进行自动构建的组织和仓库,如图4-8所示。

澳门新葡萄京官网注册 8图4-8
选择仓库

单击想用来进行自动构建的仓库后面的Select按钮,之后开始对自动构建进行配置,如图4-9所示。

澳门新葡萄京官网注册 9图4-9
对自动构建进行配置

指定想使用的默认的分支名,并确认仓库名。

为每次自动构建过程创建的镜像指定一个标签,并指定Dockerfile的位置。默认的位置为代码仓库的根目录下,但是也可以随意设置该路径。

最后,单击Create Repository按钮来将你的自动构建添加到Docker
Hub中,如图4-10所示。

澳门新葡萄京官网注册 10图4-10
创建你的自动构建

你会看到你的自动构建已经被提交了。单击Build Status链接可以查看最近一次构建的状态,包括标准输出的日志,里面记录了构建过程以及任何的错误。如果该构建状态为Done,则表示该自动构建为最新状态。Error状态则表示构建过程出现错误。你可以单击查看详细的日志输出。

{注意}不能通过docker
push命令推送一个自动构建,只能通过更新你的GitHub或者BitBucket仓库来更新你的自动构建。

本书摘自《第一本Docker书》

澳门新葡萄京官网注册 11