【问题标题】:Huge security risk using TFS build system使用 TFS 构建系统的巨大安全风险
【发布时间】:2014-06-16 05:39:40
【问题描述】:

事实证明,tfs 构建系统总是使用相同的构建帐户来获取最新的源代码并执行构建工作。并且这个账号拥有最高权限,可以访问所有源代码。

因此,只有一个团队项目构建权限的任何人实际上都可以通过创建构建定义来获取所有团队项目的源代码,并将“源设置”设置为 TeamProjectCollection 的根目录,然后在 MSBuild 发布事件中执行“XCopy” ' 将源代码移动到任何远程服务器。

【问题讨论】:

  • +1 有趣,我想听听这个问题的答案。

标签: tfs msbuild build-server


【解决方案1】:

构建服务器是基于团队项目关联的。如果安全隔离很重要,则允许多个项目使用相同的构建服务器是一种实施决策,而不是固有的安全缺陷,请使用具有不同帐户的多个构建服务器。有关团队构建帐户到团队项目设置的详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms253062(v=vs.90).aspx

【讨论】:

  • 我知道这个解决方法,即便如此,这应该是一个很大的设计缺陷。为什么不在创建团队构建定义的帐户下运行?或者指定一个账户,灵活多变。使用一个高权限帐户绝对是个问题。
  • 不是一种解决方法,安全模型是细粒度的,因为它需要由 tfs 管理员正确设置系统以反映组织的安全问题。类比是有多个门,并决定在所有门上都放同一个锁。不是固有的安全漏洞,而是配置 tfs.如果您担心开发人员窃取代码,您就会遇到软件无法解决的更大问题
  • 构建服务器不是基于团队项目关联的。它是在集合的基础上关联的。因此,通过构建服务的基本设置,每个开发人员都可以使用构建帐户的权限在该构建服务器上执行的单元测试中运行代码。默认情况下,构建帐户可以访问整个集合。所以每个开发者都能够获得整个集合中所有项目的源代码。以及更多!我写了很多服务器插件来强制将单个构建服务分配给单个团队项目..
  • @MikeBeeler 仍然,“为什么不在创建团队构建定义的帐户下运行?或者指定一个灵活的运行帐户”。这不是更合理吗?
  • @KevinYang 这在技术上是不可能的。如果构建服务器应该在用户帐户下运行,它必须在某处获取帐户和密码。这将更加不安全。
【解决方案2】:

这是设计使然。这很糟糕:(

从 microsoft 的文档中,他们告诉您,开发人员被视为受信任的实体。这就是他们的理由:

Installing Team Foundation Build Service increases the attack surface of the computer. Because developers are treated as trusted entities in the build system, a malicious user could, for example, construct a build definition to run arbitrary code that is designed to take control of the server and steal data from Team Foundation Server. Customers are encouraged to follow security best practices as well as deploy defense in-depth measures to ensure that their build environment is secure. This includes developer workstations. For more information regarding security best practices, see the TechNet Article Security Guidance.

这里是original article。

因此,在使用构建服务器时,您始终处于危险之中! 正如我在评论中提到的。我写了很多服务器端插件等等来保护一个大公司的tfs环境。确保 tfs 构建环境安全需要大量工作。

【讨论】:

    【解决方案3】:

    一种解决方案是撤销创建和编辑构建定义的权限,这样您就可以严格控制在何处运行构建。

    【讨论】:

    • 只要 unittest 在构建中运行,这将无济于事。
    • 如果您将每个 Build 寻址到正确的服务器,它就可以了。
    • 只要构建作业由一个单独的帐户运行,这个问题不能由一个构建控制器解决。
    • @GiulioVian 您的解决方案与 MikeBeeler 提供的解决方案类似,每个团队项目需要一个构建服务器。
    • “如果您将每个构建地址发送到正确的服务器,它就可以了。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    相关资源
    最近更新 更多