Shingle,音[ˈʃɪŋɡl],是世界上第一款(唯一?)用于安全威胁评估的微信小程序,方便团队开展STRIDE建模,支持项目向导、中英文以及多人协作。
0x00 楔子
对于任何安全工具的使用不要拘泥于现有的用法,本微信小程序并不是简单罗列安全评估的步骤要点,而是进一步研究安全的出发点和供这种研究使用的方法,甲方安全的不要有乙方思路。推行SDL的工作中必须考虑面临的实际情况、现实的确切事实,而不是抱住国内外某些公司的"最佳实践"观念不放(根本没有什么是"最佳实践"),只知道从公式、方法论出发、思想僵化,而不是从实际中具体情况具体分析,是做好不了安全设计的。从业务中来,到业务中去需要精心分析需求,然后把业务所不清楚的安全因素集中起来分析,问题找对了,办法就有了,然后为集中精力为业务赋能,把安全视为产品具备的基本属性,同业务方反复做宣传、解释,使业务学习-提升-学习,坚持下去,见之于行动,无限循环。
"为学之实,贵在践履",安全专家的价值在于指导实践,安全知识的目的在于合理应用。安全是企业发展的工具,在初创建设时期保障成长,在战略发展时期提供竞争力,做这些工作是逐次演进的,还在纠结于领导重不重视实在是舍本逐末、落后的思路。自动化是安全常态化运营阶段的有效工具,解放人力统一标准提升效率。STRIDE是引导发现威胁的助记符工具,不仅仅是为了给威胁进行分类。
0x01 痛点
笔者越来意识到威胁建模不应当是安全专家闭门造车画出一系列DFD(数据流)图后,对业务人员拿出报告说:系统有XX威胁,会带来XX风险,这里有XX措施,解决他们!现代软件开发的威胁建模环节应当是敏捷和集成的,可以同其他团队建立协作共同实现安全。笔者联想到《威胁建模:交付和设计更安全的软件》书中提到的微软发明的纸牌"权限提升游戏"的思路,尝试开发出一套用于威胁建模的微信小程序为各位软件安全从业人员提供辅助,团队成员按照教程指引,可以方便实施威胁建模,回溯历史模型帮助设计、开发、测试人员思考系统在设计阶段会出现哪些问题,然后将重点资源聚焦在需要消减的威胁上,而不是被动等着渗透测试和安全审计,安全不是黑白盒测试出来的,是设计开发出来的。经常性的威胁建模可以锻炼信心,培养配合和技术的熟练度。线上线下结合评估的维度不会泄露企业敏感信息,可以放心使用小程序服务。
0x02 威胁建模活动组织方法
道具
黑笔、白板、本微信小程序、会议纪要、笔记本
使用方法
- 白板画出基本准确的软件系统设计架构,确保团队成员均清楚了解数据流向;
- 尽量每十五分钟内,独立使用小程序选取卡片,质疑每个模块是否具备STRIDE威胁;
- 选定小程序里的对应的威胁卡片和上面的分数,成员离手,保存。
- 讨论阶段:
- 玩法一、陈述卡片上威胁和模块节点对应的理由、打分的依据,使用四种计算方法衡量打分。
- 玩法二、互相不让看到选择的分数,每人选择一张卡片,卡片上的数据代表分数,J-A是11-14,A表示发现一种新的模式。说服别人,每轮卡片得分最高者胜。
- 安全、开发、架构组分别使用一套卡片参与,当然全部人员也可以使用同一套卡片,卡片是足够的。反复充分讨论现有架构设计的每个场景面临的威胁。
- 以信任边界、数据、资产是什么、哪里可能出错、如何应对、该如何做得更好四个角度记录下来威胁。
- 接近讨论完成后,随机选取一张表示威胁卡片,再一次以项目整体思考是否还可以将卡片应用在系统中。
- 对每个威胁,给出综合的策略和处置办法。
- 在下一个迭代时,反复执行。
要点
- 确保在会议室的小伙伴们了解微软STIDER威胁、DREAD评估、owasp top10机制。
- 但是不要纠结于威胁具体分到哪个类,既然已经发现了,记录下就是了
- 会议主持人聚焦结构化思考,积极讨论也要注意纠偏,不要考虑执行和排期。
0x03 使用示例
多人
背景:假设企业要进行上云时的安全评估
-
项目相关人画出系统示意图:
-
与会人员打开微信小程序,组织人创建一个project,示例叫做aliyun 20190526,
-
点击create后,分别开始STRIDE六个方面的威胁建模,可以微信转发干系人,邀请加入此环节的讨论。
-
与会者各自思考,根据认定威胁级别,点击对应的打分。对于结果总分有四种计算方式:算术平均数、切尾平均数、中位数、和自定义。自定义分数的考虑是威胁尚未发生,某些场景下当然可能给出最高,需要主持人权衡。
-
依次完成STRIDE六个步骤的考量。得到一个项目的总分,中间的时间记录是为了提醒参与者不要跑题,加快节奏,会议不要超过两个小时,另外留意花费较多时间讨论的威胁,往往正是项目组技术的盲区。
- 点击finish完成一次评估,对应对针对威胁的处置措施达成一致,散会。
- 下个迭代或者需求、代码有变动时,再举行一次会议,横向比对威胁分数的收敛变化。
单人
单人也可以进行评估,无需邀请人员," 其作始也简,其将毕也必巨 " ,尽量对每个新功能进行一次建模。比如需要开发一个上传结果、后台分析功能的函数接口,尝试画出系统原型。
打开微信小程序,花费几分钟进行一番评估,改进函数对外的暴露、对内调度的安全性,拥有了体系化防御的概念。
0x04 Q&A
- Q:小程序的license和商业使用范围?
A:程序基于MIT协议,卡牌图片时微软发明的,版权基于https://creativecommons.org/licenses/by/3.0/us/ ,你可以分享、售卖、用于商业产品开发活动。
- Q:和攻击框架和渗透测试思路可以结合起来吗?
A:Forget That Poor ATT&CK !不要像攻击者一样思考,因为你们信息不对称,建模结果会错误,如果团队黑客较多,请用攻击树和攻击库。
- Q:我想提出建议?
A:请直接点击"吐个槽吧"链接,或者在关联的公众号内留言
- Q:为什么'Project'不能删除?
A:你没有那么多项目需要评估,认真对待每一次活动,力求达到准确。
- Q:威胁建模和威胁情报是一回事吗?
A:完全没有关系,前者侧重主动训练和解决问题,后者被动提供响应和情报信息。建模不能提供应急、关联攻击者能力,但是可以推动组织和项目层面的软件安全战略。
- Q:下个版本还有什么计划?
A:可能考虑将Private,隐私纳入评估模型中,基于信息差概念来保护Information的安全将被Data Technology取代,另外性能、流畅性、前端界面仍需要大量调整,创建任务有时会卡住。
0x05 其他游戏
其实国外涉及安全的桌游有不少,如果能寓教于乐,我们的工作定会轻松不少。:)
CIA: Collect It All 这个游戏是一款基于CIA游戏Collection Deck的竞技纸牌游戏。玩家扮演的角色是收集情报并在多轮次序中处理安全威胁。每一轮开始时都会手上拿满智力战术,并且必须制定策略以成功化解各种危机。战术和危机都包含政治,军事,经济和武器方面。
Cyber Threat Defender(CTD)是一款多玩家可收集的纸牌游戏,旨在教授重要的网络安全信息和策略。无论技术水平如何,CTD都是一款易于玩耍,引人入胜的游戏。玩家必须保护自己免受攻击,同时建立强大的网络,成为真正的网络威胁防御者!
GAP,一款提高关于密码意识的游戏 是一篇论文,“探讨严肃游戏的潜力,教育用户了解对密码安全产生负面影响的各种功能。具体来说,我们设计了一款名为GAP的基于网络的休闲游戏并评估其影响通过与119名参与者进行比较用户研究。研究结果显示,参与GAP的参与者在识别不安全密码功能方面表现出比未玩GAP的参与者更好的表现。除了具有教育价值外,大多数参与者还发现GAP十分有趣“。
Operation Digital Chameleon:红队和蓝队制定攻击和防御策略,以探索关键基础架构的IT安全性,作为为期2天的IT安全培训的一部分。该游戏的目的是提高IT安全专家和IT专业人员(如CERT团队,CIO,风险经理,管理员)的IT安全意识。由Andreas Rieb开发。
owasp有个类似的项目cornucopia,叫做聚宝盆?本意象征丰饶,意象是哺育宙斯神的羊的角内呈现满溢的鲜花、水果等。访问是https://www.owasp.org/index.php/OWASP_Cornucopia,卡片也是13张,A-K,此外还有大小王,内容主要来源是安全编码实践,包括数据校验和编码、认证、会话管理、授权、加密、其他。
0x06 扩展阅读
国内的关于威胁建模的实践不多,大厂又不愿献宝,adam的书《威胁建模:设计和交付更安全的软件》只有第二、三、四、七、十一、十七章节可读,其他章节可以不看。我认可推荐的材料是:
- https://mp.weixin.qq.com/s/kV2nXuBywUnkj_VWA7CftQ
- https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-threats
- https://www.secrss.com/articles/3298
- https://msdn.microsoft.com/zh-cn/magazine/dd347831.aspx
- http://netsecurity.51cto.com/art/201701/527240.htm?mobile
- https://xz.aliyun.com/t/2061
0x07 致谢
感谢Darrick、″ `мч'|哆、他们制作的scrum敏捷项目主框架对我帮助很大;感谢星空与飞鸟,他参与者大量内测并提出了重要的改进建议,感谢淡蓝色的忧伤帮我定位到功能缺陷。