嗨,我正在异地使用厨师设置一组机器。如果其中一台机器被盗,攻击者可以通过拥有 chef-validator.pem 对我的 chef-server 或其他节点造成什么损害?他们还可以通过厨师获得哪些其他东西?谢谢!
5 回答
这是最近关于管理厨师“秘密”的Foodfight剧集中讨论的项目之一。强烈推荐观看:
初始化新厨师客户端时,knife bootstrap操作会上传此密钥。拥有此密钥使客户端能够将自己注册到您的厨师服务器。这实际上是它唯一的功能,一旦客户端启动并运行验证密钥就不再需要了。
但它可能会被滥用......正如@cbl 所指出的,如果未经授权的第 3 方可以访问此密钥,他们可以创建新客户端,该客户端可以看到普通客户端可以看到的厨师服务器上的所有内容。从理论上讲,它可以用来在您的主厨服务器上创建拒绝服务攻击,方法是向其发送注册请求。
食物战小组推荐了一个简单的解决方案。在所有节点上启用chef-client说明书。它包含一个“delete_validation”配方,该配方将删除验证密钥并降低您的风险敞口。
验证器密钥用于在 Chef 服务器上创建新客户端。
一旦攻击者掌握了它,他就可以假装他是您基础设施中的一个节点,并且可以访问任何节点所拥有的相同信息。
例如,如果您在未加密的数据包中有敏感信息,他将有权访问该信息。
基本上,他将能够运行任何食谱中的任何食谱、进行搜索(并可以访问所有其他节点的属性)、读取数据包等。
在编写说明书和填充服务器中的其他对象时请记住这一点。您还可以通过某种方式监控 Chef 服务器是否有任何可疑的客户端创建活动,如果您有任何理由认为验证器密钥已被盗,请撤销它并发布一个新的。
定期轮换密钥可能也是一个好主意。
从 Chef 12.2.0 开始,不再需要验证密钥:
https://blog.chef.io/2015/04/16/validatorless-bootstraps/
您可以删除工作站上的验证密钥,然后knife 将使用您的用户凭据来创建节点和客户端。
这还有一些其他不错的功能,因为您为 run_list 和环境提供的任何内容在创建时也会应用于节点。不再依赖于由 chef-client 读取的 first-boot.json 文件,并且运行必须在 node.save 在引导过程结束时创建节点之前完成。
基本上,厨师客户端对服务器使用 2 模式身份验证:- 1)组织验证器.pem 和 2)用户.pem
除非并且直到这两个键的正确组合。chef-client 将无法通过 Chef 服务器进行身份验证。
他们甚至可以通过以下步骤使用被盗密钥将任何节点连接到厨师服务器。
将验证器密钥复制并粘贴到任何机器上的 /etc/chef 文件夹中
使用以下详细信息创建 client.rb 文件
log_location STDOUT chef_server_url "https://api.chef.io/organizations/ORGNAME" validation_client_name 'ORGNAME-validator' validation_key '/etc/chef/validater.pem'
3:运行chef-client连接厨师服务器