2012-07-21 60 views
1

我要找的建议从社区的最佳方式来处理这个问题:策略厨师配方文件的签字部分,以防止篡改

  1. 我在git的厨师食谱的集合,定义实验室例如一个jenkins CI设置,人们可以根据自己的喜好进行调整和修改

  2. 但是,我可以预见当有人可能想要添加食谱的某些不可变部分时,防火墙设置

  3. 什么策略将是有意义的锁定文件的某些部分,以验证它没有被改变,同时允许之外的

  4. 任意修改理想的情况下,也可以解决混淆的能力部分如果需要

我会加入我自己的DSL到代码 - 为每个受保护块的校验 - 预处理它解开,并把它传递给厨师之前验证呢?

例如我在格式第一次尝试 - 仍然没有解决的人只是删除所有已签署的部分问题 - 除非所有的文件必须签署

#---SIGNED-FILE SHA-256 507e74380188c07bad2fa66acb8cbbeeb63f84fcee5fd639499575654239cd49 

# 
# Cookbook Name:: jenkins 
# Recipe:: default 
# 

# https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu 
# This is super-simple, compared to the other Chef cookbook I found 
# for Jenkins (https://github.com/fnichol/chef-jenkins). 
# 
# This doesn't include Chef libraries for adding Jenkin's jobs via 
# the command line, but it does get Jenkins up and running. 

include_recipe "apt" 
include_recipe "java" 

#---SIGNED-SECTION-START SHA-256 e4d3d02f14ee2a6d815a91307c610c3e182979ce8fca92cef05e53ea9c90f5c7 
apt_repository "jenkins" do 
    uri "http://pkg.jenkins-ci.org/debian" 
    key "http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key" 
    components ["binary/"] 
    action :add 
end 
#---SIGNED-SECTION-END 

#---OBFUSCATED-SECTION-START SHA-256 5f536f2137dc7e2c5817de861d1329ead72b1e9d2dbb9dbe181ec7bc274dddeb 
YXB0X3JlcG9zaXRvcnkgImplbmtpbnMiIGRvCiAgdXJpICJodHRwOi8vcGtnLmplbmtpbnMtY2kub3JnL2RlYmlhbiIKICBrZXkgImh0dHA6Ly9wa2cuamVua2lucy1jaS5vcmcvZGViaWFuL2plbmtpbnMtY2kub3JnLmtleSIKICBjb21wb25lbnRzIFsiYmluYXJ5LyJdCiAgYWN0aW9uIDphZGQKZW5k 
#---OBFUSCATED-SECTION-END 

package "jenkins" 

service "jenkins" do 
    supports [:stop, :start, :restart] 
    action [:start, :enable] 
end 
+0

我的一位同事的建议让我们探索一条有趣的路线: 如果我们试图提供一个人们可以继承的不变的“基本配方”,那么也许我们可以使用SHA-1密钥git的基类,以确保我们保留这些部分。还没有想过所有的细节呢。 – velniukas 2012-07-21 09:54:15

回答

0

如何设计从而使文件以签署的部分,描述将在整个文件中找到的签名实体。然后,您的解析代码将需要检查每个实体是否按描述存在且尚未被删除。

要防止重放攻击,您需要在每个签名中包含一个时间戳记,并且每次对任何已签名部分进行更改时,都要在整个文件中重新计算签名。因此,文件仅在以下情况下有效:

  • “标题”中描述的签名实体出现在文件中。

  • 每个签名验证并包含相同的时间戳。

  • 可选:签名时间戳与文件时间戳相匹配(在可接受的增量范围内)吗?

仍然存在的风险是,有人替换先前版本中的整个文件(即有效地删除一个新的部分,他们不喜欢)。我不知道如何防御,除了通过检查上面建议的文件时间戳。

NB。我的答案对你在创建和解析文件时可以达到什么做出了假设。我可能误解了你的环境的限制(我对git不熟悉),如果是这样,请不理我!

+0

邓肯 - 谢谢你的回答。这基本上是我想到的战略。目前,我正在尝试在现实世界中测试几种不同的场景,以查看操作上的“需要”等,并将在此处发布我的经验更新。 – velniukas 2012-09-03 03:54:51