安全架构实践公理

2020年7月,TOG(The Open Group)联合SABSA,正式发布中文版指南《安全架构实践的公理》(其英文版发布于2019年7月),其中20条安全架构实践公理如下:

公理1:业务风险驱动安全
安全架构应通过最大化收益和最小化损失来支持业务目标。
必须牢记的是,组织资产并不是为了被保护而存在,它们的存在是为了创造价值。而利用资产创造价值,通常意味着使该资产面临风险。这正是矛盾之处。
为了提供最优架构,安全架构师不仅要从防止负面结果的角度来看待它们对组织的贡献,还要从促成积极结果的角度来看待它们。
如果安全架构无法支撑组织利用其资产来完成业务工作,则该安全架构可能被边缘化和显得无用。
安全架构应基于业务风险驱动,并且应该是对这些风险进行适当响应。

公理2:场景
不要虚构场景,否则后果自负。专为一种场景而设计的安全系统或解决方案,并不总是可以有效地在另一种场景中工作。
这并不是反对重用,可重用的基于组件的架构有很多好处。但是,如果为了节省时间和精力,将安全系统重用于不同的用例,则需要针对这两个用例之间的差异,进行新的风险分析。
该指南还专门针对系统设计中的一个常见错误——访问控制过程的身份识别、身份验证、授权过程的混淆,进行了澄清。

公理3:范围
明确定义安全架构的范围很重要。在这方面,系统收益(SOI)的概念很有用(如ISO/IEC/IEEE 42010:2011中所定义)。

公理4:情报
安全系统应利用情报来主导响应活动。通过威胁情报,既可以了解对手的意图、能力、攻击方式,也可以了解自身的漏洞情况。
建议对潜在威胁场景进行建模分析,来实现最佳效果。

公理5:信任
安全架构应该保障系统可以准确建模业务实体关系中存在的信任的性质、类型、级别、复杂性。
信任是人际关系的特征。但我们可能要给非人员对象以信任。当这样做时,其实是在说,我们可以信任操作这类对象的人员,或可被操作这类对象的人员所信任。因此,一个可信的系统是指我们信任参与系统生命周期过程的人员。
信任从来都不是二进制,而是一个很长的灰度连续体,很少有黑色或白色。
“信任”和“被信任”不是镜像关系。
即使是最复杂的信任关系,也可以自顶向下分析成一系列简单的单向信任关系。通过严格执行此项分析,可以将任何业务关系分解为简单且独立的单向信任组件。

公理6:整体分析
安全需求应与其它的功能性需求和非功能性需求集成在一起。安全需求通常被描述为非功能需求(NFR),并且不应将其与其他功能需求或非功能需求分离。只有将所有需求都视为SOI(系统收益)整体风险的一部分时,安全架构才能有效工作。
架构通常被视为不同视角的一系列观点。这些观点通常被称为架构域。例如:业务架构域、应用架构域、信息架构域、数据架构域、服务管理架构域、技术架构域。就像看一座被群峰环绕的山谷,远近高低的观点各不同。
而安全架构域是从另一个视角来看的另一种观点,但与其它视角有很大不同,因为它是一个跨领域的域,必须以整体的方式解决所有其它域的安全和风险管理问题。因为风险无法分为孤立的架构域,所以安全架构师必须同时从所有视角看到山谷,即拥有可以随意旋转的全息视图。

公理7:简洁性
系统和服务应在保证功能性的前提下尽可能简洁。
复杂是安全的敌人,必须在保持整体性的同时,将其简化为子结构进行管理。安全架构将会受益于面向服务的架构(SOA)方法,在这种方法中,我们看到了“一切即服务”(EaaS)。服务的性能对于实现顶级业务绩效目标至关重要。
任何架构类型的主要目标之一就是管理复杂性。必须通过自上而下的分解来分解高度复杂的SOI(系统收益),从最高级别的业务目标开始,并创建逐渐简化的SOI层次,并对其逐层解决。
高度复杂的系统,倾向于表现出涌现性。涌现性的示例包括:两个或多个进程争用同一系统资源时发生死锁;网络在超出容量后的流量拥塞。
系统安全漏洞主要来自两个来源:设计错误和涌现性。两者不相同,不应混淆。涌现性是系统工程的一种现象,并非一开始就被设计出来。复杂性本身就是导致出现这一现象的原因。

公理8:重用
在可行的情况下,尽可能重用受信任的系统开发实践和系统组件。
安全架构师不应从零开始,不要重新发明轮子。从通用框架和参考架构开始,并针对特定的场景进行定制,始终是效率更高的方法。
框架示例包括:
NIST网络安全框架(CSF):是150多个RFI响应和许多利益相关方会议的产物。
ISO 27000系列:是用于组织和监控企业安全机制的一组控件和过程。
ISO 31000-2018:定义了一个周期性的风险管理流程。
SABSA平衡风险模型:提供了定义风险相关组件的组织结构。

公理9:弹性
安全系统应在受到胁迫时依然正常运行。
架构的弹性不仅仅是设备,还必须包括人员和流程。
弹性的关键特征是计划内的系统降级——通过控制将系统降级,而非由于无法控制导致故障。
良好的弹性设计的一个例子,是在大容量云服务数据中心中使用混沌工程。混沌工程通过在时间敏感的在线服务中,不断进行故障自动转移测试,来验证系统弹性。

公理10:过程驱动
安全开发过程应使用清晰的生命周期,来解决要求的时间跨度,并引入利益相关方。
战略:安全架构的目标是支持组织的长期的业务战略。安全架构本身是一项战略活动,需要长期的投资和管理层的支持。
战术:安全架构是通过一系列步骤开发和实施的:利用变更项目从而使长期愿景变为现实。
运营:安全架构提供技术、工具、流程来确保日常的安全,并对业务运营提供风险管理。

公理11:优化冲突解决
安全应通过平衡业务风险,来优化解决利益相关方的冲突。
利益相关方的关注通常会发生冲突。安全架构的作用之一是以最佳方式解决这些冲突,在功能需求和其他非功能需求与安全需求之间取得平衡。这些利益冲突可能非常复杂,源于安全架构的跨复杂领域的性质。

公理12:清晰的沟通
安全应使用有利于业务和技术利益相关方之间进行有效沟通的通用术语。
安全架构师必须至少会两种“语言”,能熟练使用业务涉众的语言(“业务术语”)和技术人员的知识(“技术术语”)。

公理13:易用性
安全系统应该尽可能对用户透明且易于使用。
不易使用或导致生产受到影响/破坏的安全控制措施,通常会被忽略、禁用、废除,导致资源容易受到攻击,从而失去了控制措施的价值。而被绕过或未被使用的安全系统将毫无价值。
可用性差的经典示例,是密码的使用。另一个示例是Web浏览器使用PKI证书对网站进行验证。

公理14:安全设计
安全性应依赖于经过验证的特定控制措施,而非隐藏。
每本安全书籍都强烈建议不要使用“通过隐藏构建安全性”。其实通常被否定的,是希望安全漏洞不被发现的侥幸心理。
安全不应依赖于暗箱操作或其它晦涩的形式,而应依赖于经过验证的特定控制。就像密码学的安全性,应取决于对加密密钥的保护,而非加密算法。

公理15:优先级
使用较强的保护机制来保护较弱的机制,而非相反。
最重要的事物不应依赖于不重要的事物。

公理16:设备主权
所有设备均应能够在不受信任的网络上保持其安全策略。
保护机制通常位于本地或靠近被保护的资源更有效。这使得防护机制更容易随受保护资源一起迁移。
物联网设备的市场壁垒,使得设备主权原则难以适用。安全架构师必须面对这一挑战。不可能强迫市场将高级安全性集成到IoT设备中,因为这是一种市场驱动的现象,受成本和收益的感知驱动,但是设计整体集成的分层方式将改善一定程度的安全性。

公理17:纵深防御
通过分层防御可以获得更高的安全性。
纵深防御是一种传统方法,它通过在攻击路径上应用多层或多级安全性,来最大程度地保护每个资源。
为了使纵深防御有效,各层之间必须彼此独立,各层应该由不同类型的控制措施组成,而非多层使用同一类型的控制。
当控制措施失效时,选择失效而开放,还是失效而关闭,取决于资源的敏感性和它所支持的服务的需求。在此领域,有限状态机(FSM)建模可用于探索系统可能进入的所有可能状态。

公理18:最小特权
主体(人员、事物、流程等)应仅被授予执行其授权任务所需的权限。
部署最小特权系统和服务的能力,在一定程度上取决于可以执行细粒度访问控制的技术和流程。细粒度的访问控制,要求以一种方式捕获或存储有关资源或资产以及最终用户的元数据,以便访问控制系统可以通过它来做出有关资源的访问决策。
职责分离也是从纵深防御中衍生出来的一种特殊形式的最小特权。

公理19:访问管理
访问控制包括三种不同的操作过程:
识别:识别并区分主体;
认证:验证主体的身份;
授权:授予主体适当的访问权限。

公理20:通信安全
设备和应用程序应使用开放、安全的协议进行通信。
在当今过度连接的世界中,无法假设未加密的传输具有任何级别的安全性。
最重要的一点是,无论加密服务是否已打开并处于最佳运行状态,网络服务都无法向应用服务发出信号。因为网络无法理解应用程序的数据结构。
规则很简单:网络需要网络安全服务来保护。应用程序需要应用安全服务来保护。
通信安全架构是一门复杂的学科。它必须在通信设备之间采用敌对环境,并且必须同时满足应用程序层安全性和网络层安全性。

参考:
《网络安全架构:安全架构实践的公理》
安全内参是个很好的安全类技术网站,大家可以关注一下:安全内参官网

可信计算的核心技术

可信计算(Trusted Computing)是一种增强计算机系统安全性的技术,旨在确保计算机系统和应用的完整性、可靠性和安全性。它通过一系列机制和技术手段,如硬件安全模块、加密技术、安全验证等,来确保系统和应用的可信度,增强信息系统的内生安全能力。

可信计算和等级保护2.0是密不可分的,特别提出了把可信计算技术植入基础软硬件和网络的要求:
1、把可信验证要求植入芯片、CPU、服务器、操作系统、数据库等基础软硬件
2、把可信验证要求植入网络设备、网络安全产品,解决底层安全问题
3、把可信计算技术植入“安全管理中心、安全通信网络、安全区域边界、安全计算环境”网络要素,实现对网络要素全覆盖
4、把可信计算技术植入整机、云计算平台、物联网、工控系统、移动互联网
5、把可信计算技术植入第二级以上网络

可信计算的关键技术主要包括:
1、硬件层面的可信根(Trusted Root):可信计算通常从硬件层面开始构建,使用如TPM(Trusted Platform Module)等安全芯片作为信任的根基,确保从硬件到软件的整个启动过程是可信的。
2、系统启动的可信验证:在系统启动过程中,利用可信根对系统的引导程序、系统程序等进行可信验证,确保其未被篡改或破坏。包括计算设备固件引导程序和操作系统引导程序,以及计算设备固件程序和操作系统程序 。
3、可信验证(Trusted Verification):基于可信根,构建信任链,一级度量一级,一级信任一级,把信任关系扩大到整个计算节点,从而确保计算节点可信的过程 。
4、动态可信验证(Dynamic Trusted Verification):对验证对象(文件或程序)的静态内容、运行时内存中存储的关键变量及数据、属性等进行实时、周期性的可信判断。
5、可信计算模块(Trusted Computing Module):通常指TPM(Trusted Platform Module),是一种安全芯片,用于存储加密密钥和进行平台的可信度量 。
6、可信软件基(Trusted Software Base):确保操作系统和应用程序的代码在执行时是可信的,没有被恶意修改。
7、可信软件栈:可信软件栈(Trusted Software Stack, TSS)是一组软件组件,可以在操作系统上实现可信计算的功能。它包括了管理TPM(或其替代品)的驱动程序和工具,可以用来提供密钥管理、度量和报告等功能
8、远程证明(Remote Attestation):允许远程验证计算节点的可信性,确保远程通信的安全性。
9、安全审计(Security Audit):通过记录和分析系统活动,确保系统的安全性和合规性。
10、可信网络连接(Trusted Network Connect):确保网络连接的安全性和可信性,防止未授权访问和数据泄露。
11、用户和设备身份认证:通过强身份认证机制确保用户和设备的身份可信,如使用数字证书、生物识别等技术。
12、数据保护:使用加密技术保护数据的机密性和完整性,确保敏感信息不被未授权访问或泄露。
13、安全审计与合规性:实施安全审计,确保可信计算的实施符合相关的法律法规和标准要求。
14、安全管理中心:建立安全管理中心,对可信验证的结果进行集中管理、监控和响应,确保系统的持续安全。

什么是DevSecOps

DevSecOps是一种将安全实践集成到开发和运维(DevOps)过程中的方法论:安全不仅仅是安全团队的责任,而是整个IT部门(包含开发、测试、安全和运维等团队)所有成员的责任,需要贯穿业务生命周期的每个环节。
其核心理念是“安全内建”,即在软件开发的每个阶段都考虑安全性,而不是将其作为事后处理。DevSecOps 旨在通过自动化和协作来提高软件的质量和安全性,同时加快交付速度。

DevSecOps 的关键组成部分:
1、 安全左移(Shift Left Security):将安全活动前移到软件开发生命周期的早期阶段,以便在设计和编码阶段就识别和修复安全漏洞。
2、 自动化:通过自动化工具和流程来执行安全测试、代码审查和合规性检查,以提高效率和一致性。
3、 持续集成/持续部署(CI/CD):在软件开发过程中实现自动化的构建、测试和部署,确保安全措施能够快速响应开发变更。
4、 文化和团队协作:建立一种文化,其中开发、运维和安全团队共同协作,共同对软件的安全性负责。

如何实施 DevSecOps:

1、 建立跨功能团队:
组建包含开发、运维和安全专家的跨功能团队,确保从项目开始就考虑安全性。

2、 安全培训:
对团队成员进行安全意识和最佳实践的培训,确保他们了解安全的重要性和实施方法。

3、 定义安全策略和标准:
制定清晰的安全策略和标准,确保团队成员理解并遵循。

4、 集成安全工具:
选择并集成自动化的安全工具,如静态代码分析器、动态应用安全测试(DAST)工具、容器安全扫描工具等。

5、 实施安全编码实践:
在编码阶段实施安全编码标准和实践,减少安全漏洞。

6、 自动化安全测试:
在CI/CD流程中自动化安全测试,包括代码审查、自动化扫描和渗透测试。

7、 持续监控和响应:
实施实时监控和日志分析,以便快速检测和响应安全事件。

8、 合规性和审计:
确保遵守相关的法律法规和行业标准,定期进行安全审计。

9、 反馈和改进:
建立反馈机制,根据安全测试和监控结果不断改进安全措施。

10、 文档和透明度:
记录安全流程和事件响应计划,确保团队成员和利益相关者之间的透明度。

11、 灾难恢复和业务连续性:
制定和测试灾难恢复计划,确保在安全事件发生后能够快速恢复正常运营。

12、 文化建设:
培养一种安全文化,鼓励团队成员积极报告潜在的安全问题,并参与安全改进。

实施 DevSecOps 需要组织层面的支持和承诺,以及跨部门的协作。通过将安全集成到 DevOps 的每个环节,组织可以更有效地管理风险,同时加快软件交付的速度。

如何通俗解释零信任安全管控

零信任与传统的安全模型存在很大不同:
传统的安全模型:“一次验证+静态授权”的模式,就是“我记住你了,自己人”
零信任安全模型:“持续验证+动态授权”的模式,就是“你谁啊,凭证拿来”

用一句话解释零信任就是:别想刷脸,凭证拿来
无论你是哪个服务,无论你在内网还是外网,无论一天交互多少次,没有凭证,或者凭证无法验证通过,就会被阻止

零信任模型的核心原则:
1、永不信任:对内对外均不给予自动信任
2、持续验证:对所有入站和出站请求执行彻底验证
3、身份管理:对人、终端和应用进行统一身份化管理
4、精细授权:通过微分段、应用分级、功能分级、数据分级等技术,做到最小权限原则,减少潜在攻击面
5、动态授权:基于访问主体、目标客体、环境属性(终端状态、网络风险、用户行为等)进行权限动态判定
6、全局防御:持续监控终端风险、用户行为异常、流量威胁、应用鉴权等信息,实时进行信用评估
7、快速处置:对低分的主体,立即实施阻断措施

零信任模型的核心能力:
1、全面身份化能力
零信任的信任关系来源于对所有参与对象的身份验证,所有参与对象共同构建端到端信任链,参与对象包括网络、终端、人员、应用等。身份是访问控制体系的基石,零信任需要为所有对象赋予数字身份,基于身份而非网络位置来构建访问控制体系。
2、最小权限分配
零信任强调按需分配资源,实施细粒度的权限访问控制,仅授予访问主体执行任务所需的最小权限。
3、持续且动态的访问控制
零信任依据访问主体的身份信息、终端信息、网络信息等信任要素,通过实时计算信任要素形成访问控制策略。在资源访问过程中,一旦访问控制策略的决策依据发生变化,零信任将重新计算分析,动态调整认证和授权策略。
4、资源受控安全访问
零信任默认网络环境是不安全的,要求对所有业务场景、所有资源的所有访问请求进行强制身份识别和授权判定,确认访问请求的权限、信任等级符合访问控制策略后才予以放行。且要求所有的访问连接都必须加密。
5、组件联动能力
零信任需要具备较高的联动性,各类组件能够相互联动才能有效防范各类威胁并做到攻击快速闭环,切忌不可机械堆砌产品组件。

零信任架构的三大技术基础:
1、三大技术SIM之SPD,软件定义边界:应用程在部署时需要指定安全边界,以便将服务与不安全的网络隔离开。
2、三大技术SIM之IAM,身份识别与访问管理:解决身份唯一标识、身份属性、身份全生命周期管理的功能问题。
3、三大技术SIM之MSG,微隔离:在逻辑上将数据中心划分为不同的安全段,将网络边界分割到尽可能的小,然后为每个独立的安全段定义访问控制策略。

零信任架构的核心技术:
1、终端环境感知:对终端身份进行可信标识,赋予每个终端唯一的数字身份,并能够维护终端身份属性,对终端环境进行实时感知和度量,支撑零信任安全解决方案实现持续风险评估。
2、身份鉴别:身份引擎将出差人员、内部员工、合作伙伴、供应商等不同人员纳入统一认证平台,打通终端 PC、网络设备、应用系统、公司网络等各种业务系统之间的身份数据屏障。所有身份数据集中管理和共享,避免身份孤岛带来的身份数据不一致或重复、身份数据质量不可控等制约业务发展的问题,降低信息化成本。采用MFA(多因子认证)方式对同一用户进行身份鉴别,从而加强身份验证的安全性。
3、分级管控:身份引擎统一维护所有授权客体(包括应用资源、API 资源、服务资源)的安全等级。每次范围资源必须进行认证,当授权主体的安全等级大于授权客体的安全等级时,授权主体才能访问授权客体,反之则不能访问。
4、动态授权:基于对网络环境、终端环境、用户行为的持续风险评估实现授权动态判定,并且能够将访问目标的权限控制细化到应用级、API等级和服务等级,只对访问主体开放最小授权,极大地收缩了潜在攻击面,解决了传统静态授权带来的越权风险高、授权粒度粗等问题。
5、持续验证:案对人、终端和应用进行统一身份化管理,建立以身份为中心的访问控制机制。以访问主体的身份、网络环境、终端环境和用户行为等作为
认证的考量要素,并针对网络环境、终端环境、用户行为等进行持续风险评估,实现对接入用户和终端的持续验证,解决了由于安全边界逐渐模糊带来的一系列问题。
6、风险审计:根据认证日志、鉴权日志等输入,对用户安全等级的进行评价,重点对登录模式异常、访问时间异常、操作行为异常、访问习惯异常、访问关系异常等进行风险审计。
7、安全接入代理:统筹管理所有访问连接,为认证成功且具有权限的访问主体建立安全访问通道,帮助企业构建虚拟网络边界。可分为安全接入网关、API 网关、SDP网关三种类型。其中,安全接入网关、API 网关用于敏感应用场景,SDP 网关用于非敏感应用场景。

零信任架构的三层架构:
1、安全管理中心,部署安全态势感知引擎
安全态势感知引擎:对环境感知代理发送的终端风险评分、身份引擎发送的认证日志和鉴权日志、关键节点镜像的网络流量进行智能分析,实现对用户、终端、网络的安全评估。

2、策略控制中心,包括身份引擎、控制引擎
身份引擎:负责对接入用户以及终端设备进行统一认证和鉴权。当用户安全等级变更时,及时更新用户拥有的访问权限,并向安全接入代理网关下发权限变更指令。
控制引擎:通过与安全态势感知引擎联动,实现威胁事件的检测智能、处置智能、全局防御,显著提升威胁的闭环效率。

3、策略执行器,部署环境感知代理、安全接入代理网关(包括安全接入网关、SDP网关、API网关三种类型)。
环境感知代理:负责统一管理和执行终端管控策略,能够实时感知终端环境状态,并向安全态势感知引擎上报终端风险评分。
安全接入代理网:关作为终端用户访问企业内网的控制设备,能够统筹管理所有访问连接,为认证成功且具有权限的访问主体建立安全访问通道,帮助企业构建虚拟网络边界。根据用户访问场景选择安全接入代理网关的类型。

参考:
华为IP网络系列丛书:《零信任》

常见网络攻击方式02

1、DNS欺骗
攻击者把自己伪装为DNS服务器,在用户解析IP的时候,解析到恶意网站,或者钓鱼网站
其实,现实中不少用户都受到过此类攻击

2、DNS缓存污染
攻击本地DNS缓存,达到访问伪装网站的目的

3、最终极的,还有DNS根服务器攻击:
由于DNS的根服务器都在国外(美国、英国、瑞典、日本),所以其实各国都有一些应对方案

4、ARP欺骗
在局域网下,还有可能遇IP地址欺骗,就是伪装为可信IP,麻痹被攻击者

5、MAC泛洪攻击
在局域网下,伪造大量的MAC地址数据帧,把交换机的MAC地址标撑爆,导致交换机无法正确按端口进行数据转发,必须进行数据广播
攻击者通过网络嗅探等方式,获取敏感信息

6、VLAN跳跃攻击
利用VLAN的配置漏洞,精心构造网络包,达到穿透VLAN通讯,获取其他VLAN信息的效果

7、SSL劫持
利用中间人攻击方式,分别与上下游通讯节点建立加密连接,进行数据转发的同时,获取明文通讯信息

8、流量劫持(网络端)
域名劫持:篡改DNS解析记录,比如上面的DNS缓存污染
BGP劫持:攻击者通过操纵边界网关协议(BGP)来劫持网络流量,引导流量通过恶意路径

9、证书欺骗
攻击者把自己伪装为CA厂商,把自己伪装为加密网站,欺骗性很强
这种攻击前几年还真出现过,危害不小

10、拒绝服务攻击DoS
精心构造网络包,把服务器拖垮,服务器没有额外资源处理正常请求,对外表现为拒绝服务

SYN洪水攻击:利用TCP握手机制,构造大量SYN包,耗尽服务器TCP连接资源,达到拒绝服务的攻击目的
ICMP洪水攻击:伪造大量ICMP包,比如ping包,耗尽服务器资源,达到拒绝服务的攻击目的
UDP洪水攻击:伪造大量UDP包,带有不同的IP地址,耗尽服务器资源,达到拒绝服务的攻击目的

11、分布式拒绝服务攻击DDoS
利用上面说的肉鸡或僵尸网络,架设攻击软件,对一些网站拼命发起请求,让网站访问量剧增,资源耗尽,最后导致系统崩溃,无法继续提供服务
在云厂商推广期间,更有甚者批量注册大量云服务器,发起DDoS攻击,你能信
现在,由于IoT设备的剧增,但安全防护短期内又跟不上,有些攻击者就利用这些IoT设备,构建了僵尸网络,专门进行DDoS攻击

12、低速率拒绝服务攻击(LDoS)
现在各大云厂商都有自己的DDoS防火墙,让DDoS攻击效果大打折扣
通过周期性地发送大量数据包,利用网络协议的漏洞来降低被攻击端的服务性能

13、嗅探攻击
潜伏在网络中,做一个安静的嗅探器
抓取网络中全部数据,有针对的获取有价值数据
随着加密通信的加强,越来越难了
但就算是网络流量的大小,有时候也是机密

14、重放攻击
作为A和B的中间人,收到A的消息后,篡改,然后给到B
随着加密通信的加强,越来越难了

安全开发是如何执行的

谈到安全开发,咱们就要先明确一个问题,安全开发的目的是什么呢?

所有做过开发的小伙伴,一定会有一个概念,一个程序的逻辑Bug,一定越早发现,损失越小。
如果能在需求阶段,发现并解决这个Bug,损失可以是最小的。

安全开发也是这样,希望达到的目的就是:
安全风险左移,早发现,早管理,持续改进

在安全开发上面,其实有一些现成的框架可以遵循,比如SSDLC(适合迭代式开发)、DevSecOps(适合DevOps式开发)等。

本文就说一下,我们的SSDLC是如何执行的。

当前,在能执行之前,需要进行相关的建设,包括:
明确安全风险,明确安全基线,指定安全策略,进行安全教育,部署安全工具,进行相关培训等等。
这个每个公司差异比较大,选择的组件和厂商也大不相同,就不详细描述了。
我们重点说一下,一个安全相关的需求,是如何落地的。

1、安全需求
1.1安全需求识别
组织应该达成一个共识,哪些需求比如过安全评审,比如:
a、任何账号、密码相关的
注册、登录、密码验证、验证码、密码修改、账号注销等等
b、任何用户可以发布信息的
留言、灌水、内容发布、即时通讯、提交信息并展示
c、任何上传和下载的
d、任何交易相关的
大促、活动、秒杀、刷单、刷票、业务风险响应
e、任何钱相关的
积分、交易、资金往来、营销、相关接口
f、涉及SQL编写的
g、任何敏感信息存储或展示的
购买、支付、个人信息查询、添加删除信息、充值密码
移动端图片保存、人脸识别、手势密码
h、任何证书相关的
i、任何访问控制相关的
前后端访问控制、系统对接、日志、短信、邮件
j、任何批量操作相关的
查询、导入、导出
k、合规安全相关
隐私政策、个人信息采集、敏感信息传输、生物特征识别、账号注销
等等。
1.2安全需求强制纳入安全评审,安全管理人员可以指定其他需求进入安全评审、
1.3安全小组对需求进行评审,判定是否可以继续推进

2、安全设计
2.1设计人员给出方案
2.2安全小组评审设计方案,判定是否可以继续推进
2.3测试同学,同步书安全测试用例
2.4安全小组评审设测试用例,判定是否可以继续推进

3、安全开发
3.1、开发同学IDE安装好安全组件,组件可规范编码,并进行静态扫描,及时发现代码问题
3.2、开发同学自测后,提交代码库
3.3、开发同学在测试环境,运行流水线
3.4、流水线自动混淆、编译、加固、打包、部署,同步进行各类扫描,包括:黑盒、白盒、组件、镜像、隐私检测等
3.5、流水线给出相关漏洞
3.6、开发同学修复漏洞

4、安全测试
4.1、测试同学进行功能验证
4.2、测试同学进行安全验证:渗透、越权等
4.3、测试同学进行性能验证
4.4、验证通过后,提交相关报告

5、安全验证
5.1、此时可以进行UAT验证
5.2、在版本库相同的情况下,开发同学将代码发布到UAT环境
5.3、流水线门禁根据规则判定,是否可以发布
5.4、测试同学初步验证
5.5、用户验证

6、安全部署
6.1、此时可以把代码部署到生产环境

当然,上面的开发流程,只是整个安全开发体系中的一环。
实施安全开发流程,需要庞大的前期资源投入,以及渡过一个较长的不断改进的过程。

AI编程的现状

1,当前AI可大幅提升代码片段效率
当前的AI辅助工具,在通用代码片段上的效率,已经高过大多数程序员了。
比如让AI去写一个通用算法片段,其速度甚至质量可以吊打多数的程序员。
虽然很多通用代码片段都有现成的库可以参考,甚至可以直接调用,但自动输出一个良好的demo也能节约大量的搜索排错的时间,大幅提升开发效率。

2,当前AI可大幅提升学习速度
在进入一个新的技术领域时,AI可大幅降低程序员的学习成本。
一个AI生成的demo,稍微调整一下就能运行了。
所以有种可能,就是程序员会更加的全栈化。

3,当前AI有待进步
但如果是一个复杂的需求,尤其是需求需要建立在对一个项目前期需求理解之上时,现在的AI还是不够强大。
也就是有些人说的,AI很傻。

而且当前的软件项目结构,更适合人,而不是AI。
更小的代码片段,更小的项目拆分,对当前水平的AI会更友好。但对人来说并不一定。

4,近期AI会让编程技能更加工具化
比如一个做统计分析的人,用R或Python做统计,学习成本会下降一个数量级。
熟练的用函数,很难成为核心优势。

5,AI的进一步发展,会促使开发人员分级
善用工具的,会越来越强大
反之,会被迫与“被AI武装的外行人”竞争的囧境

6,AI的进一步发展,会让懂业务的人更强大
开发人员必须向上游靠拢,更深入的理解业务,才能有更好的发展。
纯拼技能熟练的时代,可能要结束了。

什么是SSDLC

SSDLC(Secure Software Development Life Cycle,安全软件开发生命周期)是一个软件开发框架,它将安全考虑和实践集成到传统的软件开发生命周期(SDLC)的每个阶段。SSDLC的目标是减少软件中的安全漏洞,提高软件产品的安全性,确保从设计到部署的每个步骤都考虑到安全因素。

SSDLC 的主要阶段通常包括:
1、 初始化:确定安全策略和目标,定义项目范围和安全要求。
2、 架构设计:设计软件的安全性,包括威胁建模和风险评估。
3、 详细设计:开发软件的详细设计,包括安全控制和机制。
4、 实现/编码:编写安全的代码,并遵循安全编码标准和最佳实践。
5、 测试:进行安全测试,包括静态代码分析、动态代码分析和渗透测试。
6、 部署:安全地部署软件到生产环境,并确保部署过程本身的安全性。
7、 维护:在软件的整个生命周期内进行持续的安全监控、漏洞管理和补丁应用。

如何实施 SSDLC:

1、 建立安全策略:
定义组织的安全政策和程序,确保它们与SSDLC流程一致。

2、 安全培训:
对开发团队进行安全意识和安全技能的培训。

3、 威胁建模:
在设计阶段使用威胁建模来识别潜在的安全威胁和漏洞。

4、 安全需求分析:
确定软件的安全需求,并将其纳入项目的需求规格中。

5、 安全架构和设计:
设计软件架构以包含安全控制,如身份验证、授权、数据加密等。

6、 安全编码:
遵循安全编码标准和最佳实践,减少安全漏洞。

7、 代码审查和静态分析:
通过代码审查和自动化工具检测代码中的安全问题。

8、 动态分析和测试:
进行动态安全测试,如渗透测试,以发现运行时的安全问题。

9、 安全部署:
确保部署过程安全,包括使用安全的配置和补丁管理。

10、 监控和响应:
实施监控机制来检测和响应安全事件。

11、 持续改进:
根据反馈和安全测试结果,不断改进SSDLC流程。

12、 合规性检查:
确保软件的开发和部署符合相关的法律法规和行业标准。

13、 文档和审计:
记录安全活动和决策,以便于审计和未来的回顾。

实施SSDLC需要组织层面的承诺和支持,以及跨部门的协作。通过在软件开发的每个阶段都集成安全措施,可以有效地减少软件中的安全漏洞,提高整体的安全性。

常见社会工程学攻击方式

1、钓鱼攻击
攻击者通过伪造看似来自受信任来源的电子邮件、短信或电话,诱骗用户点击恶意链接、下载恶意软件或泄露个人信息。例如,假冒银行或电商网站发送验证信息的邮件,要求用户点击链接进行账户验证

网站钓鱼:攻击者创建与真实网站相似的假冒网站,以诱导用户泄露信息
短信钓鱼:攻击者构造中奖、促销等短信,以诱导用户泄露信息
邮件钓鱼:攻击者伪造内外部邮件,以诱导用户泄露信息
扫码钓鱼:攻击者通过提供小礼品、红包等方式,以诱导用户扫码,达到攻击目的
U盘钓鱼:通过散布带有恶意软件的U盘,以诱导用户泄露信息
语音钓鱼:攻击者通过伪装熟人或各类工作人员,以诱导用户泄露信息
视频钓鱼:攻击者通过伪装为熟人或某类较为暴漏的工作人员,以诱导用户泄露信息
鱼叉式攻击:攻击者针对特定目标进行定制化的钓鱼攻击
捕鲸攻击:针对高级管理人员的钓鱼攻击,目的是获取更高级别的访问权限
水坑攻击:研究攻击对象,找到最常访问的网站,攻陷该网站,从而达到攻击受害者的目的

2、伪装身份
攻击者通过伪造身份,冒充公司高管、技术支持人员或朋友,获取用户的信任并诱骗其泄露敏感信息。这种攻击方式在社交网络和即时通讯工具中尤为常见

身份假冒:在社交软件上,假冒高管,达到攻击目的
尾随攻击:攻击者通过在社交媒体上建立信任关系,然后利用这种关系进行攻击
三角诈骗:攻击者通过操纵多个受害者来达到最终的攻击目标
浪漫诈骗:攻击者通过建立虚假的浪漫关系来诱导受害者提供财务信息或其他敏感数据
深度伪造(Deepfake):利用人工智能生成的伪造视频或音频,用于误导或欺诈

3、紧急感诱导
利用用户的紧急心理,如账户被盗、密码泄露等紧急情况,诱骗用户迅速采取行动,如重置密码、转账等。攻击者常常通过制造紧迫的氛围来增加攻击的成功率

技术支持诈骗:攻击者冒充技术支持人员来诱导用户提供访问权限
疫苗接种攻击:攻击者通过提供虚假的安全建议或解决方案来诱导用户执行恶意操作
预载攻击:攻击者通过提供恶意软件的预加载版本来诱导用户下载

4、物理接触
除了线上攻击外,社会工程学还涉及物理接触。攻击者可能通过面对面的方式,如假冒维修人员、快递员等,接近目标并获取敏感信息或执行恶意操作

电视盒子:攻击者通过售卖甚至上门安装有恶意软件的电视盒子(或类似设备),达到攻击目的
面试攻击:通过高薪岗位,让竞对参加面试,获取相关信息
生物识别数据攻击:针对生物识别数据(如指纹、面部识别、虹膜扫描)的攻击

5、尾随攻击
攻击者跟随一个授权用户,在其刷卡或授权进入一个受限制的物理区域时尾随进入。由于人们通常不愿意在门口停留避免妨碍他人,攻击者可趁机一起进入受限区域

逻辑尾随:攻击者尝试通过建立信任关系或模仿其他用户的行为,来获得对系统或数据的访问权限

6、虚假新闻传播
灌水攻击:通过水军,伪造和散布虚假信息,引发客户群体兴奋或群体恐慌,达到攻击的目的

7、身份盗取
攻破受害方的社交账号,冒充受害方在社交媒体上进行活动,达到攻击的目的
比如:发送钓鱼信息,发送恶意言论等

8、云账号劫持
攻击者获取受害方的云账号访问权限,达到攻击的目的

常见硬件攻击方式

1、设备欺骗
WiFi欺骗,攻击者通过设置假冒的WiFi热点,诱使用户连接,从而截获数据
基站欺骗,和上面方式比较一致,只不过是冒充手机的基站
蓝牙攻击,利用蓝牙设备的漏洞,攻击者可以截获通信、传播恶意软件或接管设备

2、信号干扰
通过信号干扰, 进行攻击,比如:
无线电频率(RF)攻击,可以截断基站、wifi、蓝牙、RFID等
电力线通信(PLC)攻击,可截断通过电线进行数据传输的系统,比如电力猫等
卫星通信攻击,针对卫星通信系统的攻击,可能干扰或截获卫星传输的数据
声波攻击,利用声音信号干扰或窃取数据,例如通过扬声器或麦克风进行的攻击
光注入攻击,通过向设备的光学传感器(如摄像头)注入光信号,可能干扰设备操作或进行数据窃取。

3、设备攻击
固件攻击,攻击者通过篡改设备的固件来控制设备或窃取数据
芯片攻击:据传某CPU厂商和某网络厂商,其实都有后门的,所以一直在推广国有化制造
设备加装,通过加装设备,达到数据窃取或数据欺骗的目的
物联网(IoT)攻击,物联网设备通常安全性较差,易于被攻击者利用
车联网(V2X)攻击:针对车联网技术的攻击,可能危及车辆控制或乘客安全

4、移动设备攻击
随着智能手机和平板电脑的普及,针对移动操作系统的攻击也越来越常见
比如:
在移动商店,上架有恶意代码的APP,达到窃取用户信息的目的
引导被攻击者安装,未上架的,有恶意代码的APP
利用越狱或ROOT后的系统漏洞,对受害者进行攻击
利用设备后门进行攻击,一些专用设备可以快速复制指定iPhone中的数据

5、网络设备攻击
把网络设备(无论是路由器、交换机还是基站)拿下,攻击者的收益是很显著的

6、默认设置攻击
不少硬件设备,有一些默认设置,很容易被攻击者使用
比如一些较老的家用路由器,默认用户名密码,很多家庭从来不改,一分钟被攻破

7、侧信道攻击
通过一些非常规数据传输手段,来获取敏感信息
比如:喇叭声音、指示灯、磁盘声音等
有时候,系统功耗、处理时间也有很高的价值

8、隐秘信道攻击
通过一些非常规手段,特别是违反系统安全策略的隐蔽通信方式,来达到绕过安全监控,进行数据传输的目的
比如:
通过HTTP通讯头,甚至DNS协议,达到数据传输的目的
通过将数据隐藏到视频文件或者图片中,进行传送
通过特殊的配置,将数据上传到对象存储,然后绕出到外网
有时也会利用系统后门,或者恶意通讯软件达到此类目的

9、真物理攻击
通过物理方式进行破坏
这种攻击方式,比实际大家听到的多得多,不只是挖断光缆这么简单
所以就有专门的硬件加固来进行应对

10、冷启动攻击
比如:关机,拿走硬盘,复制信息

11、硬件木马
在硬件制造过程中植入的恶意组件,用于长期潜伏和数据窃取
比如海湾战争中,伊拉克采购了法国的打印机,在运输途径约旦的时候,被美国情报人员替换了带有病毒的芯片
在战争前期,美军激活了打印机芯片中的病毒,让伊拉克防空部队直接瘫痪,直接丧失了制空权,导致了战争出现了一边倒的情况

12、移动硬件木马炸弹
2024年9月17日~2024年9月18日,以色列对黎巴嫩境内植入爆炸物的寻呼机、对讲机设备进行了引爆,造成了大面积人员伤亡。
据报道,这些设备由匈牙利的套壳公司BAC生产(贴牌台湾金阿波罗公司),增加了塑性炸药和远程引爆装置。而且这批设备至少在五个多月前已经投入了使用。
这是一次典型的社会工程学+硬件供应链+硬件木马炸弹的攻击

小插曲:
早在1996年,以色列特工就通过遥控引爆移动电话炸弹的的方式,暗杀炸死了哈马斯的炸弹工程师叶海亚·阿亚什。
近年来,随着各国情报能力增强,屡次发生通过手机GPS泄露关键目标位置的情况。
为了避免被手机GPS定位,一些黎巴嫩的武装分子弃用了手机,转而用寻呼机、对讲机进行联络,此次攻击十分有针对性。