不幸的是,对于我们应用程序的安全性而言,我们通常不会在开发中“内置安全性”;相反,我们等到最后一刻才匆忙采取安全措施,通常会成立一个警察式的安全部门,并在安全人员和开发人员之间制造对抗情绪。
有很多很棒的安全资源,从DevOps 团队的工具到对DevSecOps 如何改变安全性的深思熟虑的分析。这一切都归结于您在开发周期中的哪个阶段进行安全性工作。如果您的团队正在实施“左移”方法,那么您已经知道在编写任何代码之前,安全性需要成为首要考虑因素。
为什么我们需要内置安全性
安全威胁是非常真实的——Verizon 最新的数据泄露报告引用了 2,216 起已确认的泄露事件和超过 53,000 起网络安全事件,这些事件发生在截至 2018 年 3 月的 12 个月内在 65 个国家/地区发生。
请考虑以下 2018 年 9 月的两份主要泄露报告
-
Facebook 数据泄露: 根据 Facebook 的说法,攻击者利用网站代码中的漏洞访问了 5000 万个帐户,这是一次重大的安全漏洞,使黑客能够查看用户的个人信息、照片,甚至私人消息。该黑客攻击专门影响了“查看方式”功能,该功能允许用户查看他们的个人资料对其他人的样子。黑客使用此功能窃取 Facebook 的访问令牌,即数字密钥,使您保持登录 Facebook 状态,这样您就不必在每次使用该应用时重新输入密码。
-
万豪/喜达屋预订数据泄露: 在喜达屋预订数据泄露事件中,据报道有五亿万豪客户记录被盗,未经授权的数据访问可追溯到 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 条评论