【问题标题】:Virus scanning in build process构建过程中的病毒扫描
【发布时间】:2009-11-30 09:20:46
【问题描述】:

我想将病毒扫描整合到 Java/Maven/Hudson 构建过程中。不幸的是,我找不到任何有关此类构建步骤的专用工具的资源。我的构建环境是基于 Linux 的。

我的问题是: 如何将防病毒扫描整合到基于 Maven 和 Hudson 的构建过程中?

什么是最佳实践?

  • 扫描步骤是否应该与正常构建分开,例如预构建步骤,甚至是单独的构建作业?
  • 扫描应该发生在打包的后期,在所有的人工制品都被打包到 jar 文件之后还是在这个过程的早期?
  • 每个发布的人工制品是否应该包含一个扫描程序日志文件,用于确定正在使用的防病毒工具、病毒定义文件的版本和日期?

使用哪种防病毒软件不在此问题的范围内。 (例如,我想使用商业供应商来支持 ClamAV 等免费工具)

【问题讨论】:

  • 您到底为什么要构建可能包含病毒的代码?他们将如何到达那里?我很厚吗?
  • 目标是什么?你想检查什么?你在构建可执行的二进制文件吗?你想防止什么?
  • Why on earth are you building code which may contain viruses 哈哈
  • 哈哈。但说真的,这与我自己的代码无关。它即将遵守安全和审计策略,并创建一个日志文件,其中显示“该工件已在 扫描”。去年,开发人员的 AV 工具因 jquery.js 的误报而发出警报。有了所有这些依赖项和新版本的库,您知道新版本中有什么吗?

标签: java maven-2 antivirus


【解决方案1】:

病毒从哪里来?

我还没有看到可以修改源代码的病毒,所以源代码可能是安全的(好吧,除非你不能信任你的开发人员)。

因此病毒可以隐藏在其中一个构建工具中并尝试修改 JAR。这里手头的工具是tripwire:它将为所有文件创建校验和,并且构建工具应该更改(除非您安装新版本;然后您必须再次运行tripwire)。

如果构建工具是安全的,您只需要一个保护操作系统的 AV 工具(因此打开和写入文件等功能是安全的)。为此,请使用贵公司的标准 AV。

为了使整个过程非常紧凑,您可以在构建新版本之前再次构建最后一个版本。旧版本的校验和不应更改(但请注意文件中的时间戳)。

【讨论】:

  • 校验和的好主意。但是,构建工具不是我关心的问题,而是合并到已发布工件中的外部库。
  • 同样的方法:用你的病毒工具检查一次,创建一个校验和并在构建期间或之后验证它。
【解决方案2】:

最佳做法是在不经常被病毒攻击的平台(即操作系统)上运行您的构建。

最佳做法是在构建平台的操作系统级别运行防病毒扫描程序。

最佳做法是及时更新您的操作系统补丁、锁定防火墙、不要在家庭网络上挂载可能已被感染的 USB 密钥等。

我从未听说过“感染”源代码、.class 文件或 JAR 文件的病毒。我想它们是可能的,但商业 AV 产品很有可能不会注意到它们,因为它们很不寻常。当然,如果病毒专门针对您/您的公司,则 AV 产品将无济于事。

但假设您确实有一个您认为可以工作的反病毒产品,您可以在旋转“发布版本”之前进行反病毒扫描。我不知道有什么插件会自动完成这项工作,但让 Maven 运行碰巧通过命令行调用病毒检查器的“一些批处理文件”应该不难。

【讨论】:

    【解决方案3】:

    您需要一个可编写脚本的防病毒程序。

    当你有了它,添加“扫描我刚刚构建的”步骤应该很容易。

    我相信 McAfee 的 Linux 版本可能正是您所需要的。

    【讨论】:

      【解决方案4】:

      如何将防病毒扫描整合到基于 Maven 和 Hudson 的构建过程中?

      如果这确实是一个问题,我认为您的安全团队应该强制您(和 maven)通过运行某种防病毒软件的代理。这将是正确的做事方式。

      但是,在我看来,从存储库中获取恶意代码的可能性接近于零,尤其是对于广泛使用的库(用户如此之多,我怀疑在你获取该代码之前没有人会注意到问题)而且我打赌被(网络)邮件、USB 密钥、下载软件感染的可能性要高得多。我知道这不是一个答案,但说真的,安全策略有时很荒谬。

      【讨论】:

      • 1) 当然,AV 工具(包括代理)已经到位。但是,由于我们向客户提供商业软件,我想考虑添加一个日志以表明我们已经检查了其中的所有内容以保持清洁。例如,CNet 对他们提供的所有下载都做同样的事情。这是一项服务,恕我直言,这是一项很好的服务。这让我感觉好多了。 (cnet.com/1991-13403_1-6722508-4.html?tag=contentMain;contentAux) 2) 我不知道公共存储库被感染的可能性有多大。但是存在校验和错误,查找和修复它们需要时间(参见 codehaus.org 上的 MEV-636)
      • CNET 正在分发可执行的二进制文件,我认为这没有可比性。如果您已经在代理级别运行了 AV,那么在构建过程中您将找不到更多内容。在这种情况下,只需生成一个哑文本文件,它具有相同的值,并且至少不会减慢您的构建速度。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 2010-10-02
      • 1970-01-01
      • 2010-10-13
      • 2010-11-29
      • 2013-09-13
      • 2010-11-13
      相关资源
      最近更新 更多