2017年12月2日星期六

Gartner 2017调研报告:DevSecOps应当做好的十件事(上)

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Gartner 2017调研报告:DevSecOps应当做好的十件事(上)  阅读原文»

背景介绍

惨痛的教训告诉我们:DevSecOps很重要!

对于很多企业而言,云和DevOps是推动企业业务发展的关键的技术引擎。企业的IT、安全和开发人员都知道在云和DevOps环境中,有大量的敏感信息(如密钥和凭据)需要保护。尽管大部分人都有安全方面的意识,但我们仍能看到诸多的数据泄漏事件。

以最近发生的Uber数据泄露事件为例:

"11月22日,Uber发布声明,承认2016年曾遭黑客攻击并导致数据大规模泄露。根据这份声明,两名黑客通过第三方云服务对Uber实施了攻击,获取了5700万名用户数据,包括司机的姓名和驾照号码,用户的姓名、邮箱和手机号。"

对于面向消费者的企业而言,信任是企业顺利发展的一个重要组成部分。然而,不幸的是,最近几年,企业或机构发生用户信息泄露事件正在变的越来越普遍,引发的危害及潜在的破坏不可估量。

调查发现,Uber数据泄露的原因竟然是工程师将解锁数据库的安全密钥被存储在GitHub的一个可以公开访问的页面。媒体将称作是"In major goof"(超级傻瓜)的失误。

然而,这类由于操作不当引发数据泄漏的事件并不是孤案,尤其值得注意的是,当今云环境和DevOps的迅速发展导致安全风险显著地提高了。安全公司 Detectify 的安全顾问 FransRosén 曾于今年 7 月 13 日发布一份报告称"网络管理员经常忽略 AWS 访问控制列表( ACL )规则,因服务器错误配置而导致大量数据泄露。"

在网络急速发展的大数据时代,很多企业都贯彻着"敏捷"的思维和行动,这是一个危险的信号,而且正在不断的被验证着:越来越多的消费者、监管机构和市场发现由此所造成的数据泄漏的代价是高昂的、无法接受的。由于数据泄漏,你可能会看到市场资本中一夕之间损失数亿美元、消费者对企业和机构的信任度下降,在某些情况下,高管们的职业生涯可能会结束或停滞不前。毫不夸张地说,一些依赖数据生存的企业甚至可能在无意中因为一个密钥存储的疏忽而使整个企业面临灭顶之灾,至少竞争对手不会放弃这些机会。

事实上,通过实施最低限度的特权,很多数据泄露事件都是可以提前预防的。接下来,我们将重点讨论一下DevSecOps的概念,以及企业想要成功实行DevSecOps应采取的十项有效措施

DevSecOps的概念

DevOps是Development和Operations的缩写,而DevSecOps则是Development、Security和Operations的缩写。John Willis(DevOps Cookbook合著者之一)称Patrick Debois是DevOps的缔造者,而DevOps的传道者们认为,DevSecOps的基本理念是让每一个解决方案、开发测试的多个跨部门协作人员都融入开发运维和安全的理念,并正确地理解DevOps的做法与含义。也就是说DevSecOps是一个项目组织方式,因此并不不存在DevOps者,更不是说将开发环境和生产环境整合在一起的意思,DevSecOps是一个群体做法,核心理念是:"安全是整个IT团队(包括开发、运维及安全团队)所有成员的责任,需要贯穿整个业务生命周期(从开发到运营)的每一个环节。"

将安全整合到DevOps的"DevSecOps"会带来思维方式、流程和技术的整体变化。安全和风险管理的领导者,必须坚持合作,DevOps的敏捷性意味着其在开发过程是无缝的和透明的,同理,"DevSecOps"中的"安全"也应当是沉默的。

企业在执行DevSecOps时通常会面临以下几个方面的挑战:

  • 作为一名安全或风险管理人员,应当很清楚企业的业务发展是核心,因此向客户提供新的IT功能的产品开发团队才是王道,而不是信息安全或IT团队。
  • 信息安全工作必须适应开发过程和相应的工具,而不是背道而驰。
  • 组织使用DevOps生产新的应用和服务,DevOps相关的过程和工具也有责任遵照公司对其他应用程序的要求,产生安全且符合要求的代码。
  • 要求应用程序达到百分百地安全是不现实的,企业一旦陷入"将安全漏洞的数量降为零"的错误追求中,安全测试的负担识别加重,且很可能成为业务发展的一个障碍。

因此,问题的关键是风险的控制和管理,而非单纯的追求安全。想要确保应用程序和数据安全,在进行安全和风险管理(Security and risk management,SRM)时,应当注意:

  • 将安全和合规测试无缝地整合到DevSecOps中,使开发者专注工作在持续集成和持续部署工具链环境中。
  • 持续的扫描已知的漏洞和配置错误,对象包括所有开源的和第三方组件。理想情况下,管理并维护一套完整的资产清单,便于完成对所有软件组件的分析。
  • 不要尝试删除自定义代码中所有未知的漏洞,相反,应把开发人员看作放在最严谨和最自信的人。
  • 鼓励尝试使用新的工具或方式,以减少与开发人员的摩擦,例如使用交互式应用安全测试(IAST)来取代传统的静态和动态测试。
  • 把信息安全团队完美地融入DevOps进程中。
  • 使用相同的统一的规范来处理所有自动化脚本、模板、图像和设计,并保证安全工作覆盖了所有的源代码。

企业对DevSecOps的战略规划

Gartner 分析师的调查结果显示:

  • 2019年,超过70%的企业将实施DevSecOps的相关举措,实现针对开源软件和商业软件包的自动化安全漏洞和配置扫描,2016年这一数据低于10%。
  • 2021年,80%的快速发展团队将实践DevSecOps的举措,2017年这一数字为15%。

当今,DevOps已经成为企业IT能力快速发展和持续交付的首选方法,正确的实施DevOps对企业发展至关重要。

尽管大多数情况下,DevOps未能合理的处置安全性和合规性的问题,但值得高兴的是,企业越来越重视这一情况,根据Gartner的调查数据显示,在受约束的环境中实施DevOps,最优策略是与信息安全紧密结合,如下图所示:

*来源:Gartner(2017年10月)

在过去的一年中,Gartner的调研数据显示,"如何安全地将安全性集成到DevOps中(即交付DevSecOps) 一直是客户感兴趣的领域中关注度遮增长最快的结点之一,Gartner的分析师们进行了600多次的调查,不断的与不同的客户进行交流,沟通他们在DevSecOps方面实施了那些卓有成效的举措,通过分析这些案例,总结出了十项最佳实践,SRM的领导者如果想要成功的交付DevSecOps,可以优先考虑这些方法。

成功交付DevSecOps的十条建议

(1)使您的安全测试工具和过程能够很好的适应开发人员,而不是背道而驰

DevOps的哲学植根于它打破了传统IT领域的陈规,打通了开发和运营的脉络,然而,安全是另一个需要被移除和整合的领域。如果能正确的实施,DevSecOps里的"安全"应当是静默的,换句话说,DevSecOps的目标应该是尽可能的将"安全"无缝并透明地交付给开发者。

不要强迫DevOps开发者去适应信息安全的传统过程,相反,应当有计划的持续性的将安全无缝地集成到开发者的持续集成/持续部署(CI / CD)的工具和流程中。对于那些习惯于迫使开发人员遵从我们的流程的信息安全专业人员来说,重要的是要转变心态,因此有必要进行一些调整,例如:

  • 不要使开发者离开他们熟悉的工具链环境。这意味着你的安全测试需要集成到开发者的开发环境(IDE)和CI/CD工具链的工具中(如Jenkins、Bamboo、Microsoft Team Foundation Server、Chef、Puppet 或Ansible)。
  • 集成安全扫描,使信息安全专业人员不需要再扫描应用程序,例外情况下,才需要信息安全人员提供援助。应尽可能做到,一切对开发人员来说都是自动化的和透明的。
  • 通过应用编程接口(API)构建安全性和合规性扫描平台,而不是通过安全厂商的本地控制台。测试结果应在通过你自己开发的仪表板来呈现(例如Sonar、Maven 或 Jenkins)。因此,要求所有安全扫描工具和服务都完全API化。
  • 使用威胁建模工具作为非功能性需求的一部分,自动化简单的收集所有新增应用程序的安全需求。
  • 通过开发者现有的漏洞跟踪过程(如JIRA或BugTraq),解决检测到的安全问题。
  • 改变心态,将一次性的安全扫描转化成连续地安全保证过程,从项目一开始就将安全集成进去,并评估每一次新的迭代。

(2)不要试图在开发过程中消除所有漏洞

有一句流传了几百年的格言,后来因伏尔泰的推崇而闻名:

Il meglio è nemico del bene (Pescetti)

Le mieux est l’ennemi du bien (Voltaire)

这句话的意思是"完美是好的敌人/完美是效率的敌人",其所揭示的寓意放到现在依然适用,尤其是在数字化商务领域,在那里,"信息安全驱动完美"的安全理念与企业和开发者对速度和敏捷性的需求往往是不一致的。

没有完美的安全,零风险是不可能的。对于DevSecOps而言,我们要做的是持续的风险和信任评估以及对应用程序漏洞进行优先级排序。为了消除应用程序可能存在的所有漏洞,我们将会放慢开发人员的进度,寻找那些不是真实的(误报)的问题,或者解决真正的、但不是直接或容易利用的低风险漏洞,无疑是在浪费开发人员的时间。

在测试速度、浪费开发者时间(误报和假阴性风险增加)之间需要权衡。实施DevSecOps时,信息安全人员必须接受:"零漏洞"既不可能也不可取,尤其是当它明显阻碍了新服务开发和创新步伐的时候。

此外,我们可以通过使用运行时保护控制来补偿已知的、较低风险的脆弱性或未知的脆弱性的剩余风险:

  • 基于网络和主机的入侵防御系统(IPS
    利用三个简单的PHP脚本实现图像隐写  阅读原文»

    背景介绍

    隐写术是一种抗数据以隐藏的方式来记录并传输的技术,也有人称之为艺术或科学,隐写术的目的是隐蔽的传输信息,除了发送者和预期的接收者之外,没有人会察觉到消息的存在。

    图像隐写术是一种在图像中隐藏数据的技术,可以防止非预期用户检测到这些隐藏的消息或数据。

    相关理论

    计算机上显示的图像是由一个个像素组成的 每个像素由3个字节表示,第一个参数为红色值,第二个参数为绿色,第三个参数为蓝色值,这三种颜色的组合决定了像素显示出来的实际颜色。

    图像是由称为像素的小点组成的。每个像素表示为3个字节:一个为红色,一个为绿色,一个为蓝色。这三种颜色的组合决定了像素显示的实际颜色。

    红色:

    二进制:11001001

    十进制:201

    绿色:

    二进制:11111 000

    十进制:248

    蓝色:

    二进制:000000 11

    十进制:3

    图像隐写术的原理

    图像隐写术的基本思想在于人眼无法识别出最小有效位(Least Significant Bit,LSB)的变化。因此,可以通过修改RGB的LSB的值来存储想要隐藏的消息,外观看起来不影响图像的颜色。

    不妨举一个具体的例子,假设我们想在图像中隐藏1101,而且只改变代表蓝色的LSB的值。当然了,也可以改变所有红色、绿色和蓝色的LSB值,这样一来,就可以隐藏更多的信息了。

    首先获取到图像中每个像素的RGB值。因为我们想要隐藏4bit的数据,而且我们计划改变蓝色组件,所以我们需要选取图像中的4个像素。

    假设图像的前4个像素的RGB值为:

    11001100 10010001 00101011

    00011000 11110000 11111110

    11100010 00100101 01010101

    11111101 00001010 01000011

    此时,将每个像素的RGB值的最后一位替换为"1101",如此一来,这四个像素的新的RGB值为:

    11001100 10010001 00101011

    00011000 11110000 11111111

    11100010 00100101 01010100

    11111101 00001010 01000011

    蓝色高亮部分显示了隐藏在图像中的消息。

    接下来,将新的RGB值设置为像素,由于变化非常细微,人眼很难识别出来与原图的差别。

    加密过程已经完成了,解密过程也特别简单,获取图像每个像素的RGB值,进而获取到对应的LSB,即隐藏的信息。

    PHP脚本

    前文讲述了一个最简单的图像隐写,这个过程可以通过3个PHP脚本来实现:

    encrypt.php

    decrypt.php

    functions.php

    视频资料


    黑客技术官网地址:http://www.hackdig.com/

    阅读更多内容

没有评论:

发表评论