不幸的是,对于我们应用程序的安全性,我们通常不会在开发过程中“内置安全性”;相反,我们会等到最后一个可能的时刻才采取安全措施,通常是组建一个警察式的安全部门,并在安全人员和开发人员之间制造敌对情绪。
有很多很棒的安全资源,从DevOps 团队的工具到对 DevSecOps 如何改变安全的深刻分析。这一切都归结于您在开发周期中的哪个阶段进行安全防护。如果您的团队正在实施左移方法,那么您已经知道在编写任何代码之前,安全都需要成为重中之重。
为什么我们需要内置安全性
安全威胁非常真实——Verizon 最新的数据泄露报告引用了 2,216 起已确认的泄露事件和超过 53,000 起网络安全事件,这些事件发生在截至 2018 年 3 月的 12 个月内,遍及 65 个国家/地区。
请考虑 2018 年 9 月份的两份主要泄露报告
-
Facebook 数据泄露: 根据 Facebook 的说法,攻击者利用网站代码中的漏洞访问了 5000 万个帐户,这是一起重大的安全漏洞,使黑客能够看到用户的个人信息、照片甚至私人消息。该黑客专门影响了“以...身份查看”功能,该功能让用户可以查看他们的个人资料对其他人的外观。黑客利用此功能窃取 Facebook 的访问令牌,即让您保持登录 Facebook 状态的数字密钥,这样您每次使用该应用程序时都不必重新输入密码。
-
万豪/喜达屋预订数据泄露: 在喜达屋预订数据泄露事件中,据报告,有 5 亿万豪客户记录被盗,未经授权的数据访问可以追溯到 2014 年。此次泄露导致万豪和喜达屋的客户加入了 34% 的美国消费者,这些消费者在截至 2018 年 7 月的一年中,他们的个人信息遭到了泄露。
没有公司希望出现在这个名单上。为了避免这种情况,北卡罗来纳州立大学的 Laurie Williams 博士推出了一款名为“保护扑克”的游戏,以帮助团队在迭代计划之前将安全构建到工作流程中。
什么是保护扑克?
保护扑克是一种协作且非正式的方式来进行威胁建模,它利用了团队成员的知识和观点的多样性。它类似于计划扑克,但侧重于安全风险评估,而不是工作量估算。在保护扑克中,安全知识在团队中传递,将风险降低(即,在满足需求之前处理安全威胁)构建到迭代计划中。
该游戏为团队成员提供了一种结构化的方式来相互教育、揭示假设、提高对潜在威胁和复杂性的认识,以及揭示实现预期目标的其他方案。
理想情况下,该游戏在迭代计划期间由参与产品开发的所有人员进行,包括产品经理、项目经理、软件开发人员、测试人员、可用性工程师、安全工程师和其他利益相关者。这会为迭代的每个潜在需求产生总体相对安全风险。
之后,参与者可以使用相对风险向迭代添加故事以降低风险,并更改故事的验收标准以包括安全开发的步骤。这样,安全地实现需求的工作就被纳入到迭代中。
定义风险
虽然“风险”传统上计算为 (损失的概率)x(损失的影响),但保护扑克将安全风险定义为
安全风险 = (攻击的容易程度)x(可以通过成功攻击利用的资产价值)
该游戏会揭示可能对最容易利用的最高价值资产产生潜在影响的安全风险。这使团队可以在迭代计划期间讨论并可能解决这些风险。

如何玩保护扑克
此练习使用与预订酒店房间相关的客户数据资产的一个小样本:
资产价值 | 客户数据 |
---|---|
客户登录 ID | |
客户密码 | |
电子邮件 | |
客户姓名(名字) | |
客户姓名(姓氏) | |
信用卡 ID | |
信用卡 PIN | |
电子邮件 ID | |
护照 ID |
步骤 1:评估和排名您的软件资产
保护扑克游戏首先对数据资产进行评估。资产的价值基于资产的历史价值,或者,如果必须创建新资产来实现需求,则基于团队的讨论和投票。
价值点

您的软件资产的价值是多少?资产可以是数据库中的数据、系统进程或其他地方。在此步骤中,您正在评估和掌控您的 DNA——使您的公司独一无二的数据资产和其他知识产权——因为这些是潜在的目标。此步骤包括准确识别、分类、保护和优化从创建到最终处置的数据。
在此步骤中,您将列出您的资产并对其价值进行排名。在您分配价值点之前,请考虑以下问题,以确定每项资产对每个方的价值
对于运行该软件的公司
- 受功能控制的流程对关键操作有多重要?
- 受影响数据库中的数据对公司运营有多重要?
- 如果数据被恶意修改,可以恢复/重新创建吗?
- 数据泄露对公司或用户的声誉有多大危害?
对于攻击者
- 谁将受益于攻击应用程序?记住内部威胁!
- 获取数据后可以做什么?
- 获取或修改数据会造成多大的损害?
- 拒绝服务 (DoS) 对公司业务有何影响?对攻击者的业务有何影响?对竞争对手的业务有何影响?(例如,对万豪的 DoS 会提高另一家连锁酒店的销量吗?)
列出您的资产并对其价值点进行排名。保存此资产价值列表以备下一步使用。
想象一下,您的团队在酒店预订数据上进行了一轮保护扑克,并获得了以下结果
资产价值 | 客户数据 |
---|---|
2 | 客户登录 ID |
5 | 客户密码 |
8 | 电子邮件 |
3 | 客户姓名(名字) |
8 | 客户姓名(姓氏) |
20 | 信用卡 ID |
40 | 信用卡 PIN |
20 | 驾驶执照或护照 |
1 | 客户编号 |
步骤 2:校准新需求的攻击难度
在此示例中,下一个迭代中将出现三个功能请求
功能 1:添加“已知过敏”功能。 已经开发了一个新的移动应用程序,使客户可以从酒店的餐厅订购食物送到他们的房间。餐厅希望将已知的食物过敏(可选)信息标记给酒店客人,以防止患有严重已知过敏症的客人接触含有风险的食物。
功能 2:添加“紧急救援人员”角色。 目前,酒店预订系统中只有三个角色:酒店管理专业人士、预订管理员和客户。需要另一个角色:紧急救援人员 (ER)——警察、消防员、紧急医疗技术人员 (EMT) 和其他受过医学培训的紧急救援人员,他们在紧急现场或从紧急现场运送途中提供护理;在这种情况下,是酒店。新角色将使 ER 能够访问与紧急事件相关的酒店客人信息子集:姓名、ID、到达日期和离开日期。该功能还会在 ER 查看酒店客人的记录时向其发送通知电子邮件。
功能 3: 添加“客户组”角色。 要为来自同一公司或组织的客户创建团体预订,酒店需要以下信息
- 团体名称
- 团体编号
- 包含在该客户组中的客户 ID 编号
对于这些新功能中的每一个,尝试就使攻击者攻击每个新功能最容易的需求和使攻击最难的需求达成共识。
难度点

使用您的扑克牌,分配难度点;这些将是保护扑克练习剩余部分的端点。如果您改变主意或了解新信息,您可以更新这些值。
为了进行此练习,我们假设您的团队已经确定功能 1 的评分为 1(最难攻击),功能 3 的评分为 20(最容易攻击)。
步骤 3:计算安全风险
对于每个需求,请执行以下步骤来计算安全风险
- 在步骤 1 中的价值点表中,添加新功能所需的任何新数据资产,并使用您的扑克牌并考虑之前分配的相对值来为其赋值。然后确定哪些资产在新功能中使用,并将该信息作为新列添加到表中。
资产价值点 | 客户数据 | 在功能 # 中使用 |
---|---|---|
2 | 客户登录 ID | |
5 | 客户密码 | |
8 | 电子邮件 | 2,3 |
3 | 客户姓名(名字) | 2,3 |
8 | 客户姓名(姓氏) | 2,3 |
20 | 信用卡 ID | |
40 | 信用卡 PIN | |
20 | 驾驶执照或护照 | |
1 | 客户编号 | 1,2,3 |
2 | 已知过敏 | 1,2 |
8 | 客户组 | 3 |
8 | 客户组 # | 3 |
- 将映射到每个功能的总价值点相加并记录该总和。
功能 # | 总价值点 | 难度点 | 安全风险 |
---|---|---|---|
1 | 3 | ||
2 | 22 | ||
3 | 36 |
- 接下来,您的团队将为每个功能分配易攻击点数。但是,首先,每个人都必须进入黑客思维模式,假装自己怀有恶意。一旦您进入正确的思维模式,讨论一下怀有恶意的人可以多么容易地利用新功能,包括新功能是否使其更容易受到攻击。然后使用您的扑克牌为每个需求分配易攻击点数。
请记住:当成员可以自由表达意见、鼓励和庆祝意见多样性,并且每个人都乐于向他人学习时,保护扑克才有效。这个游戏的重点不是最终的数字;而是所有的对话和知识共享。
如果您需要帮助像黑客一样思考,请返回到步骤 1 中的问题,特别是:
- 谁会受益于攻击应用程序?
- 您有哪些内部威胁?
- 获取数据后可以做什么?
- 获取或修改数据会造成多大的损害?
- 拒绝服务 (DoS) 攻击对公司的业务和攻击者的业务有什么影响?
不要回避分歧和误解——它们可能预示着潜在的安全风险。通过在迭代计划期间进行这些辩论,您的团队可以在需求被设计或实施之前发现并解决风险。我们经常发现,在保护扑克会议期间开始的讨论会在之后继续,因为团队成员会发现许多不同的利用其系统的方法。
主持人应记录游戏中出现的任何潜在威胁的缓解措施。例如,“也许只有管理员才能执行此功能”或“我认为两个功能都不需要信用卡信息”等评论可以成为缓解风险的补充。
在完成一轮保护扑克——像黑客一样思考并提出可能利用新功能的场景——之后,想象您的团队分配了以下易攻击点数:
- 功能 1 保持不变,为 1(更难攻击)
- 功能 2 为 5
- 功能 3 现在为 13(从 20 下降,意味着比以前认为的更难攻击)
- 使用安全风险公式计算安全风险,方法是将价值点数(步骤 3B)乘以易攻击点数(步骤 3C):
安全风险 = (攻击的难易程度) x (成功攻击可能利用的资产价值)
功能 # | 总价值点 | 难度点 | 安全风险 |
---|---|---|---|
1 | 3 | 1 | 3 |
2 | 22 | 5 | 110 |
3 | 36 | 13 | 468 |
步骤 4:将缓解措施添加到迭代中
在此步骤中,您的团队决定将哪些内容添加到下一次迭代中以减轻风险。如果主持人使用白板或其他可视化表示形式来记录游戏过程中的评论,这将有所帮助。
考虑以下问题:
- 您真的需要收集这些客户数据吗?(考虑 GDPR:如果您是一家注重隐私的道德数据管理公司,您会经常问这个问题。)
- 您需要为电子邮件访问添加日志记录吗?
- 您应该删除用户,仅提供管理员权限吗?
- 您需要进行额外的威胁评估吗?
- 您需要实施数据加密吗? 假名化? 掩码解决方案?
试一试!
保护扑克提供了一种结构化的方式来:
- 获得团队内部对软件安全知识的共同理解。
- 允许工程师通过考虑风险来优先验证和加强资产,以生产更安全的软件。
- 识别出在代码的低风险区域过度投入宝贵和有限的时间的区域,这些区域已经得到充分加强,对攻击者来说没有吸引力,或者包含难以利用的漏洞。
- 通过利用团队在软件安全方面的经验和知识的多样性来发现和解决歧义。
- 通过在迭代计划期间对新需求进行轻量级软件风险评估,定期“内置安全性”。
- 通过全面提高团队内部的软件安全知识来减少产品中的漏洞。
您在公司中使用过保护扑克吗? 请在评论中告诉我们情况如何。
2 条评论