作者简介
Living,携程高级基础安全工程师,关注应用安全、渗透测试方面的技术。
一、DevSecOps面临的挑战
作为业务覆盖机票、酒店、度假、汽车票、火车票、支付等各个方面,为全球用户提供服务的在线旅游网站,携程每周都会有数以万计的应用发布次数,如何保证每一次发布代码的安全性成为了DevSecOps实践中最大的挑战。 不同于软件行业的SDL,DevOps和微服务在互联网行业的兴起使得安全不再是安全团队可以独立完成的任务,如何把安全嵌入DevSecOps的每一个流程,保证代码的安全,首先面临的问题是人力。 在软件行业,一个版本的发布从涉及到开发、测试、发布动辄数月,每个版本的发布都可以按照SDL流程完整地做一次安全评估,包括需求评审、威胁建模、安全开发、安全扫描。而在CI/CD模型下,每天都有几千次的发布,持续集成、持续部署,如何避免持续引入漏洞,仅仅靠人力是无法解决的。 另一个很重要的问题是如何培养安全意识——避免两次踩进同一个坑。相信做安全的同学都会遇到这样的问题:昨天刚找开发修了一个SQL注入,今天又写了另一处有注入的接口;昨天刚补了一处撞库接口,今天又来了一个验证码绕过。安全沦为救火队长,疲于奔命。其实本质还是需要提高业务团队的整体安全意识,避免安全变成被动的修补角色。 第三个问题是安全项目的推动难,对于安全工程师来说最差的体验是,“在甲方提工单和在乙方贴发票”。为什么推动这么困难,原因在于对业务团队来说这似乎是增加了额外的工作量,仅仅是修复一个漏洞就需要开发、测试甚至产品一起沟通拉齐,确定修复方案、排期,更不要说大规模的推动底层的框架、中间件的升级,一轮一轮的推动更是难上加难。而解决这些需要与公司框架、与CI/CD流程更紧密的结合,提供温和嵌入流程的默认安全方案。二、携程DevSecOps实践
2.2 安全评审&威胁建模
作为DevSecOps计划阶段重要的一环,威胁建模在携程的实践方式是对接公司内部的看板团队协作平台,面对各业务产品经理(即用户)。用户在看板平台上提交需求的时候,可以按照业务场景选择威胁建模的场景,系统根据内置模型中每种(业务)场景对应的威胁给出缓解措施。其对应关系是: 场景——标签(多对多) 标签——威胁(一对多) 威胁——缓解措施(一对一) 场景和标签的对应关系如下:2.3 SCA
SCA(Software Composition Analysis),第三方组件的安全检查。作为携程落地比较早的项目,在应用CI的过程中进行扫描分析,对于扫描发现中高危级别漏洞的应用就会进行发布的拦截。在项目的初期,最大的问题是动辄上万的漏洞告警,哪些漏洞需要修复,哪些漏洞不需要修复,哪些需要优先修复。 为了解决漏洞修复问题,我们进行了一些维度的划分,包括:- 漏洞等级(高、中、低)
- 对应CVE是否有POC
- 应用内外网属性
2.5 IAST/DAST
IAST/DAST在携程的实践是IAST agent被动检测+分布式扫描器主动扫描的方式。可以分为这么几个部分: 1)IAST agent 集成到测试环境应用docker容器的agent,hook tomcat底层调用,用来检测应用中的漏洞,同时会把所有访问到应用docker的http流量复制回传到用于收集流量的kafka队列。 2)IAST服务端 管理IAST agent和漏洞的控制台。 3)流量kafka队列 用于收集待扫描的流量,除了从IASTagent回传的流量,还有来自主动爬虫、chrome插件以及提测平台调用api发送过来的流量。 4)分布式扫描器 消费kafka里的流量并且按照url去重,调用扫描器进行漏洞扫描。- 扫描覆盖率高:只要正常功能测试能覆盖的流量都能被扫到
- 漏洞检出率高:IAST+DAST双重检测
- 误报率低:IAST的特性决定的低误报
2.6 漏洞管理
作为DevSecOps流程中重要的一环,漏洞管理平台是不可或缺的一部分,携程内部使用的自研漏洞平台实现了从漏洞发现、修复,到复盘的整个流程跟踪。漏洞管理流程包括: 1)漏洞跟踪 从漏洞发现生成工单到修复完成关闭工单。 2)漏洞统计 按漏洞类型、时间、严重等级、来源各个维度进行统计和分析。 3)漏洞复盘 携程内部对于内外部发现的漏洞都会进行复盘。对于外部漏洞,会复盘内部工具、流程是否能发现,记录未能发现的原因和改进措施。对于内部发现的漏洞,比如黑盒扫到的漏洞,会考虑白盒是否也能发现。如果不能,是否可以通过改进规则发现,通过这样的方式提高内部工具的漏洞检出率。团队招聘信息
携程信息安全部欢迎感兴趣的小伙伴加入,来建设和打磨DevSecOps。可投递简历到hwtu@trip.com,邮件标题:【资深应用安全工程师/应用安全专家】+【姓名】
资深应用安全工程师/应用安全专家 岗位职责: 1、参与公司DevSecOps流程制定、实施、推动、优化; 2、参与公司项目和产品的安全评审,识别安全风险,进行威胁建模; 3、参与公司DevSecOps工具链的调研、设计,包括不限于代码白盒扫描,自动化测试,IDE安全插件等; 4、熟悉主流应用和业务的风险点和安全方案,参与漏洞应急响应等工作; 5、输出及维护统一的安全解决方案,并能够推动安全方案的培训与落地; 岗位要求: 1、5年以上互联网行业安全工程师从业经验,有安全工具,平台的开发经验者优先; 2、熟悉Java语言,有JAVA等开发语言的代码审计能力,能够独自完成源码审计工作; 3、具备成熟的SDL工作经验,曾在互联网公司建立过SDL流程规范经验者优先; 4、在漏洞挖掘,渗透测试,代码审计及安全解决方案等领域有特长的优先; 5、有waf、rasp、源码扫描等应用安全产品使用、测试、开发安全经验者优先; 6、有框架层漏洞挖掘经验者优先; 7、自我驱动能力,具备良好的沟通表达能力,良好的团队合作意识。【推荐阅读】
7月12日(本周日)前京东5折优惠~《携程架构实践》
京东
当当
《携程人工智能实践》
京东
当当
“携程技术”公众号
分享,交流,成长