专栏首页携程技术干货 | 携程安全自动化测试之路

干货 | 携程安全自动化测试之路

作者简介

陈莹,携程信息安全部安全开发工程师。2013年加入携程,主要负责各类安全工具的研发,包括线上日志异常分析,实时攻击检测, 漏洞扫描等。

一、背景

业务代码上线前,通常会在测试环境经过一系列的功能测试。那么,从安全层面来说,web应用常见的web漏洞,如sql注入,xss攻击,敏感信息泄漏等,我们如何保证在上线前就能够自动化发现这些业务的安全漏洞呢?本文将详细讲述携程安全测试的自动化之路。

二、技术选型

市面上也有很多各种各样的开源、商业扫描器。单就应用这一层来说,漏洞扫描器一般分为主动扫描和被动扫描两种。

其中,主动扫描一般用于黑盒测试,其形式为提供一个URL入口地址,然后由扫描器中的爬虫模块爬取所有链接,对GET、POST等请求进行参数变形和污染,进行重放测试,然后依据返回信息中的状态码、数据大小、数据内容关键字等去判断该请求是否含有相应的漏洞。

另外一种常见的漏洞扫描方式就是被动扫描,与主动扫描相比,被动扫描并不进行大规模的爬虫爬取行为,而是直接通过捕获测试人员的测试请求,直接进行参数变形和污染来测试服务端的漏洞,如果通过响应信息能够判断出漏洞存在,则进行记录管理,有人工再去进行漏洞的复现和确认。

所以我们可以发现,主动扫描与被动扫描最主要的区别为被动式扫描器不主动获取站点链接,而是通过流量、获取测试人员的访问请求等手段去采集数据源,然后进行类似的安全检测。

除此之外,基于主动扫描的web扫描器还有其他的不足:

  1. 由于数据源来自爬虫爬取,独立的页面、API接口等就无法覆盖,存在检测遗漏情况。
  2. 如果是扫描单独的几个站点,主动扫描是够用的。但是在站点数量急剧增大的时候,主动扫描的效率、精准、速度都无法与被动扫描相比。

最终我们选择基于被动扫描的形式去实现自研web漏洞扫描器。

三、架构设计

基于以上自动化的安全检测需求,由我们内部研发了Hulk项目,通过网络流量镜像等方式来实现分布式的实时Web漏洞扫描系统。整个项目按模块可分为数据源,数据处理,漏洞检测,漏洞管理等几大模块。

如图所示,Http请求数据从数据源发送至Rabbitmq、Kafka等队列。交由统计、去重、去静态资源模块利用redis进行数据处理,处理后的unique请求存入Rabbitmq扫描队列,等待scan engine的消费。而scan engine则全权负责参数解析和变形,利用预先设置好的规则顺序进行请求重放和漏洞检测。最终,如果Scan engine判断出某个请求含有漏洞,则落地到MySQL中,交由Hulk的运营人员进行漏洞的确认和复现。

四、数据源

数据来源主要有2种类型,即基于网络流量镜像的方式和基于Http代理的方式。

基于网络流量镜像的方式中,需要在办公网到测试环境核心交换机上做流量镜像,通过dpdk、pf_ring等高速抓包模块进行流量获取,并按照五元组信息进行tcp流重组。然后通过http解析器,将其中http请求的请求方法、请求地址、请求域名、请求参数等数据提取成json格式,发送到kafka中。

当然,这其中还有一部分为https的请求,需要通过rsa key解密后才能交由http解析器正常解析。随着http2.0时代的来临,大部分的https请求在进行秘钥交换时采用了更高安全性的Diffie-Hellman秘钥交换算法,我们的https解密模块也逐渐退出历史舞台,只能后移流量镜像模块,转向纯Http的流量捕获。

基于Http代理的方式中,只需要配置代理服务器,将测试人员的测试请求数据收集起来,然后采用同样的模块进行去重和统计处理,结果发送至Kafka队列,有着与基于流量的形式同样的处理流程。

五、数据处理

流量进入到消息队列之后,去重模块会从消息队列消费,计算出url、args等的MD5值,在redis中进行去重,如果是一个已经扫描过的地址,则只记录一条日志到ES中;如果是一个新的URL地址,就将其具体的HTTP请求发送至消息队列中,等待scan engine的消费。

在数据处理的时候,去重是非常重要的,这里涉及到不同请求方法、不同的参数,任何一点不同,都可以被看重是不同的URL地址,也对应了不同的后端接口。

除了这些之外,针对伪静态URL,我们也需要将/products/655554.html归一化为/products/NNNNN.html。如上图所示,将数字归一化来去掉30%左右的相似URL。然后利用redis的TTL特性,使得一段时间之前扫过的URL,可以在下一次的去重中被判断为新URL,从而再次加入扫描队列,等待新一轮的安全检测。

六、漏洞检测

扫描引擎从消息队列中读取去重后的流量数据,使用多种不同的方式去进行漏洞扫描。

  1. 一般的web漏洞配置规则来检查,比如xss漏洞, 文件包含漏洞,敏感文件读取等,先替换参数,或重新构造URL, 再重放, 再检查响应内容是否包含特定的信息, 以此来判断是否存在漏洞;
  2. sql注入漏洞则使用高效的开源工具sqlmap来检测,避免重复造轮子;
  3. 另外还有一些其他漏洞,比如存储型xss,struts漏洞,ssl的漏洞,这些无法使用简单的替换参数重放的方法,但是我们提供了插件编写功能,这样可以让运营人员写插件,以满足各种需求。

但是,从storm实时攻击检测系统过来的流量是不带cookie的, 如何扫描登录后漏洞呢?我们生产url和测试url可以通过一种映射关系进行转换,保存各个测试站点的登陆信息文件。当读取一个生产的url后,去获取它的测试地址和登录信息,就可以去扫描它相应的测试地址了。这样就避免了影响线上用户。

扫描速度也是扫描任务的一个关键指标,在整个架构中,不同的模块之间是通过消息队列进行数据传输的。所以当去重模块或者扫描引擎模块处理速度不够快,造成数据积压时,我们可以通过增加模块实例来进行水平拓展。

七、漏洞管理

对于扫描结果中存在问题的URL和对应漏洞,我们会进行一个快照功能。即将当时的请求和响应包完整保存下来,方便运营人员验证漏洞。

且对于响应体内容,还可以进行一个基本的本地渲染,复现漏洞发现时的真实情况。

八、规则测试

同时,为保证规则有效性,我们还在管理控制台中集成了规则的测试功能:

这样,只需要搭建一个带各种漏洞的测试环境,规则运营人员就可以在这里配置, 然后针对性地对每一个规则、插件进行有效性测试。

九、总结

目前,整个项目上线稳定运行两年多,已发现线上高危漏洞30+,中危漏洞300+,低危漏洞 400+,为线上业务安全运行提供了强有力的保障。当然, 对于数据污染、扫描频率、去重逻辑、扫描类型等扫描器常见的诟病,我们后续也会一直不断进行优化迭代。

本文分享自微信公众号 - 携程技术中心(ctriptech),作者:陈莹

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WEB-UI自动化测试-干货

    少年读书,如隙中窥月;中年读书,如庭中望月;老年读书,如台上玩月。皆以阅历之深浅,为所得之深浅耳。

    测试小兵
  • 干货 | 携程图像智能化建设之路

    携程技术
  • 干货 | 携程网络防火墙自动化运维之道

    ? 随着互联网技术的不断发展,在线网站的规模越来越大,防火墙作为网站的安全屏障,被大量的使用。防火墙数量的增加以及防火墙中安全策略条目的增加,安全工程师的运维...

    携程技术
  • 干货 | 携程平台化常态化数据治理之路

    瑞强,携程高级大数据开发工程师,负责集团客户数据平台、数据资产管理平台的开发和数据治理的推进。

    携程技术
  • 干货 | 基于 BDD 理念的 UI 自动化测试在携程度假的应用

    Leo Li,携程高级软件工程师,负责度假 BDD-Test UI 自动化测试框架的研发、维护和迭代等工作。

    携程技术
  • 干货 | 一文带你了解携程第四代全链路测试系统

    康猛,携程网站运营中心资深技术支持工程师,在互联网基础架构系统设计,后端开发,性能测试领域有多年实践经验。喜欢钻研新技术,转化研究成果,提升工作效率。

    携程技术
  • 干货 | Trip.com 智能自动化探索测试

    快速的业务迭代要求快速的App发版节奏,随之而来的是质量保障压力的增大。而增大自动化程度,提升QA效率就是一种非常重要的手段,以适应快速发版的要求。

    携程技术
  • 干货 | 携程AI推理性能的自动化优化实践

    携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本,实现AI技术在旅游场景的成...

    携程技术
  • 【新梦想干货分享】接口自动化测试

    分层自动化测试是最近曝光度比较高的概念,传统的自动化测试更关注的是UI层的自动化测试,而分层自动化测试则倡导产品的不同层次都要进行自动化测试。

    新梦想IT职业教育
  • 干货 | 携程基于Mirror集群的自助性能测试实践

    性能测试在整个软件/互联网行业中占据着非常重要的位置,自身应用的性能好坏,不仅影响客户体验和用户粘度,也是公司品牌的一部分,如何高效率地完成性能测试就显得格外重...

    携程技术
  • 面试必备:接口自动化测试精选面试干货

    大体来说,经历以下过程:接口需求调研、接口测试工具选择、接口测试用例编写、接口测试执行、接口测试回归、接口测试自动化持续集成。具体来说,接口测试流程分成以下九步...

    测试开发技术
  • API测试平台,全程自动化测试

    API自动化测试平台可以对相关业务领域的API按照一定的业务逻辑进行编排然后进行自动化测试,可以完成非常复杂的API测试场景。RestCloud API自动化测...

    用户8905905
  • 干货:高水平自动化工程师的成长进阶之路

    写在前面:进阶没有绝招,但好学和热爱绝对是必杀技。 【能力特点】 1、能用计算机进行PLC控制编程与调试。 2、能用计算机进行CAD电气原理图纸的绘制。 3、...

    机器人网
  • 终端自动化测试探索之路

    测试作为质量保证极其重要的一环,在移动App开发流程中起到非常关键的作用。从开发工程师到测试工程师,人人都应具备良好的测试意识,将隐患和风险在上线之前找出并解决...

    岛哥的质量效能笔记
  • 浅谈无人机智能安防解决方案的八大应用场景

    据相关数据统计,近年来无人机的市场逐渐扩大,国内无人机市场规模的增长速度基本在50%左右,每年无人机的市场增长规模都基本在20%左右,由此可见,各行各业的无人机...

    TSINGSEE青犀视频
  • 云渗透安全 - Nebula 自动化测试

    Nebula 是一个云和(希望如此)DevOps 渗透测试框架。它为每个提供者和每个功能构建了模块。截至 2021 年 4 月,它仅涵盖 AWS,但目前是一个正...

    Khan安全团队
  • eptest x优测:自动化测试的EPC之路

    01 项目背景 eptest终端自动化测试平台是PCG内部为了推行EPC标准建立的共建项目,2019年7月正式启动。 经过评估,eptest对于底座服务要求的...

    腾讯大讲堂
  • 干货 | 敏捷模式下携程的接口自动化平台演变

    现有的接口自动化测试实现,多以使用代码工程项目的形式,借助第三方软件测试编程框架,手工编写自动化测试脚本,并采用其它的第三方开源调度平台(如Jenkins)实现...

    携程技术
  • 无人机送快递的普及还要克服哪些障碍?

    今年的“双十一”,各大电商销售额再创新高,也给快递业带来前所未有的压力。我国快递业务量从2014年首次突破100亿件并超越美国,成为“世界第一快递大国”以来,2...

    机器人网

扫码关注云+社区

领取腾讯云代金券