B站安全开发流程落地实践

news2024/12/25 14:51:48

一. 什么是安全开发生命周期(SDL)

1.1 SDL诞生背景

随着互联网技术的快速发展,网络系统及应用在给人们的生活带来巨大便利的同时,信息安全问题也逐渐成为用户和企业关注的焦点。然而,安全问题的管理和解决需要一个系统的、完整的解决方案,在缺乏有效解决方案的情况下,很容易因为开发人员的疏忽或缺乏安全设计,导致系统存在安全漏洞。这些漏洞一旦被恶意用户利用,将会造成严重的安全风险或经济损失。

在此背景下,微软在2004年正式提出了安全开发生命周期模型(SDL),并在其软件开发过程中广泛应用。SDL模型旨在通过整合安全能力到软件开发的各个阶段,从而提高软件系统的整体安全性,减少安全漏洞的产生。随着时间的推移,SDL已成为一种广泛应用的企业应用安全建设模型,已经被越来越多的组织和企业使用,并被证明是一种有效提升系统安全性的方法。

1.2 SDL模型概述

SDL的核心理念就是从需求、设计到发布产品的每一个阶段都增加相应必要的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度。其流程主要分为以下七部分:安全培训、安全需求、安全设计、安全开发、安全测试、安全发布、安全响应。在各阶段加入相应的安全能力,如图1所示:

图 1

二. B站SDL雏形

在2020年安全团队开始着手依据SDL模型尝试在B站的落地工作,整个过程大致可以分为安全能力落地和安全流程落地两个阶段。

2.1 安全能力落地

万丈高楼平地起,复杂的SDL模型也是由每个细分的安全能力组成。为了满足SDL模型的核心理念,首先就是要求安全团队在系统开发的各个阶段具备相应的安全规范或安全能力,这样才能为后续的SDL模型落地打好根基。在此过程中,安全团队重点完善了以下几个阶段的各项安全能力:

  • 培训阶段:准备安全意识、安全漏洞等安全课程及材料

  • 需求阶段:新增系统安全基线、安全漏洞管理规范

  • 设计阶段:新增威胁场景及威胁建模

  • 开发阶段:新增安全编码规范,新增第三方组件扫描工具

  • 测试阶段:新增交互式应用安全扫描工具

  • 发布阶段:持续优化动态应用安全扫描工具

  • 响应阶段:持续推进HIDS及WAF覆盖

2.2 安全流程落地

软件开发的各阶段具备了初步的安全能力之后,就要考虑如何将SDL模型在B站的应用开发流程中完成落地。在推动落地的过程中,自然也会遇到一些困难,例如:当前开发流程无任何安全节点,人力资源不足,业务人员安全意识不足等。为了解决上述困难,安全团队的重点工作主要有以下几个方面:

  • 划分安全BP人员:考虑到B站业务的复杂性,安全团队会为一些重点业务线分配了安全BP人员,负责该业务的SDL流程落地工作。安全BP人员通过跟业务负责人沟通,介绍安全相关能力的同时,也尝试了解业务相关的安全需要,然后有计划的推动SDL流程的落地工作。

  • 加强安全相关培训:在实际工作中,往往不同开发人员面对安全问题会存在不同的理解。此外,安全意识也缺乏传递性,新员工经常出现不了解现有安全要求的情况。因为安全BP人员会针对负责业务线常见安全漏洞和安全意识进行定期的培训工作。

  • 借助现有管理平台:经过沟通发现,大多数业务通过内部协作平台管理开发流程,最终的发布流程也会通过服务管理平台进行审批。因此,安全侧通过在这两个内部平台中添加QA节点,安全作为QA节点感知需求及应用上线动作,逐步了解业务并深入安全相关工作。

  • 定期沟通机制:安全BP需要跟业务开发人员及负责人建立定期沟通机制,在持续提升业务安全水位的同时,也跟业务团队形成良好的合作关系。在持续合作过程中,安全BP会不断深入了解所负责业务线的相关业务特点及应用组成,不断发现业务中的安全问题,并基于相关业务线的业务特点找到合适的解决方案

经过一年多的SDL实践,在某些业务线,SDL模型已展现雏型,如图2所示:

图 2

三. 数据生命周期安全

从2023年开始,随着数据安全相关法律法规的落实和监管要求,SDL相关工作迎来了新的挑战——数据生命周期安全。数据生命周期安全是指从数据的采集、传输、存储、处理、共享到销毁的六大阶段,完善数据安全治理体系。目的是为了保证数据的完整性、可靠性、安全性、合规性以及最大化利用价值。在数据生命周期的不同阶段,需要根据数据的特性和业务需求制定相应的管理策略和措施,如图3所示:

图片

图 3

安全部门也积极响应法务、数据平台以及其他部门合规团队的工作,在SDL流程中加入了相应的数据安全能力,如图4所示:

图 4

  • API分类分级:通过抽样线上网关的用户请求流量,对接口中传输的数据进行检测,并根据检测结果对接口进行分类分级

  • 数据库分类分级:通过对现有数据库集群的抽样检测,根据字段内容、字段备注、字段名等信息,识别数据库中存储的数据并进行分类分级

与安全漏洞不同,数据安全的治理需要根据数据分级分类、业务情况、监管要求、使用场景等各方面因素综合评估。例如,依据公司《数据分类分级指引》将数据分为C1到C4四个等级,C4级别的数据在传输及存储时就需要做加密处理。再比如同样是个人敏感信息数据,生产环境中需要加密存储,而测试环境则不允许落地存储,因为在合规要求下测试环境不允许使用真实个人敏感信息进行测试。

四. 从SDL到DevSecOps

虽然经过安全团队持续的努力,在某些业务线已经初步完成了SDL模型的落地,但在此过程中遇到的种种问题也引发了笔者的一些思考:

  1. 在包含复杂业务场景和众多技术部门的企业背景下,使用SDL模型覆盖部分业务线或许可行,但要实现全公司范围的覆盖就需要大量的人力投入,安全部门不可能将人力覆盖到所有业务

  2. 大量的需求评审、安全测试等环节需要人力参与,这无疑会造成开发流程效率的降低,这其实与互联网公司强调敏捷的概念相违背

  3. 在SDL模型下,即使在开发各阶段安全的工具与能力都已非常完备,但“安全”与“开发”似乎仍然是割裂的。在此情况下,反而容易形成“安全孤岛”,开发人员会认为相关的漏洞、后果是安全人员需要解决的问题,从而将大量冗余的工作转移给了安全人员,“安全”在开发中成为了独立的存在因素,这往往会进一步造成沟通的困难

因此,SDL模型在强调敏捷和高效的互联网公司是否显得过于厚重,如何将安全无感的融入现有开发流程,便成了最值得思考的问题。随着DevOps流程在B站逐渐完善,公司CI/CD工具及流程的持续完善与优化,DevSecOps或许成为了新的解决问题的钥匙。就如同DevOps理念中开发和运营相互结合一样,关键的安全能力为何不能也融入这个体系中呢?所以,DevSecOps与SDL理念不同,不再强调人、文档与制度的推进,而是侧重打破开发与安全的割裂,将安全尽可能无缝、无感知地集成进现有devops流程中,在不降低开发者效率,或者不要求开发者离开现有工具链环境的情况下,使系统满足安全要求。

在此理念下,DevSecOps通过将安全工具链加入DevOps的各个环节来实现应用的持续安全,但与SDL模型不同,DevSecOps模型下更强调各安全工具的集成能力、自动化能力和易用性。当前B站DevSecOps安全工具链的实践大致如图5所示:

图片

图 5

  • 需求阶段:需求安全评审工作可能是与大语言模型最契合的场景之一,大语言模型可以完全改变以往低效的人工评审模式,目前安全部门正在这个方向上持续尝试

  • 开发/测试阶段:借助内部持续集成平台,安全侧感知应用构建行为,自动化发起源代码扫描、第三方组件扫描及镜像扫描,此行为开发人员无感知,发现安全漏洞时会自动推送至相关开发人员。当然在此阶段人工测试有时也是必须的

  • 发布阶段:动态应用安全测试及主机基线扫描会覆盖公司所有主机及域名资产,周期性的循环扫描,持续发现新增安全漏洞。同时,安全侧也借助变更管控平台,感知最新发布的应用,对新发布应用域名做快速扫描

  • 运营阶段:在此阶段,安全侧会通过威胁情报、日志审计、入侵检测系统、应用防火墙等工具,持续监测和发现入侵或危险行为,完成安全应急响应工作。同时,也持续优化安全工具的相关规则和应急响应流程

五. DAST&漏洞管理

在整个安全开发流程中,动态应用安全扫描(DAST)的好处非常明显,它可以对正在运行的应用进行检测,与开发流程的耦合要求相对较低,但漏洞产出的准确率高,能有效降低企业整体安全风险。因此,有效的 DevSecOps 可以说始于 DAST 带来的检测结果,在解决实际的安全风险的同时,也能够帮助发现DevOps流程中欠缺的安全相关能力,而后续的漏洞管理也是安全工作中必不可少的一部分。所以,本文就重点讲述DAST及漏洞管理这两方面的工作。

5.1 资产暴露面管理

与外部渗透攻击需要有效的外围打点工作同理,为了达到有效发现企业安全风险的目的,首先需要尽可能完善的收集企业的外部暴露资产。在企业内部视角下,资产的收集虽然没有外部视角那么困难,但在混合云环境下,主机及域名资产复杂,依然会存在一些难点,例如:

  • 资产信息分散记录在多个内部平台

  • 内部平台缺乏资产网络环境字段

  • 个别资产在内部平台记录缺失

为了解决资产管理中的问题,安全侧通过整合主机型入侵检测系统(HIDS)、DNS管理平台、资产管理平台、云管理平台等内部系统中的资产信息,同时在整合过程中补充网络环境判断及测绘能力,从而梳理出更有效和完整的公网资产暴露面信息,并通过安全SIEM平台的资产管理模块记录及定时更新相关资产信息。

5.2 B站动态应用安全扫描系统-Sibyl

目前B站的DAST使用了自研漏洞扫描系统-Sibyl,扫描系统以前文所述的SIEM平台资产信息为数据源,扫描覆盖了发布和运营阶段,主要包括URL漏洞扫描,应用漏洞扫描和基线扫描三部分,如图6所示:

  1. URL漏洞扫描的数据源来自变更管控平台和SLB平台,Sibyl主动获取应用变更信息,自动关联应用相关域名及path信息,将扫描目标传入扫描节点进行漏洞扫描。此阶段为准实时扫描,针对变更应用的扫描会变更后的几分钟内完成。扫描规则以非侵入性规则为主,不对扫描目标做路径爆破、数据写入等高风险操作

  2. 应用漏洞扫描针对B站全部公网域名及IP,经过服务探测后,将确认存在HTTP服务的资产传入扫描节点进行漏洞扫描。与URL扫描不同,应用漏洞扫描的规则会包含扫描引擎支持的所有扫描规则,扫描周期相对较长,正常为每周完成一次周期扫描

  3. 基线扫描主要是针对B站全部公网IP,检测是否有安全基线中要求不允许对外暴露的服务或端口。与前两部分漏洞扫描不同,此部分扫描依靠服务识别工具对所有TCP服务及端口进行探测,发现例如ssh、mysql、rdp等高敏感服务开放即上报基线漏洞。由于基线问题风险极高,往往带来边界突破等严重安全风险,所以扫描周期更短,正常情况下每天完成一次周期扫描

图片

图 6

5.3 漏洞管理平台

漏洞管理的重点无疑是明确漏洞的状态及处置流程,保证安全漏洞都能够被及时闭环修复。为此,安全部门自研漏洞管理平台实现了从漏洞发现到修复的整个流程跟踪,目前所有类型的安全漏洞都会统一提交至漏洞管理平台来实现漏洞生命周期的闭环:

  • 漏洞分为5个状态:待审核、待修复、待复测、已修复、已忽略

  • 漏洞的操作和处理流程如下,详细流程如图7所示:

  • 安全人员对待审核的漏洞进行有效性确认并完成审核,审核过程中将漏洞流转给相关研发人员,漏洞进入待修复状态

  • 研发人员确认漏洞修复完成后进行提交复测,漏洞进入待复测状态

  • 安全人员对待复测的漏洞进行复测,确认修复完成则漏洞处置流程结束,如果漏洞未按要求完成修复,则漏洞状态回退至待修复状态

  • 漏洞管理平台当然少不了统计和报表相关功能,平台可以根据漏洞数量、漏洞修复率、修复时长等维度生成实时或周期漏洞报表

图 7

5.4 漏洞管理规范

为了保证安全漏洞能够得到充分重视和及时修复,避免安全漏洞导致的攻击事故和攻击事件,公司范围内推行了《安全漏洞管理规范 》,规范明确了安全漏洞的定义、评分标准及处置规定:

  • 漏洞评分的计算规则为漏洞基础评分 * 业务影响因子,漏洞基础评分的计算公式参照国际通用的CVSS 3.1,业务影响因子参照公司内部的服务分级标准定义不同权重因子

  • 漏洞的等级分为严重、高危、中危、低危四个等级,每个等级的漏洞有不同的响应时效、修复期限和通报范围

  • 漏洞处置包含延期升级机制,若漏洞未在要求修复期限内完成修复,则漏洞会按规范进行升级并扩大通报范围

六. 后记

笔者有幸经历了B站应用安全的从0到1的建设,也逐渐认识到安全能力的落地不可能独立于业务发展和基础建设。目前,已经有很多安全工具完成了跟现有开发流程的对接,在此过程中很感谢基础架构同事们的大力支持,针对每一个安全工具的对接落地过程也都有很多值得讨论和思考的地方。此外,数据安全目前还有很多未完成的工作,如何将数据生命周期安全和DevSecOps更好的结合也是未来需要努力的方向,这些内容会随着安全工作的持续推进在后续文章中继续向大家分享。最后,引用一句大佬的话:安全是个即“严肃”,又“专业”,同时又容易“被忽略”的活动,任重而道远。

-End-

作者丨图艾

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1972244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP半关闭过程

TCP半关闭过程 简介 tcp半关闭是指在一端发送完数据后,关闭发送通道,而保持接收通道继续接收数据。 过程 这里设序号为Seqx,确认号为Acky 客户端(也可以是服务端发起)发送 [FIN,ACK] 报文段&#xff0…

【已解决】树莓派5使用VNC远程,无法正常显示桌面,黑屏提示:cannot currently show the desktop

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

外贸干货|业务员寻找客户的7个思维技巧,都掌握的才算合格

更多外贸干货及开发客户的方法,尽在微信【千千外贸干货】 做外贸最基本的是找到客户,如果没有完成这一步,纵使你有千万种转化客户的方法,也都只是纸上谈兵。 #一 关键词法 选择适当的关键词,直接查找潜在客户发布的求…

Manim实现在坐标轴上添加元素和获取元素

Manim实现在坐标轴上添加元素和获取元素 1.坐标轴上获取元素 构造函数: _get_axis_label(label, axis, edge, direction, buff0.1) 函数 _get_axis_label 旨在为图形表示中的给定轴生成和定位标签(通常用于绘图或数学上下文中,可能是在某…

PostgreSQL 15

一、安装前的准备 1、版本信息 操作系统CentOS 7.9.2009PostgreSQL 版本PostgreSQL 15-15.7 2、下载安装包 RPM Chart - PostgreSQL YUM Repositoryhttps://yum.postgresql.org/rpmchart/进入官网,找到相应版本 点击框选内容 依次进入下载页面,下载相…

ASUS/华硕幻15 2020 冰刃4 GX502L GU502L系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 ,安装结束后带隐藏分区,一键恢复,以及机器所有驱动软件。 系统版本:windows10 原厂系统下载网址:http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意:仅支持以上型号专用…

免费好用的 CI/CD 工具有哪些?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 更多关于极狐GitLab &a…

V.PS日本东京VPS详细测评

V.PS日本VPS怎么样?V.PS日本机房怎么样? V.PS在日本有东京和大阪两个机房都在运作VPS/云服务器,大阪机房的默认接入IIJ网络,日本东京机房的是日本软银网络,另外日本东京分两个系列,一个是Intel另外一个是AM…

【文件fd】深入理解重定向和缓冲区

目录 1.重定向 1.1dup2 2.缓冲区 2.1什么是缓冲区 2.2为什么存在缓冲区 2.3缓冲区的刷新策略 2.4查看源码​ 3.0/1/2 3.1 0/1/2是什么&为什么存在 3.2 2和1区别 3.3 2为什么存在 1.重定向 重定向的本质:是在内核中改变文件描述符表特定下标的内容和…

Flutter 插件之http(介绍、使用、二次封装)

背景 在我们日常开发过程中,经常会使用到网络请求,而在Flutter插件中,最常用的请求插件一共两个,分别是: 1、dio 2、http 其中dio我已经做过详细介绍了(post、get等请求、文件上传、请求重试等),这里就不做过多阐述,下面附上文章链接,如有需要可前往查看。 http…

「11月·西安」第十二届信息系统与计算技术国际会议(ISCTech 2024)

随着信息技术的飞速发展,信息系统与计算技术已成为推动社会进步与产业升级的重要力量。在这样的背景下,第十二届信息系统与计算技术国际会议(ISCTech 2024)的召开,无疑为全球专家学者搭建了一个交流思想、共享成果的高…

ProfiNet 转 CAN/CANopen 网关

一、功能概述 1.1 设备简介 本产品是 PN(Profinet)和 COE(CANopen)/CAN(自由口)网关,使用数据映射 方式工作。 本产品在 PN 侧作为 PN IO 从站,接西门子 PLC;在 COE 侧做为 COE 主站, 接 COE 设备,如伺服、变频器、…

漏洞挖掘 | edusrc记一次某中学小程序渗透测试

一、搜集渗透目标 现在的EDU挖web端的上分效率远不如小程序,因此这篇文章浅浅记录一次小程序的挖掘吧。如果各位大牛想要快速出洞,不妨跳过大学,学院等小程序,而重点关注小学、中学、幼儿园等,这些小程序的出洞率还是…

第L3周:机器学习|逻辑回归

本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 | 接辅导、项目定制 🚀 文章来源:K同学的学习圈子深度学习第J6周:ResNeXt-50实战解析 1.逻辑回归定义 逻辑回归(Logistic Re…

hive udf去掉map中的一个或者多个key

实现一个hive udf,可以将Map中的某一个或者多个key去掉,这里要继承GenericUDF 这个抽象类,然后Override evaluate这个函数即可,可以把执行这个udf前初始化的一些内容放在initialize方法内,比如参数的判断,函数的返回值类型等等。 代码写好之后,可以用如下方法创建这个函…

Golang之OpenGL(一)

使用OpenGL实现窗口中绘制三角形(纯色|彩色)、正方形(变色) 一、简单实现窗口绘制三角形二、绘制的多颜色三角形(基于 ‘ 简单实现窗口绘制三角形 ’ )1、在顶点着色器和片段着色器中添加了颜色的输入和输出…

【考研高数】反函数的那些事

在这里给同学们推荐来自「荒原之梦考研数学」网的三篇文章,分别是反函数的性质汇总,以及两道相关习题,有需要加强这部分练习的同学,可以长按下方二维码,在「荒原之梦考研数学」官网中打开对应的文章: 《反…

基于单片机的防火防盗报警系统设计

摘要: 该多功能防火防盗系统既具有根据环境温度和烟雾浓度进行火灾检测的功能,也有能对人体检测实现防盗的功能。多功能智能防火防盗控制系统的主控制器是 STC89C52 单片机,环境温度的检测采用 DS18B20 , MQ2 检测烟雾浓度&…

利用canvas 实现图片的标注,把标注像素点传入到后端

背景:我们有一个摄像的产品,拍照传统的水表盘面,我们需要框选水表读数,标注点传到后端,后端根据标注点自动去截取摄像表拍摄回来的图片,然后拿到大模型里面进行训练。由于同一只表拍摄的画面都是一样的&…

C语言之指针函数与函数指针

目录 1 前言2 函数指针与指针函数理解与区分函数指针指针函数 3 函数指针与指针函数常见用法函数指针指针函数 4 总结 1 前言 项目中时常遇到指正函数与函数指正的使用,时间一长容易出现概念混淆。 2 函数指针与指针函数理解与区分 函数指针 原型:返回…